Sweating the Small Stuff — Software Engineering Edition
Great engineering is invisible because it just works — and it works because someone tested the small parts. How to make TDD a frictionless habit.
Great work requires sweating the small stuff. When someone truly cares about their craft, they extend their efforts far beyond what any rational person might consider necessary. You can often tell whether someone is serious about their work just by looking at how — and why — the small details are the way they are.
No, I'm not talking about premature optimization. You can't afford to sweat the small stuff before you get the big things right. Great executors know how to prioritize: they focus first on building the right thing, then shift gears to building the thing right. As Jack Dorsey puts it: "Make every detail perfect, and limit the number of details to perfect."
As a professional software engineer, I've followed Test-Driven Development (TDD) for quite some time. One thing that still surprises me is how accurate large parts of a system can be when each small part has already been tested in isolation. That, to me, is what it means to sweat the small stuff in software engineering. When you've verified all the tiny components behave exactly as expected, there's very little chance the system composed of those parts will fail in unexpected ways.
TDD, by its nature, pushes you toward modular, maintainable, testable code. It enforces the single-responsibility principle. It forces you to think about your design before you write your implementation. That's not just good practice — it's craftsmanship.
Almost every engineer knows the value of unit testing, but most struggle to make it a habit. In my experience the problem isn't a lack of awareness — it's that unit testing often feels bolted on rather than baked into the daily flow. To make it stick, it needs to be frictionless. Here are a few ways I've learned to integrate TDD seamlessly into my workflow.
1. Make unit tests your debugging companion
When something breaks, don't just inspect the debugger or toss in a console.log.
Write a failing test that reproduces the issue. This makes the problem reproducible
and ensures that once you fix it, it never comes back. Over time, this habit builds
a robust suite of regression tests for free.
2. Realize that unit tests make you a better programmer
Writing good tests means writing testable code. Testable code is modular, decoupled, and has clear boundaries — qualities essential for long-term maintainability. The side effect of writing tests is that you're quietly leveling up your design skills every single day.
3. Design your CI/CD to speed up the feedback loop
A good continuous-integration setup should feel like a superpower. If your tests take 10 minutes to run, no one will use them. If your CI breaks mysteriously or inconsistently, it'll be ignored. But if your pipeline is fast, clear, and trustworthy, it becomes a critical part of your engineering culture. Fast feedback encourages developers to fix bugs early — often before they're even committed.
4. Write tests before, during, and after
TDD purists will argue you must write tests first. In reality, especially in complex systems or exploratory work, you might write the code first and the test second — and that's okay. What matters is that testing isn't an afterthought. Before, during, or after — what's important is that you write the test.
5. Start small, stay consistent
You don't need 100% coverage on day one. Start by writing a test for every bug you fix. Then try a test for each new function or class. Over time you build momentum, and unit testing becomes second nature — just like writing code.
Sweating the small stuff in software doesn't mean obsessing over pixel alignment or naming conventions (although those matter too). It means caring enough to build things that work, that are reliable, and that can change safely. It means writing code not just for machines to run, but for humans to read, understand, and trust.
Great engineering is invisible because it just works. And it just works because someone, somewhere, took the time to sweat the small stuff.
Related reading
Speed and Stability Are Not Opposites
The State of DevOps research is clear: optimizing for fast feedback improves stability too. A tour of the four DORA metrics and what they really measure.
Quality Is Not (Only) the Responsibility of QA
An auditing principle applied to software: QA assures quality, but building it is everyone’s job. Why shared ownership beats the QA-as-gatekeeper model.