DEV Community

Cover image for Bad Sprints Start Before the Sprint
karl-heinz reichel
karl-heinz reichel

Posted on • Originally published at calyntro.com

Bad Sprints Start Before the Sprint

There's a recurring debate in agile circles about why teams miss deadlines. The usual suspects: bad estimates, too many columns in Jira, missing WIP limits, the wrong metrics.

The fixes that follow are predictable. Reconfigure the board. Add a Cycle Time chart. Apply Little's Law. Run a retrospective about why the sprint went sideways — again.

These interventions aren't wrong. But they're downstream of the actual problem.

The Board Shows What Refinement Produced

A Scrum board is a mirror. It reflects the quality of the decisions made before the sprint started. If those decisions were vague, the board will look chaotic — not because of how the columns are arranged, but because the work itself was never properly understood.

Here's what that looks like in practice:

A ticket sits in "In Progress" for three weeks. Was it blocked? Was it actively worked on? Was the scope unclear from day one? The board can't tell you. It only records that someone started it and nobody finished it.

Meanwhile, in the last refinement session, the team estimated the ticket in two hours and moved on.

The board didn't fail. The refinement did.

What Happens When Refinement Is Skipped or Rushed

Poor refinement produces three predictable failure patterns:

Work that can't be started cleanly. The developer picks up a ticket, reads it, and immediately has three questions that weren't answered in refinement. She spends half a day tracking down the product owner, waits for answers, loops back. That's not a board problem. That's a definition problem.

Work that can't be estimated reliably. Packages that are too large hide complexity. A ticket labeled "Implement payment flow" could mean two days or two weeks, depending on what's inside. No estimation technique — story points, hours, T-shirt sizes — saves you from that ambiguity. You have to break it apart first.

Work that collides with other work mid-sprint. When dependencies between tickets aren't surfaced in refinement, they emerge during implementation. Suddenly two developers are blocked on each other, or a backend change breaks a frontend assumption nobody knew existed.

All three failure patterns end up looking the same on the board: things that were supposed to be done aren't.

Refinement Is Risk Management

The most useful reframe: refinement is not about estimation. It's about de-risking.

When you refine a ticket thoroughly — defining acceptance criteria, breaking it into manageable pieces, surfacing dependencies, aligning on what "done" actually means — you're not trying to predict the future more accurately. You're shrinking the surface area of surprises.

This matters enormously for delivery predictability. A team working with well-refined tickets will have much more stable Cycle Times than a team working with vague ones. Not because they're faster, but because their work is more consistent. Outliers — the tickets that drag on for weeks — almost always trace back to unclear scope at the start.

Little's Law requires process stability to produce meaningful forecasts. Refinement is what creates that stability, long before the sprint starts.

What Good Refinement Actually Looks Like

Not a checklist. A conversation with a specific goal: at the end of this session, can everyone on the team independently describe what needs to be built, how we'll know it's done, and what could slow us down?

Some practical markers:

Tickets are small enough that no one person can "own" them for two weeks unnoticed. If a ticket takes longer than two or three days, it's probably too large.

Acceptance criteria are written in terms of observable behavior, not implementation steps. "User can complete checkout without re-entering payment details" is testable. "Implement payment caching" is not.

Dependencies on other teams, services, or people are named explicitly — not assumed. If the ticket requires input from the data team, that's in the ticket. If it touches a shared service, that's in the ticket.

Edge cases are acknowledged. Not necessarily solved, but known. "We don't yet know how this behaves with expired sessions" is useful information. Pretending the question doesn't exist is not.

The Board Becomes Useful Once Refinement Works

When refinement is treated as the foundation rather than a formality, something changes in how the board behaves.

WIP naturally stays lower, because teams aren't juggling partially-understood tickets that stall and pile up. Cycle Times stabilize, because the work is more homogeneous. The daily standup becomes less about status and more about obstacles — because the main question shifts from "what am I still figuring out?" to "what's blocking me from finishing what I understand?"

At this point, board metrics start to mean something. Cycle Time distributions tighten. Throughput becomes a reliable signal. Forecasting becomes a tool rather than a performance.


Work that was poorly understood at the start leaves a recognizable trail in the repository — in how it gets revised, extended, and fixed after the fact. Many of those patterns have a refinement signature: unexpected coupling, knowledge concentrated in one person, hotspots that absorb disproportionate change. The board doesn't show this. The Git history does.

At Calyntro, we analyze that history to surface exactly these signals — before they become the next sprint's problem.

Top comments (0)