Deferred Scope Is a Feature, Not a Bug
Shipping with deferred features isn't a sign of scope failure. Shipping without a rationale for the defer — that's the failure. Here's the format that keeps deferrals honest.
The short version
Deferred work splits into two kinds: honest debt (logged rationale, severity, trigger, owner) and mystery debt (silent, unmapped). Honest debt resolves in a day when a trigger fires. Mystery debt resolves in a week of re-litigation. The Vivre Card format forces six fields per entry; if any field is empty, the defer isn't ready. Append-only, never edit — because history is context.
Shipping with features deferred is not a sign of scope failure. Shipping without a rationale for the defer — that is the failure.
A lot of people treat “deferring scope” as an admission of failure. Bad planning, missed estimates, undisciplined team. I see it the opposite way: deferring consciously is a sign of maturity. The problem isn’t in the defer. The problem is in deferring without documentation. That’s what turns a roadmap into a broken promise.
Two kinds of deferred work
Honest debt — logged. There’s a rationale, a timing, a severity, the alternatives already considered, an owner, a deadline. Six months later, anyone can open the decision log, read one entry, and know exactly why the feature isn’t there and when it should be.
Mystery debt — silently deferred. Six months later someone asks “why don’t we ship X?” — no one remembers. A new developer assumes it’s a bug, opens a PR to “fix” something that was actually an intentional trade-off. Duplicate effort. Worse: an old decision gets reversed without anyone understanding why it was made.
Mystery debt costs more than the unshipped scope itself. Because mystery debt rots inside the repo.
The Vivre Card format
In Stella Protocol — my AI-PM methodology — all deferred work goes to brain/vivre-cards.md. Vivre Cards are my name for the append-only decision log. One fixed format. Example from House of Riddle:
## 2026-04-15 — Defer rate limiting to post-launch
Phase: REVIEW (Buster Call)
Severity: MEDIUM (HIGH if traffic >1K DAU)
Decision: Ship v1.0 without rate limiting on auth endpoints
Rationale: Launch traffic expected <100 DAU organic. Rate limit
implementation ~2 days (Supabase Edge Function + Redis).
Fix within 2 weeks post-launch if a sign-up spike or bruteforce
attempt appears in Supabase logs.
Alternatives considered:
- Cloudflare rate limit (rejected: $ tier + latency overhead
for <100 users)
- In-process Node rate limiter (rejected: doesn't survive
Vercel cold start)
Owner: [self]
Deadline: 2026-05-01
Six fields. Seven with the deadline. The format is boring on purpose — skimmable, greppable, parseable into a backlog without interpretation.
Compare two scenarios
Same situation: two weeks after launch, Supabase logs show 500 failed login attempts from a single IP. How fast can it be resolved?
Scenario A (honest debt). The developer opens brain/vivre-cards.md. Greps “rate limit.” Finds the entry above. Immediately knows: rate limiting was deliberately deferred, the anticipation was there, the HIGH severity threshold has now been crossed (attack traffic, not organic), the alternatives were already explored. Straight to P0. Spin up a Supabase Edge Function, per-IP throttle, deploy. Done in 1 day. The timeline is clear because the decision tree was mapped two weeks earlier.
Scenario B (mystery debt). Same logs, no Vivre Card. The developer spends 3 days: investigating why rate limiting was missing (intentional? missed? technical blocker?), researching 4 different approaches, debating with themselves (or a stakeholder) which one fits best, trying Cloudflare first (which eventually gets rejected — already thought through 2 weeks ago, but unrecorded). Same fix. 5× the time. Lower decision quality because the time was rushed, not reasoned.
The cost difference is linear with team size and age of the project. In a solo 6-month project, mystery debt is still manageable. In a 5-person, 2-year team, mystery debt becomes a source of technical paralysis.
Real examples from 3 projects
Stoka — receipt OCR deferred to P1. Reason: bundle-size cost (Tesseract.js ~2MB) + AHA analysis showed the activation metric (tracks ≥5 items + views ≥1 recipe in 7 days) could be hit without OCR. Manual entry was enough for the demo and B2B pitch. Details in the receipt scanning post.
House of Riddle — cosmetic store deferred to P2. Reason: the monetization strategy was undecided. Building cosmetics without a pricing model means that in 2 months the pricing changes, the assets are invalid, and you refactor. Cheaper: wait for pricing clarity, then build.
Amal Najib — case studies deferred to P2 (June 2026). Reason: need real data from the assessment tool for 2–3 months first. Case studies written pre-launch = fiction with a disguise. The October 2026 regulatory deadline leaves enough room to generate case studies from real users in May–July.
The same pattern across all three: the defer wasn’t from laziness or lateness. It was because the cost of shipping now was higher than the cost of shipping later, and the trade-off was justifiable point by point.
Critical rule: Vivre Cards are append-only
One non-negotiable rule: Vivre Cards cannot be edited. Append only. If a decision changes — rate limiting now ships pre-launch instead of post — write a new entry that references the old one:
## 2026-04-18 — Revise: Ship rate limiting pre-launch
References: 2026-04-15 defer rate limiting entry
Reason for revision: Pre-launch beta leaked to Twitter, expected
DAU estimate went from 100 to 2000+. HIGH severity threshold
already triggered. Moving up to pre-launch P0.
Why is append-only important? Because history is context. If the original entry is overwritten, the first-round reasoning disappears. And the first-round reasoning is often informative for the next decision. Even “wrong” decisions (revised later) are useful — they show the revision mechanism works, and they show what changed in the environment that triggered the revision. More on this in the append-only decision log post.
When does a defer become a bug?
A defer becomes a bug when:
- There’s no severity. “Rate limit later” with no threshold — when is “later”?
- There’s no owner. Without an owner, a defer = no one’s problem.
- There’s no trigger. An entry that reads “will fix later” with no concrete condition for when “later” is = surrender disguised as a plan.
- There are no alternatives. Without a record of “X was rejected because Y,” six months later someone proposes X again and the time goes into re-debating.
The Vivre Card format above is specifically designed to force those four answers. If any one of them is empty, the entry is invalid — the item isn’t ready to be deferred, it still needs thinking.
Lesson
Deferring is a feature. Deferring without rationale is a bug. Documentation is not overhead — it is what separates a roadmap from a broken promise.
Fast-shipping projects aren’t projects that ship everything. Fast-shipping projects are projects that know exactly what they’re not shipping, why, and when they’ll revisit the decision. The rest is noise.
Key Takeaways
- The enemy is mystery debt, not deferred debt. Every project defers scope. The question is whether the defer comes with enough structure (rationale, severity, trigger, alternatives) that future-you can resolve it in a day instead of a week.
- Use the six fields as a readiness test. If you can’t fill severity, owner, rationale, alternatives, deadline, and decision — the item isn’t ready to be deferred. It still needs thinking.
- Append, never edit. The original reasoning is load-bearing even when it turns out to be wrong. Overwriting it removes the signal that tells future-you what changed in the environment to trigger the revision.
Satellite: Morgans (this post) · Pipeline: REFLECT — Vivre Cards → Morgans