What a Project Owes
Most portfolio tracking fails because nothing says which projects owe which artifacts. A closed vocabulary of seven stages fixes that, and forcing objectives onto everything is worse than having none.
I had thirteen jobs-to-be-done documents across eleven projects, under eight different filenames, ranging from six kilobytes to sixty-one. One set of objectives. One status board. And twelve different values in use for a field called status.
The gap was not the artifacts. Every kind of document I wanted already existed somewhere, several times over.
The gap was that nothing said which projects owe which artifacts. “Be stricter” needs something to bite on, and there was no rule to violate.
The spine
Every level answers a different question, lives in exactly one document, and has exactly one writer.
| Level | The question | Changes |
|---|---|---|
| Job | Why would anyone want this? | Rarely |
| Objective | What am I betting this cycle? | At adoption and grading only |
| Key result | What would prove it? | Same |
| Status row | Where is it right now? | Daily |
| Action | What does someone do on Monday? | Continuously |
Two rules make that chain load-bearing rather than decorative:
- Every key result names a measurement instrument that already exists, or shipping that instrument is the first key result. A key result with no instrument is a wish.
- Every action on a board is a tracked work item. Prose recommendations evaporate.
And one rule ties the top to the bottom: every objective names the job it serves. A job with no objective is a job you are not working, which is fine and worth being able to see. An objective with no job is a treadmill.
The stages
Stage decides what a project owes. Seven values, closed vocabulary, one per project.
| Stage | The live question | What it owes | Objectives? |
|---|---|---|---|
| bet | Should this exist at all? | A pitch, a thin job description, one falsifiable claim, a decide-by date | No |
| build | Will it ship, and will anyone use it? | A scope doc, a ship date, a job description | Optional |
| live | Is it working for real people? | Job, objectives, telemetry, a status board | Yes |
| steady | Is it still up and still used? | One health line | No |
| episodic | Did the last run go well? | A retro per run | No |
| parked | When do I look again? | A revisit date and the reason | No |
| archived | Nothing | Nothing | No |
Why not just give everything objectives
Because it produces fake rigor, which is worse than no rigor, since fake rigor grades green.
Objectives on unbuilt software measure whether you wrote code. A pitch that has never met a user cannot have a key result. It has a claim, and a date by which that claim gets tested. Forcing the objective grammar onto it dresses up an opinion as a measurement.
Objectives on a two-person household tool are absurd. I run a wine cellar app with two users, both of whom live here. It works. The honest question is “is it up,” not “did adoption grow 40%.”
And a board nobody reads is worse than no board. My one good status board runs to seven thousand words and is rewritten in full every day by a single automated step. Eight of those is not a daily ritual, it is a job, and the predictable outcome is eight stale boards instead of one live one. So: boards only for projects that have adopted objectives, and a hard size cap on each, which forces compression instead of accretion.
The contract that makes it queryable
Machine-readable, on each project’s existing index file. No new store, no new database.
stage: live
telemetry: posthog/436969
jtbd: jtbd.md
okrs: cycles/cycle-1.md
board: rag-board.md
review-by: 2026-09-13
That contract is the integrity check. Once it is on every project, these stop being a reading exercise and become one query each:
- Which live projects have no objectives?
- Which projects are past their review date with no grade?
- Which bets are past their decide-by date with no decision written?
- Which boards are older than the last time the daily sweep ran?
The rule I added later, at some cost
A stage tells you what a project owes. It does not tell you whether the project should exist.
So one more gate sits in front of all of it: nothing enters the portfolio without naming its audience, its channel, who pays the time cost of that channel, and whether demand is being intercepted, borrowed, or owned. A product whose only plan is an audience it does not have yet does not get built.
I added that after noticing that six of the previous ninety days’ distribution attempts were exactly that shape, and all six produced approximately nothing.
Get updates
Occasional notes on what's happening at Enginery. No spam, no marketing.