5.2 The Timeline and the Work

This chapter illustrates

✓ The Printer · ✓ The Governed Engineering Environment · ✓ Governance Conversion

The last chapter established the problem. This one tells what happened when I tried to solve it — the concrete arc from a five-minute experiment in the back of a committee meeting to a production system that, by the end, was writing almost all of its own code. The story matters because every governance idea in this book was learned at a specific point on this arc, in response to a specific failure. The methods are not a theory that came first. They are the sediment left by the work.

The scale is easy to state and hard to believe. Over about 20 weeks of focused effort, a fleet of AI coding agents and I produced a repository of 501,094 lines of production code, 1,505,737 lines of support apparatus, 35,323 lines of infrastructure-as-code, and 28,507 lines of system models bridging the two. On a routine day, six to eight agents ran in parallel and landed on the order of 200 commits — about 1,000 a week, sustained, against the hundred a week a fast unaided human might manage. I inspected almost none of the code. That one fact is the engineering problem this book exists to answer: how a fleet producing more code than any human can read stays trustworthy.

5.2.1 It started in a meeting

The project began, fittingly, in a committee meeting about the very deadline described in the last chapter. In early 2026 an accreditation committee was discussing the ADA compliance date. Most of the faculty in the room did not know a mandate existed; those who did had made little progress against it. While the meeting droned on, I did what an engineering professor does when bored by a conundrum: I ran a small experiment. I opened a chat model, fed it screenshots from one of my own slide decks, and asked it to transcribe what it saw. It worked. The model looked at a rendered slide and recovered real semantic content from the image — the core technical problem of document accessibility, solved well enough to build on.

That single positive result was the decision point. It converted a research question into an engineering project. What it did not do defines the gap the rest of the timeline had to close: the model did not export a corrected file, did not add reading order, did not validate against any standard, and understood nothing about the institution the file lived in. A flash of capability is not a system.

The first plan was small and conventional. Draft a one-week project — automated alt-text for the equations in instructional materials — and hand it to an undergraduate or two over Spring Break. I posted the offer to twenty of the department's best students. Not one replied; they had, reasonably, planned to have fun. So I decided to supervise agents instead of undergraduates. I bought a subscription, opened an empty Git repository, and told myself one month should be plenty.

5.2.2 Six stages, then a seventh

What followed moved through a recognizable sequence of stages. Each stage was driven by a concrete pressure — a colleague's request, a user's complaint, a deadline, a failure — and each one enlarged both the product and the machinery that kept the product trustworthy.

Learn more about this governance mechanism: standards-grounded check engine.

Worktree. A private, checked-out copy of the repository given to a single agent, so its in-progress edits never collide with another agent working at the same time.

The two-line summary of the whole sequence is that the product grew, and the apparatus that governs the product grew faster. Measured in source size, the support machinery — tests, lints, load-bearing documentation, agent infrastructure, and tooling — ran about 3.0 times the size of the production code, and the test suite alone was roughly the size of the product. A ratio like that will, of course, read as gold-plating — until you recall that at 200 commits a day no human reads the diffs (the apparatus stands in — more on that in the built system). It is the price of the velocity.

5.2.3 The velocity curve

Figure 5.2-1 plots commits per week: a steep rise as the fleet gained capability, then the dip where velocity buys trustworthiness.

Commits per week across the project’s history — the velocity curve A bar chart of commits per week over the 20-week build. Each bar is one week. The curve rises steeply as the agent fleet acquired capability, peaking through May, then dips during a hardening stretch. An inset panel reports commit size in lines of code. The shape is the argument in miniature: raw velocity is easy to buy, and the dip is where that velocity is spent making the output trustworthy rather than merely fast. 2026-07-25T22:38:57.836394 image/svg+xml Matplotlib v3.10.9, https://matplotlib.org/
Figure 5.2-1. Commits per week across the project's history — the velocity curve. Each bar is one week; the curve rises as the fleet gains capability, then dips during hardening. That dip is where velocity is spent making the output trustworthy rather than merely fast.

The repository's own activity records the shape of the effort. Commits and lines-changed per week rose steeply through the MVP stages — feasibility, PowerPoint, formats, service — as the system acquired capability. Then, during hardening, the raw velocity fell. That dip is the signature of the work changing character: from producing features to producing the mechanisms that let features be produced safely. The curve is a picture of me turning from a coder into an architect.

