The line I wrote about the designer
A few years ago, on a remote team, I posted this in our main project channel at the end of a long afternoon:
Guess we're still waiting on design for the checkout modal.
I thought it was mild. It was true, it had no swearing in it, and I'd been waiting three days. About ten minutes later the designer, Ana, sent me a private message. She had finished her part on Monday. She was waiting for the product owner to decide what the error copy should say, and she'd asked twice. My line, posted where the whole team and the product owner could see it, made her look like the hold-up. She was not annoyed so much as tired, which was worse.
What I had done was blame the person who was visible rather than the dependency that was actually stuck. I didn't know who owned the copy decision, so I named the last person I'd seen touch the file. The "guess" did the rest. It's a small word that says: I've given up expecting anything from you, and I'd like everyone to notice.
That is what passive-aggressive blocker messages usually are. They're not evil. They're a tired person trying to make a delay visible without asking a direct question, because a direct question feels like confrontation. The result is a message that stings someone and unblocks nothing.
What the passive version is really doing
I've found it helps to notice what a passive line is protecting. Mostly it protects the writer. "Still waiting on..." tells everyone the delay isn't your fault. "As mentioned three times..." builds a record. "Not sure anyone is looking at this" invites reassurance. "Trying my best but..." asks for sympathy.
None of those asks for an action. That's why they fail. The reader can respond with an apology, a reassurance, an emoji or silence, and all four leave you exactly where you were. Worse, the person who should act often isn't the person who reads it first, so a different person feels accused while the real owner scrolls past.
The direct version feels riskier to write and is much safer to receive. It names the dependency, the person who can resolve it, the date it matters by, and what happens if it doesn't arrive.
The direct version feels riskier to write and is much safer to receive.
When I rewrote my line about the modal properly, after finding out who actually owned the copy, it looked like this:
Checkout modal: blocked on the final error copy. @product, could you pick option A or B in the doc by Wednesday 16:00 CET? Design is done and ready. Without the copy we can't merge before Thursday's regression run.
No history, no sigh. It also cleared Ana's name in the same breath, which I hadn't planned but was glad of.
The tone test I use now
Before I send anything that says "blocked" or "waiting", I read it as if I were the person it's about. If it would make me defensive, I rewrite it. A few pairs I've collected over the years, mostly from my own drafts:
| Sounds passive | Says the same thing usefully |
|---|
| "As mentioned three times..." | "Need the API key in the vault. Requested Tuesday, need it by Thursday for the deploy." |
| "Guess we're still waiting on Legal" | "Blocked on refund wording approval. Owner: legal. Needed by Friday 17:00 CET." |
| "Not sure anyone is looking at this" | "Ticket 441 has no assignee. Who can grant read access to production logs?" |
| "Trying my best but..." | "Done: repro attached. Blocked: staging is missing test user 88." |
| "Just bumping this again" | "Following up on the hosting login. Without it, Friday's launch moves to Monday." |
Direct does not mean sharp. It means the message would still make sense if the reader had never met you and had no idea how long you'd been waiting. The dates and the consequence carry the urgency, so the adjectives don't have to.
Clients get the passive version more than colleagues
Freelancing taught me this lesson a second time, with money attached. I was finishing a small business site and needed the hosting login to launch. I'd asked twice. The third email began "As per my last two emails..." and I sent it feeling entirely justified.
The reply came the next day, polite and noticeably cooler. The person who held the login was on leave, my contact had been trying to reach her, and he felt told off. We launched, he paid, and he never sent me the follow-up work he'd mentioned at the start. I can't prove the email cost me that, but I know it didn't help.
What I write now to clients is closer to this:
To launch on Friday I need access to your hosting control panel. If the person who manages it is away, your hosting provider can usually issue a temporary login. If I don't have access by Wednesday 15:00, I'll move the launch to Monday and let you know.
That message has a deadline, an alternative path, and a consequence, and none of it is about me being annoyed. Clients are owners of decisions too. Telling them plainly what you need and what happens if it doesn't come is a courtesy, not a complaint.
Facts in public, feelings in private
Sometimes the frustration is real and deserved. Someone really has ignored three clear messages, or a team really does sit on every access request for a week. That deserves a conversation, but not in the shared channel and not inside a blocker message.
In the shared record, stay boring on purpose. "Release is Thursday. Without log access I can't verify job 884. @sam, could you grant read access on the logs bucket?" lets Sam say yes or no. "It's impossible to work when infra never responds" starts a debate about culture, and you won't get your access while that debate is running.
If the pattern keeps repeating, take it to your manager or the other team's lead privately, with dates and examples. That's not tattling. It's giving someone who can change the process the facts they need to change it.
Escalating without heat
When a needed-by date passes, the temptation is to make the next message louder. I've found the opposite works. Escalation should add fresh facts, not more emotion:
Still blocked on production log access for job 884. Needed for Thursday's release, which is now at risk for Friday. Asked @sam on Monday in INF-12. Could someone assign this or suggest another route by 15:00 UTC?
That message is more urgent than the first one, and it contains no commentary about anyone's responsiveness. The release name, the new date and the specific ask do all the work.
Copy a manager in only when the blocker crosses a milestone you've already agreed to flag. Pulling in a senior name to apply social pressure in public tends to get you a quick answer once and a reluctant one forever after.
When you're the one being waited on
The tone problem runs both ways. If someone sends you a clear blocker, reply with yes, no, or a new date. "Looking into it" with no time attached is how passive chains start, because the sender has nothing to plan around and the next message they write will be a little sharper.
If you can't help, say who can. If the date is impossible, propose the earliest realistic one in the same message. I once received "not sure anyone is looking at this" about a review I genuinely had forgotten, and my first reaction was defensiveness, not action. That's worth remembering from the other side. A passive message makes even a guilty reader slower.
Teams that punish people for raising blockers end up with hidden blockers instead. Those surface later as missed deadlines with no warning, which are far more expensive than an awkward message on a Tuesday.
When the blocker is your own fault
Own it plainly and early. "I merged without running the migration on staging. Rolling back now, back in about 30 minutes." That sentence is not passive and not dramatic, and it is much faster for everyone than a vague "some issues with the deploy".
People forgive mistakes they can see. What they struggle with is a mystery, especially one that someone is clearly trying to keep small.
Keep blockers where everyone can see them
Passive blockers have a habit of living in private messages. "We're waiting on design" in three separate DMs means three people chasing the same designer, which is a duplicate-work problem as much as a tone one. Put the blocker on the ticket or in the shared channel once, with an owner and a date, and point people to it. There's more on that in avoiding duplicate async work and in when "just ping me" replaces a system.
Your daily note should mirror the same thing. If something is blocked, it goes under Blocked with an owner and a date, not tucked into "still open" where it reads like slow progress. End-of-day status update has the shape I use. And if you can't name the ask at all, you might not be blocked yet. You might still be planning, and the honest fix is a clear next step, which is the argument in why remote workers need a clear next action.
I still feel the pull to write "guess we're still waiting" at the end of a long afternoon. What stops me now is picturing the person who'll read it first, who is often not the person who can fix it. A blocker message should be a polite, dated request to the right person with a consequence attached. Anything else is a sigh in writing, and sighs don't unblock anything.