NanookNanook
  • Docs
  • API
  • Blog
  • Articles
  • GitHub

›Recent Posts

Recent Posts

  • 2026-11 Rules Need Exit Codes
  • 2026-11 The Agent That Pleases
  • 2026-11 Working Through 1,200 Plans
  • 2026-10 Tests First, Then Implement
  • 2026-10 A Table Cannot Stay Silent
  • 2026-10 What the Next Session Knows
  • 2026-10 One Root, Many Repos
  • 2026-09 Fewer Skills, Shorter Rules
  • 2026-09 Agentic Development
  • 2026-08 E-Invoices: 40 Dialects
  • 2026-08 One Login, Eight Cases
  • 2026-08 Testing a SaaS
  • 2026-03 AI-Assisted Tables
  • 2026-03 Manual vs. Automated
  • 2026-03 Equivalence Class Testing
  • 2026-02 Nanook Is Back
  • 2019-06 Introducing Nanook

The Agent Writes the Code. Everything Around It Decides Whether You Can Trust It.

September 22, 2026

Torsten Link

Most writing about AI-assisted development is about speed. Speed is real. It is also the least interesting part, and it is not what decides whether the result is any good. After nine months of building software almost exclusively through an AI coding agent in the terminal, my conclusion is this:

The agent writes the code. What makes the code trustworthy is everything around the agent: the structure it works in, the order of the steps, the checks it cannot talk its way past, and the knowledge that survives the end of a session.

This is the first of nine posts on agentic software development, about that “everything around”. The agent in both settings is Claude Code; the setup would carry over to any coding agent that reads an instruction file and runs commands. A note on roles, because it matters for reading what follows: the agent writes nearly all of the code. I design, decide, review, contradict, and, most importantly, decide which of the agent’s claims I believe.

Two settings, one core

The material comes from two settings that look very different. Both were measured on 17 September 2026; the numbers will drift, the date stays.

Two settings, one core, measured 17 September 2026. Left, the SaaS platform, five products since December 2025: 74 repositories, about 14,000 commits, about 1,240 plans done, 327 lessons kept, open product work. Right, the event-driven service, a client project on Kafka, Postgres and REST: 11 days, 806 tests, 214 generated cases, 100 percent per sheet or no build, requirements from outside. In the middle, the same core: structure, order of steps, gates, retained knowledge. Caption: the agent writes the code; the core decides whether you can trust it

Setting A is a multi-product SaaS platform: five products on shared modules: association management, software for trades businesses, property management, an e-invoicing API and a PDF API. Backends and frontends are plugin-based; most functionality lives in shared packages that several products import. This is open product work: nobody hands you the requirements; you develop them.

SaaS platformMeasured
Durationsince December 2025, about nine months
Git repositories (products, shared packages, tools, archive)74
Commits across those repositories~14,000
Commits in the root repository (plans, rules, knowledge)4,284
Completed plans and analyses~1,240
Open plans65
Lesson memory entries, one lesson per file327
Knowledge-base articles66, compiled from 122 raw sources
Active skills24, with 14 archived
Path-bound rule files10

Each repository is released on its own and published as an npm package. A change to a shared package often travels through ten or more repositories before a user sees it.

Setting B is an event-driven service inside a client project: it consumes messages from Kafka, keeps state in Postgres, publishes decisions back to Kafka, and serves a web UI over REST. The requirements came from outside, and the interfaces already existed. That is the opposite situation: the specification is the oracle, and tests can be derived from it before a line of code exists.

Event-driven serviceMeasured
Duration11 days, with 12 designs written on day one
Commits97
Source code8,053 lines in 54 files
Test code9,183 lines in 44 files
Tests806, of which 805 passing and 1 skipped
Decision-table sheets13, of which 11 generate cases
Generated test cases214, written as 1,712 files
Table coverage100 % per sheet; the build fails otherwise

The process differs where the settings differ: the first phase of a client project is analysis of a specification; the first phase of product work is developing the requirements at all. But the core is the same in both: a structure the agent works in, a fixed order of steps, gates it cannot argue with, and knowledge that outlives the session. That is why they belong in one series.

