Ben Sutherland

Ben Sutherland

Head of Engineering & CTO

Read Resume
Articles
9 min read
SecurityArchitectureEngineering LeadershipRisk

Security Is a Design Constraint, Not a Phase

Security bolted on at the end is theatre. Treated as a design constraint from the first boundary — threat-modelled early, safe path as the default — it's what actually reduces risk.

Security Is a Design Constraint, Not a Phase

There is a pattern I have seen too many times.

A team builds the product. The architecture settles. The data model hardens. Integrations are wired in. Deadlines get close. Then, somewhere near the end, security gets brought in.

A pen test happens. A review lands. A risk register appears. Suddenly there are findings that are technically correct and practically painful. The team agrees they matter, but the shape of the system is already set. Fixing the issue properly now means changing boundaries, reworking permissions, altering data flows, or delaying the launch.

So security becomes the blocker.

Or worse, it becomes the rubber stamp.

Neither is good.

Security bolted on at the end is usually theatre. It might catch issues, and catching issues is better than missing them, but by that point many of the important decisions have already been made. The cheap moment to reduce the risk has passed.

I think security needs to be treated like latency, cost, and reliability.

A design constraint.

Not a phase. Not a checklist. Not a department that appears at the end to bless the work. A constraint that shapes the system from the first boundary.

The "security phase" is the wrong mental model

The problem with treating security as a phase is that it arrives after the architecture has already made promises.

By then, the system has probably decided where data lives, how identity works, which services trust each other, which users can perform which actions, how secrets are handled, what logs contain, and how much blast radius a compromised component has.

Those are design decisions.

A late review can identify the consequences, but it often cannot change them cheaply.

That is why security-as-a-phase creates such a bad dynamic. Security teams look like blockers because they surface risks late. Engineering teams look careless because the system has issues. Product teams get frustrated because the timeline is now under pressure. Everyone is reacting to a problem that should have been designed around earlier.

The better version is to bring security into the design conversation when the shape is still soft.

What are we protecting? From whom? What happens if this boundary fails? What can this service access? What data should never be exposed here? What would an attacker try first? What is the smallest useful permission set? What happens if a credential leaks? What is the customer impact if this workflow is abused?

Those questions are not bureaucracy.

They are architecture.

Threat modelling is design work

Threat modelling can sound heavier than it needs to be.

I do not think every feature needs a formal ceremony or a giant document. But every meaningful system needs someone to ask the basic questions before the implementation hardens.

What are the assets? Who are the actors? What are the trust boundaries? What are the obvious abuse paths? Where does sensitive data move? What assumptions are we making about identity, permissions, tenancy, or internal trust?

The point is not to imagine every possible attack.

The point is to make the important risks visible while the team can still do something about them.

Done at design time, threat modelling can change a boundary, simplify a data flow, remove a class of access, or force a safer default. Done after launch, the same finding can become a rebuild.

This is where I think technical leaders need to be more comfortable slowing the room down.

Not for every detail. Not to create fear. But when the design touches identity, customer data, money, permissions, regulated information, internal admin powers, or anything with meaningful operational impact, security needs to be part of the shape of the system.

It is much cheaper to ask "should this service have that access?" before the service exists.

Blast-radius thinking is architecture

One of the most useful security instincts is blast-radius thinking.

Assume something fails. Assume a token leaks. Assume a user gets the wrong permission. Assume a service is compromised. Assume an internal tool is abused. Assume a model receives hostile input. Assume an integration behaves in a way you did not expect.

What can happen next?

That question changes architecture.

Least privilege is not just a security slogan. It is a design principle. A service should have the access it needs and no more. A user should have the permissions required for their role and no more. A workflow should expose the minimum data required to complete the task.

Isolation matters for the same reason. Tenant boundaries, environment separation, scoped credentials, segmented networks, limited admin surfaces, explicit data ownership — these are not decorative controls. They decide how far a failure can travel.

I like the phrase "assume breach" because it moves the conversation away from fantasy.

We should try to prevent compromise. Of course. But we should also design systems so a single mistake does not become a company-wide incident.

That shows up everywhere.

It shows up in how we handle identity and access. It shows up in whether customer data appears in logs. It shows up in whether internal tools can perform irreversible actions without approval. It shows up in how we design AI systems, where permissions should live outside the model and tool execution needs explicit validation.

The architecture should not rely on everything going right.

Identity and access are first-class architecture

I wrote a more practical companion piece on auth trade-offs in Sessions vs JWTs: Choosing an Auth Model at Scale. That article gets into the mechanics of sessions, tokens, revocation, topology, cookies, and CSRF.

