Fritz Hut | Thoughts & Commentary

Art, culture, and the conversations that matter.

Archives (page 2 of 11)

Why Most Engineering Teams Need Fewer Meetings and More Asynchronous Communication

You know the feeling. You’re 30 minutes into a daily standup that was supposed to take 15, and someone is narrating their Jira board like it’s a bedtime story. It’s not boredom that gets you. It’s the slow, creeping dread that your team’s most expensive resource—uninterrupted time to actually think—is being carved up by the very processes that were supposed to help. Meetings have become the default coordination mechanism in software engineering, and it’s a train wreck. Not because meetings are inherently evil, but because they’ve metastasized into a synchronous, real-time addiction that punishes deep work and rewards performative busyness. The alternative isn’t chaos. It’s asynchronous communication: a deliberate, written-first culture where information flows without dragging everyone into the same room at the same time. This isn’t a productivity hack. It’s a structural fix for a broken operating model.

Engineers collaborating around a whiteboard with sticky notes and diagrams

Engineering teams are complex systems. When you treat coordination as a series of live, synchronous events, you introduce coupling that rivals the worst spaghetti code. Every meeting creates a dependency: you can’t start work until the meeting happens, you can’t make decisions without the meeting, and you can’t share context without yanking people away from their actual work. The result is a team that moves at the speed of its calendar, not its capability. Asynchronous communication decouples these dependencies. It lets information travel at the speed of reading, not the speed of scheduling. And it forces a discipline that most teams desperately need: the ability to write clearly, think before responding, and treat other people’s attention as the finite, non-renewable resource it is.

The Real Cost of Synchronous-By-Default

Let’s talk numbers, because engineers respect data. A single one-hour meeting with six engineers doesn’t cost one hour. It costs six hours of focused work, plus the cognitive switching costs before and after. Research on task switching shows it can take over 23 minutes to regain deep focus after an interruption. If your team has a morning standup, a mid-day sync, and an afternoon review, you’ve effectively capped anyone’s ability to do deep work at zero. You’re paying senior engineers to context-switch like a help desk, and that’s a terrible return on investment.

The damage goes deeper than lost time. Synchronous communication favors the loud, the quick-witted, and the native English speakers. It punishes introverts, remote workers in distant time zones, and anyone who needs time to process information before forming an opinion. Your meeting-heavy culture isn’t just inefficient; it’s exclusionary. You’re optimizing for consensus theater while the real thinking happens in the margins—or doesn’t happen at all because nobody has the uninterrupted blocks to do it.

How Meetings Become Organizational Scar Tissue

In code, we talk about technical debt: the accumulated shortcuts that slow down future development. Meetings are organizational debt. They’re added as a quick fix—“let’s sync on this”—and then never removed. Over time, they calcify into rituals that nobody questions. The weekly status meeting that started during a crisis three years ago? Still on the calendar. The cross-team alignment sync that was supposed to be temporary? Now it’s a recurring series with 15 attendees and no agenda. This is the organizational equivalent of a function with 47 parameters. It grew without design, and now it’s too politically dangerous to refactor.

Asynchronous communication forces you to confront this debt. When you can’t rely on a meeting to disseminate information, you have to write it down. That written record becomes searchable, linkable, and referenceable. It doesn’t disappear when someone leaves the company. It doesn’t require repeating the same update five times for five different audiences. It’s a single source of truth that scales horizontally, while meetings scale vertically—and poorly.

What Asynchronous Communication Actually Looks Like

This isn’t about replacing meetings with Slack. If you simply move the same chaotic, real-time chatter from a conference room to a chat app, you’ve accomplished nothing. True asynchronous communication is structured, written, and designed for consumption on the reader’s schedule, not the writer’s. It uses tools like long-form documents (design docs, RFCs, decision records), recorded video updates (Loom, short screencasts), and project management systems that track work status without requiring a verbal handoff.

Person typing on laptop with notebook and coffee, representing focused asynchronous work

The key shift is from “let’s meet to discuss” to “here’s a document, please comment by Thursday.” This respects the maker’s schedule, a concept Paul Graham articulated years ago that most companies still ignore. Makers—engineers, designers, writers—need long, uninterrupted blocks to produce value. Managers can operate on a manager’s schedule, chopped into one-hour slots. When you force makers onto a manager’s schedule, you get a team that’s great at attending meetings and terrible at shipping software.

Writing as a Core Engineering Skill

Here’s a hard truth: if your engineers can’t write clearly, your team has a communication problem that no number of meetings will fix. Asynchronous culture demands writing. Design documents, architecture decision records (ADRs), postmortems, project proposals—these are the artifacts of a healthy engineering organization. They force clarity. You can’t hand-wave through a written argument the way you can in a verbal discussion. If your reasoning is flawed, it shows up on the page. If your assumptions are unstated, they become visible gaps.

This is why companies like Amazon have institutionalized the six-page narrative memo. It’s not about bureaucracy. It’s about forcing rigorous thinking. A well-written document is a thinking tool, not just a communication tool. It lets the entire team examine the logic, poke at the edges, and build on the ideas without the time pressure of a live meeting. The comments and revisions become a permanent record of the decision-making process, which is invaluable when someone asks six months later, “Why did we build it this way?”

Identifying the Meetings You Should Kill First

Not all meetings are evil. Some require real-time collaboration: brainstorming sessions, complex technical discussions with multiple stakeholders, sensitive one-on-ones. The problem is that most recurring meetings don’t fall into these categories. They’re status updates, information broadcasts, and coordination overhead disguised as collaboration. Here’s a simple diagnostic: if the meeting could be replaced by an email, a document, or a five-minute video without losing fidelity, it should be.

Start with the daily standup. In most teams, it’s become a status report for the manager, not a coordination tool for the team. Replace it with a written check-in in your project management tool or a dedicated Slack channel. Each person posts what they worked on yesterday, what they’re working on today, and any blockers. The team reads it on their own time. If someone has a blocker, they can raise it immediately in a dedicated channel or schedule a focused conversation with the relevant person. You’ve just saved 30 minutes per person per day and eliminated the most common meeting complaint: “This could have been an email.”

Next, audit your recurring calendar. For every standing meeting, ask: what’s the output? If the answer is “alignment” or “visibility,” you have a process problem, not a meeting problem. Alignment comes from shared understanding, which comes from shared documents. Visibility comes from transparent work tracking, not from verbal updates. Kill the meeting and build the system that makes it unnecessary.

The Tools That Enable Async, Not Just More Noise

Tool choice matters, but it’s secondary to culture. You can’t Slack your way to asynchronous nirvana. That said, certain tools lower the friction. Long-form writing tools like Notion, Confluence, or Google Docs work for collaborative documents. Loom or other screen recording tools let you share complex ideas with visuals without scheduling a call. Project management tools like Linear, Jira, or Asana track work status so you don’t need a meeting to know what’s happening. The common thread: they all allow consumption on the reader’s schedule.

Version control platforms like GitHub or GitLab are inherently asynchronous. Pull requests, code reviews, and issue discussions happen without real-time coordination. This is the model to extend to the rest of your work. If your code collaboration is async but your planning and decision-making are synchronous, you’ve got an impedance mismatch that creates constant friction.

When Async Fails: The Edge Cases

Async isn’t a silver bullet. There are situations where synchronous communication is genuinely necessary. Complex technical discussions with multiple experts often benefit from real-time back-and-forth. Crisis situations demand immediate coordination. Relationship-building and trust formation can be harder without some face-to-face interaction. The goal isn’t to eliminate meetings entirely; it’s to make them the exception, not the rule.

The danger is when teams use these edge cases to justify the status quo. “We need our daily standup because sometimes there are blockers” is a failure of process design. If blockers only surface during a scheduled meeting, you have a deeper problem: people aren’t raising issues when they occur. Fix that cultural problem directly. Create a norm that blockers are escalated immediately, not saved for the next day’s meeting. The meeting is a bandage, not a cure.

Team collaborating around a table with laptops and documents, showing a focused working session

Remote and Distributed Teams: Async Is Non-Negotiable

If your team spans time zones, synchronous-by-default is actively harmful. You’re forcing some team members to attend meetings at 6 a.m. or 10 p.m. regularly. This isn’t just inconvenient; it’s a fast track to burnout and attrition. Async communication is the only scalable way to include people across time zones without creating second-class team members. It also forces you to document decisions and context, which benefits everyone, including future hires who weren’t in the room when decisions were made.

Many companies claim to be remote-friendly while maintaining a synchronous culture centered on one time zone. That’s not remote-friendly. That’s office culture with a longer commute. True remote work requires rethinking how information flows, and async is the foundation. Without it, you’re just replicating the dysfunctions of a co-located team across Slack and Zoom, and the results are predictably worse.

Implementing Async Without Causing a Revolt

Shifting a team from synchronous to asynchronous communication is a cultural change, and cultural change is hard. If you announce on Friday that all meetings are canceled starting Monday, you’ll get chaos and resentment. Start with a pilot. Pick one recurring meeting—the daily standup is the easiest target—and replace it with a written process for two weeks. Gather feedback. Tweak the format. Show the team the time savings and the quality of information sharing. Let the results speak for themselves.

Invest in writing skills. Many engineers are terrible writers because nobody ever taught them and the culture never demanded it. Provide templates for async updates. Give feedback on clarity and conciseness. Make writing a valued skill in performance reviews. When people see that clear writing leads to fewer interruptions and more autonomy, they’ll adopt it willingly. When they see that verbose, unclear writing leads to more meetings to “clarify,” they’ll improve or they’ll self-select out.

Leadership’s Role in Modeling Async

This fails if leadership doesn’t model it. If the CTO sends a Slack message saying “let’s jump on a quick call” every time there’s a question, the culture won’t change. Leaders must write. They must share written updates, make decisions in documents, and respect their team’s focus time. They must stop using “I’m a verbal processor” as an excuse to hijack other people’s schedules. Verbal processing is fine—do it in a document, record a video, or talk to yourself. Don’t make it your team’s problem.

Leaders also need to protect the async experiment from organizational gravity. Other departments, other executives, and external stakeholders will still want meetings. That’s okay. The goal isn’t to refuse all meetings; it’s to make your team’s default communication mode async. When a meeting request comes in, the first question should be: “Can we handle this with a document first?” Over time, this shifts the entire organization’s expectations.

Measuring the Impact: What Improves When Meetings Die

You’ll know it’s working when you see these signals: pull requests get reviewed faster because people have uninterrupted time. On-call incidents get resolved more smoothly because documentation is current and searchable. New hires ramp up quicker because they can read the decision history instead of relying on tribal knowledge. Team satisfaction scores improve because people feel in control of their time. Shipping velocity increases not because people are working harder, but because they’re working with fewer interruptions.

One counterintuitive benefit: meetings that survive the purge become much better. When you reduce the total meeting load, the remaining synchronous time is treated as precious. People come prepared. Discussions are focused. Decisions actually get made. You’ve eliminated the organizational filler and kept the substance. That’s a meeting culture worth having.

Frequently Asked Questions

How do you handle urgent issues without real-time meetings?

Urgent issues should be rare in a well-run engineering team. If everything is urgent, you have a prioritization problem, not a communication problem. For genuine emergencies—production outages, security incidents—real-time coordination is appropriate. Define clear escalation paths: a dedicated incident channel, an on-call rotation, a war room protocol. The key is that these are exceptions, not the daily operating model. If you’re using “urgent” to justify constant interruptions, you’re misusing the word.

Won’t async communication slow down decision-making?

It depends on what you mean by “slow.” If you measure decision speed by how quickly a meeting can be scheduled, async might seem slower. But if you measure by how quickly a well-reasoned, documented decision is made and communicated to everyone who needs to know, async is often faster. Synchronous decisions are fast to make and slow to propagate. Async decisions take slightly longer to form but are instantly available to the entire organization. Over time, the async approach compounds: decisions build on each other, context accumulates, and the team gets faster because it’s not constantly reinventing understanding.

What about team bonding and culture? Don’t we need meetings for that?

Team bonding is important, but it doesn’t require status meetings. Separate social connection from work coordination. Schedule optional social events, virtual coffee chats, or in-person offsites for relationship-building. These are valuable and should be protected. But don’t confuse them with the daily coordination machinery. A daily standup is a terrible social event, and a team happy hour is a terrible place to discuss project blockers. Keep the purposes distinct, and you’ll do both better.

How do we handle performance feedback and sensitive conversations?

One-on-ones, performance reviews, and sensitive feedback conversations are inherently synchronous. They require real-time, private discussion. These meetings should stay. The goal isn’t to eliminate all synchronous communication; it’s to eliminate the low-value, recurring, coordination-overhead meetings that consume the bulk of the team’s time. Protect the high-value synchronous interactions by clearing out the noise around them.

