The customer found the bug in my design before I did. In production. In front of everyone.
Let me back up.
My first time designing for a dialer, I thought I'd covered everything. I mapped every log state I could think of — a call comes in as inbound, goes out as outbound, gets missed by the agent, gets missed by the customer. Right? That's everything.
Then I went deeper. Call not connected. On mute. On hold. Completed. I designed for each one and felt pretty good about it.
Then we shipped.
And a customer asked, "Where's transfer and conference?"
Damn. How do you forget transfer and conference on a dialer? And when something like that slips through, the designer wears it. I do think it was my mistake — a designer's whole job is to imagine every path a user might take and design for it.
So, we spent two more days rebuilding: the transfer and conference widgets, and then how a transferred call should even show up in reports and data — because a new state doesn't just live on the screen, it ripples through everything downstream.
Here's the lesson I walked away with. Can you think of every scenario up front? No. You can't. Nobody can. But you can build the flow so that any new scenario slots in without breaking the ones already there.
Design for the paths you can see. Architect for the ones you can't.
