Customer Desire Paths: Why Users Ignore Your Design (And When to Let Them)
Users will find workarounds. Your job is knowing which ones to pave and which ones to block.
Every product has unofficial workflows users create themselves. I've watched teams waste months fighting desire paths that revealed better solutions—and others tolerate paths that destroyed their architecture.
Jay McBride
Software Engineer
You designed a workflow. Users found a better one. Now you’re supporting both.
I’ve watched this pattern destroy products. Not because desire paths exist—they always do—but because teams can’t decide which paths to formalize and which to prevent. They end up doing neither, supporting every workaround users invent until the product becomes unmaintainable.
The metaphor comes from landscape architecture: those dirt trails that appear across lawns when pedestrians ignore sidewalks. In software, desire paths are unofficial workflows that users create because your official one doesn’t fit their needs.
The question isn’t whether desire paths exist. It’s which ones deserve pavement.
Where Desire Paths Actually Come From
Most teams think desire paths mean their design failed. Sometimes. Usually, they mean requirements changed or your users are more creative than you expected.
I’ve seen desire paths emerge because:
Your workflow optimizes for average users. Power users need shortcuts. They’ll create them whether you want them to or not.
Your product evolved but workflows didn’t. Features accumulate. The five-step process that made sense in v1 is inefficient in v3. Users adapt. Your documentation doesn’t.
Users combine your product with others in ways you didn’t anticipate. They’re not using your product alone. They’re integrating it into their stack. Their “workaround” is how they bridge gaps.
Your mental model doesn’t match theirs. You designed for how you think the work should be done. They’re doing the actual work. Those aren’t the same thing.
The Desire Paths That Reveal Better Design
The best product improvements I’ve seen came from formalizing desire paths users already created.
Example: The export workaround that became a feature. SaaS dashboard. Users kept exporting data to Excel for analysis. Product team saw it as failure—“Why aren’t they using our built-in analytics?”
After watching actual usage: users needed to combine our data with data from other sources. Excel was their integration layer, not a rejection of our analytics.
We built a proper export API. Customers integrated our data into their workflows. Usage increased. The desire path revealed an unmet need.
Example: The support channel that became the product. Users bypassed ticketing system to message employees directly on Slack. Team saw it as abuse—“We have a ticket system for this.”
After analysis: users needed quick answers for simple questions, not tracked workflows for complex issues. We built a Slack bot that answered common questions. Simple stuff stayed in Slack. Complex stuff went to tickets. Everyone happier.
Example: The bug that became a feature. API had a side effect that shouldn’t exist. Users built critical workflows around it. Fixing the “bug” would break their production systems.
We documented it, added tests, and made it official. What was accidental became intentional. The desire path revealed functionality we hadn’t realized was valuable.
The Desire Paths That Destroy Architecture
Not every workaround deserves formalization. Some need to be actively prevented.
Paths that only work at small scale. I’ve seen users exploit race conditions that only surface under load. Their workaround works fine until it doesn’t. Then it takes down production.
Paths that violate security boundaries. Users sharing admin credentials to avoid permission systems. “Works for us” until you have an audit or breach.
Paths that couple systems that should be independent. Users directly accessing databases instead of using APIs. Fast until you need to change the schema. Then everything breaks.
Paths that create operational nightmares. Users triggering manual processes by abusing error conditions. Works until you’re paged at 3 AM because error logs are full.
These paths need guardrails or elimination. Tolerating them turns them into implicit contracts you can’t break.
Why Teams Tolerate Destructive Paths
I’ve watched competent teams support workflows they know are wrong. The reasons are usually:
Fear of losing customers. “If we block this, they’ll leave.” Sometimes true. More often, users adapt if you provide an alternative.
Lack of conviction about the right solution. You know the current path is wrong. You don’t know what’s right. So you support the wrong thing indefinitely.
Confusing “customer is always right” with “customer is always correct.” Customers know their pain. They don’t always know the best solution. Your job is translating their pain into sustainable architecture.
Underestimating the cost of flexibility. Supporting every workflow seems generous until you’re maintaining five different paths to the same outcome, each with unique edge cases.
How to Decide: Pave It or Block It
The framework I use:
Pave the path when:
- Usage data shows significant adoption (not just one loud customer)
- The path solves a real need your official workflow misses
- Formalizing it improves the product for most users
- You can implement it sustainably (not as a hack)
Block the path when:
- It violates security or compliance requirements
- It creates technical debt that will compound
- It only works accidentally or at small scale
- Supporting it prevents better solutions
Leave it alone when:
- It’s a harmless power-user shortcut
- Formalizing it adds complexity for marginal benefit
- Users prefer the unofficial path and it doesn’t hurt anything
Most teams err toward supporting everything. The better default: let users have unofficial workflows, but don’t build features around them until you understand why they exist.
The Real Cost of Tolerance
Every desire path you implicitly support becomes a contract. Change it later, and users feel betrayed.
I’ve watched products become unmaintainable because teams couldn’t say no. Features accumulate. Workflows multiply. Edge cases compound. Eventually, the product is too fragile to evolve.
The developers I’ve seen burn out aren’t the ones working on hard problems. They’re the ones maintaining five different workflows for the same feature because leadership won’t make a call about which one is right.
What Actually Works
Document intentional workflows clearly. If users bypass documentation, that’s signal. If users don’t know official workflows exist, that’s a documentation problem.
Analyze why paths exist before responding. Talk to users. Watch them work. Understand the gap between your design and their reality.
Provide migration paths, not ultimatums. If you’re killing a workaround, give users time and alternatives. Forced changes without migration create enemies.
Build boundaries, not barriers. Good architecture prevents destructive paths while allowing creative ones. Rate limits, permissions, validation—these guide behavior without eliminating flexibility.
Say no clearly and early. “We know users do this, but we won’t support it because…” is better than implicit tolerance that becomes explicit commitment.
The Pattern I’m Seeing Work
Successful teams:
Monitor actual usage, not intended usage. Analytics show what users really do. Compare to what you designed them to do. Gaps are where desire paths form.
Distinguish frequency from importance. One loud customer’s workflow isn’t a desire path. Behavior that shows up across cohorts is.
Ask why three times. Users want feature X. Why? Because their current workflow is slow. Why? Because they’re combining your data with external data. Why? Because they need context your product doesn’t have. Now you understand the real need.
Formalize selectively. Not every workaround deserves implementation. The ones that solve real needs for multiple users do.
Prevent destructively. Don’t just document “please don’t do this.” Add validation, permissions, or architecture that makes destructive paths impossible.
When Desire Paths Mean You’re Wrong
Sometimes desire paths reveal that your entire approach is flawed.
I worked with a team whose product required complex setup. Users kept bypassing setup entirely, using the product in “demo mode” indefinitely. Team saw this as user laziness.
Reality: the required setup added no value for 70% of users. It was complexity they inherited from an enterprise feature set that didn’t apply to SMB customers.
They made setup optional. Adoption increased. Support tickets decreased. The desire path revealed that their required workflow was solving a problem most users didn’t have.
Where This Leaves You
Users will create workarounds. That’s not failure—it’s feedback.
Your job isn’t preventing all desire paths. It’s deciding which ones to pave, which to prevent, and which to ignore.
The teams that fail are the ones who can’t distinguish these categories. They either block everything (rigid, users hate it) or support everything (unmaintainable, developers burn out).
The teams that succeed understand: flexibility is valuable until it becomes chaos. Structure is valuable until it becomes rigidity.
Know your product well enough to know where the boundaries should be. Have the conviction to enforce them. Be willing to move them when users show you a better way.
Desire paths aren’t the enemy. Indecision is.