The shift to asynchronous communication isn’t a productivity trend. It’s a recognition that software engineering is a thinking profession, and thinking requires uninterrupted time. Every meeting you eliminate is an investment in your team’s ability to do the work they were hired to do. Start small, measure the results, and let the data make the case. Your team’s code—and their sanity—will thank you.

How to Evaluate a Codebase Before You Join the Team

Evaluating a codebase before you sign the offer isn’t about grading the code. It’s about diagnosing the team. A repo is a fossil record of every management misfire, every stupid deadline, and every architecture argument someone lost in a conference room. The code itself is rarely the villain. The patterns of neglect, over-engineering, and sheer terror frozen into the directory structure—those are what will grind you down. I call this organizational archaeology. Treat the codebase as an artifact of the engineering culture, and you’ll spot the red flags no hiring manager will ever mention. If you’re a senior engineer, a staff engineer, or a CTO walking into a turnaround, this is your due diligence. It’s the difference between joining a team that builds and a team that just patches.

The Commit Log as a Cultural Autopsy

Forget the README. The commit history is the most honest document in the repository. It tells you who works weekends, who owns what, and whether the team treats version control as a communication tool or a backup script. Start by running git log --format='%an' | sort | uniq -c | sort -nr. If 80% of the commits come from one person, you’re not joining a team. You’re joining a single point of failure with a supporting cast. That person is probably burned out, overly critical in code reviews, and has veto power over every technical decision because they hold all the context in their head.

Next, look at the commit messages. Are they descriptive, or do you see a wall of “fix,” “update,” and “wip”? A team that writes lazy commit messages writes lazy code. They’re not thinking about the maintainer, which means they’re not thinking about you. One particularly damning pattern is the “megacommit”—a single commit that touches 40 files across the UI, API, and database layers. This is a sign of a team that doesn’t understand separation of concerns or is forced to ship features in a panic. Either way, it means the codebase is a monolith in practice, even if it’s split into microservices on paper.

The Blame Game

Use git blame on the files that change most frequently. If you see the same few names on every hot file, you’ve found the team’s bottlenecks. More importantly, look for files where the original author is long gone and the current maintainers are just adding patches on top of patches. These are the “haunted forests” of the codebase—areas everyone is afraid to refactor because nobody understands the original intent. A healthy team has a rotation of names on every file. A sick team has a graveyard.

The Dependency Manifesto

Open the package manager file—package.json, requirements.txt, go.mod, whatever. This is a political document. It tells you how the team balances stability against novelty, and how much they trust external maintainers. First, check the version pinning. If every dependency is pinned to an exact patch version, the team has been burned by a breaking change in the past and now trusts no one. That’s not necessarily bad—it’s a scar that tells a story. But if dependencies are unpinned and the project is more than a year old, you’re looking at a team that doesn’t know what reproducibility means.

Count the number of dependencies. A typical web application should not need 1,500 npm packages to render a form. A bloated dependency tree is a sign of architectural laziness—pulling in a library for a three-line function because nobody wanted to write a utility module. It’s also a security nightmare. Check for abandoned packages. Run npm outdated or the equivalent. If you see packages that are two major versions behind, ask about it in the interview. If they say “we’ve been meaning to upgrade but it’s not a priority,” what they mean is “we do not invest in maintenance, and you will be the one to fix it when it breaks.”

Forking and the “Not Invented Here” Syndrome

Look for internal forks of public packages. A team that maintains its own fork of a common library has either a very good reason or a very bad case of control-freak syndrome. If the fork exists because the team needed a specific patch and contributed it upstream, that’s a sign of maturity. If the fork exists because “we didn’t like the direction of the project” and it’s now 200 commits behind upstream, you’re looking at a team that builds silos. They’ll build one around you too.

Testing: The Team’s True Religion

Don’t ask “do you write tests?” Every team says yes. Instead, look at the test files. Run the test suite and watch the output. If the tests take 45 minutes to run and half of them are skipped, the team has given up on testing as a practice. They keep the suite around like a gym membership—it makes them feel better, but they never use it. Check the coverage reports, but don’t obsess over the percentage. 90% coverage can be a lie if the tests are just calling functions without assertions. Look at the quality of the tests. Are there tests that mock the entire universe and test nothing but the mocking framework? That’s a team that values ceremony over safety.

One of my favorite tricks is to look for the oldest test in the suite. If it’s a brittle, end-to-end test that breaks on every third commit and has been commented out and uncommented six times, you’ve found the team’s collective trauma. That test represents a production outage from three years ago that nobody has had the courage to properly fix. The team’s entire deployment process is probably built around placating that one test.

The Flaky Test Graveyard

Search the codebase for keywords like “skip,” “ignore,” “flaky,” “TODO,” and “FIXME.” A healthy codebase has a few of these, clustered around areas of active development. A sick codebase has hundreds, scattered like confetti, some dating back to the initial commit. Each one is a broken promise. The team has learned to live with them, which means they’ve learned to live with broken windows. That attitude will infect every other engineering practice.

Architecture as Organizational Chart

Conway’s Law isn’t a theory; it’s a physical law of software. The codebase structure will mirror the communication structure of the team that built it. If the codebase is split into perfectly decoupled microservices but the team is 12 people sitting in one room, someone has been reading too many blog posts. That architecture will crumble the first time a cross-cutting change is needed, because the organizational boundaries don’t match the service boundaries. Conversely, if the codebase is a monolith but the team is split into three squads on different continents, you’ll spend half your time in merge conflict resolution.

Look at the directory structure. Does it reflect the domain, or does it reflect the framework? A codebase organized by technical role—controllers/, models/, views/—is a sign of a team that thinks in terms of technology, not in terms of the problem they’re solving. A codebase organized by feature or domain—invoicing/, user-management/, search/—is a sign of a team that understands the business. The former is easy to navigate if you know the framework; the latter is easy to navigate if you know the product. Which one do you want to learn?

The Shared Kernel Anti-Pattern

Watch out for a common/ or shared/ or utils/ directory that everything depends on and nobody owns. This is the tragedy of the commons in code form. It becomes a dumping ground for functions that two teams needed but neither wanted to maintain. Over time, it accretes circular dependencies and becomes impossible to refactor. If you see a utils.js with 2,000 lines and no tests, run.

Documentation: The Lies We Tell Ourselves

Every team has a README.md. Most of them are fiction. The real documentation is in the Slack channel, the wiki that nobody updates, and the tribal knowledge stored in the tech lead’s head. But you can still learn from the artifacts. Check the last commit date on the documentation files. If the CONTRIBUTING.md was last touched two years ago and still references a branching strategy the team abandoned, you’re looking at a team that doesn’t onboard well. You’ll be expected to “figure it out.”

Look for architecture decision records (ADRs). These are short documents explaining why a particular technical decision was made. If the team has a directory full of ADRs, they’re thoughtful and intentional. If they have none, decisions are made in hallways and forgotten. Ask in the interview: “Can you show me an example of a recent ADR?” If they blink at you, that’s your answer.

Deployment and Operations Scars

The CI/CD pipeline is the team’s nervous system. If it’s slow, flaky, and requires manual intervention, the team is operating in a constant state of low-grade stress. Look at the build history. A pipeline that fails on every other commit and requires a “re-run” is not a pipeline; it’s a suggestion. Check the deployment frequency. If the team deploys once a month and it’s a big ceremony with a rollback plan and a war room, they don’t trust their own code. That means they don’t have good testing, good monitoring, or good rollback mechanisms. You’ll spend your first six months just making deployments boring again.

Look at the infrastructure-as-code files. If the production configuration is in a separate, private repository that only the ops team can see, you’re joining a team with a wall between developers and operations. That wall is where responsibility goes to die. You’ll write code, throw it over the wall, and hope it works in production. When it doesn’t, you won’t have the access to debug it.

Monitoring and Alerting

Ask to see the production dashboards. If the team doesn’t have dashboards, or if the dashboards are all green because the alerting thresholds are set to “never page,” you’re joining a team that flies blind. Look for the on-call rotation. If there’s no rotation, or if the same person has been on call for six months, the team doesn’t take operational responsibility seriously. That person is a martyr, and you’ll be expected to join the religion.

How to Ask About What You Find

You now have a list of red flags. Don’t walk into the interview and recite them like a prosecutor. That’ll just make people defensive. Instead, frame your questions as curiosity. “I noticed the test suite takes about 30 minutes to run—how does that affect your development workflow?” If they say “oh, we just run the tests locally and only run the full suite in CI,” they’ve acknowledged the problem and have a workaround. If they say “it’s fine, we’re used to it,” they’ve normalized the pain. That’s a cultural problem, not a technical one.

Ask about the last time they deleted a significant amount of code. A team that never deletes code is a team that’s afraid of their own codebase. They’re hoarders. Ask about the worst bug they shipped in the last year. If they can’t think of one, they’re either not monitoring production or they’re lying. If they tell you a story with a beginning, middle, and end—including the postmortem and the changes they made—you’re talking to a mature team that learns from failure.

FAQ

What if I don’t have access to the codebase before I join?

Many companies won’t give you repository access until your first day. That’s normal. But you can still ask for a guided tour during the interview process. Ask the hiring manager: “Can one of the engineers walk me through the codebase structure and the CI/CD pipeline?” If they refuse, that’s a red flag in itself. If they agree, you can ask the same diagnostic questions while screen-sharing. Pay attention to how the engineer navigates the code. Do they know where things are, or are they searching and guessing? That tells you how well the team shares context.

What’s the single biggest red flag in a codebase?

A lack of tests combined with a lack of documentation. Either one alone is survivable. You can add tests to undocumented code, or you can document untested code. But if neither exists, the team is operating on oral tradition alone. That means the codebase is a black box, and the only way to understand it is to ask the elders. If the elders leave—and they will—you’re left with a haunted forest and no map. This is the most common failure pattern I see in startups that grew too fast.

How do I evaluate a codebase that’s being rewritten?

Rewrites are the nuclear option of software engineering, and they usually fail. If the team is actively rewriting the codebase, ask why. If the answer is “the old code is a mess and we want to start fresh,” you’re joining a team that doesn’t understand the business logic embedded in that mess. The rewrite will take three times longer than estimated and will miss critical edge cases that the old system handled. A better answer is: “We’re incrementally replacing specific modules because the old architecture can’t scale for reason X.” That shows they understand the tradeoffs and aren’t just chasing technical vanity.

What tools can I use to automate this evaluation?

Static analysis tools can give you a quick health check. cloc counts lines of code and breaks them down by language, which helps you understand the codebase composition. dependency-cruiser visualizes dependency graphs and can spot circular dependencies. code-maat is a command-line tool that mines commit history for patterns like change frequency, author churn, and hotspots. These tools don’t replace human judgment, but they can confirm or refute your gut feelings with data. If you want to go deeper, Adam Tornhill’s work on code as a crime scene is the definitive resource on mining software repositories for organizational insights.

The Decision Framework

After you’ve done your archaeology, you need to make a decision. I use a simple framework: separate the problems into “technical debt” and “cultural debt.” Technical debt is fixable. You can refactor a monolith, add tests, upgrade dependencies. Cultural debt is not fixable by you. If the team doesn’t value testing, doesn’t write documentation, doesn’t do postmortems, and doesn’t delete dead code, you won’t change that as a new hire. You’ll either burn out fighting it or assimilate and become part of the problem.

Your goal isn’t to find a perfect codebase. Perfect codebases don’t exist. Your goal is to find a team whose problems you’re willing to live with. Every codebase has scars. The question is whether the team is healing those scars or just hiding them under bandages. Join a team that debrides its wounds. Avoid a team that pretends they’re not bleeding.

This is the first article in what I plan to make a recurring column: Organizational Archaeology. Next up: how to run a codebase audit in your first 30 days without making everyone hate you. If you have a horror story from a codebase you inherited, I want to hear it. The worst ones are always the most educational.

A developer staring at a messy codebase on multiple monitors, looking overwhelmed

Two engineers discussing code on a whiteboard, one pointing at a diagram

A laptop screen showing a terminal with git log output and a coffee cup nearby

The Hardest Problem in Computer Science Is Still Naming Things — And Your Postmortem Titles Prove It

The Hardest Problem in Computer Science Is Still Naming Things — And Your Postmortem Titles Prove It

Every engineering team has a values poster. Every engineering team also has a service called “data-service-v2.” One of these tells you the truth about the culture.