The human cost is part of the record too. It was so fun to build that sleep dropped to four or five hours a night; exercise and most everything else fell away. To stay ahead of the subscription rate limits, I ran up to four top-tier plans in round-robin and scheduled my own body across them. The addiction was real. The lesson, though, is what the machinery had to become to make that pace produce something trustworthy instead of a mess.

Field note — scheduling a body around the agents

The pace left marks on the days. I did development on the kitchen counter while the family slept. A graduate student once walked across a corporate-retreat dining room to complete a two-factor prompt for me. During a campus network outage I sprinted between two buildings so the agents would not stall waiting on me. The point of keeping these is not the drama; it is that a fleet running this hot needs machinery that holds the line when its operator plainly cannot.

The six stages read like a plan. They were not one. Each stage is a line drawn afterward through a run of dated, ordinary moments — a breakfast, a keynote walked out of, a hospital waiting room, a purchased fourth subscription at midnight on a holiday weekend. Set the clean account against the lived one and the stages stop reading as strategy. They are what they were: the shape you can only see once the mess is behind you. Figure 5.2-2 plots the real days behind the clean stages.

The messy timeline behind the clean stages A vertical dated timeline of nine real moments from the 20-week build, each a cream card threaded on a gold vertical line with a dot at its date. The moments are: April 6, cooking breakfast while the family sleeps as the code flies; a Spring Break kickoff when no undergraduate replies and the architect supervises agents instead; April 15, leaving a conference keynote because the room’s wifi cannot reach the model; April 30, a clean full-context handoff celebrated in the lab chat; May 5, a graduate student crossing a retreat dining room to complete a two-factor prompt for a saturated account; May 13, waking to funding emails because the overnight green-build run cost real money; May 19, the orchestration running two hours unattended while the architect skips a vacation; May 21, working from a hospital waiting room where the network permits the tool; and May 28, sprinting between two buildings during a campus outage so the agents never notice it stopped. The clean six-stage development narrative maps onto these lived moments. The messy timeline what the clean stages were made of Monday, April 6 I am cooking breakfast while the family sleeps. The model joins me on the countertop. The vegetables fry and the code flies. Spring Break · the kickoff I offer a one-week project to twenty of our best students. Not one replies. They planned to have fun. So I supervise agents instead. Wednesday, April 15 A keynote on the future of software in the age of AI. The room’s routers are overwhelmed. The model cannot hear me. We should do this, not discuss it. We leave. Thursday, April 30 I hit full context with a clean quiesce and a handoff document. I post a screenshot in the lab chat. My students cheer the performance. Tuesday, May 5 Two accounts are saturated. The third needs a two-factor code. Its owner is at a retreat, not watching the chat. My graduate is at the next table. She walks over and taps him in. Wednesday, May 13 I wake to ten emails. Each auto-funds the account five dollars. Ah yes: I asked for a green build overnight. The build costs real money. Tuesday, May 19 The orchestration now makes progress for two hours in my absence. I set the alarm for 4 AM. I was to be on vacation in Costa Rica. This is better. Thursday, May 21 A family member’s seventh ER trip in two weeks. The hospital network blocks one assistant, but not the other. So the work continues from the waiting room. Thursday, May 28 A campus outage. I dash between two buildings, laptop in one hand, and steal a look at the screen: no errors. The crew never noticed. The work continues.
Figure 5.2-2. The Messy Timeline. Nine dated moments from the 20-week build — the clean stages redrawn through the days they were actually made in.

5.2.4 The support ratio: build the environment first

The apparatus outgrowing the product is not a one-time fact; it is a curve. Measure the support apparatus against the production code at four dated commits and the revealed preference of the whole build falls out in one line. Figure 5.2-3 plots it.

The support-ratio curve across four windows A line chart of the support ratio — support-apparatus lines of code divided by production lines of code — at four dated windows of the build. It starts below parity at 0.85 in the prototype, rises past production to 2.48 at mechanization, peaks at 3.68 during hardening, then eases to 3.06 now as feature work resumes on the built environment. A dashed reference line marks parity at 1.0; the support line sits above it for every window after the prototype. The shape is a revealed preference: governance investment led and kept pace with the fleet, crossing sub-parity to roughly three times the size of the product while production itself grew about forty-seven-fold. parity — support = product 0.85× 2.48× 3.68× 3.06× prototype Apr 9 mechanization May 31 hardening Jun 30 now Aug 3 support-apparatus LoC ÷ production LoC · coverage gap 0 at every window
Figure 5.2-3. The Support Ratio. Support-apparatus lines divided by production lines, across four windows: it starts below parity (0.85×), passes production at mechanization (2.48×), peaks during hardening (3.68×), then eases to 3.06×. The support line sits above parity for every mature window — governance led the fleet and kept pace.

