Security is a design material
Threat modelling belongs in the first sketch, not the last sprint. What changes when you treat security like a material instead of a gate.

Most teams treat security as a gate at the end of a project. The build is finished, the launch date is fixed, and someone arrives to ask whether the thing is safe. By then the honest answer is usually: it is as safe as the architecture allows, which is not the same as safe.
I prefer to treat security as a material, like load-bearing steel or the weight of a font. You do not add it afterwards. You design with it, and the design changes as a result. The earlier that happens, the cheaper and more elegant the system becomes.
A threat model is an interface
A useful threat model is not a document listing every attack in existence. It is a short, specific argument about who wants what, what they can reach, and what happens when they get it. That argument belongs next to the user journey, because both are describing the same system from different angles.
When I model a banking flow, I am not only asking “can this be exploited?” I am asking what the interface promises. If the screen says a transfer is complete, the system must be able to prove that it is. If a session looks active, the server must agree. Security problems often begin as broken promises between layers.
Make the safe path the easy path
Controls that fight the way people work get bypassed, and rightly so. The engineering goal is not to add friction; it is to move the friction away from the user and into the defaults. Input validation at the boundary. Least privilege that is actually least. Secrets that cannot be pasted into a chat. A deploy pipeline that fails closed.
This is where DevSecOps stops being a slogan. If the secure route is slower than the insecure one, the insecure one wins at 2 a.m. before a release. Automation is not about replacing judgement; it is about making the safe choice the one that requires the least heroism.
What I ask for on day one
A data-flow sketch, including the boring internal calls.
A list of trust boundaries and who sits on each side.
A named owner for every risk — a person, not a team.
An explicit definition of what “acceptable” means for this system.
None of those require a security team of fifty. They require someone in the room who is willing to ask the awkward question before the architecture hardens.
The result is not a system that cannot be attacked. No such system exists. It is a system whose failure modes are understood, whose operators are not surprised, and whose users were not asked to pay for a shortcut they never chose.
Filed under