You know the joke. Two hard problems in computer science: cache invalidation, naming things, and off-by-one errors. It’s funny because it’s three things, and because every engineer has lived it. But the joke trained us to think of naming as a technical annoyance — a friction point between writing code and shipping it, something you solve with a thesaurus and a team vote, then forget about.

I want to argue something different. The names your team chooses — for services, projects, architecture decisions, incident postmortems, refactoring initiatives, Slack channels — are the most honest cultural artifacts you produce. More honest than your values poster. More honest than your engineering handbook. More honest than that paragraph on your careers page about “engineering excellence.” Names encode decisions. They encode who was in the room when the decision was made. They encode what the team knew at the time, what it was afraid of, and what it was trying to avoid admitting. And bad names persist not because teams are lazy — they persist because renaming is politically expensive, because the person who chose the name has usually left, and because the name often encodes a decision that someone else made in a meeting you weren’t invited to.

If you want to diagnose a team’s culture, don’t read its style guide. Read its names.

§ 1 — The Service Called “Platform”

I once joined a team that had a service called “platform.” I asked what it did. Three engineers gave me three different answers. One said it was an API gateway. One said it was a data aggregation layer. One said it was “the thing that talks to the vendors.” The service was four years old, had twelve contributors in its git history — seven of whom had left the company — and had accumulated so many responsibilities that any attempt to describe it required the word “also” at least twice per sentence.

The name “platform” wasn’t a mistake. It was a fossil. At the time it was named, it probably was a platform — a thin layer abstracting away vendor integrations. But the name carried no constraints, and because it carried no constraints, it accumulated every responsibility no other service wanted to own. “Platform” is a name that means “whatever we need it to mean,” and that kind of name is a standing invitation to dump work into a service nobody has to think about until it breaks.

Generic names aren’t a naming problem. They’re a boundary problem. A service called “platform” or “core” or “common” or “utils” is a service with no edges, and a service with no edges grows until it becomes the place where engineering goes to die. The name doesn’t cause the dysfunction. It enables it. The name says: this thing has no specific purpose, so any purpose will do.

I’ve seen this pattern at every company I’ve worked at. The service called “gateway” that became a monolith. The service called “shared” that every team depended on and no team owned. The service called “legacy” that was newer than three services called “new-thing.” The names are diagnostic — they tell you that at some point, the team stopped being willing to draw boundaries, and the name was the first place that reluctance showed up.

§ 2 — Version Numbers That Erase History

Then there’s the version-number name. “data-service-v2.” “auth-rewrite.” “payments-v3.” These names are everywhere, and they share the same pathology: they tell you something came before, but they don’t tell you what changed, why it changed, or what the previous version got wrong.

“data-service-v2” answers the question “is this the new one?” and refuses to answer any other question. What was v1? Why did it need replacing? Is v2 a rewrite, a refactor, or a parallel implementation? Will v1 be decommissioned, or will it run alongside v2 for the next three years while everyone pretends that’s temporary? The name gives you nothing.

The version-number name is a symptom of a team that decided not to commit to a narrative. Naming something “v2” is a way of saying “we’re moving forward” without specifying what forward means. It’s the engineering equivalent of “new and improved” — technically informative, culturally useless. And these names persist because the moment you give something a specific name — “the event-sourced billing service” or “the synchronous payments gateway” — you’ve made a commitment about what it is and what it isn’t. Version numbers let you dodge that commitment.

I’ve watched teams build v3 of a service while v2 was still being built. I’ve watched teams maintain v1, v2, and v3 simultaneously, each with its own on-call rotation, because nobody could agree on which version was canonical. The version-number name doesn’t track progress. It tracks the accumulation of decisions nobody was willing to close out.

§ 3 — Incident Names That Minimize What Happened

This is where naming gets serious. If your service names are cultural artifacts, your incident names are cultural fingerprints.

I’ve seen postmortems titled “Minor API degradation on March 14” that described a four-hour outage affecting the entire checkout flow. I’ve seen incidents codenamed “wobbly Tuesday” that caused six-figure revenue loss. I’ve seen an incident called “the blip” that took down authentication for forty minutes and locked out every internal tool — including the incident management dashboard.

The names we give incidents aren’t neutral labels. They’re organizational signals about how seriously we’re taking what happened. A postmortem called “minor API degradation” tells every engineer who reads it — and every executive who skims it — that this wasn’t a big deal. The four-hour checkout outage is already being softened before the root cause analysis is written. The name is the first draft of the spin.

Google’s SRE book dedicates an entire chapter to postmortem culture, and its table of contents reads like a taxonomy of operational seriousness — “Managing Incidents,” “Postmortem Culture: Learning from Failure,” “Tracking Outages” — each one a named, structured practice with formal expectations. The Google SRE book’s treatment of incident documentation makes clear that postmortems are first-class engineering artifacts, not afterthoughts dashed off between pages. Mature engineering organizations treat the naming and documentation of incidents as a deliberate practice. Immature ones treat it as a creative writing exercise where the goal is making the incident sound smaller than it was.

The minimizing incident name is a trust problem wearing a naming problem’s clothes. Teams name incidents carefully when they’re afraid of consequences. They name incidents casually when they don’t want anyone outside the team to pay attention. They name incidents with cutesy codenames when they want to signal that this is an internal matter, not something the business needs to worry about. Every one of these naming choices tells you what the team is afraid of.

§ 4 — The ADR That Records the Decision But Not the Duress

Architecture Decision Records are supposed to be the antidote to tribal knowledge. They’re supposed to capture not just what was decided but why — what alternatives were considered, what tradeoffs were accepted, what constraints were in play. In practice, most ADRs I’ve read are post-hoc justifications written by the person who won the argument, and their titles reflect it.

“ADR-014: Adopt Kafka for Event Streaming” tells you what was decided. It does not tell you that the team owning the message queue was overruled, that the Kafka migration was driven by a VP who saw a conference talk, or that the team’s preferred option — RabbitMQ, already running in production — was dismissed without a technical evaluation. The ADR title is a clean summary of a dirty process.

The problem isn’t that ADRs are dishonest. The problem is that the naming convention — “ADR-NN: Decision” — encodes only the outcome. The title becomes the canonical reference, and once it’s referenced in three other documents and two Slack threads, it’s locked in. Nobody goes back and amends an ADR title to say “ADR-014: Adopt Kafka Because the VP Saw a Conference Talk and the Team Was Outvoted.” That would be honest. It would also be career-limiting.

So the ADR title becomes a small fiction. Not a lie, but a simplification that erases the political context in which the decision was made. And the next engineer who reads it thinks the decision was made for the reasons stated, because the title gives them no reason to suspect otherwise.

§ 5 — Who Gets to Name Things

Here’s the pattern I’ve seen at every company: the person who creates the thing gets to name it. The person who creates the thing is usually the person with the most context at the time of creation. The person with the most context is usually the person who’s been there longest, or the person with the most political capital, or the person who happened to be in the room when the Jira ticket was created.

This means naming isn’t a democratic process. It’s an exercise in power. The senior engineer who spins up a new service at 11 PM names it. The junior engineer who joins six months later has to live with that name, work with it, explain it to new hires, and pretend it makes sense.

I worked with a team once where every service was named after a Greek myth. Atlas. Prometheus. Icarus. Sisyphus. The engineer who named them was brilliant, had a humanities degree, and left after eighteen months. The remaining team spent the next two years explaining to new hires why the billing service was called Sisyphus. The answer, as far as anyone could reconstruct, was that the engineer thought billing was a repetitive, futile task. This was either a joke or a cry for help, and by the time I got there, nobody could remember which.

Names encode the values and context of the person who chose them. When that person leaves, the name becomes a question nobody can answer. This is why renaming is so hard — not because it’s technically difficult (it’s a find-and-replace), but because renaming is an act of saying “the person who named this was wrong, and I know better.” That’s a political statement, not a technical one. Most engineers don’t want to make it.

§ 6 — The Political Cost of Renaming

So bad names persist. They persist because the cost of renaming is paid by the person who proposes it, and the benefit is distributed across everyone who will ever interact with the name in the future. The proposer takes the political risk of offending the original namer (if they’re still around), the technical risk of updating every reference, and the social risk of being seen as someone who cares about “trivial” things like names instead of “real” things like features.

This is the same dynamic that keeps bad code alive. The cost of refactoring is concentrated; the benefit is distributed. The difference is that with code, we at least have language for talking about technical debt. We have sprints for it. We have metrics that make the cost of inaction visible. With naming, we don’t. There’s no Jira label for “this name is actively misleading every new hire.” There’s no dashboard showing the hours lost to confusion about what “platform” does.

The result is that names ossify. They become part of the team’s vocabulary without ever being validated. Engineers learn them the way you learn the quirks of a codebase — not because they make sense, but because they’re there, and questioning them takes more energy than accepting them. The name becomes load-bearing. You can’t remove it without shaking the structure, and nobody wants to be the person who shakes the structure.

The NIST Cybersecurity Framework demonstrates what happens when an organization treats naming and categorization as a first-class discipline. Its structured taxonomy of risk outcomes — Govern, Identify, Protect, Detect, Respond, Recover — represents deliberate, institutional investment in naming as a foundation for shared understanding. The contrast with engineering teams that name incidents “the blip” and services “platform” is not subtle. When a government standards body takes classification more seriously than your engineering organization does, your engineering organization has a naming problem — and a culture problem.

§ 7 — Practical Experiments: Auditing Your Team’s Names

So what do you do about it? You can’t rename everything. You shouldn’t try. But you can start treating naming as a first-class engineering decision rather than an afterthought dashed off between standup and lunch. Here are three experiments I’ve run on teams I’ve been part of, with varying degrees of success and one outright failure that taught me more than the successes.

Experiment 1: The New-Hire Naming Audit. Ask someone who joined in the last 90 days to list every service, project, and recurring meeting name they’ve encountered, and write down what they think each one means. Don’t correct them. Just collect the answers. The gap between what the name says and what the new hire thinks it means is your naming debt, made visible. I ran this once and discovered that three engineers thought “the bridge” was a data pipeline, a Slack channel, and a deployment process. It was all three. The name “bridge” had been reused for different things by different teams over three years, and nobody noticed because nobody new had ever been asked.

Experiment 2: The Postmortem Title Review. Before your next postmortem is published, have someone who wasn’t involved in the incident read the title and guess the severity. If they guess low, the title is doing work for you — specifically, the work of minimizing what happened. Rewrite the title until a stranger can accurately gauge the impact. This sounds trivial. It is not. The first time I tried this, the original title was “intermittent 5xx errors in the EU region.” The rewritten title was “Checkout unavailable for 47% of EU customers for 2.5 hours due to connection pool exhaustion.” The first title was written by the on-call engineer. The second was written by the engineer who had to explain the incident to the CFO. Both were accurate. Only one was honest.

Experiment 3: The Rename One Thing Challenge. Pick one service, one document, or one recurring meeting with a bad name. Rename it. Track every reference. Update every link. Write a one-paragraph note explaining the old name, the new name, and why the change was made. This is deliberately small. The point isn’t to fix all your names — it’s to prove that renaming is survivable, to establish that names can change, and to create a template for the next person who wants to try. The political cost of the first rename is the highest. Every subsequent rename is cheaper because the precedent exists.

If you want to go deeper, borrow naming discipline from adjacent fields. Editorial teams use structured naming conventions for manuscripts and campaigns — a book title generator that enforces structure can teach you something about why constraints produce better names than open-ended brainstorming sessions. The principle is the same: names that follow a pattern carry information. Names chosen freely carry whatever the namer was thinking about that day, which is usually lunch.

§ 8 — What Your Names Are Telling You

Here’s what I want you to take away. Your team’s names are not a cosmetic concern. They’re a diagnostic surface. They tell you where your team has stopped drawing boundaries (generic names), where it has stopped committing to narratives (version numbers), where it is minimizing failure (cutesy incident names), where it is hiding political decisions behind technical summaries (ADR titles), and where it has let the context of departed engineers calcify into permanent confusion (orphaned codenames).

Every name is a small decision, but the aggregate pattern tells you something your retros never will — because retros are performed for an audience, and names are chosen when nobody’s watching. Names are what your team does when it thinks nobody is keeping score.

So go look at your service catalog. Read your last ten postmortem titles. Open your ADR repository and read the titles without reading the bodies. Ask yourself: do these names tell me what I need to know? Do they carry context, or do they require it? And if they require context — if every name comes with a story that isn’t in the name — then your team has a documentation problem no style guide will fix. Because the problem was never the names. The problem was the meetings where the names were chosen, who was in those meetings, who wasn’t, and the fact that nobody has been willing to revisit those decisions since.

