<?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>Chris Wijnia — Notes</title>
    <link>https://chriswijnia.com/</link>
    <atom:link href="https://chriswijnia.com/feed.xml" rel="self" type="application/rss+xml" />
    <description>Things I’m working on, learning or trying to understand.</description>
    <language>en</language>
    <item>
      <title>Developer tools for normal teams</title>
      <link>https://chriswijnia.com/notes/developer-tools-for-normal-teams</link>
      <guid isPermaLink="true">https://chriswijnia.com/notes/developer-tools-for-normal-teams</guid>
      <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Every team using AI is about to hit problems software teams solved years ago. The fix is the same four tools, in plainer clothes.</description>
      <content:encoded><![CDATA[<p>Every team that uses AI seriously runs into the same wall. It isn’t the price of tokens. It’s that once several agents are doing real work, nobody can say for certain what they did or whether it was right.</p>
<p>Software teams have had that problem for decades, with people instead of agents, and they solved it with a handful of tools. I think those tools are about to leave engineering. This is the argument I made at the Canggu AI Meetup tonight; the slides are at the end.</p>
<h2 data-no="01 / 09">The wall is trust, not tokens</h2>
<p>Starting an agent is easy. Anyone can point one at an inbox or a spreadsheet in an afternoon.</p>
<p>The hard part comes afterwards. An agent rarely fails loudly. It summarises a little less carefully, skips a field in the CRM, drafts a proposal that is nearly right. If nothing checks the work and nothing records it, you find out weeks later, from a customer.</p>
<p>So the question worth asking isn’t “which agent?” It’s “how would I know?”</p>
<h2 data-no="02 / 09">How a small team runs millions of lines</h2>
<p>The codebase I work in every day is a little over five million lines, spread across 84 apps and services. A small team maintains it. Nobody reads it all, and nobody needs to.</p>
<p>It works because the agents that do much of the work operate inside a few rules we wrote down, and because nothing they produce lands without being checked. There are 253 written playbooks (we call them skills) and 48 specialised agents for planning, coding, reviewing and shipping. None of that is exotic. It’s mostly the standard toolkit of any well-run engineering team, applied to agents instead of people.</p>
<h2 data-no="03 / 09">Four tools, in plainer clothes</h2>
<p>Each of these exists in software because many hands working in one system break things in ways nobody notices until later. Agents are many hands.</p>
<ul>
<li><strong>Checks the agent can run itself.</strong> Developers have tests: code that fails when something breaks. For everyone else it’s a checklist, a sample to compare against, or a number that has to move. An agent that can check its own work improves without you. One that can’t makes you the test.</li>
<li><strong>A record of everything.</strong> Developers have version history: every change, who made it, and a way back. For everyone else it’s Linear, Drive or Notion, as long as the agent writes where people already read.</li>
<li><strong>Know-how written down once.</strong> Developers have runbooks. For agents, the same idea is a skill: a short instruction loaded when the task needs it. The useful ones come from watching an agent fail at the same thing twice.</li>
<li><strong>Gates sized to the mistake.</strong> Developers have code review. For everyone else it’s approval: light for a draft email, heavier for a payment or a contract.</li>
</ul>
<p>None of these need a developer. They need the habits developers have.</p>
<h2 data-no="04 / 09">Keeping track is the one to start with</h2>
<p>If I had to pick one, it’s the record. Every agent, whatever it does, writes to the same place: what it did, and whether its check passed.</p>
<p>That’s also how you catch the quiet failure. A shared log turns “the agent seems fine” into something you can see. If it isn’t tracked, it didn’t happen, and if it didn’t happen you can’t tell whether it went wrong.</p>
<h2 data-no="05 / 09">The steps are about guardrails, not tokens</h2>
<p>Boris Cherny, who built Claude Code, <a href="https://x.com/bcherny/status/2077929379661844559" target="_blank" rel="noopener">describes five steps of AI adoption</a>: gated, then assisted (about one agent per person), parallel (about ten), supervised autonomy (about a hundred), and AI-native (a thousand or more). His point, which matches what I’ve seen, is that tokens alone don’t move a team up a step. Removing the next bottleneck and building the next guardrail does.</p>
<p>The four tools above are those guardrails. Most teams outside engineering are on the first or second step, and the jump to the third is where they start to matter: at ten agents per person, nobody can supervise every output by eye.</p>
<h2 data-no="06 / 09">One install for the whole team</h2>
<p>Habits spread badly by memo. What worked for us was packaging them. The team gets one plugin for Claude Cowork, installed once, with no terminal involved. It holds the skills, the connections to our own systems and the checks:</p>
<ul>
<li><strong>Skills.</strong> For example, an inbox assistant that learns your tone from your sent mail and drafts replies on a schedule, or one that produces year-end investor statements.</li>
<li><strong>Connectors.</strong> Links to the company’s docs, CRM and data, so a question in plain words gets an answer from the real source.</li>
<li><strong>Checks.</strong> For example, a fact-checker that re-derives every claim in a draft before it goes out.</li>
</ul>
<p>The plugin is built from what we actually run, so when someone adds a skill or a connection, everyone has it on the next update. Nobody maintains a list, which is the only reason the list stays true.</p>
<h2 data-no="07 / 09">Can normal teams run this?</h2>
<p>The meetup asked. Yes, with the tools, and none of them require writing code. Package the habits once and everyone installs them. Agents break things quietly only when there’s no check and no record; with both, a problem shows up in the log the same day.</p>
<h2 data-no="08 / 09">The slides</h2>
<figure class="deck-embed"><iframe src="/slides/canggu-ai-meetup/" title="Slides" loading="lazy" allowfullscreen></iframe><figcaption><a href="/decks/canggu-ai-meetup">Open the deck ►</a></figcaption></figure>
<h2 data-no="09 / 09">Open questions</h2>
<ul>
<li>How small can the record be before it stops being useful? A spreadsheet works for one team; I don’t know where it stops working.</li>
<li>Who writes the skills in a team with no engineers, and who decides when one is wrong?</li>
<li>Checks are easy for numbers and hard for judgement. What’s the checklist for “is this a good proposal”?</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>AI makes software cheaper. Systems thinking becomes more valuable.</title>
      <link>https://chriswijnia.com/notes/ai-makes-software-cheaper</link>
      <guid isPermaLink="true">https://chriswijnia.com/notes/ai-makes-software-cheaper</guid>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <category>Software</category>
      <description>Models make code cheap to write. They don’t make systems cheap to own, and that gap is where the valuable work moves.</description>
      <content:encoded><![CDATA[<p>Writing code is getting cheap fast. A function that took an afternoon now takes a prompt and a review. A prototype that took a week can exist by lunch.</p>
<p>It’s tempting to conclude that software itself is getting cheap. I don’t think it is. What’s getting cheap is one part of it: turning a clear intention into working lines. The expensive parts were always elsewhere.</p>
<h2 data-no="01 / 04">Code was never the bottleneck</h2>
<p>Most of the cost of software sits after the first commit. Keeping it running, changing it without breaking something three layers away, explaining it to the next person, deciding what not to build. None of that got cheaper this year.</p>
<p>Cheap code actually adds pressure there. When producing a feature costs little, you get more features, more integrations and more surface area. Every one of them has to be owned, and ownership is what gets expensive.</p>
<h2 data-no="02 / 04">What becomes valuable</h2>
<p>If output is cheap, judgement is what’s scarce. In practice that looks like:</p>
<ul>
<li><strong>Knowing where the boundaries are.</strong> Which parts of a system should know about each other, and which never should. A model will happily wire everything to everything.</li>
<li><strong>Choosing what to leave out.</strong> The fastest code to maintain is the code that was never written.</li>
<li><strong>Seeing second-order effects.</strong> A change to how money moves, or how data is stored, echoes through places nobody is looking at.</li>
<li><strong>Writing things down.</strong> Models work better with clear constraints, and so do teams. Good specs used to be a courtesy. Now they multiply everyone’s output.</li>
</ul>
<p>None of these are new skills. They just used to be hidden behind the effort of typing, and now they aren’t.</p>
<h2 data-no="03 / 04">Different work, not less of it</h2>
<p>The work I do has shifted. I spend less time producing code and more time deciding what the code should be, reviewing what was produced, and designing the system it lands in. The job looks more like editing than writing.</p>
<p>That makes the reviewer the bottleneck, which is uncomfortable. A model can produce a thousand plausible lines in a minute, and plausible isn’t the same as correct. So I lean on tests, types and small, reversible steps: the unglamorous tools that make fast change safe.</p>
<h2 data-no="04 / 04">Open questions</h2>
<ul>
<li>If juniors learn by writing the code a model now writes, where does the next generation of systems thinkers come from?</li>
<li>How much review is enough when the volume of changes keeps growing?</li>
<li>Which of today’s “best practices” were really workarounds for expensive code, and can quietly go?</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>JEV, tiny models and strange new interfaces</title>
      <link>https://chriswijnia.com/notes/jev-tiny-models-strange-interfaces</link>
      <guid isPermaLink="true">https://chriswijnia.com/notes/jev-tiny-models-strange-interfaces</guid>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <category>Experiments</category>
      <description>Small, fast models that pick one option from a fixed set don’t chat. They decide, and that invites interfaces that don’t look like chat at all.</description>
      <content:encoded><![CDATA[<p>Most of what people call AI today looks like a conversation. You type, it types back. That shape made sense for the first generation of large models, but it isn’t the only one, and it may not be the most useful.</p>
<h2 data-no="01 / 04">A different kind of model</h2>
<p>Jev, from TypeSafe, is a good example of another shape. Instead of writing free text, you give it structured state and a fixed set of options, and it returns one choice with a confidence attached. No prose, no conversation. A decision.</p>
<p>That sounds like a limitation. In practice it’s the point. A model that can only choose from valid options can’t hallucinate an invalid one. Its answer is typed, so the software around it can trust the format and act on it immediately.</p>
<h2 data-no="02 / 04">Why small matters</h2>
<p>When a model only has to decide, it can be small and fast. That changes what you can build with it:</p>
<ul>
<li><strong>Decisions in a loop.</strong> Many small choices per second instead of one long answer.</li>
<li><strong>Cost you can ignore.</strong> Cheap enough to call for every step, not just the important ones.</li>
<li><strong>Predictable behaviour.</strong> The set of possible outputs is known in advance, which makes it testable.</li>
</ul>
<p>It’s closer to a game engine’s logic than to a chatbot, and that’s where it gets interesting.</p>
<h2 data-no="03 / 04">Interfaces without chat</h2>
<p>If the model decides instead of talks, the interface doesn’t need a text box. It can be a character moving through a world, a system choosing its next step, an old piece of software driven by something that has never seen a keyboard.</p>
<p>Those experiments look strange next to today’s assistants, and that’s why I like them. Every new kind of model has made new interfaces possible, and the first ones always look like toys.</p>
<h2 data-no="04 / 04">Open questions</h2>
<ul>
<li>Which everyday software is really a long series of small, typed decisions?</li>
<li>How do you show someone what a decision-making model is doing, without a transcript to read?</li>
<li>When does a choice from a fixed set stop being enough?</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>What I learned giving agents memory</title>
      <link>https://chriswijnia.com/notes/what-i-learned-giving-agents-memory</link>
      <guid isPermaLink="true">https://chriswijnia.com/notes/what-i-learned-giving-agents-memory</guid>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Memory is not a transcript. On selection, lifetimes, forgetting and what persistent agents change about software.</description>
      <content:encoded><![CDATA[<p>Most AI products still have a peculiar form of amnesia.</p>
<p>They can reason surprisingly well about whatever is in front of them, but start a new conversation and much of that understanding disappears. You explain the company again. The project again. Your preferences again. The reason a decision was made three weeks ago, again.</p>
<p>For a chatbot, that can be mildly annoying.</p>
<p>For an agent that is supposed to do useful work over time, it becomes a fundamental limitation.</p>
<p>Over the past year I’ve spent a lot of time building with agents and thinking about what happens when they stop being isolated prompts and begin operating as persistent software systems.</p>
<p>Memory turns out to be one of the more interesting parts.</p>
<p>Not because storing information is difficult. We have been exceptionally good at putting things into databases for several decades.</p>
<p>The difficult part is deciding <strong>what deserves to be remembered, what it means later, and when it should come back.</strong></p>
<h2 data-no="01 / 07">Memory is not a transcript</h2>
<p>The obvious implementation of agent memory is to save every conversation.</p>
<p>That is useful, but it isn’t really memory.</p>
<p>A transcript is history. Memory is compression.</p>
<p>Humans don’t replay every sentence they have ever heard before making a decision. We retain some facts, forget others, form abstractions and gradually build a model of the world.</p>
<p>An agent needs something similar.</p>
<p>Imagine an engineering agent working inside a large codebase.</p>
<p>Over time it might discover that:</p>
<ul>
<li>a certain service deliberately avoids local state,</li>
<li>a particular API has an ugly compatibility constraint,</li>
<li>the team prefers one architectural pattern over another,</li>
<li>a bug that looks obvious has already been investigated twice,</li>
<li>one engineer tends to care deeply about backwards compatibility,</li>
<li>another system is scheduled to disappear in six months.</li>
</ul>
<p>None of those facts necessarily belong in the immediate prompt.</p>
<p>But they can dramatically change the quality of the next decision.</p>
<p>The useful unit of memory therefore isn’t:</p>
<blockquote>
<p>Here is everything that happened.</p>
</blockquote>
<p>It is closer to:</p>
<blockquote>
<p>Here is what appears to remain important.</p>
</blockquote>
<p>That distinction sounds small. It changes the architecture considerably.</p>
<h2 data-no="02 / 07">More context is not the same as more intelligence</h2>
<p>Large context windows created a tempting idea: perhaps we can simply give models everything.</p>
<p>Eventually, that becomes its own failure mode.</p>
<p>An agent with access to thousands of irrelevant facts can be worse than one with ten useful ones. Retrieval becomes noisy. Old assumptions survive long after reality changed. Contradictory information accumulates.</p>
<p>Context has a cost even when the model can technically accept it.</p>
<p>The real problem becomes <strong>selection</strong>.</p>
<p>When an agent is working on a database migration, what should it remember about the product?</p>
<p>When it is replying to a customer, what should it know about the architecture?</p>
<p>When a user changes their mind, how quickly should an older preference lose authority?</p>
<p>The quality of a memory system is therefore not measured by how much it stores.</p>
<p>It is measured by how well it decides what to surface.</p>
<p>That starts looking less like a database problem and more like an information architecture problem.</p>
<p>Which, conveniently, means software engineers get to reinvent librarianship with embeddings.</p>
<h2 data-no="03 / 07">Memories have different lifetimes</h2>
<p>Another thing that becomes obvious surprisingly quickly: not all memory should behave the same way.</p>
<p>Some things are effectively permanent.</p>
<blockquote>
<p>This application uses PostgreSQL.</p>
</blockquote>
<p>Some are durable preferences.</p>
<blockquote>
<p>Prefer boring infrastructure over introducing another service.</p>
</blockquote>
<p>Some are observations.</p>
<blockquote>
<p>The current implementation appears to be CPU-bound during type checking.</p>
</blockquote>
<p>Some are temporary.</p>
<blockquote>
<p>We are debugging the authentication flow this week.</p>
</blockquote>
<p>And some are conclusions that may later turn out to be wrong.</p>
<blockquote>
<p>This bug is probably caused by caching.</p>
</blockquote>
<p>Treating all of these as equivalent creates trouble.</p>
<p>Useful agent memory needs some notion of <strong>provenance, confidence and time</strong>.</p>
<p>Where did this belief come from?</p>
<p>Was it explicitly told to the agent or inferred?</p>
<p>Has it subsequently been contradicted?</p>
<p>When was it last relevant?</p>
<p>That metadata matters because an agent is not merely retrieving facts. It is retrieving beliefs about a changing system.</p>
<p>Software changes.</p>
<p>Organizations change.</p>
<p>People change their minds.</p>
<p>A memory system that cannot forget eventually becomes a very confident historian of a world that no longer exists.</p>
<h2 data-no="04 / 07">Forgetting is a feature</h2>
<p>This may be the counterintuitive part.</p>
<p>Good memory requires good forgetting.</p>
<p>Engineers naturally like persistence. Losing information feels like failure.</p>
<p>But forgetting can be an important form of compression.</p>
<p>If an agent worked through twenty hypotheses before finding the cause of a production bug, the useful long-term memory probably isn’t all twenty hypotheses.</p>
<p>It might be:</p>
<blockquote>
<p>Requests to this service can appear stale because this cache is process-local. Prefer the shared Redis path for cross-instance state.</p>
</blockquote>
<p>The investigation mattered while solving the problem.</p>
<p>The conclusion matters afterward.</p>
<p>That raises an interesting question: should agents periodically reinterpret their own histories?</p>
<p>I think increasingly they will.</p>
<p>Rather than memory being written once and retrieved forever, persistent agents may continuously consolidate what they know. Recent experiences become observations. Repeated observations become patterns. Some patterns become durable knowledge. Others decay.</p>
<p>That starts to resemble learning, even if the underlying model weights never change.</p>
<h2 data-no="05 / 07">Memory changes the interface</h2>
<p>Persistent memory also changes how software feels.</p>
<p>Today we largely think of AI interfaces as conversations.</p>
<p>Open a box. Ask a question. Receive an answer.</p>
<p>But once the system remembers projects, decisions, people and unfinished work, the conversation becomes only one view into something larger.</p>
<p>The interesting object isn’t the chat.</p>
<p>It is the evolving relationship between the agent and its environment.</p>
<p>An agent might remember that a migration was postponed, notice the dependency has since disappeared, and bring the issue back months later.</p>
<p>It might understand why a particular architectural decision was made instead of merely observing that the code exists.</p>
<p>It might recognize that the problem somebody is describing today looks suspiciously similar to an incident from last year.</p>
<p>At that point the system begins to feel less like a tool waiting for commands and more like another participant in the work.</p>
<p>That introduces plenty of uncomfortable questions around privacy, control, observability and trust.</p>
<p>It also makes the software considerably more useful.</p>
<h2 data-no="06 / 07">The model is only part of the product</h2>
<p>Building with increasingly capable models has reinforced something I already believed about software.</p>
<p>The cleverest component is rarely the whole product.</p>
<p>A powerful model without the right context can produce a mediocre result. A slightly less capable model embedded in a system with good tools, useful memory and strong feedback loops can be remarkably effective.</p>
<p>The surrounding architecture matters.</p>
<p>So does product judgment.</p>
<p>What information do we expose?</p>
<p>What actions can the agent take?</p>
<p>When should it ask instead?</p>
<p>What should be remembered?</p>
<p>What should disappear?</p>
<p>What can the user inspect and correct?</p>
<p>Those decisions increasingly determine whether an AI system feels impressive for five minutes or remains useful after five months.</p>
<h2 data-no="07 / 07">Where this gets interesting</h2>
<p>I don’t think the eventual form of agent memory will look much like a folder labelled <code>memories</code>.</p>
<p>It will probably be distributed across several layers: explicit facts, semantic retrieval, project state, interaction history, environmental observations and learned preferences.</p>
<p>Some memory will belong to a person.</p>
<p>Some to a company.</p>
<p>Some to a task.</p>
<p>Some to the agent itself.</p>
<p>And agents will need to reason about the boundaries between them.</p>
<p>We are still early enough that many of these systems feel slightly improvised. That is part of what makes working on them fun.</p>
<p>A lot of AI right now is focused on making the model smarter.</p>
<p>I suspect an equally important frontier is making software around the model better at <strong>remembering what matters</strong>.</p>
<p>Because intelligence without continuity is useful.</p>
<p>But continuity is what starts turning intelligence into a system.</p>
]]></content:encoded>
    </item>
    <item>
      <title>What finance looks like when software becomes an actor</title>
      <link>https://chriswijnia.com/notes/when-software-becomes-an-actor</link>
      <guid isPermaLink="true">https://chriswijnia.com/notes/when-software-becomes-an-actor</guid>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <category>Finance</category>
      <description>When software can act on money, not just record it, the hard questions stop being technical and become about permission and accountability.</description>
      <content:encoded><![CDATA[<p>For most of its history, financial software has been a ledger with a user interface. It records what people decided. Someone approves the payment, someone places the trade, and the software keeps track.</p>
<p>That’s changing. Software can now propose, decide and act: move funds when conditions are met, rebalance a portfolio, respond to a request at three in the morning. The question is no longer only whether the numbers are right. It’s who, or what, was allowed to act.</p>
<h2 data-no="01 / 04">From records to decisions</h2>
<p>Programmable money made the first step possible. Assets that can be held and moved by code mean the rules can live next to the value instead of in a separate process. Models add the second step: software that can read a situation and choose an action within those rules.</p>
<p>Put together, you get an actor. Not a person, not a tool, but something in between that holds permissions and uses them.</p>
<h2 data-no="02 / 04">Permission is the product</h2>
<p>When software acts, the interesting design problem is the permission model:</p>
<ul>
<li><strong>Scope.</strong> What exactly may it do, with how much, and for how long?</li>
<li><strong>Limits.</strong> Hard caps that no instruction can override, enforced where the money lives, not in the prompt.</li>
<li><strong>Approval.</strong> Which actions need a human, and how that human sees enough context to say yes quickly and safely.</li>
<li><strong>Undo.</strong> Money often can’t be pulled back, so the checks have to happen before the action, not after.</li>
</ul>
<p>Good financial infrastructure already thinks this way about people. Delegated access, spending limits and multi-party approval are old ideas. The new part is applying them to something that acts at machine speed and never gets tired.</p>
<h2 data-no="03 / 04">Accountability doesn’t move</h2>
<p>Regulation doesn’t care whether a person or a program made the call. Someone is still responsible. That’s healthy: it forces clear lines between what the software proposes and what an accountable party authorises.</p>
<p>The systems that work will make those lines visible. Every action traced to a permission, every permission traced to a person, and a log you could show an auditor without rewriting it first.</p>
<h2 data-no="04 / 04">Open questions</h2>
<ul>
<li>How much autonomy will customers actually want over their own money, once it’s on offer?</li>
<li>What does a useful audit trail look like for a decision made by a model?</li>
<li>Where should limits live: in the model, the application, or the asset itself?</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Why I still prototype things myself</title>
      <link>https://chriswijnia.com/notes/why-i-still-prototype-things-myself</link>
      <guid isPermaLink="true">https://chriswijnia.com/notes/why-i-still-prototype-things-myself</guid>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <category>Software</category>
      <description>Building the first version myself is still the fastest way I know to find out what a product should be, and where it will break.</description>
      <content:encoded><![CDATA[<p>I could delegate more than I do. Between a team and a set of models, there’s rarely a technical reason for me to build the first version of something. I still do it anyway, and it isn’t nostalgia.</p>
<h2 data-no="01 / 05">A prototype is a question</h2>
<p>Most product decisions look obvious in a document and turn out to be wrong in a browser. The flow that read well has a step nobody wants. The data model that looked clean can’t express the one case that matters.</p>
<p>Building the thing is how I find out. A rough version answers more questions in a day than a week of discussion, because it forces every vague decision to become a specific one.</p>
<h2 data-no="02 / 05">Where the problems hide</h2>
<p>The things that sink projects are usually boring: an integration that behaves differently than its documentation, a latency that makes an interaction feel broken, a permission nobody thought about. You meet them early when you build, and late when you don’t.</p>
<p>When I’ve built the first version, I know where those are. That makes me a better reviewer, a better estimator and a better person to argue with about the plan.</p>
<h2 data-no="03 / 05">Models changed the maths</h2>
<p>Prototyping used to be expensive enough that it had to be justified. With models doing much of the typing, a working sketch now costs hours instead of weeks. The trade-off tipped: it’s now often cheaper to build a version and look at it than to debate whether it’s worth building.</p>
<p>The skill that matters is knowing it’s a prototype. It exists to answer a question, and once it has, most of it should be thrown away. The dangerous prototype is the one that quietly becomes production.</p>
<h2 data-no="04 / 05">What I keep</h2>
<ul>
<li><strong>Taste.</strong> You only develop a sense of what feels right by making many things that don’t.</li>
<li><strong>Credibility.</strong> It’s easier to lead engineers when you still do the work.</li>
<li><strong>Speed.</strong> The shortest path from idea to decision usually runs through something you can click.</li>
</ul>
<h2 data-no="05 / 05">Open questions</h2>
<ul>
<li>At what team size does building it yourself start to get in the way?</li>
<li>How do you hand off a prototype without handing off its shortcuts?</li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
