It was a Wednesday morning standup, the kind where everyone's camera is on but nobody really wants to be there. Maya, our backend lead, mentioned she was blocked on the payment service schema. She'd posted a proposal doc five days ago. Twelve comments. Four emoji reactions. No decision.
"Let's take this offline," our engineering manager said, with the practiced ease of someone who'd said it a hundred times. "We don't need to solve it here."
Maya nodded. I nodded. The standup ended thirty seconds early. Progress.
Except there was no progress.
Over the next week, the doc grew like something feral. Fifteen comments became thirty. Someone added a "TL;DR" that was itself too long to read. Someone else proposed a completely different approach in the margin of comment seventeen, and nobody acknowledged it. The thread didn't converge. It branched, tangled, and then went quiet. The last comment was a thumbs-up emoji from Dan, our staff engineer, posted at 11:47 PM on a Friday. We all interpreted it as agreement. Maya later told me she interpreted it as exhaustion.
Two sprints later, the schema still wasn't decided. We were coding against a temporary interface that someone had built "just to unblock things" and that temporary interface was now serving real customers. The payment service had no official owner. The decision hadn't been postponed. It had evaporated.
I remember sitting with Maya after an incident review—something had broken because the temporary schema didn't handle edge cases—and she said, quietly, "I don't even know who's supposed to decide anymore. Everybody's too polite to just say 'this is what we're doing.'" She wasn't angry. She sounded defeated.
That was the moment I understood what we'd built. Our team wasn't async-first. We were conflict-avoidant wearing the costume of good process. The docs, the threads, the carefully worded Slack messages—they weren't making decisions easier. They were making it possible to never make one at all.
The fix wasn't what I expected. We didn't abandon writing things down. We just stopped pretending that written debate alone could close a loop. We started scheduling what Maya later called "decision windows." Fifteen minutes. No status updates. No screen sharing a half-finished document. Just the three people who actually had context, sitting in a call, with one rule: someone has to leave that call having typed the decision into the doc.
The first one was awkward. We disagreed. Someone had to say "I think we should go with A, and here's why I'm not going to wait for more data." There was a pause, and then the decision got written down. It wasn't perfect. It was done.
What surprised me was what happened to the async discussions after that. They got sharper. People stopped writing essays designed to impress nobody in particular. They laid out trade-offs like adults who knew a real conversation was coming. The doc became a pre-read, not a destination. And Maya, who had been silently carrying the weight of every unmade decision, started looking less exhausted.
The "let's take this offline" habit didn't disappear overnight. But now when someone says it, there's a follow-up question baked into the team culture: "Great—who's scheduling the window?" If nobody steps up, we all know. We're not being thoughtful. We're just letting the thing die politely.
It turns out a decision isn't a document. It's a moment. And moments don't happen in comment threads. They happen when two people look at each other—on a screen or across a table—and one of them says the thing that's been waiting to be said out loud.
Top comments (0)