Naming is the hardest problem in computer science because it’s the one that requires the most honesty. You can solve cache invalidation with better infrastructure. You can fix off-by-one errors with tests. But you can only fix naming by being willing to say: this name is wrong, this name is misleading, this name was chosen by someone who is gone, and I’m going to change it. That’s not a technical decision. It’s an act of cultural maintenance. And it’s the act that distinguishes a team that manages its knowledge from a team that just accumulates it.

Why Your Standup Is a Stand-Down: The Case for Async Engineering

A developer staring blankly at a wall of sticky notes, representing meeting overload

Let’s call your daily standup what it really is: a hostage situation. You’re standing in a circle—or staring at a grid of grainy faces—while Dave from DevOps recites his life story disguised as a status update. You’re not collaborating. You’re waiting for your turn to speak so you can finally get back to the work that the meeting itself is preventing you from doing. The biggest technical problem in most engineering orgs isn’t a microservice latency spike or a memory leak in production. It’s the synchronous communication tax that bleeds your team dry, one 30-minute block at a time.

I’m Fritz Muller. I’ve spent enough years in the trenches to know that the best code gets written when nobody is talking to you. The cult of the meeting has convinced managers that butts in seats—or cameras on—equals productivity. It’s a comforting lie. What it actually equals is context-switching, burnout, and a codebase that looks like it was assembled by a committee of caffeinated squirrels. We need to treat engineering culture with the same rigor we apply to our systems. The diagnosis is clear: fewer meetings, more async.

The Synchronous Sinkhole

Synchronous communication—meetings, impromptu desk taps, Slack huddles—is a brute-force solution to a coordination problem. It assumes the fastest way to align is to stop everyone’s world at the same time. For a production firefight, sure. Grab the war room. But for a daily ritual that asks, “What did you do yesterday?” you’re torching cognitive fuel for a status report that could be a three-line message. The math is ugly. A 15-minute standup for a team of six engineers doesn’t cost 15 minutes. It costs 90 minutes of focused work, plus the 20-minute ramp-up each person needs to get back into flow. That’s a half-day of productivity, vaporized, every single week. For a status update.

And it’s not just standups. Sprint planning, retrospectives, “quick syncs” that metastasize into architecture debates—these are all symptoms of a deeper dysfunction. We default to meetings because we don’t trust the written word. We don’t trust that a design doc will be read, that a comment in Linear will be seen, that a Loom video will be watched. So we force the interaction, guaranteeing that the work stops. It’s the organizational equivalent of a distributed system that uses blocking I/O instead of an event loop. It doesn’t scale.

Async Is a System Design Choice

Asynchronous communication isn’t just “sending an email instead of having a meeting.” It’s a fundamental re-architecture of how your team processes information. Think of it as moving from a tightly coupled monolith to a well-designed event-driven architecture. Each message—a pull request description, a technical spec, a recorded demo—is an event. Team members consume those events when their own event loop is ready, process them, and emit their own events in response. No blocking. No thread starvation. Just a steady, high-throughput stream of progress.

This requires discipline. You can’t just fire off a half-baked Slack message and call it async. The quality of the artifact matters. A good async update is self-contained, provides context, and anticipates questions. It’s the difference between a commit message that says “fix bug” and one that explains the root cause, the fix, and the testing done. The former creates more meetings. The latter closes the loop. When you treat communication as a first-class engineering artifact, you start to see meetings as the exception handler, not the main execution path.

A person typing on a laptop with a notepad and coffee, representing focused asynchronous work

The Tools Are Already There, You’re Just Using Them Wrong

Your team already has the tools for a fully async workflow. You’re just using them as a notification layer for the next meeting. Let’s run through the stack:

Slack (or Teams, or Whatever Microsoft Is Calling It This Week)

Stop using it for real-time chatter. Use it for persistent, searchable, threaded updates. A channel per project, with a strict norm: no “@here” unless the server room is literally on fire. Daily standup updates go in a dedicated thread. People read them when they start their day. Questions and clarifications happen in the thread, asynchronously. If a thread spirals into a debate that needs higher bandwidth, then you schedule a focused, time-boxed call with a clear agenda and only the necessary people. The default is text. The exception is voice.

Pull Requests as the Primary Collaboration Point

A pull request is not just a code review. It’s a design discussion, a knowledge transfer, and a historical record. Write PR descriptions that explain the “why,” not just the “what.” Link to the spec, the ticket, the previous failed attempt. Reviewers should leave comments that are complete thoughts, not “let’s hop on a call to discuss.” If you find yourself typing “let’s sync,” stop. Type out your concern. Propose an alternative. Attach a screenshot. Treat the PR as the canonical source of truth for that change. A well-run PR process eliminates the need for a separate “code review meeting” and a “design review meeting” and a “let’s make sure we’re all on the same page” meeting.

Recorded Demos and Loom Videos

Live demos are a waste of collective time. They’re a performance where one person fumbles with their terminal while 10 others pretend to care. Record a five-minute walkthrough. Show the happy path, the edge cases, and where the bodies are buried. Post it in the project channel. People watch it on 2x speed when they’re in the right headspace. They pause, rewind, and leave timestamped comments. You’ve just turned a synchronous 30-minute meeting into an asynchronous, self-serve resource. If you’re not doing this, you’re choosing ceremony over effectiveness.

Decision Records and RFCs

For any non-trivial technical decision, write a short document. Outline the problem, the options considered, the trade-offs, and the chosen path. Circulate it for comment. Give people 24 hours to read and respond. Then, if there’s still disagreement, have a focused discussion. This is the “Request for Comments” process that built the internet. It works. It prevents the “let’s get everyone in a room and argue” anti-pattern that leads to design-by-committee disasters and loudest-voice-wins architecture.

The Cultural Shift: From Presence to Progress

Moving to async isn’t a tooling problem. It’s a trust problem. Managers who demand synchronous standups are often signaling that they don’t trust their engineers to be working unless they’re seen working. This is factory-floor thinking applied to knowledge work. It’s stupid. You hired smart people. Let them prove their progress through artifacts, not attendance. The measure of an engineer is the code they ship, the bugs they fix, the designs they document—not the eloquence of their morning monologue.

This shift requires explicit norms. Write them down. “We default to asynchronous communication. Meetings are a last resort, scheduled with a clear agenda and a hard stop. Status updates are written, not spoken. Decisions are documented, not shouted.” Then, enforce it. When someone tries to schedule a meeting to discuss something that could be a document, push back. Ask for the doc. When someone interrupts a colleague with a tap on the shoulder, remind them of the async-first norm. This is culture change, and culture change is hard. But so is debugging a race condition at 2 a.m. You do it because the alternative is worse.

One of the biggest objections I hear is, “But we’ll lose the human connection!” This is sentimental nonsense. You don’t build camaraderie by forcing everyone to recite their Jira tickets in a circle. You build it by working together on hard problems, by having thoughtful async debates, and by occasionally getting together for a non-mandatory, actually-fun social event. The forced fun of a daily standup is about as bonding as a root canal. Real connection happens when you respect people’s time and autonomy, not when you treat them like children who need a morning roll call.

A team collaborating casually around a table, representing healthy, non-forced interaction

Handling the Hard Cases

Some work genuinely benefits from synchronous discussion. Brainstorming new features, resolving a complex architectural dispute, or giving tough feedback. The key is to be intentional. Schedule a focused session with a clear outcome. Use a technique like “silent reading” of a proposal doc for the first 10 minutes, so everyone is on the same page before a single word is spoken. Time-box the discussion ruthlessly. If it’s not resolved, document the open questions and take it async again. The meeting is a tool, not a lifestyle.

Another hard case: the engineer who refuses to write. Some people are just bad at written communication. They’d rather talk for an hour than write a coherent paragraph. This is a performance issue, not a communication preference. In a modern engineering team, the ability to write clearly is as fundamental as the ability to write clean code. If an engineer can’t document their design, they can’t scale their impact. Coach them. Give them templates. But don’t let their weakness drag the whole team back into the meeting room. The team’s throughput is more important than one person’s comfort zone.

Measuring What Matters

If you stop measuring hours-in-meetings and start measuring artifacts-produced, you’ll see a shift. Track the number of decisions documented per week. Track the median time-to-merge for pull requests. Track the number of unplanned interruptions. These are the metrics of a healthy engineering team. When you cut the meetings, you’ll see a spike in deep work. You’ll see fewer bugs because people have time to think. You’ll see better design because proposals are written, circulated, and critiqued thoughtfully instead of being whiteboarded in a rush 10 minutes before the next standup.

And for the love of all that is compilable, stop with the “daily standup is sacred” religion. It’s not. It’s a process smell from a framework that was designed for co-located teams building monoliths in the early 2000s. We’re building distributed systems with distributed teams. Our communication patterns should match our architecture. Async is not a compromise. It’s an upgrade.

Frequently Asked Questions

Won’t async communication slow down decision-making?

Only if you confuse activity with progress. A decision made in a 30-minute meeting that wasn’t thought through will be unmade in the following days, costing far more time. Async decision-making, with a clear proposal and a 24-hour comment period, often leads to faster implementation because the decision is more durable. For true emergencies, you still have the phone. But how many of your daily decisions are actual emergencies?

How do we keep remote team members from feeling isolated without daily calls?

Isolation doesn’t come from a lack of meetings. It comes from a lack of meaningful interaction and shared context. Async practices like well-written project updates, active discussion threads on technical decisions, and occasional, well-planned virtual social events build stronger connections than a daily status call where 80% of the time is spent on updates irrelevant to most attendees. Focus on the quality of interaction, not the frequency.

What if management insists on synchronous standups?

This is a political problem, not a technical one. Gather data. Run a two-week experiment where the team does async standups in a dedicated Slack thread. Measure the team’s output, the number of blockers resolved, and the team’s self-reported satisfaction. Present the results. If management still insists on the meeting after seeing that the team is more productive and happier without it, you have a culture problem that no amount of process tweaking will fix. At that point, you might consider whether you want to work for people who value ritual over results.

Doesn’t async communication just replace meetings with endless Slack threads?

It can, if you do it poorly. The goal isn’t to move the meeting into a chat window. It’s to change the nature of the communication. A good async update is a structured, thoughtful artifact. It’s not a stream of consciousness. It has a clear subject, context, and call to action. It’s designed to be consumed efficiently. If your Slack threads are turning into endless, unstructured back-and-forths, the problem isn’t async—it’s that you’re still communicating as if you’re in a meeting. Apply the same rigor to your writing that you apply to your code.

The bottom line: your team’s most precious resource is uninterrupted thinking time. Protect it like you protect your production database. Default to async. Write things down. Trust your people to read and respond. The result will be a quieter, calmer, and dramatically more productive engineering culture. And you’ll finally get that standup time back to do what you actually love: building things.

Why Your Engineering Team Needs Fewer Meetings and More Async Communication

I’ve sat through enough stand-ups that somehow became 45-minute architecture debates to know we’ve got a problem. The modern engineering team doesn’t lack communication. It’s drowning in it—specifically, the kind that demands everyone stop working at the exact same moment. If your calendar looks like a losing game of Tetris and actual coding only happens in the cracks between meetings, this one’s for you.

The Meeting Industrial Complex

Somewhere along the line, we bought into the idea that more meetings mean more alignment. That’s garbage. What they really produce is context-switching, the silent productivity killer. Yank a developer out of their flow to discuss something that could’ve been a written update, and you’ve torched at least 30 minutes of real work—the meeting itself, plus the mental rebuild to get back into the problem. Multiply that by a team of six, and your “quick sync” just cost the company half a day of output. Not exactly a bargain.

I’m not some meeting abolitionist. Some conversations genuinely need real-time back-and-forth. But the default setting should be asynchronous communication: written, recorded, or otherwise time-shifted so people can engage when their brain is actually ready. The meeting should be the exception, a break-glass-in-case-of-emergency option, not the rhythm of your week.

Engineer staring at a cluttered calendar on a laptop screen

Why Meetings Are a Technical Problem

Engineers obsess over optimizing systems. We’ll argue for hours about the right database index, the perfect API contract, or whether tabs are morally superior to spaces. But we almost never apply that same rigor to the system of how we work together. A meeting isn’t just a meeting—it’s a synchronization point in a distributed system (your team), and every sync point introduces latency. If you wouldn’t design a microservice architecture where every service has to phone home to a central monolith before doing anything, why would you design your team that way?

Async communication is the event-driven architecture of teamwork. You emit a message—a design doc, a Loom video, a well-structured Slack thread—and your teammates consume it when they’re ready. No blocking. No forced context switches. Just pure, beautiful throughput. The kind that actually ships features.