This piece is the higher-level version of the same belief: identity and access are architecture.

They are not late configuration.

Who is the user? What are they allowed to do? How is that permission represented? Where is it enforced? How quickly can access be revoked? What happens across services? What happens across devices? What happens when an employee changes role, a customer changes plan, or an integration is disconnected?

These questions shape the system.

If you leave them late, you often end up with permissions scattered across application logic, admin checks bolted onto handlers, service-to-service trust that nobody can fully explain, and revocation semantics that work in theory but not in practice.

That is security debt.

And security debt has a nasty habit of being paid as an incident, with interest and an audience.

Secure defaults beat security policing

At team scale, the answer is not to turn every engineer into a security specialist or every security concern into a gate.

The better answer is secure defaults.

Make the safe path the easy path.

If teams are building services, the default template should already include authentication, authorisation hooks, secrets handling, logging guidance, dependency scanning, sensible headers, encryption expectations, and deployment guardrails.

If teams are handling sensitive data, the paved path should make the right storage, masking, access, and retention patterns obvious.

If teams are building internal tools, the default should not be "admin can do anything from anywhere." It should be scoped access, audit trails, and friction around high-risk actions.

This is the same principle I apply to scaling engineering teams generally: standards exist to make autonomy safe.

Security works best when the system helps people make good decisions by default.

Policing creates resentment and bottlenecks. Paved paths create leverage.

That does not mean there is never a need for review. Some changes absolutely deserve deeper scrutiny. But most teams should not need to rediscover basic security practices every time they ship a feature.

If a control matters repeatedly, encode it into the platform, template, framework, or workflow.

Do not rely on everyone remembering.

Security is shared ownership

Security teams are important, but they cannot be the only people who own security.

The team building the feature understands the domain. They know the data. They know the workflow. They know where the shortcuts are. They know what assumptions were made under delivery pressure.

That team needs to own the security shape of its work.

The role of security should be to raise the quality of those decisions: provide patterns, ask better questions, review high-risk designs, build tooling, educate teams, and help make the secure path easier.

The worst model is where engineering throws work over the wall and waits for security to approve it.

That model does not scale. It also creates the wrong incentive. Engineers start thinking of security as something done to them, rather than something they are responsible for.

The better culture is one where teams threat-model their own features, understand the risks they are accepting, and know when to pull in deeper expertise.

Not every engineer needs to be an expert in every class of vulnerability.

But every engineer should understand that security is part of the work.

Compliance is not the target

Compliance matters. In some environments, it matters a lot.

But compliance should be the byproduct of good design, not the target you aim at.

If the goal is only to pass an audit, teams optimise for evidence. Policies get written. Boxes get ticked. Screenshots get collected. The organisation may become more compliant without becoming meaningfully safer.

Good security design tends to produce compliance evidence naturally.

Clear data ownership. Access controls. Audit trails. Encryption. Retention rules. Secure development practices. Incident processes. Change records. Threat models. Decision records. These are useful operationally before they are useful to an auditor.

That is the posture I prefer.

Build systems that are genuinely safer and easier to reason about. Then compliance becomes easier because the controls are real.

The reverse is much weaker.

The bill comes due

Security is easy to defer because the cost is often invisible until it is not.

A shortcut can sit quietly for years. An over-permissioned service can look harmless. A missing audit trail can feel like a low priority. A weak boundary can survive many releases.

Then something happens.

A credential leaks. A customer sees data they should not. An internal tool is misused. An integration exposes more than expected. An attacker finds the path nobody modelled. A regulator asks for evidence the system cannot produce.

That is when deferred security becomes very expensive.

Not just technically expensive. Organisationally expensive. Trust expensive.

This is why I think security belongs at the design table from the beginning.

Not because every system needs maximum control. Not because every product should move slowly. Not because security should win every trade-off.

Because security is a real constraint, and pretending otherwise does not make it disappear.

The work is to make the trade-offs visible early enough that they are still choices.

Security is a property you design in

A secure system is not created by a final review.

It is created through hundreds of design decisions: boundaries, identities, permissions, defaults, data flows, operational controls, review habits, and incident assumptions.

That is leadership work as much as engineering work.

Model the threats while the design is still flexible. Keep blast radius small. Treat identity and access as first-class architecture. Make the secure path the default. Push security ownership into every team. Let compliance fall out of good design rather than using it as the design goal.

Security is a property you design in, like latency or cost.

Anything else is a bill you have deferred to your worst day.

2026 Ben Sutherland