Engineering Voluntary Friction
contents
Comfort is the default someone keeps selling you
Almost every product I use is engineered to remove effort. One-tap checkout, autofill, infinite feeds, food at the door in twenty minutes, a suggestion for the next thing before I’ve finished the last. None of it is evil. But the cumulative message is relentless: any effort is a problem, and the ideal life is one where nothing is ever hard. That’s a sales pitch, and I’d been buying it without noticing.
The thing the pitch leaves out is that capability is built by difficulty, not removed by it. A life optimized for zero friction is also optimized for zero growth. So I started asking a different question: where should I be adding difficulty back on purpose?
What this solves
- Names comfort as a default the market keeps selling.
- Connects gym-style desirable difficulty to how you design your tools.
- Separates friction that builds you from friction that’s just theater.
Useful difficulty isn’t a gym-only idea
In training, the principle is obvious. Progressive overload: you add load on purpose, and the body adapts to become stronger. Rucking, cold exposure, the occasional fasted morning, none of these are pleasant in the moment, and all of them widen the range of what you can handle without flinching. The discomfort isn’t a side effect to minimize. It’s the mechanism. Remove it and the adaptation doesn’t happen.
The same logic shows up in learning. Methods that feel harder, retrieving from memory instead of rereading, spacing your practice, mixing topics, produce worse feelings and better retention. Ease creates the illusion of progress. Difficulty creates the actual thing. We have a deep bias to read “this feels smooth” as “this is working,” and it’s frequently backwards.
So here’s the question that interests me as an engineer: if deliberate difficulty makes the body and the mind more capable, why do I design my software to remove every trace of it? Why is friction a virtue in the gym and a bug everywhere else?
Can you design friction into your own tools on purpose?
Yes, and this is the part I find genuinely underexplored. We talk endlessly about removing friction from products. We almost never talk about an engineer deliberately adding it back into their own defaults to shape their own behavior. But you can. Your tools are configurable, and most of us have only ever configured them toward convenience.
The reframe is to treat friction as a design parameter you control, not a property the vendor sets. Convenience is one setting. Deliberate difficulty is another. The market will always push the slider toward frictionless, because frictionless sells, but on your own machine you get the final say. I’ve started spending that say on a handful of small, deliberate annoyances aimed squarely at the behavior I’d rather not have run on autopilot.
This is the same asymmetry I wrote about in friction can be a feature: make the good defaults easy, and put a small, deliberate cost in front of the compulsive ones. The new wrinkle is that as an engineer, I can actually build those costs.
What that looks like in practice
Here are the concrete ones I run, none of them dramatic.
- A commit gate that asks why. A pre-commit hook that rejects an empty or one-word message forces me to articulate the reason for a change before it lands. The thirty seconds of friction makes me think, and it leaves a real trail for later.
- Self-imposed rate limits. A small script or schedule that only lets me check certain things at set times, instead of whenever the itch hits. The wait does the deciding-whether-this-matters work I’d otherwise skip.
- Removing one-tap conveniences. Logging out of the accounts I open compulsively. Deleting the app and keeping the slower browser version. The extra steps aren’t punishment. They’re a gap where a choice can happen.
- A DNS-level blocklist. Blocking the worst time-sinks at the network layer, so willpower isn’t the thing standing between me and the feed. The friction lives in the infrastructure, not in my self-control, which is exactly where I want it.
The pattern across all of these: I’m not relying on discipline in the moment. I’m building the difficulty into the system ahead of time, when I’m calm, so the in-the-moment version of me hits a wall instead of a slide.
Every action is a vote for an identity
Here’s why this is more than productivity tweaking. Every activity is a vote for the version of yourself that does that activity. Open the feed reflexively, and you fund the passive, reactive version. Hit a small wall and choose the harder thing, and you fund the version with self-command. The individual votes are tiny. The tally, over months, is who you actually are.
This is what the deliberate friction is really for. It’s not about the thirty seconds saved or lost. It’s that each small, chosen difficulty is a vote for the person who can do hard things on purpose, and each removed compulsion is a vote against the person who can’t stop doing easy ones. You’re not just configuring tools. You’re allocating funding between competing versions of yourself.
That’s also why “I’ll just use willpower” tends to lose. Willpower votes once, in the moment, against a system designed to win. Engineered friction stacks the votes in advance.
Where this is just masochism with extra steps
Now the honest line I won’t cross. Friction is only useful when it protects something you actually want protected. Difficulty for its own sake isn’t virtue, it’s cosplay. A deliberately slow tool you never use isn’t deliberate, it’s abandoned. A gauntlet of self-imposed steps in front of work that should be effortless isn’t self-command, it’s self-sabotage dressed up as discipline. Plenty of friction is just bad design with no hidden upside to find.
So I keep one test. What is this difficulty building, and do I want what it builds? When the answer is real capability or a compulsion I’d rather not feed, the friction earns its place. When it’s just suffering with a nice story attached, I cut it. The goal was never discomfort. It’s self-command, and freedom from defaults someone else chose for me. Add the friction that builds you, and skip the friction that only hurts. The frictionless default someone else chose for you was never going to build anything worth having.