Async Communication Done Right: How I Work Without Meetings

Async Communication Done Right: How I Work Without Meetings

7 min read Remote Work
Share:

I rarely have meetings.

This isn't because I'm antisocial or because my clients don't need communication. It's because I've built a system where meetings are almost never necessary. Clients feel informed, questions get answered, work moves forward — all without blocking out calendar time.

The secret isn't avoiding communication. It's communicating so well asynchronously that synchronous calls become redundant.

Why I Avoid Meetings

Let me be honest about something: meetings that someone else schedules for me give me a prison feeling.

That might sound dramatic, but it's real. When there's a meeting on my calendar — especially one I didn't initiate — my productivity craters around it. I can't get into deep work knowing I'll be interrupted. I watch the clock. I'm not fully present in whatever I'm doing before the call, and I need time to recover after.

For deep technical work, this is devastating. Programming requires flow states. Meetings shatter them.

So I've structured my work life to minimize meetings. Not by being unavailable, but by making meetings unnecessary through better async communication.

The Tools Are Simple

Nothing fancy here:

Slack for quick communication, questions, updates, and back-and-forth discussions.

Trello (or similar project management tools) for tracking tasks, organizing work, and maintaining visibility into what's happening.

That's it. The magic isn't in the tools — it's in how you use them.

The Core Principle: Communicate Early, Not Later

Most communication problems happen because developers wait too long to surface issues.

"I'll figure it out." "It's probably easy." "I'll ask if I get stuck."

Then three days pass. The "easy" thing turns out to be complicated. Questions pile up. The client wonders what's happening. Now you're behind, stressed, and having that meeting you tried to avoid.

My approach is the opposite: communicate as early as possible.

When I get a new task, I don't immediately start coding. I try to understand it first. I sit with it. I might sketch out an approach or try some solutions upfront — not to finish the work, but to understand what I'm dealing with.

This early exploration reveals questions, edge cases, and potential problems. And I surface those immediately.

The Upfront Conversation

Before I write serious code, I post something like this:

"Here's how I'm thinking about this task:

  1. First, I'll update the database schema to handle X
  2. Then modify the API endpoint to accept Y
  3. Update the frontend form to include Z
  4. Add validation for edge cases A and B

I estimate this will take about 3 days. A few questions before I start:

  • Should Z also appear on the mobile view?
  • For edge case B, do you want an error message or should it fail silently?
  • Is there existing data that needs migration?"

This does several things:

It confirms understanding. If I've misunderstood the task, the client can correct me before I waste time building the wrong thing.

It sets expectations. The client knows what to expect, when to expect it, and what the approach will be.

It surfaces questions early. Instead of getting stuck mid-implementation, I've already identified the ambiguities.

It builds trust. The client sees that I've thought about the problem, not just said "sure, I'll do it."

Never Say "It's Easy" Until You've Tried It

I learned this the hard way.

Early in my career, I'd hear a task description and immediately respond: "Yeah, that's straightforward. I'll knock it out this afternoon."

Then I'd actually start working and discover it wasn't straightforward at all. Hidden complexity. Edge cases. Dependencies I didn't know about. The "afternoon task" becomes a three-day nightmare.

Now I never commit to "easy" until I've actually looked at it.

My response to new tasks is more like: "Got it. Let me dig into this and I'll come back with a plan and estimate." Then I actually explore the problem before making promises.

This isn't slower — it's faster. Because I'm not spending time backtracking, apologizing, and renegotiating timelines.

Keep Them in the Loop

The worst thing you can do in async work is disappear.

Even if everything is going fine, silence makes clients nervous. They start wondering: Is progress happening? Did they forget about my task? Should I check in?

I prevent this by posting updates even when there's nothing dramatic to report:

"Quick update: still working on the API changes. Hit a small snag with the authentication flow but found a workaround. Should have this ready for review tomorrow."

Two sentences. Takes 30 seconds to write. But it reassures the client that work is happening and keeps them informed.

The goal is simple: never let a client wonder what's going on. If they have to ask "any updates?" — I've already failed at communication.

When Calls Actually Make Sense

I'm not allergic to meetings. I'm allergic to unnecessary meetings.

Sometimes async communication breaks down. You're going back and forth on Slack, the messages are getting longer, context is getting lost, and you realize you've spent an hour typing what could be resolved in a 10-minute call.

When that happens, I suggest a call — but on my terms:

"This might be easier to discuss live. I'm available Tuesday 2-4pm or Wednesday morning. What works for you?"

The key difference: I'm suggesting time slots, not asking them to pick a time. When someone else controls the calendar, I lose control of my day. When I offer slots, I've already protected my deep work time.

This small shift makes a huge difference psychologically. A meeting I initiated and scheduled feels collaborative. A meeting someone else dropped on my calendar feels like an interruption.

Setting Expectations Upfront

A lot of async success comes from setting expectations at the start of a client relationship:

"I work asynchronously — I'll send regular updates and respond to messages within a few hours during work days, but I typically don't do real-time calls unless we're stuck on something complex. This lets me focus on deep work and deliver faster."

Most clients are fine with this. Many actually prefer it — they're busy too, and they don't want to schedule meetings any more than I do.

The ones who need constant face-time aren't a good fit for how I work. Better to know that upfront than to struggle with mismatched expectations later.

The Flow of a Typical Task

Here's how async communication looks in practice:

Day 0: Client posts a task in Trello or Slack. I acknowledge it and say I'll review and come back with questions.

Day 1 morning: I explore the task. Understand what's needed. Try a few things to gauge complexity. Write up my approach, estimate, and questions. Post it for client review.

Day 1 afternoon: Client responds with answers and approves the approach. I start implementation.

Day 2: I post a brief progress update. Maybe surface a new question that came up during implementation.

Day 3: I finish the work. Post a summary of what I did, any decisions I made, and where they can test it. Ask for feedback.

Throughout this, the client always knows what's happening. They never have to ask for updates. And we never needed a meeting.

The Benefits Beyond "No Meetings"

Async communication isn't just about avoiding calendar blocks. It has deeper benefits:

Thoughtful responses. In a meeting, you respond in real-time. In async, you can think before you respond. Better answers, fewer mistakes.

Written record. Everything is documented. No "I thought we agreed to X" debates. Just scroll up.

Time zone freedom. Clients in different time zones aren't a problem. We communicate when we communicate; nobody has to take a call at 6am.

Deep work protection. My most valuable output comes from uninterrupted focus. Async communication lets me batch communication into specific times, protecting the rest.

Better questions. When you have to write out your question, you often answer it yourself in the process. The rubber duck effect, but with text.

The One Rule

If I had to reduce async communication to one rule:

Never let the client wonder what's going on.

Communicate early. Communicate often. Surface questions before they become blockers. Post updates before anyone asks. Be honest about timelines and problems.

Do this consistently, and you'll find that meetings become rare — not because you're avoiding them, but because there's nothing left that requires one.

Share: