The Product Is a Minority of the Work
Ask founders what their company builds and they'll name the product. The git history disagrees.
Ours covers thirty months, two repositories, some 4,500 commits and 2.6 million changed lines: from first line to tens of millions of users, and eight figures in consumer revenue alone. The core capability got 24% of all code change. The machinery around it got 1.5× that — and in the last half-year before we let AI agents in, the machinery briefly took more than half.
We don't think our ratio is unusual. It's the default physics of a scaling product, because features are chosen; machines are summoned — each by a specific event, at a roughly predictable stage. Per stage, then: what to build, what to buy, what to refuse.
The six machines and their total bill:
data table
| machine | % |
|---|---|
| Core capability | 23.9% |
| Distribution | 16.3% |
| Money | 8.7% |
| Leverage | 7.5% |
| Identity & teams | 6.7% |
| Reliability | 0.7% |
| Trust & safety | 0.2% |
Geoffrey Moore called everything that doesn't differentiate you context, and the dangerous kind mission-critical context — work that wins no customers and destroys you if it fails. That's most of this chart.
Zero to one: the machines don't exist. Keep it that way.
Our first six months — the ones that decided whether the company would exist — gave the machines 14% of code change and money zero. That was correct. Kent Beck's phase warning applies literally: "applying the approach from one phase to an idea in another phase kills ideas."1
The advice is a refusal list. A payment link, not a billing system. One language. Auth from a vendor. Logs to stdout. An admin panel, an i18n pipeline, or SSO before PMF is procrastination with dignity.
The one exception is plumbing that costs days now and quarters later:
- An idempotency key on every mutating endpoint.
- Strings in one file, even with one language.
- An append-only event log — actor, action, target, timestamp.
- A tenant model, even while every "team" is one person.
These are the sockets the machines will plug into. Three of the four cannot be retrofitted honestly.
First revenue: money and identity arrive together
The money machine reached our codebase in month five — the first month real revenue did — and never left:
- payments & billingprovider integration, checkout, billing plumbing43%
- invoices & taxreceipts and tax lines — what auditors read20%
- plans & pricingsubscriptions, renewals, price changes18%
- credit ledgerbalances, top-ups, the append-only source of truth15%
- payment webhooksat-least-once delivery, dedup, replay4%
- refunds & disputesevery edge case denominated in dollars0.5%
- Give billing an owner at the first chargeback. It's a product now, with adversaries and auditors, and its bugs are denominated in dollars.
- Start the append-only ledger with the first real dollar. Double-entry, corrections as new entries, never edits. Cheap at ten customers, archaeology at ten thousand.
- Fail closed. If the balance can't be written, don't charge and don't suspend. The card's case is the opposite: a billing system charging cards in a loop against a balance it couldn't update.
- Set the fraud dial consciously. The optimal amount of fraud is non-zero3 — zero fraud means you're turning away real customers and can't see it.
Identity arrived in month two, because accounts, teams, and API keys are how a product gets used at all:
One asymmetry decides this stage: the tenant model you cannot buy; nearly everything else you can. Consumer auth is a commodity. Enterprise SSO and SCIM are a commodity — the card's case, three engineers for three months, is the price of building what a vendor sells. Bolting teams onto a single-user schema later touches every table; that's why the fitting goes in at zero.
Going wide: distribution and trust
Distribution was a rounding error in year one. In the second half of 2025 it took 37% of all code change — more than double core's share. Nobody decided to go global; users from countries we never marketed to did.
- SEO is an engineering discipline, not a marketing task. The largest single machine part in our history: sitemaps, canonical URLs, structured data, programmatic pages — all code.
- Never gate a release on translation completeness. Tier locales into blocking and non-blocking with an SLA, or engineers will route around i18n by hardcoding English.
- Automate translation to extinction. Our pipeline now ends in a bot with its own git identity — no human touches routine strings. Mercari's LLM pipeline cut translation cost 100×6 the same way.
The moment you're visible, you're farmable:
Our smallest machine — and several parts of it exist because someone attacked us first. That's backwards; the order should be:
- Build the meter before the abuse. Layered rate limiters8, dark-launched, failing open. The version built after the bill spike gets built in a weekend, badly.
- When farming starts, raise the price of identity. The $1 card authorization became an industry standard after CI providers learned the economics: about $103,000 of farmed compute per $137 of attacker profit.
The team is the bottleneck: reliability and leverage
Somewhere in growth, the constraint stops being what you can build and becomes what you can operate:
- Watch fix-to-feat per surface. Our web surface ships nearly two fixes for every feature — that surface is infrastructure now. Staff it as infrastructure; don't exhort it to ship features.
- Argue with numbers or lose. SLOs and error budgets exist so the pager and the roadmap stop fighting on vibes.
- Stage config like code. Cloudflare's 2019 outage10 was one regex, deployed globally in seconds, through a path that skipped staging.
- Test restores, not backups. The card's case: three backup layers, all discovered broken at the same moment.
- Build the internal platform before the tenth tool. Shared auth, shared audit log, one-step deploy. Shopify runs 50,000 internal sites on one $200-a-month VM12 because building was never the bottleneck — safe distribution is.
- Self-serve the top support actions into the product. Each one deletes a class of tickets permanently.
Maturity: the machines eat the roadmap — unless you delegate them
By the second half of 2025 the machines took 53% of all code change; core fell to 15%. Nobody chose that — users, revenue, and adversaries did, one ticket at a time:
data table
| area | 2024 | 2026 |
|---|---|---|
| Distribution | 4% | 15.2% |
| Money | 2.6% | 9.3% |
| Leverage | 2.9% | 8.7% |
| Identity & teams | 2.4% | 8.1% |
| Core capability | 17.9% | 26.6% |
The standard response is a "refocus on the product" memo. That's exactly wrong: the machines are load-bearing, and billing that gets "refocused" away corrupts ledgers. The only response that works is making the machines cheap. In 2026 we found out how:
data table
| quarter | % |
|---|---|
| 2024Q1 | 0.3% |
| 2024Q2 | 1.1% |
| 2024Q3 | 2.1% |
| 2024Q4 | 2.3% |
| 2025Q1 | 4.3% |
| 2025Q2 | 2.4% |
| 2025Q3 | 4.5% |
| 2025Q4 | 3.4% |
| 2026Q1 | 26.9% |
| 2026Q2 | 16.6% |
| 2026Q3 | 36.1% |
We let AI coding agents in from March 2026 — every agent commit signs a co-author trailer, so the history keeps score:
data table
| month | % |
|---|---|
| 25-06 | 0% |
| 25-07 | 0% |
| 25-08 | 0% |
| 25-09 | 1.5% |
| 25-10 | 1.6% |
| 25-11 | 0% |
| 25-12 | 0% |
| 26-01 | 0% |
| 26-02 | 1.8% |
| 26-03 | 12.1% |
| 26-04 | 47.7% |
| 26-05 | 31% |
| 26-06 | 40.7% |
| 26-07 | 69.3% |
| 26-08 | 47.1% |
Five months from zero to 69%, in whole units of work — the median agent commit is bigger than the median human-only one. Where the agents work is the point:
data table
| area | % |
|---|---|
| Money | 75.8% |
| Core capability | 46.5% |
| Growth & SEO | 42% |
| Reliability | 40% |
| i18n | 10.8% |
The most delegated code we have is the money machine: 76% agent co-authorship against a 39% average. Machine work is patterned, specifiable, judgment-light — exactly what delegates first. i18n sits at 11% only because that work left interactive sessions entirely and became a bot: the same instinct, carried to its end. Moore's endgame for context was outsource it. The 2026 edit is standardize, instrument, delegate — in-house and auditable, which matters most in the code that moves money.
The result is the era chart above: each 2026 quarter now moves more code than all of 2024, and core's share rose while it happened — 15% in the machine-eaten half, 26% now. Not by refusing machine work; by making it cheap.
What to buy, what to build
One rule sorts every part: vendors sell what's identical at every company; nobody sells the parts that encode yours.
Three calls on this sheet need actual judgment:
- A merchant of record trades ~5% in fees for the global sales-tax problem. A good trade until finance is a team.
- Vendors see traffic; only you see usage. Buy the edge, build the meter.
- Every pane of glass is buyable. Deciding what wakes a human at 3 a.m. is not.
The stage sheet
| Stage | You'll know because | Buy | Build | Refuse |
|---|---|---|---|---|
| Zero to one | no PMF yet | payment links, hosted auth | core + the four fittings | billing systems, i18n pipelines, SSO, admin panels |
| First revenue | a refund ticket with a bank screenshot | billing engine or MoR, tax automation | the ledger, webhook dedup, a fraud dial | subscription machinery ahead of validated pricing |
| Going wide | signups you never marketed for; a bill spike | TMS + machine translation, captcha, edge WAF | the SEO surface, the translation bot, app-layer limits | hand-translation; locale-complete release gates |
| Team bottleneck | a priceable outage; Friday-afternoon SQL | errors, metrics, paging, a tool builder | SLOs, restore tests, the internal platform | unowned dashboards; hero on-call |
| Maturity | machines out-shipping core | coding agents | specs an agent can execute, an owner per machine | the "refocus on product" memo |
The product is what users see. The git history is what a company actually is: a capability surrounded by machines, arriving on a schedule you don't control. The schedule is knowable, though. Pre-plumb the fittings, meet each machine at its trigger, buy the commodity parts, build the parts that touch your money and your tenants — and make all of it cheap enough that your judgment stays where it differentiates.
References
- [1]"applying the approach from one phase to an idea in another phase kills ideas."medium.com
- [2]Twilio 2013 billing looptwilio.com
- [3]The optimal amount of fraud is non-zerobitsaboutmoney.com
- [4]Stack Overflow SSO: 3 eng × 3 monthsstackoverflow.blog
- [5]Slack: 20,000 strings to retrofitslack.engineering
- [6]Mercari's LLM pipeline cut translation cost 100×engineering.mercari.com
- [7]CI mining: $103k farmed per $137sysdig.com
- [8]Layered rate limitersstripe.com
- [9]GitLab 2017: 3 backup layers, all brokenabout.gitlab.com
- [10]Cloudflare's 2019 outageblog.cloudflare.com
- [11]Retool survey: ⅓ of eng timeretool.com
- [12]Shopify runs 50,000 internal sites on one $200-a-month VMshopify.engineering
- [13]Stripe Billingstripe.com
- [14]Paddlepaddle.com
- [15]Lemon Squeezylemonsqueezy.com
- [16]Stripe Taxstripe.com
- [17]Anrokanrok.com
- [18]Stripe Radarstripe.com
- [19]Clerkclerk.com
- [20]Auth0auth0.com
- [21]Supabase Authsupabase.com
- [22]WorkOSworkos.com
- [23]Unkeyunkey.com
- [24]Crowdincrowdin.com
- [25]Lokaliselokalise.com
- [26]DeepLdeepl.com
- [27]Ahrefsahrefs.com
- [28]Search Consolesearch.google.com
- [29]Turnstilecloudflare.com
- [30]hCaptchahcaptcha.com
- [31]Cloudflare WAF & edge limitscloudflare.com
- [32]Sentrysentry.io
- [33]Datadogdatadoghq.com
- [34]Grafanagrafana.com
- [35]PagerDutypagerduty.com
- [36]incident.ioincident.io
- [37]PostHogposthog.com
- [38]Amplitudeamplitude.com
- [39]GitHub Actionsgithub.com
- [40]Retoolretool.com
- [41]Vercelvercel.com
- [42]Cloudflarecloudflare.com