Let’s not pretend otherwise: most meetings hit a software engineer like kryptonite. You shuffle into a room, nursing your third coffee, and watch perfectly good minutes of your life vanish into a black hole of vague status updates and circular arguments. Your IDE sits cold. Your pull request gathers dust. Your soul quietly forks itself onto a darker branch.
I’m Fritz Muller. I poke at engineering culture because—come on—the people problem is the real technical problem. We’ll obsess over shaving three milliseconds off a database query but shrug while a meeting hemorrhages 30 minutes per attendee like it’s a rounding error. This isn’t one of those productivity sermons. Think of it as a survival guide for anyone who has ever stared at a calendar invite and thought, “I could’ve shipped a feature during this standup.”

The Meeting Sickness: Why Your Calendar Is a Bug
Here’s the grimy little secret: bad meetings aren’t just irritating—they’re a system crash. When a meeting has no clear owner, no real agenda, and no decision point, it turns into what I call “status theater.” Everyone recites what they did. Nobody asks why any of it matters. Three hours later, the actual work happens in a Slack thread. The bill? Multiply one directionless 45-minute gathering by eight senior engineers, and you’ve torched roughly $1,200 of company cash to produce zero working code. That’s not a meeting. That’s arson with a calendar invite.
The root cause is embarrassingly simple: we treat meetings as the default coordination tool, not the last resort. Engineering culture worships building, but we’ve constructed a process where talking about building swallows more time than the building itself. Fixing it demands the same rigor you’d throw at a memory leak—find the source, patch it, stop the bleeding.
A Pre-Flight Checklist: Don’t Schedule Unless You Mean It
Before your finger hits “send” on that invite, run this quick diagnostic. If you can’t answer these three questions, delete the meeting and go write some code:
- What single decision must this meeting produce? If the answer is “discuss” or “share updates,” you don’t need a meeting. You need a document. Write an RFC. Record a Loom. Use async communication like a grown-up.
- Who actually needs to be there? Inviting eight people because you’re scared of bruising egos isn’t collaboration—it’s hostage-taking. Two to five people is the sweet spot. Anyone beyond that is a spectator, and spectators don’t commit code.
- Can this be settled in 15 minutes or less? Default to 15-minute slots. Parkinson’s law is brutally real: work swells to fill whatever container you give it. A 30-minute block will magically soak up 30 minutes of rambling. Respect the clock.

Running the Thing: Structure That Forces Closure
Okay, you’ve determined a meeting is necessary. Now don’t wreck it. The gap between a decent meeting and a soul-crushing one is structure—specifically, the kind of structure that makes it impossible to leave without a concrete outcome.
1. Write an Agenda That Reads Like a Git Commit Message
Mushy agendas breed mushy meetings. Instead of “Discuss Q3 roadmap,” try “Decide whether we ship the API refactor in September or October.” The agenda should be a crisp, specific statement of what you’ll decide. Send it at least 24 hours ahead, and attach any pre-read materials. If folks show up unprepared, end the meeting. I mean it. The second time you do it, they’ll read the damn doc.
2. Assign a DRI (Directly Responsible Individual)
Every meeting needs one person who owns the outcome. This person isn’t the “facilitator” in some squishy sense—they’re the one who writes the decision log, assigns action items, and nags until things are done. Without a DRI, accountability evaporates, and you’ll replay the same meeting next week. The DRI also gets the power to kill tangents. When Bob starts waxing poetic about his weekend homelab project, the DRI says, “Bob, we’re here to pick a caching strategy. Save that for the after-party.”
3. Start with a Decision, Not a Monologue
Most meetings burn the first ten minutes on context-setting that half the room already knows. Instead, open with the proposed decision. “I think we should use Redis for session storage because it cuts our database load by 40%. Here’s the data. Does anyone see a reason not to do this?” This flips the default from rambling to action. If nobody objects, you’ve just finished a meeting in under five minutes. Congratulations—go back to coding.
4. Use a Timer Like It’s a Standup
Set a visible timer. When it hits zero, the meeting ends, even if you’re mid-sentence. This isn’t rudeness; it’s engineering. We respect constraints. If you can’t resolve something in the timebox, the DRI schedules a follow-up with a narrower scope. But more often, the timer squeezes out the fluff and forces a call. You’d be stunned how fast consensus shows up when the alternative is another meeting.

The Async Fallback: When Meetings Are Just Laziness
Here’s a slightly unhinged idea: maybe you don’t need a meeting at all. Engineering teams have more async tools than ever—GitHub discussions, Notion docs, Slack channels. Yet we still gravitate toward synchronous time because it feels like work. It’s not. It’s a security blanket for people who don’t want to write a clear proposal.
Try this: for any meeting that’s purely informational, cancel it and send a written update instead. Require people to comment or react within 24 hours. If a real discussion explodes, then—and only then—schedule a focused session with the two or three people who actually disagree. The rest of the team just got an hour of their life back.
The Uncomfortable Truth: Culture Is the Bottleneck
You can implement every trick in this article and still flop if your company culture rewards performative busyness over shipping. If a manager judges productivity by calendar density, you’re cooked. If people are terrified of declining meetings, your calendar becomes a permission structure for interruption. Fixing meetings means fixing the incentives that spawn them.
Start small. Declare one day a week “meeting-free.” Guard it like a production outage. When someone tries to schedule over it, push back with the same ferocity you’d use against feature creep. Over time, people will notice that the team’s output spikes on that day, and the pattern spreads. Culture shifts when results shift.
Remember: every minute in a meeting is a minute you’re not building, debugging, or refactoring. The best meeting is the one you never had.
FAQ: What People Always Ask Me About Meetings
How do I decline a meeting without looking like a jerk?
Decline with a clear reason and an alternative. “I can’t make this because I need to ship the payment module by Friday, but I’ve added my thoughts on the doc. Ping me if there’s a specific blocker.” This shows you’re engaged, not evasive. If the organizer pushes back, ask if the meeting is more important than the Friday deadline. Watch them squirm.
What if my boss is the one scheduling terrible meetings?
This is a design problem, not an insubordination problem. Propose a pilot: “What if we move status updates to a 5-minute Slack thread for two weeks and see if anything breaks?” Frame it as an experiment with measurable outcomes. Bosses like data. If the experiment works, you’ve just reprogrammed your manager. If it fails, you’ve lost nothing—but it rarely fails.
Should standups be meetings or async check-ins?
Standups are the original sin of meeting culture. Unless your team is co-located and actively collaborating on a single incident, do them async. A Slack bot that asks “What did you do yesterday? What are you doing today? Any blockers?” does 90% of the job without stealing 15 minutes from 10 people. Reserve synchronous standups for when a blocker needs immediate unblocking—and then only pull in the relevant people.
Can a meeting actually be productive?
Yes, but it requires discipline. Productive meetings have one decision, a DRI, a tight timebox, and zero spectators. They feel more like a code review than a chat—specific, pointed, and over quickly. If you walk out without a clear action item, the meeting failed. No exceptions.
Now close this tab, open your IDE, and write something that ships.