Table 5.2-1 gives the lines behind the ratio — production and support apparatus at each of the four commits.

Table 5.2-1. The support ratio across four windows — production and support-apparatus lines of code at four dated commits, and their ratio.
WindowProduction LoCSupport LoCSupport ratio
prototype — Apr 926,95622,9080.85×
mechanization — May 31302,844751,0502.48×
hardening — Jun 30337,9051,244,1943.68×
now — Aug 3491,0901,501,9073.06×

Read the curve as a decision, not an accident. In the prototype the support apparatus was smaller than the product — 0.85×, below parity — because there was barely a product to govern. By mechanization the apparatus had crossed production and reached 2.48×, and by hardening it peaked at 3.68×: roughly three and a half times the code it guarded. The governance was built first, then the features leaned on it. That ordering is the whole argument of this book, drawn as a line. The support ratio is the Governed Engineering Environment measured against the product it governs.

The final-window dip to 3.06× is not a retreat. Support did not fall — it grew another 21% in absolute terms. Production simply grew faster, up 45%, as feature work resumed on top of the finished environment. A falling ratio here signals a stabilized foundation being spent, not an abandoned one. Across the whole span the apparatus crossed from sub-parity to about three times the product while production itself grew roughly forty-seven-fold — the machinery led the fleet and never fell behind it.

One honesty note keeps the number from overclaiming. The census fails loud over seven primary source roots, so the coverage gap is zero at every window — no file the tool was asked to count slipped past it. About a fifth of the raw tree sits outside the census by design (root configuration, assets, non-primary test corpora, this book itself), and that side-tree share is roughly flat across the mature windows, so the curve tracks a real shift in how effort was spent, not an artifact of the category map moving under it. Lines of code remain a coarse proxy for effort; the ratio is a revealed preference across one repository and one fleet, not a controlled comparison of governed against ungoverned work.

5.2.5 The shape of the churn

Under the ratio sits the raw motion of the code: lines added and lines deleted, week over week, on the two paths that carry the product — web/, the Python service and worker, and backend/, the C# tool and rule engine. The preface named churn as the wall a fleet hits. Trace it per path across the four windows and the wall has a clear silhouette. Figure 5.2-4 draws it; Table 5.2-2 gives the counts.

Path churn across four windows — web/ and backend/ A diverging bar chart of git churn on two code paths across the four study windows. For each window, additions rise above a zero baseline and deletions fall below it, drawn as one bar per path: web/, the Python web service and worker, in blue, and backend/, the C# command-line tool and rule engine, in red. Mechanization is the add-and-delete peak for both paths — backend/ alone adds 941,120 lines and deletes 286,378 in that window. After mechanization the deletions collapse: backend/ falls to just 3,767 deleted lines at hardening, and both paths go net-additive in the later windows as the built environment stabilizes the code. Absolute counts include generated and vendored files, so this is a churn signal, not a count of hand-authored source. 250K 500K 750K 0 100K 200K 300K lines added ↑ lines deleted ↓ backend/ +941,120 / −286,378 prototype mechanization hardening loop-mgmt bars rise with additions, fall with deletions web/ (Python service + worker) backend/ (C# CLI + rule engine)
Figure 5.2-4. Path churn across four windows — additions rise above the baseline, deletions fall below it, one bar per path. Mechanization is the add-and-delete peak; after it deletions collapse (backend/ from 286,378 to 3,767) and later windows go net-additive as the environment stabilizes the code.
Table 5.2-2. Per-path churn across the four study windows — additions and deletions on web/ and backend/, from git numstat over the commit-date windows.
Windowweb/ addedweb/ deletedbackend/ addedbackend/ deleted
prototype22,5397,71748,63610,166
mechanization371,855161,044941,120286,378
hardening179,64933,983109,1883,767
loop-mgmt96,82514,332116,3139,708

