{"id":23155,"date":"2026-08-09T13:53:00","date_gmt":"2026-08-09T13:53:00","guid":{"rendered":"https:\/\/scannn.com\/changing-devtools-is-cheap-owning-them-isnt\/"},"modified":"2026-08-09T13:53:00","modified_gmt":"2026-08-09T13:53:00","slug":"changing-devtools-is-cheap-owning-them-isnt","status":"publish","type":"post","link":"https:\/\/scannn.com\/lv\/changing-devtools-is-cheap-owning-them-isnt\/","title":{"rendered":"Changing Devtools Is Cheap. Owning Them Isn\u2019t."},"content":{"rendered":"\n<div id=\"\">\n<p>In<br \/>\n<a href=\"https:\/\/blog.exe.dev\/devtools-must-be-open-source\">Devtools must be open source<\/a><sup id=\"fnref:1\"\/><br \/>\n(<a href=\"https:\/\/news.ycombinator.com\/item?id=49156111\">via<\/a>), David Crawshaw makes the<br \/>\ncase that, because of coding agents, we\u2019re now in an era where devtools will be<br \/>\npersonalized by individual users. Specifically, agents\u2019 ability to jump into new<br \/>\ncodebases and build whatever we want means we\u2019ll be hacking on the source of the<br \/>\ndevtools we use day to day (even those without extension APIs) adding features<br \/>\nand automatically rebasing our patches across releases.<\/p>\n<p>The argument is seductive, especially to a reader who thinks of themselves as a<br \/>\nmaker or tinkerer: after all, the idea that you can hyper-tune everything you<br \/>\nuse sounds like a utopia; it means things can work <em>exactly<\/em> how you want them<br \/>\nto.<\/p>\n<p>But I\u2019d argue that Crawshaw underappreciates the ongoing cost when he writes<\/p>\n<blockquote>\n<p>\u201cBoth the upfront fixed costs and the ongoing costs of personalizing software<br \/>\nhave disappeared.\u201d<\/p>\n<\/blockquote>\n<p>While AI has made the upfront cost of <em>changing<\/em> software a lot lower, properly<br \/>\npersonalizing software still requires your attention. And attention in the AI<br \/>\nage is scarcer than ever.<\/p>\n<p>Having maintained an open-source devtool designed to be modified and forked for<br \/>\nnine years now<sup id=\"fnref:2\"\/>, I can say that most users don\u2019t <em>want<\/em> to customize their<br \/>\ndevtools. They want someone else to make the tool reliable and coherent, so they<br \/>\ncan focus on the problems they opened it to solve. They reach for source<br \/>\nmodification only as a last resort, when a change is critical to their workflow<br \/>\nand no other route works.<sup id=\"fnref:3\"\/><\/p>\n<p>This is not to say that this sort of personalization won\u2019t become more common: I<br \/>\nabsolutely think it will. I just think it will take the form of strong core<br \/>\nsystems with well-defined boundaries and extension points.<\/p>\n<h3 id=\"personalization-still-needs-a-person\">Personalization still needs a person<a class=\"heading-anchor\" href=\"#personalization-still-needs-a-person\" aria-label=\"Permalink to Personalization still needs a person\">#<\/a><\/h3>\n<p>As a thought experiment, imagine an open-source diff viewer with no extension<br \/>\nAPI. You find most diffs noisy, so you ask an agent to add a \u201cfocus mode\u201d that<br \/>\ncollapses imports, generated files, and other changes you consider mechanical.<br \/>\nIt works well and becomes part of your normal workflow.<sup id=\"fnref:4\"\/><\/p>\n<p>At first, life is good: everything works, and you\u2019ve solved your problem. Then<br \/>\nupstream releases a new version that refactors the code you changed. As Crawshaw<br \/>\nsuggests, you\u2019re clever, so you\u2019ve set up a bot to automatically rebase your<br \/>\nchanges onto each update. It resolves any merge conflicts and moves your code to<br \/>\nthe right place.<\/p>\n<p>But now suppose a few months pass and upstream makes a more substantial change:<br \/>\nit adds syntax-aware move detection. If a function moves between files, the<br \/>\nviewer now shows it as a move instead of one large deletion and addition. The<br \/>\nagent muddles through, rebases your focus-mode patch, and gets everything<br \/>\ncompiling without any merge conflicts.<\/p>\n<p>But now what should focus mode do if the function has mostly moved but also<br \/>\ncontains a few meaningful edits? Does it hide the whole block as a mechanical<br \/>\nmove? Does it show only the edited lines without any surrounding context? Or<br \/>\ndoes it show the whole function?<\/p>\n<p>There isn\u2019t an obviously correct answer; it depends on what <em>you<\/em> want to see in<br \/>\nthe diff. So what, are you going to interrupt your day to make this decision?<\/p>\n<p>There\u2019s a central paradox here: if you\u2019re okay with \u201clet the agent decide\u201d, then<br \/>\nyou\u2019ve delegated your authority to the agent. For small choices, that may be<br \/>\nperfectly adequate. But if you want the tool to work exactly how you want, you<br \/>\nneed to inspect and direct those choices. Do you really want to have opinions<br \/>\nabout the design of a devtool you use forever?<\/p>\n<p>The key is <em>attention<\/em>. Any one personalized tool might be unlikely to fail on a<br \/>\ngiven day, but if you do this to every devtool you use, you multiply the number<br \/>\nof tools that can unexpectedly demand your attention.<sup id=\"fnref:5\"\/> Worse, those failures<br \/>\nare unpredictable: a tool might work for months and then break at the exact<br \/>\nmoment you urgently need it. Most engineers want to use devtools to accomplish a<br \/>\ntask; they don\u2019t want their attention diverted to designing and repairing them.<\/p>\n<h3 id=\"shared-tools-need-a-shared-reality\">Shared tools need a shared reality<a class=\"heading-anchor\" href=\"#shared-tools-need-a-shared-reality\" aria-label=\"Permalink to Shared tools need a shared reality\">#<\/a><\/h3>\n<p>All of the above applies to small teams as well. You can share the attention<br \/>\ncost, but at the end of the day, the team still has to ask, \u201cHow much time do we<br \/>\nwant to spend on tools versus doing the actual work we\u2019re meant to be doing?\u201d<\/p>\n<p>I also want to look beyond Crawshaw\u2019s post and consider how this would work in<br \/>\nlarger companies: what happens when many teams independently personalize the<br \/>\nsame shared devtool?<\/p>\n<p>I\u2019ve seen this firsthand: another big tech company makes extensive use of<br \/>\nPerfetto, and has hit this exact problem. Different teams in that company<br \/>\ndecided to fork Perfetto and add ad hoc changes for their local needs. Now one<br \/>\nof the engineers there is fighting to consolidate them because of how painful it<br \/>\nis when every team means something different by \u201cPerfetto\u201d.<\/p>\n<p>Imagine the same pattern with a company-wide bug tracker. Do you want every team<br \/>\nto use a version with subtly different meanings for status, priority,<br \/>\nassignment, and resolution? What happens when a bug moves between teams?<br \/>\nDifferent layouts and personal filters are harmless; the problem begins when<br \/>\npersonalization changes the shared semantics or workflow.<\/p>\n<p>When a devtool mediates work between people, it also forms part of their common<br \/>\nlanguage. Teaching, auditing, reproducing investigations, and verifying that<br \/>\npeople are talking about the same thing all depend on a shared baseline.<\/p>\n<h3 id=\"upstream-gets-more-malleable-too\">Upstream gets more malleable too<a class=\"heading-anchor\" href=\"#upstream-gets-more-malleable-too\" aria-label=\"Permalink to Upstream gets more malleable too\">#<\/a><\/h3>\n<p>We should also not compare pre-AI upstream development with post-AI forks.<br \/>\nMaintainers can use the same agents to investigate reports, brainstorm ideas,<br \/>\nand prototype new features. I can certainly attest to how useful AI has been for<br \/>\nboth implementing small feature requests from users and prototyping larger ones<br \/>\nto determine feasibility.<\/p>\n<p>In my opinion, upstream maintainers can, and should, spend the time saved on<br \/>\nimplementation making their tools more adaptable: implementing broadly useful<br \/>\nfeatures, adding configuration knobs where they make sense, and creating<br \/>\nextension points for recurring needs. AI lowers the cost of doing all of this,<br \/>\nincluding deciding where customization makes sense, adding more elaborate tests<br \/>\non creative uses of your tools and verifying backwards compatibility as these<br \/>\ninterfaces evolve.<\/p>\n<p>Upstream has a natural advantage here: any work done there benefits <em>everyone<\/em>,<br \/>\nwhile a change to your personal fork benefits only you. By relying on upstream,<br \/>\nthe attention required to build good software shifts from people who <em>don\u2019t<\/em><br \/>\nwant to spend it to maintainers who have chosen to care.<\/p>\n<h3 id=\"the-building-block-economy\">The building-block economy<a class=\"heading-anchor\" href=\"#the-building-block-economy\" aria-label=\"Permalink to The building-block economy\">#<\/a><\/h3>\n<p>In my opinion, there\u2019s an alternative view that is much more likely to come<br \/>\ntrue, one described well in Mitchell Hashimoto\u2019s article on the<br \/>\n<a href=\"https:\/\/mitchellh.com\/writing\/building-block-economy\">building-block economy<\/a>.<\/p>\n<p>Concretely, it accepts the same premise: agents can write lots of code and build<br \/>\nniche applications, tools, integrations, forks, and so on. But instead of<br \/>\nassuming that forks will become the norm, Hashimoto argues that high-quality,<br \/>\nwell-documented building blocks will power this world.<\/p>\n<p>I tend to agree: agents are very good at composing high-quality components. If<br \/>\nmaintainers provide those components alongside a focused application, makers can<br \/>\nbuild specialized artifacts on top while accepting the costs. This model also<br \/>\ncreates an easy feedback loop for ideas to flow upstream because the product was<br \/>\ndesigned to be extended.<\/p>\n<p>I see signs that the world is already heading in this direction. For example,<br \/>\n<a href=\"https:\/\/www.sawyerhood.com\/blog\/an-agentic-ide-that-builds-itself\"><code>bb<\/code><\/a> is a<br \/>\nvery interesting agentic IDE that I\u2019ve been playing around with recently. It has<br \/>\na very nice experience that lets users add substantial new product surfaces<br \/>\nthrough self-modification. But the key is that those features are plugins built<br \/>\naround a maintained core and extension system, not changes made by forking the<br \/>\nproject directly.<\/p>\n<p><code>bb<\/code> is also only a few weeks old at the time of writing, so we cannot draw any<br \/>\nfirm conclusions from it, but it\u2019s an interesting sign of the future, IMO.<\/p>\n<h3 id=\"wrapping-up\">Wrapping up<a class=\"heading-anchor\" href=\"#wrapping-up\" aria-label=\"Permalink to Wrapping up\">#<\/a><\/h3>\n<p>I care deeply about both the world of devtools and open source, so this is<br \/>\nsomething I feel very passionate about. Having been immersed in this world for<br \/>\nalmost a decade now, I think the future of well-built tools with thoughtful<br \/>\ndesign and well-designed extension points is bright.<\/p>\n<p>Sure, there will always be folks who want to fork and make ad hoc changes. These<br \/>\nare the same people who already maintain custom builds of their window manager<br \/>\nor terminal emulator, carrying a stack of patches to get everything exactly how<br \/>\nthey want it.<sup id=\"fnref:6\"\/> For them, the tinkering is part of the enjoyment and craft.<\/p>\n<p>But I think most users just want to get their work done with devtools, and we<br \/>\nowe it to them to give them a strong, dependable experience instead of asking<br \/>\nthem to take on the burden of maintaining the product themselves.<\/p>\n<\/div>\n<p><a href=\"https:\/\/lalitm.com\/post\/changing-devtools-is-cheap-owning-them-isnt\/?utm_source=tldrit\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Devtools must be open source (via), David Crawshaw makes the case that, because of coding agents, we\u2019re now in an era where devtools will be personalized by individual users. Specifically, agents\u2019 ability to jump into new codebases and build whatever we want means we\u2019ll be hacking on the source of the devtools we use [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":23156,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[143],"tags":[],"class_list":["post-23155","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai"],"_links":{"self":[{"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/posts\/23155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/comments?post=23155"}],"version-history":[{"count":0,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/posts\/23155\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/media\/23156"}],"wp:attachment":[{"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/media?parent=23155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/categories?post=23155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/tags?post=23155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}