"Move fast and break things" was never good advice. It was an excuse. And the organizations that took it seriously have spent years cleaning up the mess.
The framing itself is the problem. It suggests you have to choose: you can have speed, or you can have quality, but not both. This is a false dichotomy, and accepting it leads to consistently bad outcomes. Either you prioritize speed and accumulate quality debt that eventually brings development to a crawl, or you prioritize quality so obsessively that you never ship anything.
The best engineering teams I've worked with don't make this tradeoff. They've figured out how to make speed and quality reinforce each other. And it starts with understanding why the tradeoff feels real even though it isn't.
Why the Tradeoff Feels Real
In the short term, cutting corners does speed things up. Skip the tests, ship the feature faster. Skip the code review, get it deployed today. Skip the documentation, move on to the next thing. Each individual shortcut saves time right now.
The problem is that these shortcuts compound. That untested code becomes the untested code that breaks in production next month. That unreviewed code becomes the technical debt you'll work around forever. That missing documentation becomes the onboarding obstacle that slows down every new hire.
Teams that "move fast and break things" tend to move fast for a while, then hit a wall. The codebase becomes fragile. Changes in one place break things in unexpected places. Every feature takes longer than expected because you're fighting the system you built. Engineers burn out from firefighting.
I've seen this pattern dozens of times. A team sprints for months, shipping features rapidly while accumulating quality debt. Then one day they realize they've slowed to a crawl, and the fastest path forward is a major rewrite that will take longer than all the time they "saved" by cutting corners.
What Actually Slows Teams Down
When engineering teams feel slow, the instinct is to cut more corners. Write less tests. Do less review. Document less. But this makes things worse, not better.
Here's what actually slows teams down:
Bugs in production. Every bug is a context switch. Someone has to stop what they're doing, understand the problem, fix it, and deploy the fix. Then deal with the customer fallout. A team that spends 30% of its time on unplanned bug fixes isn't slow because they're writing too many tests.
Unclear requirements. Building the wrong thing is the ultimate waste of time. A feature that needs to be rebuilt because nobody validated the requirements took twice as long as it should have, regardless of how fast the code was written.
Technical debt. Every workaround, every "I'll fix this later," every shortcut that doesn't get cleaned up makes the next change harder. Code that's hard to understand takes longer to modify. Brittle systems need more careful changes. The accumulated weight of past shortcuts becomes the primary obstacle to current progress. Knowing when to pay down technical debt is critical.
Poor tooling. If your test suite takes 45 minutes to run, engineers will skip it. If deployments are manual and scary, you'll deploy less often. If your development environment takes a day to set up, onboarding slows down. The friction in your development process directly impacts how fast you can move.
Notice what's not on this list: "too much time writing tests" or "too thorough code reviews" or "too much documentation." In my experience, these are almost never the actual bottleneck.
How Speed and Quality Reinforce Each Other
The teams that move fastest aren't the ones cutting corners. They're the ones who've invested in quality in ways that accelerate future work.
Fast, reliable tests enable fast iteration. If you can run your test suite in two minutes and trust the results, you can make changes confidently. You can refactor aggressively. You can try things, see if they work, and back them out quickly if they don't. If your test suite is slow or flaky, every change is a gamble.
Clean architecture enables fast feature development. Code that's well-organized and well-abstracted is code that's easy to modify. Adding a feature in a well-designed system might be a day's work. Adding the same feature in a tangled mess might be a week of careful surgery.
Good documentation enables fast onboarding. Every hour spent on documentation saves many hours for everyone who reads it. A new engineer who can get productive in a week instead of a month is a massive velocity multiplier. These investments compound over time.
Automated processes enable fast, safe changes. Automated testing, automated deployment, automated monitoring. Each automation removes friction from the development cycle. The team that can deploy ten times a day can iterate ten times faster than the team that deploys once a week.
The investment in quality pays back in speed. Not eventually, but continuously. The team isn't fast despite their quality practices; they're fast because of them.
The Real Tradeoff
There is a tradeoff, but it's not speed vs. quality. It's short-term speed vs. long-term speed.
Cutting corners gets you to next week's deadline. Investing in quality gets you to next year's goals. Both are legitimate business decisions. Sometimes the short-term matters more, especially in a startup racing to find product-market fit before running out of money.
But you should make that tradeoff consciously, understanding the true cost. "We're skipping tests on this feature because we need to validate the concept quickly, and we'll come back and add them if it works" is a reasonable decision. "We don't write tests because tests slow us down" is not understanding the tradeoff at all.
And here's the thing: most teams that think they're making short-term tradeoffs are actually just accumulating debt they never pay back. The feature ships without tests. Then there's another deadline, and another. The tests never get written. The debt compounds.
The discipline required isn't "never cut corners." It's "be honest about when you're cutting corners and have a real plan to pay back the debt." If you're always cutting corners and never paying back, you're not making tradeoffs; you're just building a slow team.
Building a Culture That Gets Both
How do you build a team that moves fast and maintains quality? A few principles I've seen work:
Make quality the path of least resistance. If doing the right thing is hard and doing the wrong thing is easy, people will take shortcuts. Invest in making quality practices easy: fast test suites, automated code formatting, streamlined review processes, good tooling.
Measure what matters. If you measure feature velocity without measuring bug rates, you incentivize speed at the expense of quality. Track both. Celebrate teams that ship fast and reliably, not teams that ship fast and then spend the next sprint fixing bugs.
Fix the system, not the symptoms. When something goes wrong, ask why. A bug in production isn't just a bug to fix; it's information about a gap in your quality practices. A missed deadline isn't just bad luck; it's information about your estimation or requirements process.
Be explicit about debt. Technical debt isn't inherently bad. Untracked technical debt is. Keep a list. Make paying it down a regular part of the work, not something you'll get to "someday."
Speed and quality are not mutually exclusive. The teams that treat them as a tradeoff end up with neither. The teams that understand they're complementary end up with both.
Frequently Asked Questions
Want help building a team that ships fast without breaking things?
Let's Talk →