From concrete spikes to cancel buttons: hostile architecture in SaaS
What hostile architecture can teach us about broken product relationships
It’s not broken. It’s designed that way.
Since the 1990s, Melbourne’s public spaces have been being quietly reshaped. Benches with central bars, concrete spikes in alcoves, and seating designed to be technically “usable,” but deeply uncomfortable. It wasn’t vandalism though, it was design. The term hostile architecture was coined to environments structured not to welcome, but to control.
It wasn’t always malicious. Sometimes it was about liability, cleanliness, and safety. But the result was the same: the space no longer served the people using it, it served the people managing it.
And once the term hostile architecture entered the public conversation in the mid-2010s, if you were looking you started to see echos everywhere. Environments shaped not to support behaviour, but to control it. Not to respond to people’s needs, but to redirect them.
And I think something similar is happening in software. Not through concrete or steel, but through menus, defaults, and designed inconvenience.
Now I’m not in the product meetings and I don’t pretend to know exactly how these decisions get made. But as a user and someone who works on the periphery of these systems I’m sensing a subtle shift where the experience no longer seems shaped for us but for someone else’s goals.
So what is hostile design in software?
We don’t usually think of an interface as “hostile.” That language is more often used for park benches, train stations, or city planning so I’m being intentionally provocative here. But when design actively works against what users are trying to do, whether by friction, confusion, guilt, or obscured options, it serves the company at the user’s expense.
You see it when you try to cancel a subscription and the button is hidden three menus deep, or you go through 5 rounds of yes, I still really want to cancel, like it’s Planet Fitness in the 90s. You see it when a cookie banner makes “Accept All” bright and bold, but “Reject” is grey, small, and nested under two tabs. You see it when the unsubscribe link at the bottom of an email turns out to be a form asking why you’re leaving and are you sure?
These aren’t design bugs, they’re system features designed not to feel like control, but to function as it.
You might be forgiven for thinking that this is all just about retention. But it happens while you’re still using the product, too.
But you’re still using it, so what’s the harm?
Open Facebook to see your friends updates about their new puppy, fantastic holiday or Tumblr-style musings. But instead you see suggested reels, ads and agorithmic noise. You open LinkedIn to check a message. Now you’re buried in “People You May Know” and half-written status updates with “AI-assisted engagement.” You go to reorder something on Amazon, but the product listing is now a carousel of “similar” items, sponsored content, and ‘frequently bought with’ distractions.
The thing you want is still there but it’s buried under what the business wants you to do instead. You’ll have seen it in those popups which make you click on No, I don’t want a great deal when you just want to close it. Say Not yet when you really mean not ever.
None of these are hostile in the overt, malicious sense. They’re just designed to shape your behaviour, gently but persistently. Hey, why not stick around, scroll further, buy this instead. And slowly, you stop recognising the product you came for. You’re still engaged but your intent has been displaced.
This is design performing for the business, not the user. And the user can feel it, even if they can’t name it.
But isn’t friction just bad UX?
Sometimes this is just bad UX. But often these decisions aren’t the result of incompetence, they’re the outcome of incentives. Design teams are trying to hit KPIs around engagement, retention, activation, and reactivation. Legal teams are making sure checkboxes are checked, while PMs are sprinting toward roadmap goals.
Especially with things like compliance and privacy, where the pressure is often just to do it not to make it thoughtful. So cookie banners become quizzes, consent becomes camouflage and unsubscribing becomes an assault course. A literal and figurative box-ticking exercise, and once the box is ticked, the thinking stops.
But users don’t stop thinking, they notice. Maybe not the first time. But eventually that tiny friction point becomes a feeling:This isn’t really for me. This is for them.
None of these people have set out to make users feel manipulated. They’re just working inside a system that rewards controlling users rather than helping them move through. It’s the product of pace. Pressure. Shipping quickly. Inheriting legacy systems.
The issue isn’t that people are making bad decisions. My wonder is though that no one’s stopping to ask: what does this feel like from the other side? Because if you don’t actively design for trust, it’s easy to slip into designing for control without even realising it. And that’s significant. As Google ethisist Tristan Harris put it,
“A handful of people working at a handful of tech companies steer the thoughts of billions of people every day.”
But if they’re leaving anyway, why should I care?
The moment someone chooses to leave is one of the most powerful moments in your entire product relationship. It’s a chance to ask what went wrong, to learn something - and hopefully to make it right.
Research into the Service Recovery Paradox shows that customers who encounter a problem and have it resolved well often become more loyal than those who never had a problem in the first place. That’s the opportunity. Not just to slow the exit, but to turn it into a moment of trust and clarity, one that earns the right to return.
But when companies respond to departure with desperation: pop-ups, guilt, friction, and delay, it doesn’t change the outcome it just changes how the user feels about it. And they go from “this wasn’t for me” to “this company tried to trap me.”
You didn’t just lose a customer. You lost the relationship, their trust - and probably anyone they tell the story to.
So what’s the alternative?
This isn’t about blaming designers, most are doing the best work they can inside machines optimised for other things. The problem is systemic, and so is the solution. If we want products people trust and want to come back to we need to embed it in our principles like:
Let people leave. Easily, clearly, and without games.
Make staying feel like a choice. Not a default.
Respect attention. Don’t perform for engagement metrics. Perform for usefulness.
Design for fit, not capture. Because when it fits, they stay.
I know this isn’t easy. Most teams are juggling growth targets, legal requirements, and real constraints. But the hard stuff is usually the most human. And a little intention: a pause, a question, a redesign of a single moment, can go a long way to rebuild trust.
Hostile architecture uses discomfort to regulate public space. Hostile design uses friction to regulate digital behaviour. Both reshape our environments in ways that quietly tell us you're here, but you're not in control.
If we want to build products people trust and want to return to, we have to design as if the relationship matters because fit lasts longer than friction and trust walks back through the door on its own.