Security Is a UX Problem
People always find the path of least resistance. If that path bypasses your security, your security has already failed. The fix isn't stricter enforcement — it's better design.
The Password You Can’t Copy
You have seen it. A system that blocks you from pasting into the password field. The intent is security. The outcome is that everyone who uses it either writes the password on a sticky note, reuses something simple they can type from memory, or picks “Password1!” because the rules require a capital letter and a number.
The friction did not make the system more secure. It made the users less secure. The policy created the vulnerability it was designed to prevent.
This is not an edge case. It is the default outcome whenever security is designed as an obstacle rather than as the natural way to do the right thing.
People Route Around Friction
Humans are extraordinarily good at finding workarounds. Give an engineer a deployment process that takes forty-five minutes to get through security review, and within a month they will have a personal AWS account running something that bypasses it entirely. Give a team a secrets management system that is painful to integrate, and within a quarter half the team will have credentials in environment variables committed to a private repo that is not quite as private as they think.
This is not malice. It is rational behaviour. When two paths lead to the same outcome and one is significantly harder, people take the easier one. The friction does not stop the behaviour — it just ensures the behaviour happens outside the system where you have visibility and control.
Shadow IT exists because official IT is too slow. Shared credentials exist because proper access management is too cumbersome. Hardcoded secrets exist because the secrets manager was too annoying to set up.
Every security workaround in your organisation is a UX failure somewhere upstream.
The Compliance Checkbox Problem
Security requirements that exist only on paper have the same failure mode. A penetration test checklist, a compliance questionnaire, a policy document that nobody reads — these create the appearance of security without the substance.
The teams filling them in are not trying to deceive anyone. They are optimising for the path of least resistance: get the box checked and get back to work. If the checkbox is the closest thing to friction between them and shipping, the checkbox gets checked.
Real security has to be the cheapest option, not an additional tax on top of the real work.
Designing the Right Path
The insight that changes everything is this: the path of least resistance is a design decision.
You get to choose what the easiest thing is. If the easiest thing is also the secure thing, you have solved the problem. If the easiest thing is the insecure thing, no amount of policy enforcement will save you — you will just generate increasingly creative workarounds.
This is what good DX at the security layer looks like:
- Secrets should be easier to manage through the platform than outside it. If injecting a secret through your platform takes three commands and doing it manually takes one, the manual way wins every time.
- Access control should be the default, not the configuration. If getting access requires a request and waiting two days, people will share credentials. If access is scoped automatically to what the module actually needs, there is nothing to share.
- Auditing should be automatic. If generating an audit log requires a developer to instrument their code, it will be incomplete. If the platform generates it structurally, it is always accurate.
- The secure path should be invisible. The best security control is one the developer does not notice — not because they bypassed it, but because it was built into the shape of the work itself.
What This Means for Infrastructure Platforms
The same logic applies at the infrastructure and platform level. If deploying securely to production requires more steps than deploying insecurely, production deployments will eventually be insecure. If rotating credentials is harder than not rotating them, credentials will not get rotated.
Levyer is built around this principle. Every module runs in a sandbox with capability-based access control — not because we force developers to configure it, but because that is the default execution model. You cannot accidentally grant a module access to something it does not need, because you have to explicitly grant access rather than explicitly deny it.
Security is not a feature you add to a Levyer application. It is the shape of how applications on Levyer are built. The path of least resistance — writing a module, wiring it to an interface, deploying it — is also the secure path.
That is the only version of security that actually works at scale.
Want to follow our progress?
We're onboarding early design partners and sharing what we learn.
Get Early Access