Threat modeling is the structured practice of asking 'what could go wrong?' during design — before code is written.
Threat modeling is design review with an adversarial lens. A small team walks through a proposed system, systematically enumerates ways it could be attacked or abused, and decides which risks to mitigate now vs. accept. Unlike pentests (which find implementation bugs), threat modeling finds design flaws — the kind that would cost weeks to refactor after launch. It is cheap, it is high-leverage, and most startups skip it entirely.
Model at design time for any feature that (1) handles authentication, authorization, or session state; (2) processes payments, PII, or regulated data; (3) exposes a new external surface (public API, webhook receiver, file upload); (4) crosses a trust boundary (customer data touched by a third party, cross-tenant queries); (5) is a rewrite of a previous system where legacy assumptions may not carry forward. Skip for pure UI changes, internal tooling with no sensitive data, and simple CRUD on existing schemas.
Microsoft's STRIDE gives you six categories to walk through for each component and data flow: Spoofing (can someone impersonate a user or service?), Tampering (can data be modified in transit or at rest?), Repudiation (can an actor deny performing an action?), Information disclosure (can data leak?), Denial of service (can availability be degraded?), Elevation of privilege (can a low-privilege actor gain higher access?). Walk through each pairing; note real threats; discard ones that don't apply. STRIDE is not the only framework (PASTA, LINDDUN for privacy) but it is the fastest to teach a team.
Draw the system as boxes (processes), cylinders (data stores), arrows (data flows), and dashed lines (trust boundaries — where data crosses from one authority to another). Every arrow crossing a trust boundary is where you focus STRIDE analysis. You don't need a formal tool: a whiteboard or Miro board is fine. What matters is that everyone in the room agrees on what the system does and where the boundaries are. Half the value of threat modeling is exposing that engineers, PMs, and security had different mental models of the same feature.
Cast: the feature's tech lead, one security-minded engineer, the PM, optionally an outside reviewer. Time: 60-90 minutes for a moderately complex feature. Preparation: tech lead sends a design doc 48 hours ahead. Agenda: (1) 10 min — tech lead walks through the design and DFD; (2) 40 min — group runs STRIDE against each trust boundary, capturing threats in a shared doc; (3) 20 min — triage each threat as Mitigate/Accept/Transfer/Investigate with an owner and rough due date; (4) 10 min — retro and document decisions. Ship the doc as an ADR in the repo so future engineers understand why the design looks the way it does.
A threat model that doesn't produce follow-up work is theater. Each Mitigate item becomes a ticket in your normal tracker, linked back to the threat model doc. Accepted risks are logged with a stated rationale and a review date — 'we accept that unauthenticated webhook receivers can be flooded; will revisit if we cross 100K events/day.' Investigate items get a 1-week spike. Track a lightweight metric: percentage of new features with a threat model on file. Aim for 100% of features touching the criteria in section one; don't force it elsewhere.
Investor directory · Fundraising library · Articles A–Z · Company funding database