← All posts App Building

What I Learned Designing for People Who Can't Think Straight

Mar 30, 2026 · 9 min read · Abhishek Gawde

Standard UX advice: reduce friction, make the value clear, guide users to their first win. All of that assumes your user opened the app in a reasonably normal mental state — they read the screen, tapped the right buttons, had enough cognitive bandwidth to make a few choices.

That assumption breaks completely when the user is panicking.

The prefrontal cortex — the part of your brain responsible for reading, decision-making, and following instructions — becomes partially unavailable when the amygdala fires a threat response. Cortisol and adrenaline flood in. Heart rate spikes. Hands may shake. The very system that normally navigates apps is the system that's least available. I built Undulate for this user, and the central design challenge wasn't animation or aesthetics or feature scope. It was: how do you build something useful for a person whose brain is temporarily impaired?

The Onboarding Trap

Most apps open with onboarding. You answer a few questions about your goals, set some preferences, maybe create an account. This is rational design — you're learning about the user, establishing value, making them feel set up. For a note-taking app or a fitness tracker, it works fine.

For a breathing app, it's a disaster.

If someone opens a breathing app mid-panic, every screen between launch and actually breathing is a failure. Every question — "how often do you experience stress?" — is asking a panicking person to reflect and categorize their experience. Every account prompt is asking them to stop what they need and do something administrative. Every preference screen is asking them to make a decision when their decision-making system is degraded and they wanted to breathe 45 seconds ago.

I prototyped a version with a three-screen onboarding flow. Three screens. "What brings you here?" "How familiar are you with breathing techniques?" "Set a daily reminder?" Even that felt wrong. I kept imagining the person it was built for: hands shaking, heart pounding, opening the app and being asked to answer questions about themselves before they could start.

I cut it entirely.

What Zero Onboarding Actually Costs

The honest answer: data and retention mechanics. I don't know what kind of user opens Undulate first. I can't personalize the first experience based on stated goals because I never asked. I can't tell whether they're brand new to breathing techniques or experienced. I have no profile to build on.

It also costs the "setup investment" that drives retention in most apps. When you've answered questions and chosen preferences and felt like you've configured something, you're more likely to return — you've spent something. A cold-start app offers nothing to recover. I gave up that lever deliberately.

Those trade-offs are real. I made them because the alternative was building an app that fails its user at the worst possible moment — the one moment it actually matters.

The Decisions-During-Crisis Problem

Zero onboarding was the easy part. The harder design problem is what happens inside the experience.

When you're anxious, choices are expensive. Anxiety often involves hypervigilance — your threat-detection system is scanning constantly, and that system is resource-hungry. Being presented with eight breathing techniques and asked to pick one is not helpful. It's one more decision at a moment when decisions are costly and your ability to evaluate them is diminished.

My first version opened on a technique selector: see all eight, pick one, start. It was usable. It was also asking someone mid-panic to evaluate options, make a selection, and navigate — all things that are harder when activated.

I rebuilt it so the first thing you see after launch is a breathing animation already in motion. A default technique — a 4-second inhale, 6-second exhale pattern — running immediately. You can swipe to a different world if you want to, but you don't have to. The default assumption is that you need to breathe right now. The option to switch is present without being the required first step.

The principle I kept coming back to

Every choice you add to the critical path is a potential exit point for someone in distress. The question isn't "is this feature useful?" It's "is this feature useful enough to be worth the friction cost for a user who is already struggling?"

Haptics as a Second Channel

One thing I couldn't have reasoned out from design principles alone: haptic feedback matters more than I expected when someone is panicking.

When anxiety is high, visual attention becomes unreliable. You might be looking at your screen without really tracking what you're seeing. The breathing animations in Undulate are designed to be followable without detailed attention — a shape expanding and contracting is readable even with peripheral focus. But haptics provide a second, independent channel.

The phone pulses with the breath rhythm. You feel it in your hand even if you're not closely watching the screen. Your nervous system can follow that cue when your visual attention is scattered. Each of the five worlds — dandelion, whale, paper plane, paper shredder, jellyfish — uses a slightly different haptic texture so the sensory environment feels fully distinct, not just visually different.

I built the first version of the haptic system with the assumption that stronger = better for acute distress. Strong pulses, sharp vibrations. I was wrong. Intense, jolting haptics can increase arousal rather than decrease it — they're alerting signals. I rebuilt the patterns to be gentler and wave-like, aiming for rhythmic rather than punctuating. The goal is entrainment, not notification.