The Stand-Up That Wouldn’t Die

Daily stand-ups are the worst offender. What began as a quick huddle to unblock work has mutated into a status-reporting ritual that serves managers more than makers. If your stand-up involves people reciting what they did yesterday while everyone else mentally checks out, you’ve got a meeting that should be a Slack bot. Automate the status updates. Reserve synchronous time for actual collaboration—the messy, creative work that needs voices in a room.

Decision-Making by Default

Another trap: calling a meeting every time a decision needs to be made. This breeds a culture where nobody feels empowered to decide anything without a quorum. Instead, push for written proposals. A well-structured RFC (Request for Comments) document lets people weigh in on their own time, asynchronously, and creates a paper trail that’s infinitely more useful than half-remembered meeting notes. If the RFC doesn’t resolve the issue, then you schedule a focused discussion—but that’s the backup plan, not the starting point.

Two engineers collaborating over a whiteboard with sticky notes

The Async Toolkit: What Actually Works

Going async isn’t just about killing meetings. It’s about replacing them with better systems. Here’s what I’ve seen work on teams that actually ship software instead of just talking about it:

  • Written design docs over whiteboard sessions. A good design doc forces the author to think through edge cases and trade-offs before anyone else spends brain cycles on it. It also creates a permanent artifact that new team members can reference six months later when they’re wondering why the hell the system works that way.
  • Loom videos for code walkthroughs. Record it once. Watch it at 2x speed. Pause when you need to. This is strictly better than a live screen share where half the attendees are multitasking anyway.
  • Decision logs in a shared space. Not meeting notes—decision logs. A single place where you record what was decided, by whom, and why. No more “I thought we agreed on the other approach” arguments three weeks later.
  • Async stand-ups via Slack or a bot. Post your update in a thread. Read others’ updates when it fits your day. If something’s blocking you, flag it and someone can jump in. No need to warm 10 chairs for 15 minutes.

The Cultural Shift: Writing Over Talking

Here’s the uncomfortable part: async communication demands writing. Clear, structured, thoughtful writing. And a lot of engineers—and especially managers—are lazy writers. They’d rather hop on a call and ramble for 20 minutes than spend 10 minutes crafting a coherent document. But that call just externalized the cost of their laziness onto everyone else’s schedule.

Writing is thinking. When you force yourself to write down a proposal, you discover the gaps in your own logic. When you write a status update, you have to actually reflect on what you accomplished. When you write a meeting summary, you create a record that outlasts the meeting. This is a skill, and teams that invest in it become dramatically more effective. The ones that don’t just keep having meetings about why nothing gets done.

But What About “Human Connection”?

I hear this one a lot: “Meetings build team culture!” No, they don’t. Forced proximity builds resentment. What builds culture is trust, autonomy, and the occasional well-timed meme in a Slack channel. If your team’s only social interaction is status meetings, you’ve got a culture problem that more meetings won’t fix. Schedule a virtual coffee or a team lunch. Don’t pretend your sprint planning is a bonding experience.

Engineer working alone in a quiet home office with plants

How to Start Cutting Meetings Without Getting Fired

If you’re not the one setting the meeting culture, you can still nudge it. Start small. Pick one recurring meeting that everyone agrees is useless—there’s always at least one—and propose an async replacement for a trial period. Show results. Did the same information get shared? Did decisions still get made? Did people get more done? When the answer is yes (and it will be), you’ve got ammunition for the next one.

If you are in a position to set policy, do it explicitly. Declare a “meeting-free Wednesday” or cap recurring meetings at 30 minutes. Better yet, require a written agenda and expected outcome for any meeting invite. If the organizer can’t articulate what decision will be made or what problem will be solved, the meeting doesn’t happen. You’ll be amazed how many meetings simply evaporate.

FAQ: The Pushback You’ll Get

“But some things just need a real-time conversation!”

Agreed. Nobody’s saying abolish all meetings. The point is to make real-time the last resort, not the first. When a Slack thread hits 50 messages and people are talking past each other, sure, hop on a quick call. But that’s a symptom that the async approach wasn’t structured well, not proof that async doesn’t work.

“Won’t this slow down decision-making?”

Only if you confuse activity with progress. A meeting gives the illusion of speed because everyone’s in the room, but how many decisions actually get made? And how many get unmade the next day because someone wasn’t in the room? Async decision-making with written proposals is often faster because it eliminates scheduling overhead and lets people think before they commit.

“What about junior engineers who need mentorship?”

Mentorship doesn’t require a meeting. Pair programming sessions, code reviews, and async Q&A in a public channel are all mentorship. In fact, written feedback is often better for juniors because they can refer back to it. The key is to be responsive, not to be in the same room at the same time.

“Our team is remote across time zones—meetings are the only time we’re all together!”

That’s exactly why you should have fewer meetings. Forcing someone to attend a 9 PM stand-up is a quick way to burn them out. Async communication is the great equalizer for distributed teams. Record updates, use threaded discussions, and let people contribute when they’re at their best. The “togetherness” argument is usually just discomfort with giving up control.

The Bottom Line

Engineering is a creative, cognitive discipline. Every interruption is a tax on output. Meetings are the most expensive tax there is because they’re scheduled, recurring, and socially mandatory. The best teams I’ve seen treat meeting invites like pull requests: they require justification, they’re scoped tightly, and they get rejected if they don’t add value.

So look at your calendar for next week. Count the hours blocked off for synchronous communication. Then ask yourself: how many of those could have been a well-written document, a short video, or a threaded Slack discussion? If the answer is more than zero—and it will be—you’ve got work to do. Your team’s productivity, and probably their sanity, depends on it.

Why Your Standup Is a Waste and Your Slack Is a Graveyard of Half-Truths

The Meeting Industrial Complex Has Eaten Engineering

I once sat in a sprint planning session that dragged on for four hours. Four. Hours. We weren’t designing a Mars rover. We were deciding how many story points to assign a button color change. By the end, two engineers had their cameras off and were probably doing actual work, one was locked in a semantic debate about the definition of “medium” versus “large,” and the scrum master was drawing overlapping circles on a virtual whiteboard like a cult leader explaining the afterlife. The button shipped three weeks late anyway.

This isn’t a one-off horror story. It’s the standard operating system for most engineering teams. We’ve built a culture where the meeting is the unit of progress, and it’s suffocating throughput, morale, and the very reason most of us got into this field: to build things, not to talk about building things.

The Synchronous Tax

Every meeting carries a hidden cost that nobody puts on the balance sheet. It’s not just the 30 minutes blocked on your calendar. It’s the context-switching penalty, the shattered focus, the mental overhead of preparing to look engaged while secretly hoping nobody asks you a question you can’t answer without three more browser tabs. For a team of six engineers, a one-hour meeting isn’t one hour. It’s six hours of productive time vaporized, plus the 15-20 minutes it takes each person to rebuild the mental model they had before the interruption. That’s a full workday. Gone. In exchange for a status update that could have been a three-line Slack message.

Managers love meetings because meetings feel like work. You can point to a calendar packed with colored blocks and say, “Look at all the collaboration happening.” But collaboration isn’t a spectator sport. The best collaboration I’ve ever seen happened in a GitHub pull request thread at 11 p.m., with two engineers arguing about edge cases in a database migration. No facilitator. No timer. No icebreaker about what kind of pizza you’d be.

Async Should Be the Default, Not the Backup

Here’s a radical idea: treat synchronous communication as a last resort, not the first move. The default should be written, persistent, searchable communication. Think RFCs, design docs, detailed PR descriptions, and yes, Slack messages that are more than a thumbs-up emoji. When you write things down, you’re forced to clarify your own thinking. You can’t hide behind nodding and saying “makes sense” while secretly wondering if you left the stove on. Written communication scales. It respects time zones. It lets people think before they respond, which is a wildly underrated feature of human interaction.

I’ve seen teams try to fix meetings with better agendas, stricter timeboxes, or a talking stick. That’s like putting a spoiler on a car that’s already on fire. The problem isn’t the meeting structure. The problem is the meeting. If the information can be conveyed without real-time verbal back-and-forth, skip the call. Write it down.

The Art of Writing Things Down Like a Grown-Up

Most engineers are terrible at writing. Not because they can’t, but because they’ve been conditioned to think writing is something you do after the real work is done, like documentation or post-mortems. That’s backwards. Writing is the work. A well-structured design doc prevents more bad code than a thousand code reviews. A clear, concise project update eliminates the need for a status meeting entirely.

Here’s what good async communication looks like:

  • Decisions are recorded with context. Not just “we chose PostgreSQL,” but “we chose PostgreSQL because the team already knows it, it handles our expected write load, and the managed offering fits our budget. We considered DynamoDB but rejected it due to complex query patterns.”
  • Status updates are pull, not push. A dashboard or a weekly written digest that people can read when they need to, not a meeting they’re forced to attend at 9:15 a.m. like a hostage situation.
  • Discussions happen in the open, in threads. Not in DMs, not in hallway conversations, not in a “quick sync” that excludes the one person who actually knows the answer.

Meetings You Can Kill Right Now

Start with the obvious corpses. The daily standup where everyone recites what they did yesterday in a monotone while staring at Jira. Replace it with a Slack bot that posts a thread every morning. People reply with bullet points. Done. You just saved 2.5 hours per person per week. The sprint retro that’s really just a group therapy session with no action items. Replace it with a shared document where people can add kudos, gripes, and proposals throughout the sprint. Discuss only the proposals that need discussion, async, and then vote.

The “alignment” meeting that exists because two teams don’t trust each other. This one’s trickier because it’s a people problem, not a process problem. But the fix is still written communication: a shared RFC process, a public decision log, and a cultural norm that if it’s not written down, it didn’t happen. Trust is built through transparency, not through forced face time.

When You Actually Need to Talk

I’m not saying you should never talk to another human. Some things need real-time conversation. Brainstorming sessions for genuinely novel problems, where the ideas are too half-formed to write down. High-stakes technical debates where diagrams need to be drawn and redrawn in real time. One-on-ones between managers and reports, because those are about human connection, not information transfer. And yes, the occasional team hangout, because you should actually like the people you work with.

But these should be the exception, clearly labeled, and treated as a deliberate choice. The default invitation should be: “Here’s a document. Read it, comment on it, and we’ll only meet if there’s unresolved conflict.” If you can’t articulate the purpose of a meeting in one sentence without using the word “align,” cancel it.

The Cultural Shift

Moving to async-first isn’t a tooling problem. Slack, Notion, Linear, GitHub—they all handle async workflows just fine. The problem is cultural. It’s the manager who feels useless if they’re not facilitating. The engineer who equates visibility with verbal participation. The organization that rewards “being in the room” over shipping working software.

Fixing this requires leadership to model the behavior. If your CTO sends a weekly written update instead of holding an all-hands, people will follow. If your team lead responds to questions with links to documents instead of scheduling a call, the norm shifts. And if you, as an individual contributor, start writing things down and politely declining meetings that lack an agenda, you’ll be surprised how quickly the culture adapts. Most people hate meetings. They just need permission to stop.

FAQ

Won’t async communication make it harder to build team rapport?

Only if you believe rapport is built exclusively through forced small talk in standups. Real rapport comes from working together effectively, respecting each other’s time, and occasionally sharing a meme in a Slack channel. You can still have virtual coffee chats or team retreats. Just don’t confuse socializing with status reporting.

What if someone doesn’t read the async updates?

Then they’re not doing their job, and that’s a performance issue, not a communication failure. If a person can’t be bothered to read a document that’s directly relevant to their work, a meeting won’t fix that. It’ll just waste everyone else’s time while that person nods along.

How do we handle urgent issues if we’re async-first?

Urgent issues are the exception that justifies synchronous communication. If production is down, you get on a call. If a decision is blocking a release, you escalate. Async doesn’t mean slow. It means deliberate. You can still have a “break glass in case of emergency” protocol. Just don’t treat every sprint planning session like a production outage.

The Bottom Line

Your calendar is not a scoreboard. The number of meetings you attend is inversely correlated with the amount of work you actually ship. The best engineering cultures I’ve seen treat meetings like a necessary evil, not a virtue signal. They write things down. They default to asynchronous. They respect the fact that the best code is written when nobody is talking to you.

So here’s my advice: block off four hours tomorrow morning. Put your Slack on Do Not Disturb. Close your email. And build something. Then write a two-paragraph summary of what you did and post it in a public channel. Congratulations, you just held a meeting with your entire team, and nobody had to wear pants.

A person working alone at a desk with a laptop, notebook, and coffee, representing focused asynchronous workA group of people in a meeting looking bored and disengaged, symbolizing unproductive synchronous meetingsA person writing in a notebook with a laptop and coffee, representing deliberate asynchronous communication

