skip to content

Your threat model assumes another team tokenises PII upstream — how should you treat that inherited control?

level: seniorimportance: should knowfreq 46%

answer

  1. you did not build this control
  2. assumption, not a closed mitigation
  3. which fields, which paths, whose team
  4. backfills and replays sit outside it
  5. the residual risk stays yours

basics

~10 s

Treat it as an assumption rather than a mitigation: name the owning team, confirm exactly which fields and which paths are covered, and keep the threat open with residual risk until that confirmation lands.

solid answer

~50 s

An inherited control reduces my risk but is operated by someone else, so it goes in the model as a named assumption with the data platform team as owner, not as a closed mitigation. Before relying on it I ask narrow questions: which fields are tokenised, on which paths, at what point, and what happens when tokenisation fails. That is where these controls turn out to be partly true — the streaming path is covered but a historical backfill, a dead-letter replay or a manual load is not. Until it is confirmed I enumerate the threat as if the control were absent: an analyst with broad read access reading customer personal data at scale. Then I decide — accept with a revalidation trigger, or add my own compensating control such as field-level access limits and alerting on bulk reads. The consequence stays mine either way.

go deeper

for a junior

Know that a control run by a different team still belongs in your model, written down as something you are relying on. Naming the team you depend on is the habit to build here.

for a middle

Explain why an inherited control is an assumption rather than a mitigation, and what you would ask the owning team to make the claim precise — which fields, which paths, and what happens on failure.

for a senior

Demonstrate that you enumerate the threat as if the control were absent before deciding, that you know partial coverage is the normal failure, and that you add compensating controls where the blast radius warrants them.

for a principal

Own the accountability argument: a recorded dependency does not move the consequence, and organisations that let teams close threats on other teams' controls accumulate risk nobody is watching.

## The situation Your design depends on a control you did not build, cannot test, and do not operate. A feature store you own is fed by a pipeline run by the data platform team, and the modelling session is told: *the data platform tokenises PII before it lands.* If that is true, a large family of confidentiality threats against your store disappears — an analyst with broad read access sees tokens, not names, card numbers or addresses. If it is only partly true, you have shipped a model that quietly deleted its most important branch. This is an **inherited control**: a control that reduces your risk but is provided across a team boundary. Inherited controls are not unusual — most services rest on several — and they are the single most productive place to look for missed threats, because the model's author and the control's owner never had the conversation. ## Rule one: it is an assumption, not a mitigation A mitigation is something present in the design you are responsible for; you can point at it, test it, and see it break. An inherited control is a claim about someone else's system. Record it as an assumption with the owning team named, and keep the threat in the model with a **residual risk** rather than closing it. The distinction matters at review time. A threat marked *mitigated* is finished and stops being read. A threat marked *assumed handled by the data platform team, unverified* is an open question that someone will eventually chase. ## Rule two: confirm the shape of it, not the existence of it "Do you tokenise PII?" gets a yes from almost anyone. The useful questions are narrower: - **Which fields?** Names and card numbers, but perhaps not free-text notes, email addresses in a comments column, or a raw payload column kept "for debugging". - **On which paths?** This is where inherited controls are most often partly true. The main streaming path is tokenised; the one-off backfill that reloaded three years of history is not. Nor, frequently, is dead-letter reprocessing, a manual dataset load, or a break-glass export produced during an incident. - **When?** Tokenised before the write, or by a scheduled job that runs afterwards and leaves a window? - **What happens on failure?** Does the pipeline stop, or does it pass the record through untokenised and log a warning? Each of those answers is either a confirmed control or a newly discovered threat, and you get them in an hour of conversation instead of after an incident. ## Rule three: model it as if absent, then decide Before the answers land, enumerate the threat as though the control were not there, so the model states plainly what is at stake: an analyst with legitimate broad read access to the feature store — an insider position, not an anonymous attacker — reading customer personal data at scale, which violates confidentiality. Now you can make a decision with the impact visible: - **Accept** the dependency, record it, and give it a revalidation trigger. - **Compensate** where the blast radius is unacceptable: field-level access restrictions on your side, alerting on bulk reads, shortened retention, or your own masking on the read path. These are yours; they do not depend on anyone else's roadmap. - **Escalate** if the confirmation comes back negative and the exposure is large. ## Rule four: the assumption is not a transfer of accountability Recording "the data platform team tokenises PII" documents a dependency. It does not move the consequence. If the control fails, it is your feature store holding readable customer data and your service in the incident report. The register makes the dependency visible and gives the owning team a chance to dispute it; it does not make the risk theirs. Candidates who reach for "that's the platform team's problem" are answering an accountability question wrongly. ## Rule five: attach a trigger The most common way this fails is not a lie — it is drift. The control existed, was confirmed, and later changed for a reason nobody connected to your service. Write down the event that should force a recheck ("any change to the ingest transform", "any new load path into the store") and, where you can, ask the owning team to record you as a consumer so their change process surfaces you. ## The short version for an interview Name it as an assumption with an owner. Ask which fields, which paths, when and on-failure. Keep the threat open with residual risk until it is confirmed. Add your own compensating control if the impact of it being wrong is unacceptable. Attach a revalidation trigger. And be clear that the consequence stays with you regardless of who operates the control.

  • The data platform team confirms the control. Does the threat close?
    It moves from unverified to confirmed, not to solved. I record who confirmed it and what exactly they confirmed, attach a trigger for any change to the ingest transform or a new load path, and usually keep a detective control on my side — alerting on bulk reads of the store — because confirmation ages and I will not be told when it stops being true.
  • Which flows most often fall outside an inherited data-handling control?
    The ones nobody demoed: historical backfills, dead-letter or replay reprocessing, manual or ad-hoc dataset loads, debug columns carrying raw payloads, and break-glass exports produced during an incident. The main path is what gets built carefully; these are added later under time pressure and rarely inherit the same transform.
  • If the inherited control fails and data leaks, who carries the risk?
    I do. The assumption records a dependency; it does not transfer the consequence. My store held readable customer data and my service is in the incident. That is precisely why the register is worth writing — it justifies compensating controls on my side rather than serving as an excuse afterwards.

It is like building on a neighbour's retaining wall. You may rely on it, but you write down that you are relying on it, ask what it was actually engineered to hold, and remember that if it gives way it is your house that moves.

saying these in an interview costs you the question

  • Marks the threat mitigated because another team owns the control
  • Accepts a yes without asking which fields and paths
  • Assumes backfills and replays inherit the same transform
  • Says the risk belongs entirely to the upstream team
  • Drops the threat from the model instead of recording residual risk
  • Never attaches a recheck trigger to the confirmed control

context