The Emergency Calm Link

The most direct product expression of the zero-friction philosophy is the Emergency Calm Link: undulate.app/calm.

Opening that URL in any mobile browser starts a free guided breathing session immediately. No download. No sign-in. No account. No installation. A breathing animation in a browser tab, available to anyone who gets sent the link. Nothing is tracked. Nothing is stored. Session ends, nothing persists.

The thinking was simple. Panic doesn't wait for someone to have already installed an app. If someone sends a message saying they're panicking and a friend responds with undulate.app/calm, that link should work immediately — no prerequisites, no decisions, no barriers.

From a product standpoint, this is anti-conventional. You're giving away the core experience, freely, without a download. But the core experience of a breathing app is helping someone breathe. A version that requires installation and payment has already failed anyone who needs it unexpectedly. The Emergency Calm Link exists because the alternative — "install the app first, then it helps you" — is not actually an emergency tool.

What 3am Exposed

I did most of my testing during normal hours. This was a mistake.

The experience of opening a breathing app at 3am, alone in a dark room, is meaningfully different from the experience of opening it mid-afternoon during a stress spike. Brightness matters differently. Contrast matters differently. Whether the experience feels cold and clinical versus warm and present matters differently.

I went through several redesigns of the color system specifically for low-light conditions. What read as "calm dark" on a phone screen at noon felt harsh and cold at 3am. The animations that felt soothing during the day felt eerie when they were the only light source. I had to test the experience as the experience actually gets used — and the most acute use case is not a convenient testing environment.

I don't say this to suggest I got it perfect. But it reoriented my testing approach: if something works fine under normal conditions but fails under the conditions where it most needs to work, the normal-condition result doesn't matter.

The One-Time Price Decision

This isn't primarily a post about pricing, but the $3.99 one-time purchase is a design decision, not just a business one.

If someone is in the middle of a panic response and encounters a paywall, there's a version of that interaction where they have to think about money, subscriptions, and whether to spend. That cognitive load is a cost. A one-time purchase — already paid, settled, over — removes that cost from every future interaction. The app is just there. No renewal anxiety, no "is this subscription worth it" question, no barrier between opening and breathing.

I wrote more about the specific trade-offs of one-time vs subscription pricing in this post, but the core reason is the same as the onboarding decision: eliminate the things that put friction between a struggling person and the thing that helps them.

What I'd Change

I still haven't solved the problem of how someone discovers the right technique for their specific situation. All eight techniques in Undulate are distinct — different ratios, different rhythms, different feels. Box breathing (4 seconds in, hold 4, out 4, hold 4) produces a neutral, alert calm. Extended exhale (4 seconds in, 6–8 seconds out) is more sedating, better for sleep-adjacent anxiety. The physiological sigh (double inhale through the nose, long exhale through the mouth) may produce a fast, sharp drop in stress according to Balban et al. (2023, Cell Reports Medicine), and is better for acute spikes.

The current design lets you swipe between worlds and find one that works. That's fine. But I haven't built a good way to guide someone toward the right choice without adding the decision friction I've been trying to eliminate. It's an open problem I'm still thinking about.

I also still don't have good data on haptic preferences across users. What feels right to me and to the people I tested with may not generalize. That's a real gap.

The Principle That Held Everything Together

When I was unsure about any specific decision — onboarding question, feature addition, configuration option — I ran it through one question: does this make the experience better for a person whose hands are shaking and whose brain is partially offline?

Almost everything that didn't pass that test got cut or moved to secondary flows. Most things didn't pass. The result is an app that looks, by conventional product metrics, underbuilt. No account system. No history. No insights dashboard. No social features. No streak. No gamification.

What it has is the thing it needs: open it, breathe, feel better. Everything else was a distraction from that.

If you're in crisis, please reach out to a professional or contact the 988 Suicide and Crisis Lifeline (call or text 988).

The app built around this idea

Undulate opens straight to a breathing animation. No onboarding, no account, no streak. One tap, immediate start. Or try it free in your browser right now — no download needed — at undulate.app/calm.

Download on App Store

Further Reading

For the neuroscience behind why the prefrontal cortex goes partially offline during panic: panic attack brain. For the breathing patterns referenced in this post — extended exhale, box breathing, physiological sigh — and when each one works: breathing exercises for anxiety. For the full comparison of cyclic sighing vs other techniques, including the Balban et al. findings: cyclic sighing.