# Pre-Mortem Analysis: Tallyhub New Invoice Engine
**Launch:** Monday, Nov 9 | **Migration:** Sunday night, Nov 8 | **Assumed today:** ~Oct 26 (dates below assume this)
**Failure story:** It's Nov 10. The migration was still running when the 9:00 am email went out. Customers saw missing or wrong invoice history, support was swamped with no playbook, and we couldn't roll back. Customers lost trust in the numbers in their accounting system.
---
## Tigers (Real Risks)
### 1. The migration math doesn't fit the window (Launch-Blocking)
- The dry run migrated 2,400 accounts in 3 hours. At that rate, 48,000 accounts (20x) takes about **60 hours**, not an overnight window.
- Parallelization might fix this, but nobody has shown it. The dry run also may not reflect production: load, concurrency, and large accounts could all change throughput.
- 5% is a small sample. If it was random, it likely under-represents the largest accounts with the longest invoice histories, which are the slowest and riskiest.
### 2. Rollback plan is "TBD" (Launch-Blocking)
- A one-way migration of financial records for every customer with no tested way back is the biggest risk in this plan.
- "No errors" in the dry run shows the process didn't crash. It doesn't show the data is correct (totals, tax, currency, invoice numbering, statuses).
- Without a rollback, any problem discovered Monday morning becomes a live incident affecting all 48,000 accounts.
Show the rest (58 more lines)
### 3. Big-bang cutover with no go/no-go gate (Launch-Blocking)
- Migrating everyone at once means any defect hits 100% of customers. There's no staged exposure and no decision point between "migration finished" and "email sent."
- The email is scheduled for a fixed time (9:00 am Nov 9) regardless of migration status or validation results.
### 4. Support readiness is too thin and too late (Launch-Blocking)
- The briefing is Nov 6, before the migration has happened, so support is briefed on a hypothetical. Only one business day separates it from launch.
- There's no mention of an escalation path, known-issues doc, weekend/Monday staffing, or a status page template.
- If migration problems occur, support is the first place customers hit them.
### 5. No post-migration data validation (Launch-Blocking)
- Nothing in the plan describes reconciliation: invoice counts, totals, and balances per account, old vs. new.
- For accounting software, silent data errors do far more damage than visible failures.
### 6. Live activity during the migration window (Fast-Follow, escalate to Launch-Blocking if unanswered)
- What happens to invoices created, edited, or paid while migration runs? Are accounts frozen, and is that communicated? A delta/catch-up pass is needed or data will be lost or duplicated.
---
## Paper Tigers (Overblown Concerns)
### Ledgerfox announcing a similar feature
- Sales' worry is understandable, but a competitor announcement doesn't change whether our launch succeeds. Customers on Tallyhub aren't switching over a feature announcement within weeks, especially with migration friction on their side.
- Delaying launch to "beat" them would cost more than it saves. A broken launch hands Ledgerfox a better story than a feature announcement would.
- Worth a light response: a one-page competitive talking-point sheet for Sales. No more investment than that.
---
## Elephants (Unspoken Worries)
| Elephant | Why it matters | How to investigate |
|---|---|---|
| **Is the dry-run environment representative?** | Same hardware, load, and data shape as production? | Ask Eng for the environment spec and account-size distribution of the 2,400 sample vs. all 48,000 |
| **Email timing vs. time zones** | 9:00 am in which zone? Customers in earlier zones get it before or during any cleanup | Confirm send time; consider staggering or gating on a health check |
| **Compliance / audit trail** | Invoice history is a legal and tax record. Does the migration preserve numbering, timestamps, and audit logs? | Finance and Legal review of data-mapping rules |
| **Integrations** | Do connected tools (payment processors, bank feeds, exports, API users) depend on old invoice formats or IDs? | Inventory integrations and test the top ones against migrated data |
| **Old engine fate** | Is it turned off at cutover? If so, rollback is even harder | Decide and document whether old engine stays read-only for N days |
| **Team fatigue / weekend coverage** | Who is actually on call Sunday night and Monday, and have they done this before? | Name the on-call roster and decision-maker |
| **What does "success" mean?** | No adoption or health metrics are defined | Define 3-4 launch metrics and thresholds that trigger action |
---
## Action Plans for Launch-Blocking Tigers
| # | Risk | Mitigation | Owner | Due |
|---|---|---|---|---|
| 1 | Migration doesn't fit window | Run a full-scale (or 25%+) rehearsal on production-like infrastructure with a representative sample including the largest accounts. Produce a measured throughput figure and a time estimate with buffer. If it doesn't fit in the window, switch to **phased migration** (e.g., pre-migrate in the days before and sync deltas Sunday). | Engineering lead | Rehearsal complete **Oct 30**; decision **Nov 2** |
| 2 | No rollback plan | Write, build, and **test** a rollback: snapshot/backup of pre-migration data, a documented restore procedure, a time estimate, and a defined trigger ("if X by Y time, we roll back"). Keep old engine available read-only for at least 7 days. | Engineering + Infra/DBA | Plan **Oct 30**; tested in rehearsal by **Nov 4** |
| 3 | Big-bang cutover, no gate | Define a go/no-go checklist (migration complete, validation passed, rollback ready, support ready) with a named decision-maker. Make the email **conditional**: scheduled but held until the gate passes. Consider a phased customer rollout (e.g., 10% → 50% → 100% over the first days). | Product manager (decision owner) with Eng | Checklist **Nov 2**; go/no-go meeting **Sun Nov 8 evening** and **Mon Nov 9, 7:30 am** |
| 4 | Support unprepared | Move the briefing earlier (by ~Nov 4) and follow with a short update after the migration. Deliver FAQ, known-issues doc, escalation path to Eng, canned responses, status-page template, and Monday surge staffing. | Support lead + Product | Materials **Nov 3**; briefing **Nov 4**; refresher **Nov 9, 8:00 am** |
| 5 | No data validation | Build automated reconciliation (invoice counts, totals, balances, tax, numbering per account) and run it on the rehearsal and again post-migration. Define an acceptable discrepancy threshold (ideally zero for financial totals). Manually spot-check a sample of large and unusual accounts. | Engineering + Finance/QA | Tooling **Nov 2**; run on rehearsal **Nov 4** |
| 6 | Activity during migration | Decide: freeze edits during the window, or run a delta sync. Communicate it to customers in advance. | Product + Engineering | Decision **Oct 30**; customer notice **Nov 4–5** |
---
## Bottom Line
The plan is **not ready to launch as written**. The two things that most need attention this week are the throughput math (60 hours vs. an overnight window) and the missing rollback. If either can't be resolved by **Nov 2**, the right move is to phase the migration or slip the launch date. Revisit this pre-mortem around **Nov 2** to verify mitigations are on track.
**Note:** I can't write files in this conversation, so I haven't saved this. To save it, copy it into `PreMortem-Tallyhub-Invoice-Engine-2026-10-26.md`. If you share details like infrastructure, parallelism, or the account-size distribution, I can tighten the timeline estimate.