Delivery
What we put on one page before anyone writes code
ZenHorizon Engineering · 24 September 2025 · 4 min
We used to deliver 18-slide kickoffs. People nodded. Nobody opened the deck again. The project then ran on Slack folklore and a Jira epic titled “Phase 1” that meant four different things.
Now we write one page. If it does not fit, we do not understand the work yet. The page is the contract. Tickets come after, and they have to point back to a line on that page or they do not get in.
This is not a manifesto against tickets. Tickets are how you split work. They are a poor place to store the reason the work exists. When the reason lives in a ticket comment from week two, the new engineer in week eleven will invent a better reason. They always do.
The headings, in order
- Who is blocked, and what they do today. Named role, not “users”.
- The 90-day outcome. A sentence a board member would recognise. Not “launch MVP”.
- Non-goals. The gold-plated version, written down so it cannot sneak back in as a “small add”.
- First slice. The thinnest path that makes the 90-day sentence true.
- The irreversible bet. Datastore, tenancy, identity, or a vendor. One is enough. Two means we are nervous.
- Risks we can already see. Staffing, data quality, a dependency that is someone else’s roadmap.
- How we will know it worked. A number or a conversation that becomes possible.
That is it. No team photo. No values slide. No architecture diagram unless the irreversible bet needs one box to be understood.
A page that would pass
Blocked: onboarding ops, currently chasing applicants on WhatsApp after they stall on the address step. 90 days: applicants can resume on mobile, and ops can see where a case is without opening three tools. Non-goals: a new credit-decision model, a partner portal, white-label. First slice: resumable application, document upload, ops queue with two states. Bet: one Postgres, tenant per bank programme, Auth0 because two of the programmes already live there. Risk: the current address validator is a vendor with a 14-day sandbox queue. Success: completion on the address step stops being the worst bar on the funnel, and ops stop asking applicants to resend the same photo.
You can disagree with that page. That is the point. You cannot disagree with “Phase 1: platform foundation” because it does not mean anything.
Why this saves the third month
Month three is when a stakeholder says they thought mobile was in scope. Or that the admin was “implied”. Or that the AI feature was the point, and the workflow we shipped was a prelude. The one-pager is the thing you put back on the table. Not to win an argument. To restart it with the same facts.
We have killed more features with a non-goals list than with any estimation technique. Estimation is a guess. A non-goal is a decision.
The other month-three failure is quieter. The team is busy. The 90-day sentence has drifted and nobody updated the page. You are now delivering last quarter’s idea with this quarter’s anxiety. That is how you get a polished intake form for a process the business already abandoned.
What we will not put on the page
A competitive analysis. A TAM slide. A list of technologies that makes the team look modern. Those can live somewhere else if someone needs them for a board pack. They do not help a sceptical co-founder decide whether the first slice is the right one.
We also will not put names of people we have not spoken to. “Users want X” without a conversation this month is how ghost requirements get a heading. If we have not watched the work, we write “unknown — interview week one” and we mean it.
A competitor matrix is the other trap. It turns the page into a wish list of features they have and you do not. We care what your operator cannot do today. Their marketing site is not a spec.
Keep it alive
The page gets a date and an owner. When the 90-day outcome changes — and it will — we edit the page in the same meeting, not in a side chat. Drift is what happens when the document is sacred and the work is not.
We keep it in the repo, as markdown, next to the code it describes. Confluence is where pages go to be polite. A PR that changes the non-goals is a better audit trail than a meeting note nobody will find.
- If a ticket cannot point to a heading, it is a new product. Start a new page or say no.
- If two teams need two pages, you have two slices. Do not staple them.
- If the irreversible bet changes, that is an explicit decision, not a quiet merge.
If you are a founder hiring a team, ask to see this page at the end of week one. If they hand you a colour-coded roadmap instead, you are buying activity.