What this series will and will not tell you

It will not tell you that an agent is fast; you know that. It is not a tool review either, and it will not compare models. It describes the setup (tools, instruction files, directories), the process (analysis, design, plan, implementation), the testing approach (tables first, tests second, code third), the automation (a pipeline that works through plans on its own), and, at length, the failure modes.

The failures are the most useful part. Every rule in the setup exists because something went wrong at least once, usually more than once: an agent that rewrote expectations until the tests passed, a request counter that reported zero while the page fired about 150 request batches a second, five bypassed test hooks despite an explicit prohibition in every brief. Each of those gets its own part, with the incident, the mechanism behind it, and the rule that followed.

The short version, in ten sentences

If you take only a few sentences from the whole series, take these. The part in brackets is where each one is worked out.

  1. The agent writes the code; the structure around it makes the code trustworthy. Directories, order of steps, gates, and retained knowledge. (Parts 2 and 3)
  2. A table cannot stay silent. Prose is quiet at the unclear places; a table demands a row there. Translating requirements into decision tables finds contradictions before code exists. (Part 5)
  3. Design services so their function is testable without infrastructure. An agent that can check its own work after every step is excellent. One that has to guess is mediocre. (Part 6)
  4. Write all tests first and prove they are red for the right reason. Then “implement the plans and use the tests” is an instruction an agent can execute well. (Parts 6 and 7)
  5. Change an expectation only via its source, with a reason. Otherwise the suite becomes accommodating, with an agent exactly as with a human under pressure. (Part 8)
  6. Absences are the most expensive defects. No tool reports what is missing. Test the rendered output, and ask what a user still needs to see it. (Part 8)
  7. Prove the measuring instrument before believing its zero. (Part 8)
  8. Precise-looking evidence gets checked least. Verify line references, timestamps, and paraphrases against the source. (Part 8)
  9. What must hold needs an exit code. A rule in prose is not a control; a hook is. (Part 9)
  10. Built correctly is not the same as useful. Every plan names a user job, and done means it was played through. (Part 9)

Part 4, what the next session knows, is the one without a sentence of its own: it is the mechanism behind sentence 1, the knowledge that survives.

The series

One part a week, from 29 September to 17 November 2026. The whole report is also on the site as one page: Agentic Software Development, about 9,000 words.

#PartWhat it covers
1The agent writes the code. Everything around it decides whether you can trust it.This post: the two settings, the numbers, the ten sentences.
2Fewer skills, shorter rulesSkills and MCP servers, the token diet, an instruction file of 170 lines with rules that load themselves, cost and model assignment.
3One root, many repositoriesA directory layout for a multi-product SaaS and for microservices; the requirements lifecycle from analysis to done.
4What the next session knowsA knowledge base and a memory of lessons: two stores for two questions.
5A table cannot stay silentForcing requirements into decision tables, and the eight things it found in one service before any code existed.
6Tests first, then “implement all plans”Transport-independent service design, the red chain, counter-probes with counted results.
7Working through 1,200 plansAn autonomous pipeline, its ledger, release cascades across 74 repositories, parallel sessions in one checkout.
8The agent that pleasesFour failure classes with real incidents: the accommodating agent, absences, lying instruments, invented evidence.
9Rules need exit codes, and green is not usefulBypassed hooks, unnoticed red CI runs, features built correctly and pointless; what I would do again and what not.

The tables in both settings are Nanook decision tables. If you want to see what they look like at scale before the series gets there, the field report How We Test a SaaS Application with Nanook covers the test suite of two of the platform’s products, and Testing E-Invoices for 40 Country/Format Combinations the e-invoicing rules. To build one yourself, start with the Quickstart.

Recent Posts
Nanook
Docs Tutorials Guide
More About Articles Imprint Privacy Policy GitHub Manage Cookies
© 2018-2026 nanook.xhub.io — An Open Source Project by BeeBack UG.
Cookie preferences

We use cookies to analyze site usage and improve your experience. You can choose which cookies to allow below. See our Privacy Policy for details.

EssentialAlways active
Analytics