惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
B
Blog
L
LangChain Blog
Y
Y Combinator Blog
美团技术团队
博客园 - 三生石上(FineUI控件)
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
量子位
博客园_首页
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
Check Point Blog
D
Docker
小众软件
小众软件
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News
IT之家
IT之家

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Bad Sprints Start Before the Sprint
karl-heinz reichel · 2026-06-15 · via DEV Community

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.