← All case studies

Rebuilding a Dev Team's Delivery Engine

A Provider of SaaS Marketing Services · 6-Person Dev Team

3.5x
Capacity Visibility Growth
-80%
Unplanned Work Reduction
62%
Work on Features (up from 39%)
61 pts
Stuck in UAT

The Situation

A 6-person development team at a SaaS marketing services provider was working on a legacy .NET platform with no structured sprint process. The team had no baseline for capacity, no visibility into velocity, and was constantly buried in unplanned work.

Beyond the process gaps, deeper systemic issues compounded the problem:

  • No true product management — reactive task assignment, not strategic prioritization
  • Data integrity bugs generating a constant stream of operational cleanup work
  • No sprint planning process or capacity awareness
  • Significant tech debt across the legacy .NET codebase

Phase 1: Build the Foundation

The first priority was establishing a predictable sprint process:

  • Capacity-based planning — sprints scoped to actual team availability
  • Proper story scoping — teaching the team what a right-sized story looks like: clear acceptance criteria, vertical slices through the stack, completable within a sprint
  • Velocity and injection tracking — 3-sprint rolling averages and unplanned work measurement

Phase 2: Go Deeper

With the sprint process stable, the next phase tackled root causes:

  • True product management — proper backlog grooming, story refinement, and strategic prioritization
  • Root-cause bug fixes — targeting data integrity bugs that were generating constant cleanup injections, eliminating them at the source
  • Reformed dev standards — new development patterns, practices, and AI-assisted workflows

The Results: 6 Sprints of Data

Injection Under Control

Unplanned work was drowning the team. In the first two sprints, injected work exceeded what was planned — a sign that the process around the team was broken. A combination of product management reform and targeted bug fixes that eliminated faulty data at the source drove injection down dramatically:

Injection as % of Committed Points

S1
145%
S2
142%
S3
45%
S4
44%
S5
19%

Bug fixes eliminated faulty data at the source, removing the need for constant data cleanup injections.

Capacity Visibility Grew 3.5x

As the process matured and the team built confidence, sprint commitments grew from 29 points to 101 points in five sprints. This isn't the team working harder — it's the planning process accurately reflecting what the team can deliver.

Feature Ratio Increased

With data cleanup work declining as root-cause fixes took hold, the team shifted toward product value:

39%
Features (Sprint 3)
62%
Features (Sprint 5)

Exposing the Real Constraint

Once the dev team was delivering predictably, the bottleneck shifted. The data made it undeniable:

UAT Backlog Growth (Points Awaiting Validation)

S2
4 pts
S3
11 pts
S4
29 pts
S5
31 pts
S6
61 pts

61 points of completed dev work sitting in UAT — nearly half a sprint's output — with no one testing it. Some items had been waiting for validation for over 55 days. The dev team delivered the work. The organization hasn't validated it.

This is the pattern: when you fix the dev team, you expose the constraints that were always there but hidden behind slower delivery. In this case, UAT processes depend on business users carving out time from their day jobs to test. That worked when the dev team was delivering a trickle. It breaks when the team is delivering a flood.

Key Takeaway

The team didn't change. The people didn't change. The systems changed. Capacity-based planning, right-sized stories, root-cause bug fixes, and true product management transformed the same team from no process to outpacing the rest of the organization. The next challenge is organizational: building UAT processes that can keep up with a high-performing dev team.