Systems

  • Applied AI
  • Health insurance
  • Cigna
  • operating
  • Principal engineer — solo build, then handoff
  • 2 weeks to prototype, 6 weeks to prod
  • 2025
  • React, Node.js, TypeScript, SQLite, Amazon ECS, Cursor, Vercel AI SDK, LiteLLM, Playwright
  • 8 min read

The prototype is what got the team staffed, not two years of design review.

What was on fire

There was no outage and no product. An architecture decision review board — a team submits a decision, the architecture team rules on whether it fits enterprise architecture — had been in design for about two years and never built. The process it was meant to replace lived in Confluence: wiki pages an admin edited, process text a submitter read and interpreted.

There was real work behind the stall. A designer had gone through every screen with the team, and inside Figma the result was genuinely good — each workflow with its steps, the options at each step, the branching, every iteration visible. What they didn’t have was an engineer who would sit down and take all that and build a site. The group on it was mostly not hands-on keyboard, and starting a project the official way means a lot of paperwork. So they were stuck in analysis paralysis.

Constraint set

Two weeks, set by my sponsor, and the point of the exercise was the AI tooling. The stack wasn’t mine to pick — I asked the team what they cared about before writing anything, because I wasn’t going to maintain it. A dev AWS account: real infrastructure, not production.

Production was out of reach inside that window: the path to prod there takes six weeks at minimum. SSO stayed out, since Okta groups meant red tape I didn’t want to spend the two weeks on. Keys for the production model gateway were the enterprise AI team’s to issue, not mine. And it was me alone at the keyboard the whole time.

System diagram

wall clock, to scale demo · team staffed two years designed, not built about a year running in prod two weeks solo prototype six weeks path to prod
Fig. 01 — Drawn to scale in weeks: the prototype is the sliver, and the demo at the end of it is what got the team staffed.

Fig. 01 · pinch or scroll to zoom · drag to pan

Architecture decisions

  1. Ask the team for the stack before writing a line. They wanted Node.js behind React, and Postgres eventually. I built exactly that. Rejected: anything I’d have picked for myself. My mantra is to get a team up and going, get them over the hump, train them on everything I did, and walk away — and a handoff only holds if the thing is native to them.
  2. SQLite behind a swappable data layer, not Postgres on day one. Postgres was available. The size and volume of requests didn’t call for it, and backups are one file copy. The layer was database-agnostic, so pointing it at their Postgres later was a configuration change. Schema versioning was homegrown — SQL scripts, a version check as the app starts, run whatever’s missing. Enterprise tools do this at scale; light and simple was the right size here.
  3. Decompose the design myself and let the model fill the leaves. Whole pages didn’t work — the model wasn’t strong enough to hold one. So: a screenshot of one component, build me a React component that looks like this, repeated for every major component on the site, then a workflow’s steps as screenshots, one workflow at a time, with a standing instruction to ask me any question it didn’t have an answer to. It rebuilt components it already had unless told not to, so “reuse any previously built components” went into every prompt. The agent wrote unit tests and drove Playwright against the UI as it went. The design-to-code tools of that period — Figma Dev Mode, v0, Builder.io, Anima, Locofy — were not part of this build. The standing independent complaint about that class is cleanup, imperfect component reuse included — the hurdle on this side too.
  4. engraving of a wooden automaton with its side panel open on an exposed clockwork gear train, its jointed mechanical hand holding a quill over an open ledger page beside an inkwell
    Let the assistant drive the UI, not the API. My sponsor asked for an assistant inside the platform, generic enough that it wouldn’t be rebuilt every time the site changed. Running inside React, it could interrogate the page — the text, the buttons, the capabilities, the errors — and send that along with the user’s request and their position in the flow. The model answered with formatted JSON: a list of actions. The client clicked and filled, then sent back what changed, new errors and new buttons, and the loop went again. It fits a domain where the workflows branch on your answers: a hundred users takes a different path than ten thousand, and clicking through screens you don’t know is tedious. The alternative — an agent calling the backend API and skipping the screens — was never weighed against it. This was the ask, and the point was to show the art of the possible.
  5. Make it work first, then pay the debt — before the handoff. The model left a mix of TypeScript and plain JavaScript, and naming conventions that didn’t match, which was frustrating. It took many passes to make the codebase uniform: everything on TypeScript, test cases organized, the whole thing reading as one piece of work. I don’t think it’s smart or safe to say we should build with AI and have it perfect on the first shot. It’s iterative, the same as building by hand. The refactor pass paid twice — it forced the agent to look at the same code through a different lens, and it saw things it hadn’t seen while building.

