<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>README — retrospective</title>
<link>https://readme.news/tags/retrospective/</link>
<atom:link href="https://readme.news/tags/retrospective/feed.xml" rel="self" type="application/rss+xml"/>
<description>README pieces tagged retrospective.</description>
<language>en-us</language>
<lastBuildDate>Thu, 01 Oct 2026 13:20:31 +0000</lastBuildDate>
<item><title>Q3 2026, in one page</title><link>https://readme.news/q3-2026-in-one-page/</link><guid isPermaLink="true">https://readme.news/q3-2026-in-one-page/</guid><pubDate>Wed, 30 Sep 2026 09:00:00 +0000</pubDate><description>A statutory clock started, two languages shipped on schedule, and the quarter&#x27;s real subject was the boring parts of the craft.</description><content:encoded><![CDATA[<p>The quarter, compressed.</p>
<h2 id="what-happened">what happened<a class="anchor" href="#what-happened" aria-label="link to this section">#</a></h2>
<p><strong>A regulatory clock started running.</strong> The <a class="xref" href="/the-cyber-resilience-act-and-the-unpaid-maintainer/" title="The Cyber Resilience Act and the unpaid maintainer">Cyber Resilience Act</a>'s reporting obligations took effect on 11 September: 24 hours to report an actively exploited vulnerability in a product sold into the EU. The engineering consequence is not paperwork — it is that "can you tell you are being exploited, and who is authorised to file at 2 a.m.?" became a question with a legal deadline attached.</p>
<p><strong>The cadences held.</strong> Go shipped in August, Postgres in the autumn as always, Java in September. None of it was surprising, which is the entire value. The piece worth re-reading is the one about what a fixed release train actually buys — predictability is a feature, and most projects that ship "when it's ready" are paying for its absence without noticing.</p>
<p><strong>Nothing dramatic happened in AI</strong>, which is itself worth noting after two years where something did every quarter. The interesting work moved to where it usually does after a hype phase: the unglamorous business of making things reliable.</p>
<h2 id="the-quarters-actual-subject">the quarter's actual subject<a class="anchor" href="#the-quarters-actual-subject" aria-label="link to this section">#</a></h2>
<p>Reading the last three months back, the theme was not any technology. It was <strong>the parts of the job that have no announcement</strong>: <a class="xref" href="/timeouts-every-one-of-them/" title="Timeouts: every one of them">timeouts</a> nobody added up, <a class="xref" href="/the-queues-you-did-not-know-you-had/" title="The queues you did not know you had">queues</a> nobody named, dependencies nobody drew, comments that earn their place, what "done" means, and the migration that stopped at 70%.</p>
<p>That is not an accident of scheduling. Those are the things that determine whether a system is pleasant or miserable to operate, and they get written about far less than whatever shipped last week — because there is no launch to hang the piece on.</p>
<p>If there is a through-line for the quarter it is this: <strong>most of what makes software good is decided in places nobody is watching.</strong> The timeout defaults. The permissions nobody audited. The queue with no bound. The <a class="xref" href="/the-interface-is-the-product/" title="The interface is the product">interface</a> designed in thirty seconds that a hundred people will use for a decade.</p>
<h2 id="five-worth-re-reading">five worth re-reading<a class="anchor" href="#five-worth-re-reading" aria-label="link to this section">#</a></h2>
<ul><li><strong>"Timeouts: every one of them"</strong> (10 Sept) — the inventory, and the rule that they must decrease with depth.</li><li><strong>"The graph nobody drew"</strong> (14 Sept) — your real dependency list is about fifteen things, and the ones that hurt are the ones needed to <em>start</em>.</li><li><strong>"The queues you did not know you had"</strong> (1 Sept) — every fixed-size resource is a queue with a latency you did not choose.</li><li><strong>"The migration that never finished"</strong> (21 Sept) — name the deletion, not the migration.</li><li><strong>"The load-bearing comment"</strong> (4 Aug) — the four kinds that survive, and why the rest rot.</li></ul>
<h2 id="what-i-am-watching-for-q4">what I am watching for Q4<a class="anchor" href="#what-i-am-watching-for-q4" aria-label="link to this section">#</a></h2>
<ul><li>Whether the CRA reporting regime produces anything visible, or whether the first year is quiet while everyone works out the process.</li><li>Windows 10's consumer support ending in October, and what happens to the machines that cannot move.</li><li>Python and Node's October releases, and whether <a class="xref" href="/python-315-and-free-threadings-second-act/" title="Python 3.15 and free-threading&#x27;s second act">free-threading</a> adoption has moved past the numerical libraries.</li><li>Whether anyone ships a genuinely better interface for reviewing machine-generated code. Still the bottleneck. Still nobody's product.</li></ul>
<p>Back on Friday.</p>]]></content:encoded></item><item><title>Two hundred pieces in</title><link>https://readme.news/two-hundred-pieces-in/</link><guid isPermaLink="true">https://readme.news/two-hundred-pieces-in/</guid><pubDate>Mon, 03 Aug 2026 09:00:00 +0000</pubDate><description>What writing in public taught me about engineering, what I was most wrong about, and why the archive is the point.</description><content:encoded><![CDATA[<p>This is the two hundredth piece published here. That seems like a reasonable moment to write about the writing rather than about the subject.</p>
<h2 id="what-it-did-to-my-engineering">what it did to my engineering<a class="anchor" href="#what-it-did-to-my-engineering" aria-label="link to this section">#</a></h2>
<p><strong>It forced me to actually understand things.</strong> You can hold a fuzzy model of a technology in your head indefinitely and it feels like knowledge. The moment you try to explain it in a paragraph, the fuzziness becomes visible.</p>
<p>I have abandoned drafts because I discovered, four hundred words in, that I did not understand the thing well enough to write about it. Every one of those was more educational than the pieces I finished.</p>
<p><strong>It made me check things.</strong> Writing "X is faster than Y" in public means someone will ask for numbers. Knowing that in advance changes how you form the belief in the first place.</p>
<p><strong>It made me notice my own patterns.</strong> Reading two hundred pieces of my own writing back, the recurring themes are obvious to me now and were invisible while writing: verification over generation, boring over clever, measurement over intuition, and a persistent suspicion of anything that requires you to trust rather than check.</p>
<p>I did not set out with a thesis. It assembled itself.</p>
<p><strong>It taught me to be wrong in public</strong>, which is a skill and is uncomfortable and is the only way to find out you were wrong quickly.</p>
<h2 id="what-i-have-been-most-wrong-about">what I have been most wrong about<a class="anchor" href="#what-i-have-been-most-wrong-about" aria-label="link to this section">#</a></h2>
<p>I graded myself in December and the pattern held for the following eight months.</p>
<p><strong>I am reliably right about technical trajectories and reliably wrong about adoption.</strong></p>
<p>Local models got good; people did not switch, because hosted models got cheap faster than I expected. RAG got less necessary; the infrastructure repositioned instead of dying, which I have now failed to predict three separate times. Registry security controls were obviously needed; they arrived after the incident rather than before.</p>
<p>The lesson I keep relearning: the technology is the easy part to forecast, and the technology was never the hard part. Human and organizational behavior is where the uncertainty lives and where the consequences land.</p>
<p><strong>I under-predict inertia and over-predict rationality.</strong> Almost every wrong call has that shape.</p>
<h2 id="the-thing-about-writing-news">the thing about writing news<a class="anchor" href="#the-thing-about-writing-news" aria-label="link to this section">#</a></h2>
<p>Two hundred pieces, roughly half of them about things that happened in a specific week.</p>
<p>Reading them back, the ones that held up are almost never the ones that reported the event. They are the ones that used the event to explain a mechanism.</p>
<p>Nobody needs my summary of what a company announced. They can read the announcement. What is worth writing is: <em>why does this shape of thing keep happening</em>, and <em>what does it imply for what you should do on Monday</em>.</p>
<p>The news is a prompt. The mechanism is the article.</p>
<p>I did not know that when I started and it took about forty pieces to figure out.</p>
<h2 id="on-the-archive">on the archive<a class="anchor" href="#on-the-archive" aria-label="link to this section">#</a></h2>
<p>Everything published here is still at its original URL. Nothing has been quietly edited, renamed, or removed. Corrections are marked in place.</p>
<p>That is a deliberate choice and it costs something — there are pieces I would write differently now, and a few I think are wrong.</p>
<p>Leaving them up is the point. A publication that silently revises its history is not a record, it is a marketing surface. The value of an archive is that it shows what someone thought at the time, including when that was wrong, and you can only get that by not touching it.</p>
<p>If you want to know whether to trust a technical writer, check whether their old pieces still exist and whether the wrong ones were corrected in the open.</p>
<h2 id="on-the-format">on the format<a class="anchor" href="#on-the-format" aria-label="link to this section">#</a></h2>
<p>Gray background. Monospace headings. One column. No popups, no cookie banner, no newsletter modal, no autoplaying anything, no third-party JavaScript on any page.</p>
<p>This is not minimalism as an aesthetic. It is that every one of those things was added to a website to serve the publisher at the reader's expense, and the cumulative effect has made reading on the web genuinely unpleasant.</p>
<p>A page should render before you notice it loading. Text is the <a class="xref" href="/the-interface-is-the-product/" title="The interface is the product">interface</a>. Nothing moves unless the reader moved it.</p>
<p>Those are not hard constraints to meet. Almost nobody meets them, and the reason is never technical.</p>
<h2 id="the-next-two-hundred">the next two hundred<a class="anchor" href="#the-next-two-hundred" aria-label="link to this section">#</a></h2>
<p>Same beat. Tech, developers, and the code underneath. News where the news teaches something, essays where the news does not.</p>
<p>More on the verification problem, because it is the defining engineering question of this period and it is nowhere near resolved. More on the craft, because the craft is what survives the tooling cycles. Fewer pieces about model launches, because they have stopped being informative.</p>
<p>Thanks for reading. Corrections are always welcome and get priority over everything else.</p>
<p>— Dom</p>]]></content:encoded></item><item><title>Two years of agentic coding: what stuck</title><link>https://readme.news/two-years-of-agentic-coding-what-stuck/</link><guid isPermaLink="true">https://readme.news/two-years-of-agentic-coding-what-stuck/</guid><pubDate>Fri, 31 Jul 2026 09:00:00 +0000</pubDate><description>The workflows that survived contact with real work, the ones that did not, and what the whole thing actually changed.</description><content:encoded><![CDATA[<p>Terminal coding agents went from <a class="xref" href="/operator-and-the-long-road-to-an-agent-that-can-click/" title="Operator, and the long road to an agent that can click">research preview</a> to standard tooling in about two years. Enough time has passed to separate what stuck from what was a phase.</p>
<h2 id="what-stuck">what stuck<a class="anchor" href="#what-stuck" aria-label="link to this section">#</a></h2>
<p><strong>Mechanical refactors at scale.</strong> The clearest win, by a wide margin. Renaming a concept across four hundred files, migrating a deprecated API, converting a pattern used everywhere. Verifiable, tedious, and exactly what the tools are good at.</p>
<p>The important second-order effect: <strong>refactors that were too expensive to do now happen.</strong> A codebase where cross-cutting cleanup is affordable is a meaningfully better codebase, and that is a permanent improvement rather than a productivity number.</p>
<p><strong>Working in unfamiliar territory.</strong> A language you do not know, a framework you have not used, an API you have never touched. The median output in an unfamiliar domain is better than your first attempt, and reading it teaches you the idioms.</p>
<p>This is the use case I would defend most strongly and it is discussed least.</p>
<p><strong>Test generation from a specification.</strong> Not "write tests for this function" — that produces tests that assert the implementation. But "here is the behavior, write tests that verify it" works well and it inverts the effort in the right direction.</p>
<p><strong>Investigation.</strong> Reading logs, bisecting history, tracing a call path, summarizing a large diff. Parallelizable, cheap, and it saves the expensive resource, which is your attention.</p>
<p><strong>Repository-level instruction files.</strong> <code>AGENTS.md</code> and its equivalents became standard practice, and the discipline of writing down how your project actually works improved documentation for humans as a side effect.</p>
<h2 id="what-did-not-stick">what did not stick<a class="anchor" href="#what-did-not-stick" aria-label="link to this section">#</a></h2>
<p><strong>Fully autonomous feature development.</strong> The demo works. The real version produces a plausible implementation of a subtly different feature, because the requirements that live in someone's head were never written down.</p>
<p><strong>Agent fleets at high concurrency.</strong> The generation scales; the review does not. Two to three concurrent agents with one reviewer turned out to be the practical limit, and the constraint is entirely on the human side.</p>
<p><strong>Orchestration frameworks.</strong> Absorbed into the models, as function-calling libraries and JSON-repair libraries were before them. The durable layer was never orchestration.</p>
<p><strong>"Just describe it and it builds."</strong> For anything with design decisions, the description that is precise enough to produce the right result is approximately as long as the code, and writing it is the same work.</p>
<h2 id="what-actually-changed-about-the-job">what actually changed about the job<a class="anchor" href="#what-actually-changed-about-the-job" aria-label="link to this section">#</a></h2>
<p><strong>Review is the bottleneck, permanently.</strong> Generation got roughly two orders of magnitude cheaper. Verification got no cheaper at all. Everything downstream follows from that asymmetry and nothing in two years has changed it.</p>
<p><strong>Tests became the primary artifact.</strong> If the implementation is cheap and verification is expensive, effort moves to specification. The teams getting the most out of these tools are the ones with strong test suites, and the correlation is not subtle.</p>
<p><strong><a class="xref" href="/type-systems-and-the-cost-of-being-right/" title="Type systems and the cost of being right">Type systems</a> got a promotion.</strong> Every constraint the compiler checks is verification you do not perform by reading. Teams that were ambivalent about strict typing became evangelists, and the reason is always the same: it catches the class of error generated code produces most.</p>
<p><strong>Small diffs became non-negotiable.</strong> A machine can produce two thousand lines effortlessly. Accepting it is not a favor to anyone.</p>
<p><strong>The skill that separates people is judgment, not speed.</strong> It always was. It is now the only thing, and the gap between engineers who can tell when output is wrong and engineers who cannot is much more visible than it was.</p>
<h2 id="the-thing-still-unresolved">the thing still unresolved<a class="anchor" href="#the-thing-still-unresolved" aria-label="link to this section">#</a></h2>
<p>The apprenticeship problem.</p>
<p>The judgment that makes a senior engineer valuable was acquired by writing a lot of code badly and then debugging it. That work is being automated. Nobody has a replacement for how the next generation acquires it, and junior hiring contracted sharply during exactly the period when the training mechanism was being removed.</p>
<p>I have written about this several times and I still do not have an answer beyond: deliberately do the hard part yourself sometimes, review generated code carefully as a learning exercise, and hire juniors anyway.</p>
<p>That is a partial answer to a structural problem and I am not satisfied with it.</p>
<h2 id="the-honest-summary-two-years-in">the honest summary, two years in<a class="anchor" href="#the-honest-summary-two-years-in" aria-label="link to this section">#</a></h2>
<p>These tools are genuinely useful and the useful envelope is narrower and more specific than either the enthusiasts or the skeptics claimed.</p>
<p>They are excellent at bounded, verifiable, tedious work. They are unreliable at anything requiring judgment about what should be built. They multiply output and do not multiply throughput, because throughput is limited by review.</p>
<p>The engineers getting the most from them are the ones who were already good at specifying problems precisely and at telling when something is wrong. That is not a new skill and it was never evenly distributed.</p>
<p>Which is roughly what every previous tooling revolution did: raised the floor, moved the bottleneck, and made expertise more valuable rather than less.</p>]]></content:encoded></item><item><title>Half of 2026, in one page</title><link>https://readme.news/half-of-2026-in-one-page/</link><guid isPermaLink="true">https://readme.news/half-of-2026-in-one-page/</guid><pubDate>Fri, 26 Jun 2026 09:00:00 +0000</pubDate><description>Six months of regulation, agent tooling that mostly did not fix the bottleneck, and a web platform that quietly finished.</description><content:encoded><![CDATA[<p>The first half, compressed.</p>
<h2 id="the-three-things-that-actually-happened">the three things that actually happened<a class="anchor" href="#the-three-things-that-actually-happened" aria-label="link to this section">#</a></h2>
<p><strong>Regulation became an engineering concern.</strong> The EU AI Act's high-risk obligations arrive in August; the <a class="xref" href="/the-cyber-resilience-act-and-the-unpaid-maintainer/" title="The Cyber Resilience Act and the unpaid maintainer">Cyber Resilience Act</a>'s reporting obligations in September; <a class="xref" href="/post-quantum-migration-is-a-2026-project/" title="Post-quantum migration is a 2026 project">post-quantum migration</a> guidance firmed up across national agencies. For the first time in a while, compliance is showing up on engineering roadmaps rather than only in legal reviews.</p>
<p><strong>Power stayed the binding constraint on compute.</strong> Interconnection <a class="xref" href="/the-queues-you-did-not-know-you-had/" title="The queues you did not know you had">queues</a>, transformer lead times, and utility rate cases determine how fast capacity arrives. Every roadmap presented this year is downstream of a construction schedule.</p>
<p><strong>The verification bottleneck did not move.</strong> Generation capability kept improving. Review capacity did not. The tooling investment continued to go into producing more code rather than into checking it, which is the wrong end of the problem and which I predicted would correct by now. It has not.</p>
<h2 id="the-thing-i-keep-coming-back-to">the thing I keep coming back to<a class="anchor" href="#the-thing-i-keep-coming-back-to" aria-label="link to this section">#</a></h2>
<p>Generation got roughly two orders of magnitude cheaper. Verification got no cheaper at all.</p>
<p>Everything else — the review queue, the junior hiring contraction, the sudden importance of tests and <a class="xref" href="/type-systems-and-the-cost-of-being-right/" title="Type systems and the cost of being right">type systems</a>, the unease people cannot name about agent-written code — is a consequence of that asymmetry, and six months of watching it has not changed my read.</p>
<p>The skill that matters is the ability to look at plausible output and tell whether it is right. That skill is built by doing the work, and the work is being automated.</p>
<p>Nobody has solved this. Most of the discussion still treats it as either a non-problem or an apocalypse, and it is neither. It is an engineering and training problem with no established answer yet.</p>
<h2 id="pieces-i-would-re-read">pieces I would re-read<a class="anchor" href="#pieces-i-would-re-read" aria-label="link to this section">#</a></h2>
<ul><li><strong>"Verification is the whole job now"</strong> (8 Jan) — the argument, stated once, properly.</li><li><strong>"<a class="xref" href="/prompt-injection-is-sql-injection-without-the-fix/" title="Prompt injection is SQL injection without the fix">Prompt injection</a> is SQL injection without the fix"</strong> (9 Feb) — why the analogy everyone makes stops before the part that matters.</li><li><strong>"<a class="xref" href="/schema-design-is-the-only-design-that-lasts/" title="Schema design is the only design that lasts">Schema design</a> is the only design that lasts"</strong> (6 Mar) — the thing you will still be living with in 2036.</li><li><strong>"Agent fleets in production"</strong> (27 Mar) — the honest numbers, which are much lower than the demos.</li><li><strong>"<a class="xref" href="/idempotency-is-the-only-distributed-systems-concept-you-need/" title="Idempotency is the only distributed systems concept you need">Idempotency</a> is the only distributed systems concept you need"</strong> (26 May) — if you internalize one thing.</li></ul>
<h2 id="the-grades-so-far">the grades so far<a class="anchor" href="#the-grades-so-far" aria-label="link to this section">#</a></h2>
<p>In January I made five predictions. Three months in I graded one as wrong. At the halfway point:</p>
<p><strong>Review tooling as a major funded category</strong> — still not happening at the scale I predicted. Funding continues to flow to generation. I was wrong about the market, and possibly wrong about the timing rather than the direction.</p>
<p><strong>Repository-level agent configuration as standard practice</strong> — correct, and it happened faster than I expected. This is now table stakes for a well-maintained repository.</p>
<p><strong>Power as a developer-visible line item</strong> — correct and accelerating. Regional compute price differentials are now large enough to affect architecture.</p>
<p><strong>Supply chain controls with real teeth</strong> — in progress. The registry-level changes are landing and the migration is as painful as expected.</p>
<p><strong>"Senior engineer" redefining around judgment</strong> — correct, uncomfortable, and nobody has a good answer for how the next generation acquires it.</p>
<h2 id="what-i-am-watching-for-the-second-half">what I am watching for the second half<a class="anchor" href="#what-i-am-watching-for-the-second-half" aria-label="link to this section">#</a></h2>
<ul><li>The August AI Act deadline: holds, slips, or gets phased.</li><li>Whether anyone ships a genuinely better code review <a class="xref" href="/the-interface-is-the-product/" title="The interface is the product">interface</a>.</li><li>Whether the small-model tier keeps compressing the frontier's addressable workload.</li><li>Whether junior hiring recovers, and what happens to the pipeline if it does not.</li></ul>
<p>Back on Monday.</p>]]></content:encoded></item><item><title>Q1 2026, in one page</title><link>https://readme.news/q1-2026-in-one-page/</link><guid isPermaLink="true">https://readme.news/q1-2026-in-one-page/</guid><pubDate>Tue, 31 Mar 2026 09:00:00 +0000</pubDate><description>Regulatory deadlines, a linker change, and a quarter where the interesting news was mostly infrastructure.</description><content:encoded><![CDATA[<p>The quarter, compressed.</p>
<h2 id="what-happened">what happened<a class="anchor" href="#what-happened" aria-label="link to this section">#</a></h2>
<p><strong>Regulation got specific.</strong> The EU AI Act's high-risk obligations move from abstract to dated — 2 August. <a class="xref" href="/post-quantum-migration-is-a-2026-project/" title="Post-quantum migration is a 2026 project">Post-quantum migration</a> guidance firmed up across national agencies. The <a class="xref" href="/the-cyber-resilience-act-and-the-unpaid-maintainer/" title="The Cyber Resilience Act and the unpaid maintainer">Cyber Resilience Act</a>'s reporting obligations approach. For the first time in a while, compliance work is a real line item on engineering roadmaps rather than a legal department concern.</p>
<p><strong>Power stayed the constraint.</strong> Datacenter interconnection <a class="xref" href="/the-queues-you-did-not-know-you-had/" title="The queues you did not know you had">queues</a>, transformer lead times, and utility rate cases continue to determine how fast compute capacity arrives. Nothing at GTC changed that; the roadmaps are downstream of the grid.</p>
<p><strong>Agent tooling consolidated on conventions.</strong> Repository-level instruction files became standard practice. The delegated-agent product shape stabilized across vendors. The bottleneck stayed where it was: review.</p>
<p><strong>The web platform quietly finished a decade of work.</strong> Container queries, <code>:has()</code>, popover, anchor positioning, view transitions — all baseline. The amount of JavaScript that can now be deleted from a typical application is larger than most teams realize.</p>
<h2 id="the-three-pieces-i-would-re-read">the three pieces I would re-read<a class="anchor" href="#the-three-pieces-i-would-re-read" aria-label="link to this section">#</a></h2>
<p><strong>"Verification is the whole job now"</strong> (8 January) — the argument that generation got two orders of magnitude cheaper and verification got no cheaper at all, and that everything else follows from that.</p>
<p><strong>"<a class="xref" href="/prompt-injection-is-sql-injection-without-the-fix/" title="Prompt injection is SQL injection without the fix">Prompt injection</a> is SQL injection without the fix"</strong> (9 February) — why the analogy everyone makes stops exactly before the part that matters, and what architecture actually holds.</p>
<p><strong>"<a class="xref" href="/schema-design-is-the-only-design-that-lasts/" title="Schema design is the only design that lasts">Schema design</a> is the only design that lasts"</strong> (6 March) — your code gets rewritten, your schema does not.</p>
<h2 id="the-thing-i-got-wrong">the thing I got wrong<a class="anchor" href="#the-thing-i-got-wrong" aria-label="link to this section">#</a></h2>
<p>In January I predicted review tooling would become a major funded category this year. Three months in, the funding is going to agent <em>generation</em> rather than agent <em>review</em>, which is the opposite of where the bottleneck is.</p>
<p>Either I am wrong about the bottleneck or the market is slower than I expected. Given that every practitioner I talk to names review as their constraint, I think it is the second, and I think it corrects.</p>
<h2 id="what-i-am-watching-for-q2">what I am watching for Q2<a class="anchor" href="#what-i-am-watching-for-q2" aria-label="link to this section">#</a></h2>
<ul><li>Whether the August AI Act deadline holds or slips.</li><li>Whether npm's publishing controls actually land and what breaks.</li><li>Whether anyone ships a genuinely better code review <a class="xref" href="/the-interface-is-the-product/" title="The interface is the product">interface</a>.</li><li>Node 26 and whether the no-build-step workflow becomes the default.</li><li>Whether the small-model tier keeps compressing the frontier's addressable workload.</li></ul>
<p>Back to normal programming on Wednesday.</p>]]></content:encoded></item><item><title>Five things that will actually change in 2026</title><link>https://readme.news/five-things-that-will-actually-change-in-2026/</link><guid isPermaLink="true">https://readme.news/five-things-that-will-actually-change-in-2026/</guid><pubDate>Fri, 02 Jan 2026 09:00:00 +0000</pubDate><description>Not predictions about model capability. Predictions about what your Tuesday looks like.</description><content:encoded><![CDATA[<p>Every January the prediction posts arrive and they are all about model capability, which is the least useful thing to predict because it is both the most forecast and the least actionable.</p>
<p>Here are five changes to how software actually gets made. I will grade these in December.</p>
<h2 id="1-review-tooling-becomes-a-real-product-category">1. Review tooling becomes a real product category<a class="anchor" href="#1-review-tooling-becomes-a-real-product-category" aria-label="link to this section">#</a></h2>
<p>The bottleneck moved to verification in 2025 and the tooling did not follow. We are still reviewing machine-generated changes with an <a class="xref" href="/the-interface-is-the-product/" title="The interface is the product">interface</a> designed in 2008 for occasional human contributions.</p>
<p>What has to exist: review surfaces that show <em>intent</em> rather than only diff. Which invariants does this change preserve? What did the author consider and reject? Which tests exercise the changed path, and did any of them exist before this change?</p>
<p>Some of that can be generated. Most of it is a UI problem nobody has solved because the pain only became acute in the last eighteen months.</p>
<p>Watch for this to be one of the most-funded developer tooling categories of the year.</p>
<h2 id="2-repository-level-agent-configuration-becomes-standard-practice">2. Repository-level agent configuration becomes standard practice<a class="anchor" href="#2-repository-level-agent-configuration-becomes-standard-practice" aria-label="link to this section">#</a></h2>
<p><code>AGENTS.md</code>, <code>CLAUDE.md</code>, <code>.cursorrules</code>, and their cousins converged on the same idea in 2025: the repository tells the agent how to work in it. Build commands, test commands, conventions, things not to touch.</p>
<p>In 2026 this stops being an optional nicety and becomes part of the definition of a well-maintained repository, the way a README and a CI config are. New projects will have one from the start. Onboarding docs and agent instructions will merge, because they are the same document with a different reader.</p>
<p>The second-order effect is good: writing down how your project actually works helps humans too, and a lot of teams will document things properly for the first time because a machine needed it.</p>
<h2 id="3-power-becomes-a-line-item-developers-think-about">3. Power becomes a line item developers think about<a class="anchor" href="#3-power-becomes-a-line-item-developers-think-about" aria-label="link to this section">#</a></h2>
<p>Not in an abstract climate sense. In a "which region, which instance type, what does this cost" sense.</p>
<p>Electricity prices in datacenter-dense regions rose through 2025 and the rate cases are ongoing. Cloud pricing follows. Regional price differentials for compute are going to become large enough that they affect architecture decisions, the way egress pricing already does.</p>
<p>Expect "run the batch job in the cheap region overnight" to go from a sustainability talking point to a cost-optimization default.</p>
<h2 id="4-the-supply-chain-gets-a-real-control-not-another-dashboard">4. The supply chain gets a real control, not another dashboard<a class="anchor" href="#4-the-supply-chain-gets-a-real-control-not-another-dashboard" aria-label="link to this section">#</a></h2>
<p>Four significant npm incidents in 2025, ending with a self-propagating worm. The registry-level controls — mandatory trusted publishing, restrictions on long-lived tokens, install-script defaults — are coming, and they will break workflows.</p>
<p>That breakage is the point. The ecosystem has been asking maintainers to be individually unphishable for a decade, and it has not worked, because it cannot.</p>
<p>Expect a painful migration and a meaningfully safer ecosystem at the end of it.</p>
<h2 id="5-senior-engineer-quietly-redefines-around-judgment">5. "Senior engineer" quietly redefines around judgment<a class="anchor" href="#5-senior-engineer-quietly-redefines-around-judgment" aria-label="link to this section">#</a></h2>
<p>The mechanical parts of the job — writing the code, remembering the API, finding the bug in a file you can see — got substantially cheaper. What did not get cheaper: knowing what to build, knowing when something is wrong, knowing which complexity is worth it, and being able to say no with a reason.</p>
<p>This has always been what seniority meant. It is now what it <em>only</em> means, and the gap between people who have it and people who were fast typists is going to become uncomfortable to talk about at promotion committees.</p>
<p>The related problem, which nobody has solved: the traditional path to developing that judgment was doing the mechanical work for several years. If juniors do not do that work, where does the judgment come from?</p>
<p>I do not know. It is the most important open question in the profession right now and almost all the discussion of it is either dismissive or catastrophizing.</p>
<h2 id="what-i-am-not-predicting">what I am not predicting<a class="anchor" href="#what-i-am-not-predicting" aria-label="link to this section">#</a></h2>
<p>Anything about AGI. Anything about a specific model beating a specific benchmark. Anything about a company's valuation.</p>
<p>Those get all the attention and none of them change what you do on Tuesday.</p>]]></content:encoded></item><item><title>2025, in order</title><link>https://readme.news/2025-in-order/</link><guid isPermaLink="true">https://readme.news/2025-in-order/</guid><pubDate>Tue, 30 Dec 2025 09:00:00 +0000</pubDate><description>The year in one page: what happened, what mattered, and the three things that will still matter in 2030.</description><content:encoded><![CDATA[<p>A hundred pieces this year. Here is the compressed version.</p>
<h2 id="the-year-in-one-paragraph">the year in one paragraph<a class="anchor" href="#the-year-in-one-paragraph" aria-label="link to this section">#</a></h2>
<p>An open reasoning model under an MIT license repriced the sector in January. Reasoning became a runtime dial rather than a model choice. Coding agents went from <a class="xref" href="/operator-and-the-long-road-to-an-agent-that-can-click/" title="Operator, and the long road to an agent that can click">research preview</a> to standard tooling in about six months and made code review the bottleneck. The npm ecosystem got a self-propagating worm. Two of the largest infrastructure providers had multi-hour outages caused by config, not code. Python removed the GIL, optionally. Rust shipped its largest edition. The frontier models converged and the competition moved to price and distribution.</p>
<h2 id="the-three-things-that-will-still-matter-in-2030">the three things that will still matter in 2030<a class="anchor" href="#the-three-things-that-will-still-matter-in-2030" aria-label="link to this section">#</a></h2>
<p><strong>1. Reasoning as a controllable runtime parameter.</strong></p>
<p>The most durable technical idea of the year. Every provider independently arrived at the same design: the caller decides how much the model thinks, per request.</p>
<p>This is durable because it reflects something true about the problem — the appropriate amount of computation is a property of the task, not the model, and only the caller knows the task. Interfaces that reflect true structure survive. Interfaces that reflect an implementation detail do not.</p>
<p><strong>2. The agent-review bottleneck.</strong></p>
<p>Generation throughput increased dramatically. Verification throughput did not. That gap is the central engineering problem of the next several years, and nobody has a good answer.</p>
<p>Everything downstream follows from it: how teams are structured, what tests are for, what "code review" means, whether we build systems we understand or systems that pass tests. This is not a tooling problem that gets solved with a better diff viewer. It is a fundamental asymmetry between producing and checking, and it shows up in every field where automation outpaced verification.</p>
<p><strong>3. Supply chain trust has no technical fix yet.</strong></p>
<p>Four significant npm incidents this year, escalating in sophistication, ending with a worm. Every one exploited the same structural fact: install-time code execution plus long-lived publishing credentials plus a dependency graph nobody designed.</p>
<p>The controls that work — trusted publishing, no install scripts, version cooldowns, phishing-resistant auth — are known and unevenly adopted. The ecosystems that are structurally safer got that way by design decisions made years ago that cannot be retrofitted cheaply.</p>
<p>This gets worse before it gets better, and it is a solvable problem that we are choosing not to solve at the speed it requires.</p>
<h2 id="the-things-that-felt-big-and-were-not">the things that felt big and were not<a class="anchor" href="#the-things-that-felt-big-and-were-not" aria-label="link to this section">#</a></h2>
<p><strong>Model benchmark leapfrogging.</strong> Every launch claimed the frontier. The differences were within evaluation noise for most real tasks. The benchmark discourse consumed enormous attention and predicted very little about what was useful.</p>
<p><strong>Agent frameworks.</strong> Most of the orchestration layer got absorbed into the models, exactly as function-calling libraries and JSON-repair libraries were absorbed before. The durable layer was never orchestration.</p>
<p><strong>The browser wars, round two.</strong> Everyone shipped a Chromium fork with a model in it. That does not diversify the engine landscape; it diversifies the UI on top of one engine.</p>
<h2 id="the-things-that-felt-small-and-were-not">the things that felt small and were not<a class="anchor" href="#the-things-that-felt-small-and-were-not" aria-label="link to this section">#</a></h2>
<p><strong>LLD as the default linker in Rust.</strong> A default change delivered a build-time improvement to everyone at once that documentation had failed to deliver for years. The general lesson — defaults are the highest-leverage thing a toolchain ships — applies far beyond Rust.</p>
<p><strong>Template strings in Python.</strong> A one-character syntax change that makes the safe path as easy as the unsafe one. If library adoption follows, an entire category of injection vulnerability becomes hard to write. Security features that depend on diligence fail; security features enforced by the <a class="xref" href="/type-systems-and-the-cost-of-being-right/" title="Type systems and the cost of being right">type system</a> work.</p>
<p><strong><a class="xref" href="/claude-sonnet-45-and-the-agent-that-runs-for-thirty-hours/" title="Claude Sonnet 4.5 and the agent that runs for thirty hours">Context editing</a> and memory tools.</strong> Unglamorous plumbing that determines whether long agent runs succeed. The context window was never the constraint. Goal retention was.</p>
<h2 id="the-thing-i-want-to-say-going-into-next-year">the thing I want to say going into next year<a class="anchor" href="#the-thing-i-want-to-say-going-into-next-year" aria-label="link to this section">#</a></h2>
<p>The most valuable skill in 2025 was not prompting, and it will not be in 2026 either.</p>
<p>It was the ability to tell whether something is correct. That skill was always valuable and it was previously bundled with the ability to produce the thing. The bundle has come apart. Producing is cheap now. Checking is not, and checking is what everything rests on.</p>
<p>Every argument this year about what AI does to engineering eventually reduces to that. The people who are getting enormous leverage out of these tools are, without exception, the people who can tell when the output is wrong.</p>
<p>That is not a comforting conclusion for anyone hoping the tools eliminate the need for expertise. It is the actual state of things, and it is worth building your career around.</p>
<p>See you in January.</p>]]></content:encoded></item><item><title>What I got wrong in 2025</title><link>https://readme.news/what-i-got-wrong-in-2025/</link><guid isPermaLink="true">https://readme.news/what-i-got-wrong-in-2025/</guid><pubDate>Tue, 23 Dec 2025 09:00:00 +0000</pubDate><description>Six predictions from twelve months of writing, graded honestly. Three were wrong.</description><content:encoded><![CDATA[<p>Writing publicly means being wrong publicly. Here are the calls I made this year, graded.</p>
<h2 id="1-local-models-become-the-default-for-routine-developer-work">1. "Local models become the default for routine developer work"<a class="anchor" href="#1-local-models-become-the-default-for-routine-developer-work" aria-label="link to this section">#</a></h2>
<p><strong>Written in January. Partially right, wrong on scale.</strong></p>
<p>Local models got much better and much easier to run. The tooling is excellent. A 14B model on a laptop is genuinely useful for the work I said it would be useful for.</p>
<p>What I got wrong: adoption. The default did not become hybrid. It became "frontier API for everything," because the frontier models got cheap enough fast enough that the cost argument for local largely evaporated for individuals.</p>
<p>The privacy argument held and drove real adoption in regulated industries, which is what I said. The convenience argument lost, which I underweighted.</p>
<p>Grade: <strong>C+.</strong> The technology went where I said. The behavior did not.</p>
<h2 id="2-the-moat-is-distribution-and-serving-efficiency-not-model-quality">2. "The moat is distribution and serving efficiency, not model quality"<a class="anchor" href="#2-the-moat-is-distribution-and-serving-efficiency-not-model-quality" aria-label="link to this section">#</a></h2>
<p><strong>Written in February. This held up well.</strong></p>
<p>Model capability converged. Every frontier lab shipped comparable models. The differentiation moved to price, latency, integration, and distribution — exactly as predicted, and faster than I expected.</p>
<p>Google putting a <a class="xref" href="/small-models-ate-the-middle/" title="Small models ate the middle">frontier model</a> into Search on launch day is the clearest demonstration. No competitor can do that.</p>
<p>Grade: <strong>A−.</strong></p>
<h2 id="3-delegated-agents-make-review-the-bottleneck">3. "Delegated agents make review the bottleneck"<a class="anchor" href="#3-delegated-agents-make-review-the-bottleneck" aria-label="link to this section">#</a></h2>
<p><strong>Written in May. Correct and I understated it.</strong></p>
<p>This is now the dominant complaint from every team using coding agents seriously. Throughput on generation went up several fold. Throughput on review did not move.</p>
<p>What I did not anticipate: the second-order effect on review <em>quality</em>. It is not just that review is slower — it is that reviewers under queue pressure approve things they have not fully understood, and the defect rate is showing up in ways that are hard to attribute.</p>
<p>Grade: <strong>A</strong>, with the caveat that I was not pessimistic enough.</p>
<h2 id="4-rag-infrastructure-is-solving-a-temporary-problem">4. "RAG infrastructure is solving a temporary problem"<a class="anchor" href="#4-rag-infrastructure-is-solving-a-temporary-problem" aria-label="link to this section">#</a></h2>
<p><strong>Written in March. Too confident, partially wrong.</strong></p>
<p>Long context did get better and cheaper, and a lot of naive RAG did get replaced by just putting the documents in the prompt. That part was right.</p>
<p>What I got wrong: retrieval did not go away, it moved. The interesting systems now do retrieval <em>as a tool the model calls</em> rather than as a preprocessing step. The vector database did not die; it became something the agent queries.</p>
<p>That is a substantially different outcome than "the category is temporary," and I should have seen it because the same pattern — capability absorbed into the model, infrastructure repositioned rather than eliminated — had already happened twice.</p>
<p>Grade: <strong>C.</strong></p>
<h2 id="5-nvidias-roadmap-slide-is-the-real-announcement">5. "Nvidia's roadmap slide is the real announcement"<a class="anchor" href="#5-nvidias-roadmap-slide-is-the-real-announcement" aria-label="link to this section">#</a></h2>
<p><strong>Written in March. Right, and the power framing was the useful part.</strong></p>
<p>Power as the binding constraint became the consensus view over the year. The unit of AI infrastructure discussion is now gigawatts. Utility rate cases about datacenter interconnection are a live political issue in multiple states.</p>
<p>Grade: <strong>A.</strong></p>
<h2 id="6-the-npm-ecosystem-will-have-a-self-propagating-worm">6. "The npm ecosystem will have a self-propagating worm"<a class="anchor" href="#6-the-npm-ecosystem-will-have-a-self-propagating-worm" aria-label="link to this section">#</a></h2>
<p><strong>Written in February, in a piece about supply chain risk. I hate being right about this one.</strong></p>
<p>It arrived in September. The mechanism was exactly the one everybody had described: steal credentials on install, use them to publish, repeat.</p>
<p>The prediction was not clever. Every precondition was public. What I got wrong was the timeline — I expected it to take longer, because I assumed the registry would ship stronger publishing controls first. It did not, until after.</p>
<p>Grade: <strong>A on the call, F on the assumption that anyone would act in time.</strong></p>
<h2 id="the-pattern-in-my-errors">the pattern in my errors<a class="anchor" href="#the-pattern-in-my-errors" aria-label="link to this section">#</a></h2>
<p>Looking at the three I got wrong, they share a shape: <strong>I was right about the technology and wrong about the behavior.</strong></p>
<p>Local models got good; people did not switch. RAG got less necessary; the infrastructure adapted instead of dying. Registry controls were obviously needed; they arrived after the incident rather than before.</p>
<p>The lesson I am taking into next year: technical trajectories are much more predictable than adoption, and adoption is where the money and the consequences are. When I feel confident, it is usually because I am reasoning about the technology, and the technology was never the hard part.</p>]]></content:encoded></item><item><title>The open weights year</title><link>https://readme.news/the-open-weights-year/</link><guid isPermaLink="true">https://readme.news/the-open-weights-year/</guid><pubDate>Fri, 19 Dec 2025 09:00:00 +0000</pubDate><description>Twelve months that took open models from interesting to unavoidable, and where the gap actually sits.</description><content:encoded><![CDATA[<p>January opened with an MIT-licensed reasoning model that repriced the entire sector in a week. December closes with open weights as a normal, boring option in any serious architecture discussion.</p>
<p>Here is the year, and what it means for the next one.</p>
<h2 id="the-releases-that-mattered">the releases that mattered<a class="anchor" href="#the-releases-that-mattered" aria-label="link to this section">#</a></h2>
<p><strong>DeepSeek R1</strong> (January). MIT license, published training methodology, distilled variants that ran on consumer hardware. The RL-on-verifiable-rewards recipe was reproduced widely within weeks.</p>
<p><strong>Qwen3</strong> (April). Eight models, Apache 2.0, MoE variants with excellent quality-per-active-parameter, 119 languages.</p>
<p><strong><a class="xref" href="/kimi-k2-is-a-trillion-parameter-open-weights-release/" title="Kimi K2 is a trillion-parameter open weights release">Kimi K2</a></strong> (July). A trillion parameters, open weights, tuned for agentic tool use, with a genuinely novel training stability contribution.</p>
<p><strong>gpt-oss</strong> (August). OpenAI's first open weights since 2019, Apache 2.0, with a 20B variant that runs on a laptop.</p>
<p>Plus continuous releases from Mistral, Zhipu, MiniMax, Meta, Microsoft, Google, and a long tail of fine-tunes.</p>
<h2 id="where-the-gap-actually-is">where the gap actually is<a class="anchor" href="#where-the-gap-actually-is" aria-label="link to this section">#</a></h2>
<p>The frontier-to-open gap held at roughly six to twelve months all year. That stability is the most important finding, because it means open weights are not converging on the frontier and are not falling behind — they are trailing at a fixed distance.</p>
<p>But "six months behind" undersells the practical position, because the gap is not uniform:</p>
<p><strong>Nearly closed:</strong> code completion, summarization, extraction, classification, translation, structured output, straightforward tool use. For these, a good open model is not meaningfully worse than a <a class="xref" href="/small-models-ate-the-middle/" title="Small models ate the middle">frontier model</a>, and it costs a fraction.</p>
<p><strong>Meaningfully behind:</strong> long-horizon agentic work, complex multi-step reasoning, instruction following over many turns, reliability at the tail. This is where frontier models earn their price.</p>
<p><strong>Not comparable:</strong> anything requiring the surrounding infrastructure — enterprise support, uptime guarantees, safety tooling, indemnification. Open weights give you the model and nothing else.</p>
<h2 id="what-changed-structurally">what changed structurally<a class="anchor" href="#what-changed-structurally" aria-label="link to this section">#</a></h2>
<p><strong>Licensing got genuinely permissive.</strong> Two years ago "open" meant a research license with a prohibited-use list. Now the frontier of open releases is Apache 2.0 and MIT. That is a real change and it removed the legal review that was blocking adoption.</p>
<p><strong>The runtime story got boring.</strong> Ollama, llama.cpp, vLLM, MLX, LM Studio. One command. An OpenAI-compatible endpoint. The friction that kept open models in the enthusiast category is gone.</p>
<p><strong>Hosting became competitive.</strong> Multiple providers serve open models at prices well below frontier API rates, with real SLAs. You can use open weights without running anything.</p>
<p><strong>The center of gravity moved east.</strong> The most capable, most permissively licensed open releases came predominantly from Chinese labs. That is a strategic fact with policy consequences that are being worked out loudly and mostly unproductively.</p>
<h2 id="the-practical-architecture-for-next-year">the practical architecture for next year<a class="anchor" href="#the-practical-architecture-for-next-year" aria-label="link to this section">#</a></h2>
<p>The shape that makes sense:</p>
<ul><li><strong>Open weights, self-hosted or on a cheap provider</strong>, for high-volume, well-defined tasks. Classification, extraction, embedding, first-pass drafting.</li><li><strong>Frontier API</strong> for the hard tail: planning, complex reasoning, anything customer-facing where a bad answer is expensive.</li><li><strong>A router</strong> deciding between them, with the escalation rate instrumented.</li><li><strong>Your own eval set</strong> in your own repository, run against every candidate.</li></ul>
<p>That is not a hedge. It is what the cost and capability curves actually imply.</p>
<h2 id="the-prediction">the prediction<a class="anchor" href="#the-prediction" aria-label="link to this section">#</a></h2>
<p>The gap holds at roughly six to twelve months through next year. Open weights absorb an increasing share of production workload by volume while frontier models keep the high-value tail.</p>
<p>The interesting question is not capability. It is whether the labs currently releasing weights continue to, and that is a business decision that could change in either direction with one quarter's strategy review.</p>
<p>Download the ones you care about. They cannot be un-released.</p>]]></content:encoded></item><item><title>Log4Shell, four years on</title><link>https://readme.news/log4shell-four-years-on/</link><guid isPermaLink="true">https://readme.news/log4shell-four-years-on/</guid><pubDate>Tue, 09 Dec 2025 09:00:00 +0000</pubDate><description>The industry built SBOM tooling, VEX, and a lot of dashboards. Here&#x27;s what actually changed and what didn&#x27;t.</description><content:encoded><![CDATA[<p>Four years ago this week, a logging library's feature for looking up values via JNDI turned into remote code execution on a substantial fraction of the internet's Java applications.</p>
<p>The response was enormous. It is worth asking what stuck.</p>
<h2 id="what-actually-improved">what actually improved<a class="anchor" href="#what-actually-improved" aria-label="link to this section">#</a></h2>
<p><strong>Software bills of materials went from nothing to standard.</strong> SPDX and CycloneDX are real formats with real tooling. Most large vendors produce them. US federal procurement requires them. That is a genuine change and it happened fast by industry standards.</p>
<p><strong>Dependency scanning is now default.</strong> GitHub, GitLab, and every major CI platform ship it. Most organizations have some visibility into their transitive dependency tree, which very few had in 2021.</p>
<p><strong>Response times improved measurably.</strong> Organizations that took weeks to identify affected systems in 2021 now take hours. That is the single most valuable change, because time-to-inventory is the binding constraint in any of these events.</p>
<p><strong>Funding for critical open source increased.</strong> Not enough. More than before. Several foundations and corporate programs exist that did not.</p>
<h2 id="what-did-not-improve">what did not improve<a class="anchor" href="#what-did-not-improve" aria-label="link to this section">#</a></h2>
<p><strong>Alert volume made everything worse.</strong> A typical application now generates hundreds of dependency alerts. The overwhelming majority are irrelevant — the vulnerable code path is not reachable, the component is not exposed, the "vulnerability" is a denial of service in a build-time tool.</p>
<p>Teams triage this by ignoring it. That is a rational response to a firehose of noise, and it means the one alert that matters gets ignored with the rest.</p>
<p>VEX — Vulnerability Exploitability eXchange — exists to solve exactly this, by letting a vendor state "we ship this component and we are not affected, here is why." Adoption is thin. Producing accurate VEX statements requires knowing your own code deeply, which is expensive, and there is no market pressure forcing it.</p>
<p><strong>Reachability analysis is still not standard.</strong> The question that matters is not "do you include this library" but "does your code call the vulnerable function along a path an attacker can trigger." Tools that answer this exist and are not widely deployed.</p>
<p><strong>Maintainer funding is still broken.</strong> Log4j was maintained by a handful of volunteers. Four years later, the number of critical projects with one underfunded maintainer is not meaningfully lower.</p>
<h2 id="what-i-would-actually-do">what I would actually do<a class="anchor" href="#what-i-would-actually-do" aria-label="link to this section">#</a></h2>
<p>If your organization did the post-Log4Shell work and now has a <a class="xref" href="/the-dashboard-nobody-looks-at/" title="The dashboard nobody looks at">dashboard</a> nobody reads:</p>
<p><strong>1. Rank by reachability, not by CVSS.</strong> A critical CVE in code you never call is lower priority than a medium in your request path. If your tooling cannot tell you which is which, that is the tooling gap to close.</p>
<p><strong>2. Know what is internet-facing.</strong> The inventory question that matters is not "what do we depend on" but "what do we depend on <em>in a service an attacker can reach</em>." That is a much shorter list and it is the one to keep current.</p>
<p><strong>3. Practice the drill.</strong> Once a quarter, pick a random dependency and answer: where do we use it, which versions, which services, how fast can we patch. If that takes more than an hour, that is your actual finding.</p>
<p><strong>4. Fund something.</strong> Pick the three open source projects your business most depends on and send money or engineering time. This is more effective per dollar than most security spending and almost nobody does it.</p>
<h2 id="the-honest-assessment">the honest assessment<a class="anchor" href="#the-honest-assessment" aria-label="link to this section">#</a></h2>
<p>We got much better at <em>inventory</em> and barely better at <em>prioritization</em>. We can now tell you every vulnerable component in your stack within an hour and we still cannot tell you which three matter.</p>
<p>The next Log4Shell will be found faster and patched faster. It will also arrive in an environment with ten times the alert volume, and the teams that have been trained by four years of noise to ignore alerts will ignore it a little longer than they should.</p>
<p>That is progress with a catch, which is the usual kind.</p>]]></content:encoded></item>
</channel>
</rss>