The peak is unmistakable. Mechanization — the wave where the agent fleet learned to build the environment — is where both paths churn hardest, the bulk of every addition and nearly every deletion. backend/ alone rewrote itself in that window: 941,120 lines added against 286,378 deleted, a system being torn down and rebuilt as fast as it was written. That motion is the danger the rest of the book governs. Ungoverned, it is exactly the churn the preface warned of — effort spent undoing and reconciling instead of advancing.

Then the deletions collapse. backend/ falls from 286,378 deleted lines at mechanization to 3,767 at hardening, and both paths turn net-additive: far more added than removed, window after window. The code stops thrashing. That turn is the built environment paying off — once the apparatus holds the line, changes accrete onto a stable base instead of churning it. The shape of the deletion curve is the churn wall being pushed back.

One caveat keeps the numbers honest, and a measurement now bounds it. These counts come from git's own line accounting, which sees every tracked file, so generated bundles and vendored trees ride along with hand-authored source. Partitioning each changed line by path shows how much that inflates the totals. On backend/ the answer is none: zero generated lines, so its additions are all real C# and configuration. On web/ it is 14.6% of added lines, and almost all of that falls in the mechanization window (24.5% there), when the TypeScript-to-JavaScript build output and wire-contract codegen were still tracked; once the compiled output was git-ignored the generated share dropped to 1-2%. Across both paths combined the generated share is 5.2%, because backend/ dominates the total and carries none of it. So read the bars as a churn signal, not a hand-authored source count — but the inflation is bounded and time-localized, concentrated in one window on one path, and the curve is predominantly real source everywhere else.

The deploy saga: the surprises the tests could not see

For a stretch of the build, nearly every unwelcome surprise came from deployment, and they shared a shape. The unit tests stayed green. The lints passed. The thing that broke was never a statement in a file; it was a behavior of the running system — a cold start that took a hundred times its warm latency, a gate budget sized for a regime that no longer held, two services contending for a core, a dependency graph that woke in the wrong order. The metrics chapter tells the cold-start half of this as a measurement story, and the numbers live there. The point here is different, and it is methodological: none of these lived in the statics. They lived in the dynamics, and no amount of green on the unit suite could have found them, because each coupling ran across layers the unit suite never spans at once — the code, the lints that guard it, the tests that exercise it, the infrastructure-as-code that places it, and the deploy pipeline that sequences it. A property that emerges only when those five layers run together is invisible to any check that reads one of them alone.

That is the case for testing the dynamics, not only the statics — and for the harder move underneath it. A one-off fix to a cold start or a gate budget clears today's surprise and leaves the next one to be discovered the same expensive way, on the next real deploy. The durable answer is to turn each discovered dynamic into a mechanism that watches it: a measured cold-start number fed to a model that recomputes the worst-case path, a budget derived rather than guessed, an ordering asserted rather than assumed. Do that and the class stops recurring silently. A finite review of a diff never had a chance against these — the coupling is not on the diff. Only a mechanism that watches the whole running dynamic holds the line as the fleet's deploys speed up, which is the mechanized-assurance claim read on the one surface where human attention is least able to help.

5.2.6 The kinds of work it required

Read this timeline as a catalog of the kinds of work agentic development turned out to need — a more useful reading than any feature list. The code was cheap. Everything around the code was where the judgment went, and the same handful of activities recurred at every stage:

Learn more about this governance mechanism: content-preservation checks.

Learn more about this governance mechanism: pre-commit gate.

Learn more about this governance mechanism: agent registry.

Read as a list, those are the chapters of this book. Every one of them answers a failure this timeline produced, and the recurring move that produced them all is the same: velocity surfaces a failure; judgment classifies it as local or structural; the structural ones get converted into a durable mechanism that narrows the next agent's room to fail. That move, applied over and over, is what the rest of this book laid out, told slowly enough that you can do it too.

By the end of the study period the system could process Office and PDF files to pass or substantially improve their accessibility scores — a graduate slide deck in about a minute, for about a dollar — and it was patent-pending and being readied for institutional deployment as DocAble. The direct development cost was about sixty thousand dollars, most of it my salary, with a few thousand each in model inference, cloud hosting, and subscriptions. That is the arc. How it was governed is the story the rest of this book has already told.

© James C. Davis, 2026–present