Not again: don’t hand a team a codebase the model left half TypeScript and half JavaScript — pay the debt while you still own it.

Recovery / operate path

Most of the site was clicking through inside the first week: roughly two dozen components, seven or eight workflows with their branches. I worked through the weekend, just because I was excited about the project. Week two went to two things asked for on top of the Figma. The assistant was one. The other was admin-editable text — a slug for every place text appears, stored in the database and rendered on load, editable in place by an admin. That one was the smaller build and the easier sell, because it matched the Confluence process it was replacing, where an admin edited the page and everyone downstream read the new words.

The demo ran to about fifteen people: my boss, his boss, the architecture team, the design team that had been working on it — and very few engineers among them. The assistant clicking buttons and filling fields live is what landed.

After the demo they staffed the team. Engineers were put on it, the infrastructure got done, and they took it through the six-week path to production themselves. It has been running about a year. No support request has reached me, and no usage figure is published.

Week 1 Week 2 Weeks 3–8 (the team)
Who Me, solo (through the weekend) Me, solo Engineers, staffed after the demo
Built ~2 dozen components, 7–8 branching workflows The in-app assistant; admin-editable text, per-slug Postgres swap; Okta against hooks I’d left in; production gateway keys; workflows of their own
Milestone Site clicking through end to end Demo to about 15 people Shipped to prod; running about a year, no support request

The assistant survived the move to production. In the prototype it could press Submit on a decision, and I don’t know whether the team kept that or limited it. Today I wouldn’t leave Submit to the agent — making it unable to press Submit is one line of code. The prototype showed the ceiling. Where the line actually sits belongs to whoever owns the thing.

One project is not a measurement. I have no before-and-after on developer throughput here and I’m not claiming a multiplier — what I stand behind is the wall clock: two years, then two weeks, then six.

What changed after

Nothing got copy-pasted out of it. What carried was the shape: an engineer with AI tooling can take a stalled project to something real without a funded team standing up around it first. In that organization, getting anything done meant a fully funded team — product owner, developers, stakeholders, the whole set of ceremonies. To get something out the door, what you really need is one person with the will and some AI tooling to push it forward. Then the funded team owns it: two weeks produced the staffing that two years of design review hadn’t.

The admin-edit feature is the piece the team says it likes. Non-developers change the wording without a development cycle, which is what the wiki used to give them and the new platform would otherwise have taken away.

Anonymization notes

The board ships by name — ADRB, the architecture decision review board — cleared for print, and so does the client. My sponsor and the enterprise AI team that runs the model gateway appear as roles, not names. No team names, no org chart, no ticket IDs. Head count in the demo room is rounded, and there is no usage figure because I never had one. The model’s minor version is deliberately absent: my recollection is Sonnet 3.5, and a check of what Cursor’s picker actually offered in Q2 2025 doesn’t settle it, so this entry names the family and not the point release. Stack footnote: React, Node.js, TypeScript, SQLite behind a swappable data layer, Amazon ECS, Cursor driving a Claude Sonnet model, the Vercel AI SDK against an internal LiteLLM gateway, Playwright.

Who this is for

  • A project that has been designed for a year or more and never built, where the missing piece is an engineer, not another review.
  • A team that will own what you hand over — so it gets built on their stack, in their patterns, and swaps to their database by configuration.
  • Leadership that wants to see what current AI tooling does inside their own product, rather than in a vendor’s demo.
  • An internal process living in a wiki, where admins edit the page and everyone else reads it.

Related writing

Related field notes

More systems

Start

Tell me what’s stuck

I’ll tell you in about a day whether I’m the right person. The first conversation is fit, not a free architecture review.