Rewriting the billing system instead of patching it for another year
The estimate was five months. It took nine. Whether that counts as a failure depends entirely on what the patching path would have cost, and that number is unknowable.
The decision timeline
Three moments, kept separate. What became known later sits in its own column so it cannot be read back into the reasoning.
Known at the time
- Four production incidents in twelve months, each requiring manual invoice correction
- No specification; no owner for two years
- Seven distinct contract structures found in a production data audit
- A committed September launch for usage-based pricing
- Two independent estimates rating the patch path as harder
Decided, and why
- Rewrite, because the committed pricing model could not be built on the existing system
- Recover behaviour from production data rather than code, because the code described intent and the data described reality
- Six-week parallel run, because billing correctness tolerance was near zero
Known later
- Nine months, not five — an 80% overrun on the estimate
Members see the full outcome.
Trust and provenance
What we checked, and what we did not.
The decision context
| Problem | A billing system written over six years by eleven people, with no owner for the last two. Four production incidents in a year, each requiring manual invoice correction. A new usage-based pricing model was committed for the following year and could not be built on it. |
|---|---|
| Deadline | The usage-based pricing launch was committed to the market for September. |
| Stakes | High |
| Decision-maker | Head of Engineering, with CFO consulted on the revenue-recognition implications. |
Constraints
| Budget | No additional headcount. The rewrite had to come out of the existing team's capacity. |
|---|---|
| Time | Ten months to the committed September launch. |
| Information | No complete specification existed. Behaviour had to be recovered from the code and from production data. |
| Authority | Could choose the technical approach; could not move the September date. |
| External | Revenue recognition is audited. Any migration had to produce reconcilable records across the cutover. |
Alternatives
Options considered, and the stated reason each rejected option was rejected.
Evidence, reasoning and outcome
The remaining six field groups — evidence, reasoning, action, outcome, reflection and transferability — are available to members.
- Four incident post-mortems from the previous twelve months
- Two independent engineering estimates of the patch path
- Can support usage-based pricing by September
Read the rest of this case
Membership opens the full library: the evidence available at the time, the decision criteria, the measured outcome and what the creator would do differently.
Prices and terms are shown in full before you pay. Cancel any time.
Rights and licensing
Published terms for this case.
| Consent | Creator confirms permission to publish anonymously with employer redacted. |
|---|---|
| Licence | Non-exclusive, perpetual licence to publish and monetise. |
| Anonymisation | Creator, employer, vendors and all customers withheld. |
| Compensation | Eligible for the creator revenue pool under the published allocation rule. |
Think something here is wrong? Request a correction or takedown.
Related decisions
Matched on decision type, industry, stakes and shared tags.
One senior engineer or two juniors on the same budget
A Series B team with one open requisition and a delivery commitment eight months out. The decision turned on who would do the mentoring, and that question had no good answer.
We took a down round instead of an acquisition offer. Eighteen months later the company closed.
An offer on the table at roughly half the last valuation, against a bridge at a 60% markdown. The reasoning was documented at the time. It did not survive contact with the following year.
We killed a feature after six months of build. The reasoning held; the timing did not.
Adoption sat at 4% of target after two quarters. Four options on the table, three rejected. The decision to discontinue was defensible on the evidence available — the error was waiting two months longer than the criteria required.