Why Your Standup Is a Status Page and Your Sprint Planning Is a Support Group

I sat through a meeting last week that was so long my smartwatch thought I’d died. Two hours of screen-shared Jira, the PM dragging tickets around like a toddler with refrigerator magnets. I muted, made a pour-over, and came back to find them still debating whether something was a 3 or a 5. Nothing had changed except my blood pressure and the temperature of my coffee.

This is the state of engineering culture in most shops. We’ve confused motion with progress. We’ve built a cathedral of ceremonies around the actual work and then act surprised when nothing ships. The people aren’t the problem. The problem is the synchronous-first, meeting-glutted operating system we’ve all accepted as normal. It’s broken. The fix is simpler than you think: treat meetings as a bug, not a feature.

The Meeting Industrial Complex

Walk into any mid-sized tech company and you’ll see the same disaster. Calendars so packed with colored blocks they look like a Tetris board mid-collapse. Engineers who carve out “focus time” from 6 AM to 9 AM because that’s the only window not colonized by standups, retros, grooming, sprint reviews, and the mysterious “sync” that has no agenda but somehow runs 45 minutes. We’ve created a professional class whose primary job is attending meetings about the work they can’t do because they’re in meetings.

This isn’t a blanket rant against meetings. A tight, well-run meeting with a real decision to make and the right people in the room is a beautiful thing. It’s a high-bandwidth, low-latency protocol for resolving ambiguity. The trouble is, most meetings aren’t that. They’re status broadcasts. FYI delivery mechanisms. A manager’s anxiety projected onto a calendar invite. And the cost isn’t just the 30 minutes on the schedule. It’s the context-switching tax, the mental ramp-up and ramp-down, the fragmentation of a day into slices too small to hold a real thought.

The Real Cost of Synchronous-First Culture

Let’s talk about context switching, because it’s the silent killer of engineering productivity. Research out of UC Irvine found it takes an average of 23 minutes and 15 seconds to get back into deep focus after an interruption. If you’ve got a 10 AM standup and an 11 AM design review, the block between them is effectively useless for complex problem-solving. You spend 15 minutes winding down from the first meeting, 15 minutes checking Slack and email, and then you’ve got maybe 20 minutes of shallow work before you need to mentally prep for the next one. Multiply that across a week, and you’ve lost entire days to the seams between meetings.

But the damage goes deeper than lost time. Synchronous-first cultures reward the wrong behaviors. They reward people who are good at thinking on their feet, who can sound smart in the moment, who dominate conversations. They punish the quiet thinkers, the people who need to sit with a problem, the non-native speakers, the introverts, the folks who do their best work in writing. You end up optimizing your team for performance art instead of engineering. The loudest voice wins, not the best idea.

There’s also the time zone problem. If your team is spread across more than two time zones, synchronous meetings are a tax on someone’s personal life. The engineer in Berlin has to stay late. The engineer in San Francisco has to wake up early. The engineer in Bangalore is dialing in at 10 PM. You’re burning people out not with work, but with the logistics of talking about work. It’s absurd.

What Async Actually Looks Like

Asynchronous communication isn’t just “fewer meetings.” It’s a deliberate practice of writing things down, sharing them in a persistent medium, and giving people time to read, think, and respond. It’s treating communication like code: versioned, reviewable, and open to comment threads. The tools are simple. Documents instead of presentations. Threaded discussions instead of round-robin status updates. Recorded demos instead of live walkthroughs.

Here’s a concrete example. Instead of a daily standup where ten people spend fifteen minutes each morning reciting what they did yesterday, you use a Slack channel or a GitHub Discussion. Everyone posts their update by 10 AM in their own time zone. The update includes what they accomplished, what they’re working on today, and any blockers. If someone has a blocker, they tag the person who can help, and that conversation happens in a thread. The whole thing takes five minutes to write and zero minutes of synchronized time. The information is searchable, linkable, and doesn’t evaporate the moment the meeting ends.

Design reviews go the same way. Instead of booking a conference room and projecting Figma mockups while people struggle to stay awake, you record a five-minute Loom video walking through the design decisions. You post it with a written summary and a link to the Figma file. Reviewers leave comments over the next 24 hours. The designer responds in threads. Decisions are documented. Nobody had to find a time when eight busy people were all free at once.

This isn’t a utopian fantasy. Companies like GitLab, Basecamp, and Automattic have been operating this way for years, with teams spread across dozens of countries. Their internal handbooks are public. Their processes are transparent. They ship real products. The async model isn’t just viable; it’s a competitive advantage. It lets you hire the best people anywhere, not just within commuting distance of an office. It gives engineers long stretches of uninterrupted time to actually engineer. It forces clarity of thought because you can’t hide fuzzy logic behind confident body language.

The Objections (and Why They’re Mostly Nonsense)

Whenever I bring this up, the objections roll in like predictable clockwork. Let’s address the greatest hits.

“But we need real-time collaboration for creative work!” No, you need real-time communication for certain types of creative work, and that’s fine. Pair programming, brainstorming sessions, and crisis response all benefit from synchronous interaction. The key is to make those the exception, not the default. Schedule them intentionally, with a clear purpose and a hard stop. The rest of the time, let people work. The best ideas often come after a period of individual deep thought, not in the first five minutes of a whiteboard session.

“Async will slow everything down!” This is the most common fear, and it’s exactly backwards. What slows things down is the meeting itself. The scheduling delay. The time spent waiting for everyone to be available. The meeting that could have been an email but now consumes 30 minutes of ten people’s time. Async communication has lower latency for information sharing. The question isn’t “how fast can we get everyone in a room?” It’s “how fast can we get the right information to the right person so they can act?” A well-written document or a clear Slack message is faster than any meeting invite.

“We’ll lose team cohesion and culture!” Culture isn’t built in meetings. It’s built in how decisions are made, how conflicts are resolved, how people treat each other. If your team culture depends on seeing faces in a grid every morning, you don’t have a culture; you have a hostage situation. Async teams build culture through deliberate practices: well-maintained documentation, thoughtful code reviews, occasional in-person or virtual social events, and a shared commitment to clear, kind communication. The best culture I’ve ever experienced was on a fully remote, async-first team where everyone wrote like they were trying to be understood by someone reading six months later. That’s respect.

“But my manager needs to see that I’m working!” This is the quiet part said out loud. Many meetings exist because of a fundamental lack of trust. If a manager can’t tell whether an engineer is productive without watching them talk about productivity in a daily circle, that’s a management failure, not a communication failure. Output should be visible in the work itself: commits, pull requests, documentation, shipped features. If you need a meeting to prove you’re working, you’re not measuring the right things.

The Migration Path

You can’t flip a switch and go fully async overnight. The habits are too ingrained, and the organizational scar tissue from years of meeting culture is thick. But you can start carving out async spaces and let them prove their value.

Step one: kill the status meeting. Replace it with a written async update. Give it two weeks. Watch how much time frees up. Watch how the quality of status information improves because people can include links, screenshots, and actual detail instead of mumbling through a verbal summary while their dog barks in the background.

Step two: introduce “async-first” for all non-urgent decisions. When someone proposes a meeting, ask: “Can we handle this in a document or a thread first?” If the answer is yes, do that. If the discussion gets stuck or heated, then escalate to a focused synchronous conversation. You’ll find that 80% of what used to be meetings resolves perfectly well in writing.

Step three: protect focus time aggressively. Make it a team norm that mornings are meeting-free. Or Tuesdays and Thursdays. Whatever works. The point is to create large, contiguous blocks of time where engineers can sink into complex work without interruption. Treat these blocks as sacred. No “quick syncs,” no “can you hop on a call for five minutes?” If it’s truly urgent, it can be a Slack message. If it’s not, it can wait.

Step four: invest in writing skills. Async communication lives and dies on the quality of the writing. If your team can’t write clear, concise, well-structured documents, they’ll struggle. This doesn’t mean everyone needs to be a novelist. It means learning to lead with the conclusion, use bullet points effectively, and anticipate questions. Run writing workshops. Share examples of good internal docs. Make writing a valued skill in performance reviews.

The Deeper Problem: Engineering Culture as a System

Here’s the thing I keep coming back to. The meeting problem isn’t isolated. It’s a symptom of a deeper dysfunction in how we think about engineering work. We treat software development like a factory process that needs constant oversight and coordination. But it’s not a factory. It’s a creative, intellectual discipline where the primary unit of progress is a focused human mind solving a hard problem. Every interruption, every unnecessary synchronization point, is a tax on that mind.

The best engineering cultures I’ve seen treat communication overhead as a system performance issue. They profile their team’s time like they’d profile a slow database query. They look for bottlenecks, for unnecessary joins, for queries that could be cached. A daily standup is a full table scan of the engineering team. A sprint planning meeting is a distributed transaction with a two-phase commit that never resolves. The metaphors write themselves because the underlying dynamics are the same. Coordination is expensive. Synchronization is a bottleneck. Throughput suffers when you lock too often.

So the next time you’re sitting in a meeting that feels like a waste of time, don’t just suffer through it. Ask yourself: what is this meeting actually doing? Is it sharing information that could be written down? Is it making a decision that could be made in a thread? Is it building relationships that could be built elsewhere? If the answer is yes, propose the alternative. Be the person who writes the doc instead of scheduling the call. Be the engineer who treats process overhead as a bug to be fixed, not a ritual to be endured.

The goal isn’t zero meetings. The goal is meetings that earn their existence. Meetings that are so useful, so focused, so well-run that people actually want to attend. The rest is just noise. And we’ve all got enough noise in our heads already. We don’t need a calendar full of it too.

Frequently Asked Questions

What’s the one meeting we should absolutely keep?

Keep the meeting that makes a decision. Not the one that shares information, not the one that “aligns,” not the one that “gets everyone on the same page.” Keep the meeting where, at the end, something is different than it was at the start. A design choice is made. A bug fix strategy is agreed upon. A feature is cut. If the meeting ends and the only output is “we’ll follow up,” it should have been an email. Or better, a document with a comment thread.

How do we handle urgent issues without real-time meetings?

Urgent issues deserve real-time attention. That’s what incident response channels, on-call rotations, and emergency video bridges are for. The key is to have clear definitions of what counts as urgent. A production outage is urgent. A question about next sprint’s ticket priority is not. Most things that feel urgent in the moment are just someone else’s poor planning arriving in your inbox. Separate the signal from the noise with explicit severity levels and response expectations. P0: drop everything, get on a call. P1: respond within an hour, async is fine. P2: respond by end of day. P3: this week. Most “urgent” pings are P3s in disguise.

Won’t async communication lead to more misunderstandings?

It can, if done poorly. But so can synchronous communication. How many times have you left a meeting thinking everyone agreed, only to find out later that three people had completely different interpretations? Async communication actually reduces misunderstandings when done well because it creates a written record. You can re-read. You can ask clarifying questions in a thread. You can’t rewind a spoken conversation. The key is to write with precision and read with generosity. Assume good intent, ask for clarification when needed, and default to over-communicating rather than under-communicating. The extra few minutes spent writing clearly pay off in hours of avoided confusion.

What if leadership won’t buy into this?

Start small and show results. Don’t ask for permission to change the whole company’s communication culture. Just change your team’s. Run the experiment. Track the metrics that matter: features shipped, bugs closed, team satisfaction scores. When you can show that your team is more productive and happier with fewer meetings, you’ve got a case study, not a theory. Leadership responds to data, not manifestos. Be the data point. Then share the playbook. Culture change in engineering doesn’t come from top-down mandates. It comes from teams that try something better, prove it works, and let the results speak for themselves.

Person working alone at a desk with a laptop and notebook, representing focused async work

Team collaborating around a table with laptops, showing a rare intentional synchronous session

Person writing in a notebook with a cup of coffee, emphasizing thoughtful async communication

Why Your Engineering Team’s Biggest Bottleneck Is the Calendar

Let’s cut the corporate crap for a second. Nobody wants to say it out loud during a retro because it feels like heresy, but your team’s biggest bottleneck isn’t the creaky legacy monolith, the flaky test suite, or even that one microservice that shits the bed every Tuesday at 3 a.m. It’s the calendar. The shared, color-coded, notification-spamming, guilt-inducing calendar. We’ve built a culture where the knee-jerk reaction to any ambiguity, any need to coordinate, or any flicker of managerial anxiety is to throw a meeting on the books. We call it “collaboration.” I call it a synchronized waste of expensive brain cycles.

