skip to content

How do you answer Shostack's fourth question — did we do a good enough job?

level: seniorimportance: should knowfreq 50%

answer

  1. judges the modeling, not the system
  2. three checks, one per earlier question
  3. claims versus evidence
  4. ask it when the mitigations were due
  5. a no sends you back around the loop

basics

~20 s

Check three things about the modeling work: that the model matched the system actually built, that enumeration reached every part of that model, and that each decision from question three has evidence it exists in the running system.

solid answer

~50 s

Question four asks about the quality of the modeling work, not about whether the system is secure. I answer it in three parts. First, was question one's model right - does it match what was actually built, including the integrations added after the session. Second, did enumeration reach the whole model, or was there an element or flow nobody looked at. Third, and most valuable, did question three's decisions land: for each mitigation, is there evidence it exists in the running system, and for each accepted risk, is the acceptance recorded and still true. `Marked mitigated` in a spreadsheet is a claim, not evidence. It also has to be asked at the right time - in the session that produced the mitigations you can only check the model, so the question has to be re-asked once the decisions were due to be delivered.

go deeper

for a junior

Know that the frame has a fourth question and that it asks about the quality of the threat modeling work itself, not about whether the system turned out to be secure.

for a middle

Explain the three things it checks: whether the model matched the real system, whether enumeration reached every part of that model, and whether the decisions from the previous question actually shipped.

for a senior

Expect to be pushed on evidence. 'Marked mitigated' is a claim; be able to describe how you would verify one specific control on a running system and what you would refuse to accept as proof.

for a principal

Own the question of what makes a team ask it at all - which event re-opens a filed model, who is accountable when the answer is no, and how you stop that answer from being quietly recorded and ignored.

## What the question is actually asking Shostack's fourth question, *did we do a good enough job?*, is the only one of the four that points at the team rather than at the system. It does not ask whether the system is secure - nobody can answer that - it asks whether this pass through the loop was good enough to be relied on. That distinction is the whole question, and candidates who answer *yes, we found lots of threats* have missed it. ## The three things it checks **Did question one's model match reality?** A threat list is only as good as the picture it was derived from. If the diagram omits an admin console, a batch job or a third-party integration, then every threat against that element is missing and nobody knows it. So the first check is against the system as built, not against the design document. **Did question two reach the whole model?** Enumeration tends to cluster on the interesting parts and skip the boring ones - the internal queue, the backup path, the operator's console. A useful test is retrospective: when something is found later in testing or in production, ask which element or flow it came from and whether that element was ever examined. A finding from a place nobody looked at is a coverage failure, not bad luck. **Did question three's decisions land?** This is the highest-value part and the one that gets skipped. Every decision from question three is a promise about the future: a control will be built, a risk is accepted, a requirement will be tested. Question four asks what evidence exists that the promise was kept. For a mitigation, evidence means something you can point at in the running system - a configuration, a check that fails if the control regresses, a demonstration. For an accepted risk, evidence means the acceptance is written down, attributed, and still true under today's conditions. ## Why it gets skipped The first three questions all happen inside one session, with everyone in the room and momentum behind them. The fourth falls due weeks later, when the model has been filed, the session participants have moved on, and nothing in the delivery process re-opens it. It is also the only question whose honest answer can create work: saying *no* means going back around the loop. Teams that ask it reliably are teams where something - a release checkpoint, a change to the architecture, the delivery date of the mitigations themselves - forces the model back open. ## A worked shape A hospital operating-theatre scheduling service is re-run through the four questions four weeks after go-live. Questions one to three had been answered before launch and looked healthy. Question four is what catches the real problem: two threats marked *mitigated* in the pre-launch model turn out never to have been verified. The threat concerned an agency locum working on a shared clinical login - an authenticated, low-privilege position rather than an anonymous outsider - who can reach the schedule-rewrite path. The intended controls were per-session scoping of that shared login and a limit on bulk schedule rewrites; only one of them made it into the deployed configuration. The assets at stake are the availability of the theatre list and the integrity of the schedule that clinical staff act on, so an unverified control here is a patient-safety issue, not a data-breach issue. Nothing about that finding required new enumeration. It came from asking, for one existing decision, *what evidence is there that this shipped?* ## What a good answer looks like in the room Be specific about evidence. Say what you would accept as proof for a named control, and say what you would not: a ticket marked done, a mitigation written in the design document, or a person's recollection are all claims. Say when you would ask the question - at the point the decisions were due, not in the session that produced them. And say what a *no* obliges you to do: re-enter the loop at whichever question failed, rather than recording the gap and moving on. ## The boundary of the question Question four is about this model and this pass. It is not a judgment on the system's overall security posture, it is not a substitute for testing the system, and it does not ask whether every threat was eliminated - accepting a risk deliberately and recording it is a perfectly good answer to question three, and question four only checks that the acceptance is real and still current.

  • When in the delivery cycle should question four be asked?
    At the point where question three's decisions were supposed to be delivered, and again when the architecture changes materially. Asking it in the same session that produced the mitigations can only check the model and the enumeration - no mitigation has shipped yet, so the most valuable third of the question has nothing to check.
  • What does a 'no' to question four oblige you to do?
    Re-enter the loop at whichever question failed. A wrong or stale model sends you back to question one and invalidates part of the threat list. Thin enumeration sends you back to question two for the elements nobody examined. Undelivered mitigations send you back to question three to re-decide with today's constraints, which may mean accepting a risk you had intended to fix.
  • How is question four different from asking whether the system is secure?
    It scopes the claim to the work rather than the system. It asks whether the model was accurate, whether enumeration was complete against that model, and whether the decisions were carried out. A system can pass all three and still have vulnerabilities in areas the model never covered - which is why the honest answer is 'good enough for this scope', not 'secure'.
  • What counts as evidence that a mitigation shipped?
    Something observable in the running system: the control present in the deployed configuration, an automated check that fails if it is removed, or a demonstration against the deployed service. A closed ticket, a line in a design document or a person's recollection are claims about the system, not observations of it.

It is the difference between writing a fire-safety plan and walking the corridors to check the extinguishers are actually on their brackets.

saying these in an interview costs you the question

  • Answering it as 'yes, we found a lot of threats'
  • Treating a marked-mitigated finding as verified
  • Asking it in the same session that produced the mitigations
  • Reading it as a question about the system rather than the model
  • Recording a no and moving on without re-entering the loop

context