Back to Blog
LearningJuly 3, 20264 min read

Bike-shedding in Code Reviews: Stop Arguing Over Formatting

Bike-shedding in code reviews wastes hours of engineering time. Learn to apply better mental models to prioritize architecture over trivial syntax debates.

code reviewengineering productivitysoftware architecturedeveloper experienceteam dynamicsBooksLearningMental Models

We’ve all been there: a critical pull request involving a complex state management refactor sits ignored, while a minor PR with a trailing comma error sparks a twenty-comment debate on indentation styles. This phenomenon, known as bike-shedding, is the silent killer of engineering productivity.

I once spent an entire afternoon on a team that debated the naming convention of a private helper function for three hours. Meanwhile, the actual system architecture—which was clearly headed toward a race condition—went completely unexamined. We were focusing on the color of the bike shed while the main building was burning down.

Why We Fall Into the Trap

The Law of Triviality suggests that the time spent on any item in an agenda is inversely proportional to its actual importance. It’s psychologically easier to argue about where a bracket goes than to challenge a deeply flawed API design. Syntax is objective, binary, and safe; architecture is subjective, uncertain, and risky.

When we engage in bike-shedding, we aren't just wasting time. We are signaling our comfort zones. To move past this, we need to treat code review best practices as a filter for intent rather than a manual for perfection.

Reframing the Review Process

If you want to reclaim your team’s time, you have to change how you approach the PR lifecycle. I’ve found that applying the OODA loop: Speed Up Your Code Review Process helps shift the focus from "policing" to "observing." Instead of diving into the lines of code immediately, observe the architectural intent first.

When I review code now, I use this mental model to categorize my feedback:

CategoryPriorityFocus Area
ArchitecturalHighData flow, system state, interfaces
Logic/SafetyHighEdge cases, race conditions, null checks
MaintainabilityMediumReadability, naming, modularity
FormattingLowLinting, whitespace, style guide

Practical Steps to Stop the Noise

The most effective way to kill bike-shedding is to automate the trivial. If your team is arguing about formatting, you don't have a communication problem—you have a missing CI step.

  1. Automate Everything: Use Prettier, ESLint, or Ruff to enforce style. If the CI passes, the formatting is "correct." If you still feel the urge to comment on a space, delete your comment.
  2. Use Pre-Mortems: Before the code is even written, hold Software Architecture Pre-Mortems: A Guide to Prospective Hindsight. When the team agrees on the "big picture" early, there is less ambiguity to argue about later.
  3. Categorize Your Comments: Start your review comments with a prefix like [NIT] for trivial suggestions or [BLOCKER] for architectural concerns. This forces the author to see the weight of your feedback immediately.

Embracing Complexity

Sometimes, we bike-shed because we don't understand the system's complexity. If a PR feels "too big" or "too messy," we reach for the low-hanging fruit of formatting because we don't know how to critique the design.

When you encounter this, apply the Cynefin framework for software complexity: A guide for developers. If you can't identify the pattern of the code, don't comment on the syntax. Ask the author to explain the problem space instead. It’s better to admit you need more context than to fill the PR with irrelevant noise.

The Cost of Perfectionism

The pursuit of a perfectly formatted codebase is a trap. I’ve learned that, much like the Lindy Effect: Why Legacy Code Outlasts Newer Alternatives, code that is robust and simple will survive long after you’ve forgotten the exact style guide you were enforcing.

If I could do it differently, I would have stopped correcting variable names years ago. I would have focused entirely on Second-Order Thinking: Avoiding Architectural Traps in Engineering. What happens to the system six months from now if I approve this logic? That is the only question that actually matters.

We still struggle with this. Last week, I caught myself writing a comment about a redundant comment block. I deleted it before hitting submit. It wasn't worth the distraction. We are there to build software, not to format documents.

FAQ

Q: What if the code is genuinely unreadable? A: If it's unreadable, that’s an architectural or maintainability issue, not a formatting one. Ask for a refactor based on clarity, not based on your personal preference for how functions should be laid out.

Q: Should I ever comment on formatting? A: Only if it falls outside of your automated linting rules. If it’s not in the config, it’s not a rule. Keep your opinions to yourself unless it impacts actual system performance or maintainability.

Q: How do I tell a senior dev they are bike-shedding? A: Be direct. "I’m concerned that we’re spending more time on indentation than on the data race identified in the service layer. Can we focus our energy on the architectural risks?"

Similar Posts