Engineering is a craft that demands long, unbroken stretches of focus. Instead, the modern tech workplace has turned into a gauntlet of stand-ups, sprint planning, backlog grooming, retros, one-on-ones, cross-team syncs, architecture review boards, and the dreaded “quick 15-minute check-in” that somehow eats an entire morning. We’re not building software anymore. We’re attending a perpetual conference about the possibility of building software.

A cluttered desk with multiple monitors displaying code and a calendar full of events

The Cognitive Cost of Context Switching

Developers aren’t factory workers. You can’t just hit pause on the conveyor belt, have a 45-minute chat about the conveyor belt, and then expect it to roar back to life at full speed. Loading a complex system’s mental model into a human brain takes time. Researchers at the University of California, Irvine, pinned down just how much: it takes an average of 23 minutes and 15 seconds to claw your way back to a focused state after an interruption. So, a single 30-minute meeting in the morning and another in the afternoon doesn’t cost you an hour. It vaporizes nearly two hours of deep work. You’ve taken a potential 8-hour deep-work day and hacked it into a fragmented, shallow 6-hour slog of task-switching.

And what do we get for that trade? A status update that could’ve been a three-line Slack message. A decision that could’ve been a threaded comment on a design doc. A debate about naming conventions that a linter should have settled back when we were all still arguing about tabs versus spaces. The math is ugly. Pull five engineers into a one-hour meeting, and you haven’t spent one hour. You’ve burned five hours of productive capacity. If that meeting was just to disseminate information, you’ve committed organizational malpractice.

Stand-ups: The Daily Ritual of Reciting Jira Tickets

The daily stand-up started as a quick, feet-on-the-ground sync for tightly coupled teams. It’s mutated into a theatrical performance where each person recites their Jira ticket number, mutters something about being “blocked,” and then mentally checks out for the next 14 minutes while pretending to care about the infrastructure team’s Kubernetes pod eviction saga. If your stand-up has more than five people, you’re not a team. You’re a small town hall meeting. Split it up. If your stand-up drags past 10 minutes, you’re not syncing. You’re problem-solving in a circle, which is the worst possible format for problem-solving.

The fix is so simple it stings. Write. It. Down. Post a daily async update in a dedicated Slack channel. What did I do yesterday? What am I doing today? What’s in my way? That’s it. Three bullet points. If someone is blocked, they don’t need to wait 24 hours to announce it to a captive audience. They can ping the person who can unblock them right now. The rest of the team can read the updates while grabbing a coffee, not while they’re in the middle of tracing a race condition.

A person writing on a whiteboard with sticky notes, representing planning and communication

Meetings as a Crutch for Weak Decision-Making Frameworks

A shocking number of meetings exist because the org lacks a clear decision-making protocol. When nobody knows who actually has the authority to make a call, the default move is to schedule a meeting to “align.” That’s a polite way of saying “spread the responsibility so thin that nobody feels the sting of a bad decision.” It’s organizational cowardice dressed up in a Google Calendar invite.

Strong engineering cultures lean on Request for Comments (RFCs) or design documents. You write down the problem, the proposed solution, the alternatives you considered, and the trade-offs. You post it in a shared space. You give people 24 to 48 hours to read and comment. If there’s consensus, you move. If there’s a fundamental disagreement, then you schedule a focused, time-boxed meeting with only the people who disagree. You don’t drag in eight bystanders to watch a debate about database indexing strategies. That’s not collaboration. That’s a hostage situation.

Async communication forces clarity. When you have to articulate your reasoning in writing, you can’t hide behind hand-waving and jargon. You can’t say “we’ll figure it out” and scan the room for nodding heads. You have to think. And when everyone has to think before they respond, the quality of the discourse goes up. The loudest voice in the room no longer wins. The best argument, laid out in plain text, wins.

The Managerial Panic Button

Let’s dig into the root cause. A lot of meetings get scheduled because a manager is anxious. They can’t see the code being written in real-time, so they demand a meeting to see the progress. They feel a loss of control, so they manufacture a synchronous checkpoint to reassure themselves that something is happening. This is a trust issue wearing a process mustache.

If you need a meeting to know what your team is doing, your project tracking is broken. If your Jira board, GitHub project, or Linear workspace doesn’t give you a clear picture of status at a glance, fix the tooling. Don’t break the team’s flow. A manager’s job is to absorb uncertainty and shield the team from organizational noise, not to amplify that noise by converting every external request into an internal interruption. When a VP asks a random question, the answer is not to schedule a two-hour deep-dive with the whole squad. The answer is to spend 15 minutes pulling the data yourself and sending a concise email.

Building an Async-First Culture

Shifting to async isn’t about installing a new tool. It’s about changing the default behavior. The default should be a written artifact. A pull request description that actually explains the context, not just “fixes bug.” A design doc that lives in a shared space, not a slide deck that disappears after a meeting. A recorded demo, not a live walkthrough that requires 20 people to coordinate calendars.

Here’s a practical starting point: declare a “No Meeting Wednesday” or, if you’re feeling bold, a “Maker Week” once a month where all recurring meetings are canceled. Watch what happens. The sky will not fall. In fact, you’ll probably ship more in that week than in the previous two combined. Then, take the meetings that were canceled and ask a hard question: did we miss anything? If the answer is no, kill those meetings permanently. If the answer is “we missed the social connection,” then schedule a dedicated, optional social hour. Don’t pretend that a sprint planning session is a team-bonding event. It’s not. It’s a negotiation about story points.

A developer working alone in a quiet, focused environment with headphones on

When a Meeting Actually Makes Sense

I’m not an absolutist. There are times when synchronous communication is the right tool. A complex, emotionally charged conflict between two team members should not be resolved over Slack threads. A high-stakes incident response requires a war room. A brainstorming session for a genuinely novel problem can benefit from the rapid back-and-forth of real-time conversation, provided it’s structured and has a clear output. But these are the exceptions. They should be rare, intentional, and treated as a break from the norm, not the norm itself.

The rule of thumb is this: if the meeting is primarily about information transfer, it should be an email, a document, or a recorded video. If it’s about decision-making, it should start as an RFC. Only if the RFC fails to resolve a critical disagreement do you escalate to a meeting. And that meeting must have a clear agenda, a designated decision-maker, and a hard stop. No agenda? No meeting. It’s that simple.

Frequently Asked Questions

What if my team is remote and we need meetings to feel connected?

Feeling connected is a legitimate need, but a status meeting is a terrible way to fulfill it. Separate the social from the functional. Schedule a virtual coffee chat, a gaming session, or an in-person offsite if the budget allows. Don’t try to sneak bonding into a backlog refinement. It doesn’t work, and it makes both the bonding and the refinement worse. People resent forced fun, and they resent meetings that waste their time. Give them space to actually talk to each other like humans, not like ticket-updating automatons.

How do I convince my manager to let us try async stand-ups?

Don’t ask for permission. Propose an experiment. Say, “I’d like to try async stand-ups for two weeks. We’ll post our updates in a public channel by 10 a.m. every day. If anything is blocked, we’ll escalate immediately. After two weeks, we’ll review the impact on throughput and team satisfaction.” Frame it as a data-driven trial, not a philosophical rebellion. Most reasonable managers will agree to a low-risk experiment. If your manager refuses to even try, you have a much bigger problem than meetings.

What about cross-team communication? Don’t we need meetings for that?

Cross-team communication is where async shines the brightest. Trying to find a 30-minute slot that works for six engineers across three time zones is a scheduling nightmare. Instead, create a shared channel or a discussion thread in your documentation tool. Post the context, the ask, and the deadline. Let people respond when they’re available. This respects everyone’s time and creates a written record that can be referenced later. If a real-time conversation is absolutely necessary, record it and post the recording with a summary. Never assume that everyone who needs the information can attend live.

How do we handle urgent issues without immediate meetings?

Define what “urgent” actually means. A production outage is urgent. A question from the sales team about a feature that’s not on the roadmap is not urgent, even if they put three red exclamation points in the subject line. For true emergencies, have a clear on-call rotation and an incident response protocol. That protocol should include a dedicated war room, but only for the people directly involved in resolving the incident. Everyone else gets a status page or a Slack update. Don’t pull the entire engineering org into a call because a certificate expired. That’s not a meeting. That’s a spectator sport.

The bottom line is this: your team’s time is the most valuable asset your company has. Treating it like an infinite resource you can squander on circular discussions is not just inefficient; it’s disrespectful. The best engineering cultures I’ve seen treat meetings like a necessary evil, a tool of last resort. They guard their focus time with the ferocity of a build system guarding its cache. They write things down. They trust each other to read. And they ship, relentlessly, while the meeting-heavy teams are still trying to find a time that works for everyone to discuss the agenda for the next meeting.

Why Your Engineering Team’s Calendar Is a Legacy System That Needs a Rewrite

I’ve sat through enough stand-ups to know the real bottleneck in software development isn’t the code. It’s the calendar. The modern engineering team has mutated into a meeting factory that occasionally ships features. We’ve ritualized interruption and called it collaboration. The fix isn’t a shiny new project management tool or a better retro format. The fix is shutting up and letting people work.

The Meeting Industrial Complex

Somewhere along the way, we decided that synchronous chatter was the gold standard for knowledge work. Got a question? Book a meeting. Need a decision? Book a meeting. Have a meeting coming up? Book a pre-meeting to decide what you’ll decide in the meeting. Then we act surprised when nothing ships on Friday.

Engineering is deep work. It demands long, uninterrupted stretches of concentration. Yank a developer into a 30-minute sync and you haven’t just lost 30 minutes. You’ve vaporized the 45 minutes they spent sinking into flow before the interruption, the meeting itself, and the 20 minutes it takes to rebuild mental context afterward. That’s nearly two hours of productive capacity. Torched. For a status update that could’ve been a three-line Slack message.

The kicker? Most meetings exist to solve problems that meetings created. A team communicates poorly, so leadership layers on a daily sync. The daily sync surfaces too many issues, so they add a weekly planning meeting. The planning meeting reveals misalignment, so they bolt on a cross-team alignment meeting. Before you know it, engineers spend more time talking about work than doing it. It’s a self-licking ice cream cone of inefficiency.

Engineer staring at multiple screens in a dark room, representing the deep focus needed for coding

The Async Advantage

Asynchronous communication isn’t just a remote-work buzzword. It’s the default mode for how engineers actually solve problems. You don’t debug a race condition by herding five people into a room and talking about it. You dig into logs, read documentation, write a proof of concept, and then share your findings. The work itself is async. The communication should match.

When a team goes async-first, something almost magical happens: people start writing things down. Design decisions get documented. Trade-offs get explained. Context gets preserved. Six months later, when someone asks why the authentication service uses a custom token format, there’s a written record instead of a vague memory of a whiteboard session that nobody photographed.

Async also flattens the playing field for distributed teams. The engineer in a different time zone stops being a second-class citizen dialing into 9 PM meetings. The introvert who needs time to process before responding gets to contribute at their best. The junior developer can read through the decision history and actually understand why the system works the way it does. Everyone wins except the extroverts who get energy from hearing themselves talk. They’ll survive.

What Async Actually Looks Like

Let’s get specific. Async communication means leaning on RFC documents, design proposals, and threaded discussions in Slack or Discord instead of real-time meetings. It means recording short video walkthroughs with Loom rather than scheduling a live demo that half the team can’t attend. It means writing clear, structured updates in a shared channel instead of going around the room in a stand-up.

Here’s a concrete example. Instead of a one-hour sprint planning meeting, the product manager writes a document outlining the next batch of work—context, acceptance criteria, links to relevant designs. Engineers review it on their own time, leave comments and questions, and the PM iterates on the doc. By the time anyone gets on a call—if they even need to—the major ambiguities are already resolved. The call is 15 minutes, not 60, and it’s optional.

Person writing in a notebook with a laptop open, illustrating thoughtful async documentation

The Meetings Worth Keeping

I’m not a meeting abolitionist. Some conversations genuinely benefit from real-time back-and-forth. Complex technical debates where you need to sketch architecture on a virtual whiteboard. Sensitive feedback that requires tone and empathy. Team bonding that builds the trust necessary for async to work in the first place. The trick is being intentional about which meetings earn their spot on the calendar.

A good rule of thumb: if the meeting is mostly about information transfer, it should be a document. If it’s about decision-making, it should start as a document and only escalate to a meeting if the async discussion deadlocks. If it’s about relationship-building, schedule it sparingly and make it genuinely social. The daily stand-up that’s really just a status report? Kill it. Replace it with a Slack bot that asks three questions and posts the answers to a channel.

