· Unstuck  · 7 min read

Why most SaaS teams get stuck and how to avoid the rebuild trap

Development ground to a halt? Team telling you a rebuild is needed to get unstuck? This is surprisingly common, but luckily it's often less intimidating to fix than you might expect.

I was on a call the other month with a founder who’s product development had ground to a halt. His developers had told him the whole system needed a complete re-write. Fundamentally flawed and unworkable. But he already had 18 months of development in the product.

This isn’t rare, I see it constantly. Luckily in each case I’ve faced it has been 100% avoidable.

Why SaaS Teams Get Stuck

Many teams hit a wall somewhere between product market fit and the effort to scale the product beyond the early stage. Revenue is coming in, customers are asking for things, and suddenly the product that got you here now feels like it’s holding you back.

The common causes look like this:

The rebuild trap. Someone suggests starting fresh. It feels logical. The current code is messy, you’ve learned so much since v1, and a rewrite could solve everything. Except rebuilds take longer than anyone estimates, they rarely solve the underlying problems, and they stop all forward progress while competitors keep shipping.

Unclear priorities. When everything feels urgent, nothing is. Teams end up bouncing between customer requests, technical improvements, and half-finished features. You’re busy, but not moving forward.

Unexamined tech debt. Some debt is fine. Some debt compounds until it touches everything. The difference is knowing which is which. Most teams don’t have a clear picture of what’s actually slowing them down versus what just feels messy.

Decision paralysis. When the problems feel overwhelming, it’s tempting to keep discussing options instead of picking one and moving. Analysis becomes a way to avoid the discomfort of committing to a direction that might be wrong.

If some of these challenges hit close to home, that’s normal. The good news is that teams rarely need to rebuild to recover momentum. Once you separate the real constraints from the noise, a clear path forward appears.

The Real Cost

While teams are stuck feature velocity drops to near zero. Your roadmap becomes theoretical. Customer requests pile up in a spreadsheet somewhere, and you start saying #soon to everything.

Competitors who were behind you six months ago are now ahead. They’re not smarter or better funded. They’re just shipping.

Team morale takes a hit. Good developers want to build things. Even the most tech-focused and business-blind developer feels pride and satisfaction when they’re part of a successful team, shipping a successful product. When they’re stuck in planning meetings about planning meetings, they start looking at other opportunities.

Costs balloon. You’re paying your team the same amount, but getting less output. The opportunity cost of missed deals and churned customers adds up faster than most founders realise.

The Alternative

There’s a better path than either living with the pain or betting everything on a rebuild. I call it the Unstuck System. It’s built around three phases:

1. The Unstuck Audit

Figure out what’s actually blocking growth versus what’s just uncomfortable. Not all problems need solving right now. Some need solving never. The goal is to identify the 2-3 things that, if fixed, would unlock the next stage of growth.

Map the current state honestly. Where is tech debt causing real problems? Where are processes unclear? What decisions are getting made repeatedly because there’s no documented answer? This isn’t about judgment, it’s about visibility.

2. The Unstuck Sprint

Small, strategic improvements that compound. Instead of rebuilding the entire auth system, maybe you extract the signup flow into a new service and leave the rest alone for now. Instead of rewriting the frontend, maybe you introduce a component library for new features only. This isn’t the time to rebuild in Rust.

3. Stay Unstuck

The real work is building the muscle to make these decisions ongoing. Weekly debt reviews. Clear ownership of different system areas. A simple framework for evaluating whether to fix, tolerate, or work around any given issue. The goal isn’t perfection. It’s sustainable forward motion.

A Simple Example

Let’s return to the founder back at the top. The MVP had been built by an agency who looked to have used the project as an exercise to build their own re-usable components. Rather than purpose-built software designed with it’s domain intent in mind, it was a mess of reflection and abstractions upon abstractions.

The team built to pick up maintenance had finally reached breaking point. They were afraid to touch many parts of it out of fear of breaking it. Relatively simple features were taking months rather than weeks to deliver. The features which weren’t abandoned in-progress that is. This was understandably causing tension in the startup, which by this point had all the agility of an enterprise corporation.

The Unstuck Audit revealed something unexpected. The foundations were technically sound, but the architecture was nearly impossible to work with. The previous agency had built a schema-driven system where controllers and UI components were generated at runtime through reflection. To add a simple feature you had to trace logic through multiple layers of abstraction with no clear entry point.

The developers weren’t exaggerating about the rebuild. They genuinely couldn’t work with it anymore. Every change was a guessing game. But a full rewrite wasn’t the answer either. The core domain logic was solid. We just needed to make it more maintainable.

The main show-stopper issues were prioritised, with mitigation plans provided. Essentially the goal was to tame this unwieldy beast and increase the accessibility of working with it. Also to re-frame and appreciate the strengths that were present - after the weaknesses were no longer blocking the view.

The Unstuck Sprint allowed us to hit the main areas. Document how to work with the existing (excessively exotic) architecture. Address some issues caused by the team trying to bend the existing product the wrong way in some places. Provide a plan for how future work can be added. Cut back on excess cloud infrastructure spend which had grown disproportionately.

The result was immediate. Features that had been taking months were now shipping in a few weeks. Hosting costs dropped to roughly a third once the unnecessary infrastructure was trimmed back. The “do we need to rebuild?” crisis faded quickly because the team could finally move again.

I’ve been working with them ever since, typically 5-20 hours per week depending on what they’re tackling. It’s not just consulting calls either. It’s hands-on development alongside their team, treating blockers as they come up rather than letting them accumulate into another crisis.

Some weeks it’s shipping features. Other weeks it’s refactoring a troublesome area before it becomes a problem. The goal is to keep momentum while gradually improving the parts that matter. Allow the product to continue growing and Stay Unstuck.

Why This Matters Today

This isn’t just theory, I apply it in Quivva too. Keeping the architecture straight forward while following established best practices keeps focus on product value, rather than wasted trying flavour of the month technical approaches that’ll appear alien to future developers reading the code a few years from now.

The Unstuck System came from watching teams (including my own past teams) waste months on problems that didn’t matter while ignoring the ones that did.

Keep Following Along

I’m sharing more lessons from client work and from building Quivva every week. The messy parts, the trade-offs, the decisions that worked and the ones that didn’t.

If you’re building something or stuck on something, I’d love to hear about it. The best insights come from real problems that real teams are facing.

    Share:
    More articles

    Related Posts

    View All Posts »