Inspiration

Teams are brilliant at defending their ideas and terrible at attacking them. We've all sat in the review where everyone nods, the thing ships, and three months later the fatal flaw — the one someone could have named on day one — finally surfaces. By then it's expensive.

The pre-mortem is the antidote, and it's backed by real research: Gary Klein's work on prospective hindsight showed that imagining an outcome has already happened boosts our ability to correctly identify the reasons for it by 30%. Every great product team praises the technique — but nobody has a tool for it. It lives in half-remembered Miro boards and abandoned docs.

For World Product Day's theme, Everyone Ships Now, that gap felt perfect. The best way to help people ship is to help them ship the right thing. So we built the tool the pre-mortem always deserved: fast, scored, shareable, and usable by a total stranger in ten minutes.

What it does

Premortem turns a fuzzy idea into a scored, shareable risk plan through one guided flow:

  1. Frame the bet — name the thing, who it's for, and the single belief it rests on.
  2. Imagine the failure — write the post-mortem headline from six months in the future, putting you in the pessimist's seat.
  3. Surface the risks — across the four classic product lenses (Desirability, Usability, Feasibility, Viability), with an offline suggestion engine that recommends the failure modes most relevant to your product — no API key, instant.
  4. Map & prioritise — an interactive likelihood × impact matrix surfaces your single riskiest assumption.
  5. Plan to de-risk — a built-in experiment toolbox (fake door, Wizard of Oz, concierge, smoke test, willingness-to-pay…) recommends the lightest test for each risk.

It ends in a Report with an exposure score (how dangerous the unmitigated bet is) and a readiness score (how much of that danger you actually have a plan to test) — plus a shareable link, copy-to-Markdown, and print-to-PDF.

And it's built to be genuinely shippable: zero backend, no account, share by link, autosave, accessible, responsive, and print-ready.

How we built it

  • React 18 + TypeScript + Vite for a fast, typed, component-driven SPA.
  • Tailwind CSS with a custom design system — an ember/sage/ink palette and a Fraunces + Inter + JetBrains Mono type stack — to make it feel like a crafted product, not a hackathon demo.
  • A pure-function scoring model (src/lib/score.ts): exposure is a weighted blend where the biggest risks carry most of the signal, and readiness is exposure-weighted experiment coverage with a bonus for thinking across all four lenses.
  • A custom SVG risk matrix — no chart dependency, full control over the likelihood × impact visual.
  • An offline suggestion engine (src/data/suggestions.ts): a curated library of real product failure modes, each tagged with trigger keywords so the right risks surface for the specific thing you're shipping — no API call.
  • State that lives in the URL: the entire pre-mortem is encoded into the URL hash with Unicode-safe base64, so sharing works with no database.
  • localStorage autosave so you never lose work.
  • Novus.ai (Pendo) analytics through a typed wrapper (src/analytics.ts) that fires real product events — premortem_started, risk_added, suggestion_used, experiment_picked, report_reached, share_link_created — so the dashboard shows actual behaviour, not just page views.

Challenges we ran into

  • Making "risk" measurable without making it fake. A score that's too simplistic is misleading; too complex and nobody trusts it. We landed on a weighted exposure model that lets the top risks dominate, paired with a separate readiness score, so the number reflects how teams actually reason about danger vs. preparedness.
  • No backend, but still shareable. Encoding a full pre-mortem into a URL meant building a compact, Unicode-safe base64 round-trip and a schema version so old links keep working.
  • Helpful suggestions with no API. Building an offline engine that feels smart required curating real failure modes and a keyword-trigger system that surfaces the relevant ones — fast, private, and reliable.
  • A 10-minute tool that respects 10 minutes. Every step had to earn its place. We cut anything that didn't move the user toward a sharper decision.
  • Polish under time pressure. Custom SVG visuals, print styles, accessibility, and autosave all had to work — without the safety net of a component library doing it for us.

Accomplishments that we're proud of

  • A pre-mortem that a complete stranger can land on and finish in ten minutes — no sign-up, no friction.
  • A genuinely useful score that separates how scary a bet is from how ready you are to ship it.
  • Zero backend, fully shareable — the link is the data.
  • An offline intelligence layer that gives relevant suggestions with no API key.
  • A product that looks and feels shipped: custom design system, custom SVG visuals, print-to-PDF, and accessibility baked in.

What we learned

  • Prospective hindsight really does change the conversation. Forcing yourself to write the failure headline first surfaces risks that a "what could go wrong?" prompt never does.
  • Constraints make better products. "No backend" pushed us to the URL-hash approach, which turned out to be a feature — instant, private, frictionless sharing.
  • A score is a forcing function. The moment risk becomes a number, people start comparing, prioritising, and actually planning experiments.
  • Offline can beat an API. For this use case, a curated library is faster, more private, and more reliable than a model call — and it always works.

What's next for Premortem

  • Collaborative pre-mortems — live, multiplayer rooms so a whole team can attack the idea together in real time.
  • Smarter suggestions — optional LLM-assisted risk surfacing layered on top of the offline engine.
  • Track the bet over time — revisit a pre-mortem after launch to see which risks actually bit, and learn from it.
  • Templates & integrations — export experiments straight to Jira / Linear / Notion so they become real tickets.

Built With

Share this project:

Updates