I once worked with a team that replaced all internal meetings with async updates for a month as an experiment. Productivity shot up. Bugs got fixed faster. The only complaint came from a manager who felt “out of the loop” because he wasn’t hearing people talk. That’s not a communication problem. That’s a control problem dressed up as a communication problem.

Writing Is Thinking

There’s a deeper reason async works for engineering teams: writing forces clarity. When you have to explain a technical decision in prose, you can’t hide behind hand-waving and jargon. You have to structure your thoughts, anticipate counterarguments, and commit to a position. A spoken discussion can meander for an hour and end with “let’s take this offline.” A written proposal has to land somewhere.

This is why the best engineering cultures are writing cultures. They produce design docs, postmortems, and RFCs that become the team’s collective memory. New hires can onboard by reading through the archive. Decisions get made with the full context visible to everyone, not just the people who happened to be in the room. It’s more democratic, more rigorous, and frankly more respectful of people’s time.

Whiteboard covered in diagrams and notes, showing collaborative thinking without a meeting

How to Actually Make the Switch

Moving to async-first doesn’t happen by decree. You can’t just fire off a company-wide email announcing “no more meetings” and expect it to stick. The habits are too ingrained. You need to replace the rituals, not just remove them.

Start with the most painful meeting on the calendar. For most teams, that’s the daily stand-up. Replace it with a written check-in. Use a template: what I did yesterday, what I’m doing today, what’s blocking me. Post it in a shared channel. If someone is blocked, they can immediately ping the person who can help. No need to wait 24 hours to say it out loud in a circle.

Next, tackle decision-making. Create a lightweight RFC process. It doesn’t need to be formal. A Google Doc with a problem statement, proposed solution, alternatives considered, and open questions is enough. Give people 24–48 hours to comment. If there’s consensus, you’re done. If there’s disagreement, then—and only then—schedule a focused discussion with the relevant people. Most decisions won’t need the meeting.

Finally, protect deep work time. Block off large chunks of the calendar as “no meeting” zones. Make it culturally unacceptable to schedule over them. If someone tries, the response should be “can this be async?” not “let me shuffle my focus blocks around.” Treat uninterrupted time as the precious resource it is.

The Real Engineering Problem

Here’s the blunt truth: if your team can’t function without constant meetings, you have a trust problem or a clarity problem. Either leadership doesn’t trust engineers to do the right thing without constant oversight, or the team lacks the written context to make decisions independently. Both are fixable. Neither requires more meetings.

Engineering culture is the real technical problem. We obsess over system architecture, code quality, and deployment pipelines, but we tolerate communication patterns that are the equivalent of a single-threaded event loop blocking on I/O. It’s absurd. We’re building distributed systems with high throughput and low latency, and then we run our teams like a batch process from 1972.

Async communication is the horizontal scaling of human collaboration. It lets work happen in parallel. It creates a persistent log of decisions. It decouples services—I mean, team members—so they can operate independently. If you wouldn’t design your system the way you run your meetings, why are you running your meetings that way?

FAQ

Won’t async communication slow down decision-making?

Only if you measure decision speed by how quickly someone speaks in a meeting. Async actually speeds up the overall process because people can contribute when they’re ready, not when the calendar slot happens. A decision that takes two days of async discussion is still faster than waiting a week for the next scheduled meeting. And the decision quality is higher because people had time to think.

What about urgent issues that need immediate attention?

Urgent issues should be rare. If everything is urgent, nothing is. For genuine production incidents, you should have an on-call rotation and a well-defined incident response process. That’s not a meeting—that’s a fire drill. For everything else, “urgent” is usually a euphemism for “poorly planned.” Fix the planning, not the communication channel.

How do you maintain team cohesion without regular face-to-face meetings?

Cohesion comes from shared purpose and trust, not from staring at each other in a conference room. Async communication actually builds stronger cohesion because it creates a written record of collaboration. People see each other’s thinking, not just their talking. For the human connection piece, schedule occasional in-person or video social time that’s explicitly not about work. But don’t confuse socializing with status updates.

What if management insists on keeping the meetings?

Show them the math. Calculate the cost of a one-hour meeting with eight engineers. Then calculate how many hours per week those engineers spend in meetings. Multiply by their loaded cost. That number is usually enough to get attention. If it’s not, propose a one-month experiment: replace all status meetings with async updates and measure velocity, bug resolution time, and team satisfaction. Let the data do the arguing.

The bottom line: your team’s calendar is a legacy system. It’s time to refactor it. Start by deleting the meetings that exist only because they’ve always existed. Replace them with writing. Trust your engineers to manage their own time. You might be surprised how much they ship when you stop interrupting them.

Your Calendar Is a Bug, Not a Feature: Why Engineering Teams Need Fewer Meetings and More Async

A chaotic, overlapping pile of paper calendars and sticky notes on a desk

Pull up your team’s shared calendar. I’ll wait. What you’re staring at isn’t a schedule—it’s a crime scene. A Jackson Pollock of conflicting stand-ups, backlog grooming sessions that groom nothing, and a weekly “architecture sync” that’s been chewing on the same database index for a month and a half. We’ve mistaken motion for progress. We’ve built a culture where the default response to any ambiguity is a 30-minute blocker with 12 attendees, half of whom are silently eating lunch and praying for the sweet release of the “Leave Meeting” button.

This isn’t a rant about hating people. I like people. But the modern engineering meeting ritual is a direct assault on the mental state required to build complex systems. You cannot hold a distributed transaction model in your head in the 22-minute gap between a stand-up and a stakeholder check-in. You just can’t. The calendar is the bug, and asynchronous communication is the patch we keep refusing to deploy.

The Factory Floor in a Hoodie

Most tech companies operate with a factory mindset wearing a startup hoodie. The 9-to-5, meeting-heavy structure is a relic of manufacturing floors where physical presence was the only way to coordinate. If you’re bolting fenders onto a chassis, you need to be shoulder-to-shoulder. If you’re untangling a race condition in a microservice mesh, you need long, unbroken stretches of silence. The tools have evolved. The management reflexes haven’t.

When you book a meeting, you’re not just spending 30 minutes. You’re fragmenting the day for every engineer who has to attend, then recover. A single one-hour meeting for a team of six doesn’t cost one hour—it costs six hours of prime cognitive time, plus the hidden tax of getting back into the zone. Research on programmer productivity pegs that recovery time at over 20 minutes per interruption. Do the math on a day with three scattered meetings. You’ve effectively paid people to do nothing but context-switch.

A group of people sitting around a table looking tired and disengaged during a meeting

Meetings as a Crutch for Missing Docs

Here’s a pattern I see everywhere: a team holds a meeting to “get everyone on the same page.” The problem? The page doesn’t exist. There’s no written design doc, no updated README, no decision log. The meeting is a live, high-bandwidth, low-retention substitute for a document nobody bothered to write. It’s a group therapy session for organizational amnesia.

This is completely backwards. A well-written proposal lets people digest the problem at their own speed, leave comments, and build a threaded discussion that becomes a permanent artifact. A meeting evaporates the moment it ends, leaving behind a half-baked transcript and a vague sense of agreement that nobody can quite recall. If you can’t explain the change in a document, you don’t understand it well enough to discuss it in a room.

Async-first means writing things down. It means recording a short video walkthrough of a pull request instead of dragging everyone onto a call. It means treating your project management tool as a source of truth, not a graveyard of outdated tickets. The goal is to make information discoverable, not to hoard it until the next synchronous ceremony.

The Context-Switch Tax Is Killing Your Throughput

Engineers aren’t assembly-line workers. The work product isn’t a widget that pops off a conveyor belt every 90 seconds. It’s a fragile mental model of a complex system. Every interruption—a Slack ping, a calendar pop-up, a tap on the shoulder—shatters that model. Rebuilding it takes time and mental energy, both of which are finite and neither of which shows up on a timesheet.

I’ve seen teams with an official “no meeting Wednesday” policy whose calendars are still littered with “quick syncs” that someone deemed too important to skip. That’s like declaring a diet and then making an exception for every meal. The protection has to be absolute, or it’s worthless. Block the time. Defend it with the same ferocity you’d defend production from a rogue deployment. Because that’s exactly what’s at stake: the production of working software.

When a Call Actually Makes Sense

I’m not a zealot. There are times when jumping on a call is the right move. The rule of thumb is simple: synchronous for emotional bandwidth, asynchronous for intellectual bandwidth.

If you’re delivering tough feedback, untangling a heated conflict, or brainstorming a genuinely novel problem where ideas need to ricochet in real time, get in a room (or a video call). These conversations depend on tone, body language, and rapid back-and-forth. But these are the exceptions, not the default. A status update is not an emotional event. A bug triage is not a creative jam session. Treating them as such burns through everyone’s emotional and intellectual reserves for no reason.

Here’s a quick test: if the meeting agenda could be replaced by a bulleted list in a shared document, you don’t need the meeting. If the outcome is “we’ll discuss this further,” you didn’t need the meeting. If half the attendees are clearly multitasking, you didn’t need the meeting, and you’ve already lost them.

A person staring at a laptop screen with a frustrated expression, surrounded by sticky notes

Building an Async-First Culture Without Losing Your Mind

Shifting a team to async communication isn’t a tooling problem; it’s a trust problem. Managers who demand constant meetings are often signaling that they don’t trust the team to make progress without surveillance. The first step is admitting that if you hired smart people, you should let them work like smart people. Micromanagement is a confession of hiring failure.

Start with a brutal calendar audit. Cancel every recurring meeting that doesn’t have a written purpose and a clear decision-making framework. Replace stand-ups with a daily async check-in in a dedicated Slack channel or a tool like Geekbot. Replace status meetings with a dashboard that actually reflects the state of the work. Replace “alignment” meetings with RFC documents that people can comment on over 48 hours.

Then, protect the time. Make deep work blocks visible on the calendar and treat them as sacred. If someone tries to schedule over a focus block, the response should be a polite but firm “I’m in a deep work block; can this be an async thread instead?” This needs to be modeled by senior engineers and explicitly endorsed by leadership. If the CTO is double-booked in meetings all day, the message is clear: meetings are the real work.

Writing Is Thinking, and Thinking Is the Job

One of the most underrated skills in engineering is clear writing. A well-crafted design doc, a concise pull request description, a thoughtful comment on a ticket—these are the gears that turn an async team. Writing forces clarity. It exposes gaps in logic that a fast-talking meeting can gloss over. It creates a record that outlasts the memory of the conversation.

If your team struggles with this, invest in it. Make writing a first-class skill in your hiring and promotion rubrics. Give people time to write. Review documents with the same rigor you review code. A culture that writes well is a culture that thinks well, and a culture that thinks well doesn’t need to meet constantly to figure out what it’s doing.

FAQ: The Questions You’re Too Polite to Ask in the Retro

“But what about collaboration? Don’t we lose something if we’re not in a room together?”

You lose interruptions, groupthink, and the loudest person in the room dominating the conversation. Async collaboration—through shared documents, threaded discussions, and recorded demos—gives introverts, non-native speakers, and deep thinkers an equal footing. The “something” you lose is mostly the illusion of consensus built on social pressure.

“Our project manager says we need more meetings to stay aligned. How do I push back?”

Ask for data. What decisions were made in the last 10 meetings that couldn’t have been made in a document? What percentage of meeting time is spent on status updates versus actual decision-making? If the PM can’t answer, propose a two-week experiment: replace the meeting with an async update and a single decision-making thread. Measure the output. The numbers will do the arguing for you.

“We’re a remote team across time zones. Isn’t async just a fancy word for ‘we never talk’?”

No, it’s a fancy word for “we respect each other’s time and circadian rhythms.” Async doesn’t mean never talking; it means talking in a way that doesn’t demand an immediate response. It means the engineer in Berlin doesn’t have to take a call at 10 p.m. to hear a status update that could have been a Loom video. It’s not about silence; it’s about decoupling communication from attendance.

“What’s the one meeting we should absolutely keep?”

Keep the meeting where you decide which meetings to kill. Do it quarterly. Put every recurring meeting on trial. If it doesn’t have a written charter, a clear decision-making mandate, and a measurable impact on the product, it’s dead. No appeals. This is the only meta-meeting that earns its keep.

Stop Treating the Calendar Like a To-Do List

The goal isn’t an empty calendar. The goal is a calendar that reflects intentional, high-value collaboration, not a cascade of default commitments. Every meeting on the schedule should have to justify its existence against the alternative: a well-written document, a short video, a threaded discussion. Most won’t survive that comparison.

Your team’s best work won’t happen in a conference room. It’ll happen when someone has four uninterrupted hours to hold a complex system in their head, trace a bug to its root, or design an elegant abstraction. Protect that time like your product depends on it. Because it does.