KognitaKognita.

Blog

Sprint Retrospectives Keep Producing the Same Action Items Because They're Missing System Data

9 min read

It happens every sprint. The retro starts. Someone says "requirements were unclear again." Someone else says "PRs were stuck in review." A third person mentions scope changed mid-sprint on the payments story. The scrum master dutifully captures the themes. The action items look familiar because they are: "Let's improve ticket quality." "Let's set a norm around PR review SLAs." "Let's commit to scope freeze after grooming." The meeting ends. Six weeks later, the team runs the same retro.

The team is not failing to try. Most teams genuinely attempt to follow through on their retro commitments. The problem is that the commitments are aimed at the wrong thing — they target feelings and memories, not causes. "Unclear requirements" is a feeling. The cause might be that acceptance criteria were changed on three separate tickets after sprint start, and two of those changes came from product, not engineering. Those are different problems with different fixes. The memory retro cannot tell you which one you actually have.

Retrospectives were designed to surface and fix recurring problems. They mostly fail at this because the information available in the room is the team's collective memory of the sprint — biased toward what was emotionally salient, filtered through each person's role and perspective, and stripped of the quantitative picture that would show what actually happened. The PR that sat in review for eight days cost more capacity than the unclear ticket everyone remembers. The retro never finds this out, because nobody measured it.

Why the same action items appear sprint after sprint

Retrospective action items repeat because they are not specific enough to change anything. "Improve ticket quality" is not a diagnosis — it is a category. "The last four sprints had an average of 3.2 tickets with acceptance criteria changes after day two, and 2.8 of those changes originated from product-side scope decisions" is a diagnosis. One of those leads to a conversation. The other leads to a recurring Confluence page that nobody updates.

The action item problem is downstream of an information problem. Teams write vague action items because they have vague data. "Requirements felt unclear" is the best summary available when the team has no record of which tickets changed, when they changed, who changed them, or how much effort those changes added. The alternative — concrete, causal, quantified — requires data that is not typically gathered or presented at retros.

This is not a facilitation failure. It is a tool failure. The scrum master running the retro has access to Jira ticket history, team sentiment, and velocity numbers. What they do not have is a coherent picture of what the system did during the sprint — which PRs sat longest, which services saw the most churn, which tickets changed scope and why. That data exists. It lives in Jira, in the codebase, and in the connection between the two. It is just not assembled in a form that retrospectives can use.

What retros are missing: actual system data

The system data that changes retro conversations falls into four categories. First, PR age distribution — which pull requests stayed open and for how long. This is not about blaming individuals; it is about identifying where review capacity actually went during the sprint. A PR open for nine days is a sprint health problem regardless of whose name is on it. The memory retro says "we need better PR hygiene." The data shows whether the problem is PR hygiene, reviewer availability, or a single large change that blocked the entire queue.

Second, ticket churn — how many tickets had acceptance criteria, story descriptions, or estimates changed after the sprint started. This is one of the most reliable indicators of planning health, and it is almost never tracked. Teams feel it as "unclear requirements" or "scope creep" but cannot describe when it happened, how often, or whether the changes came from product discovery, engineering discovery, or stakeholder feedback. Each of those has a different root cause and a different fix.

Third, service-level instability — which parts of the codebase were touched most frequently during the sprint, and whether the same areas appear in consecutive sprints. When the billing service shows up in four consecutive retrospectives as a source of complexity, the issue is not the tickets. The issue is the billing service. That signal is invisible in a memory-based retro.

Fourth, spillover patterns — which stories carried over from the previous sprint, whether those stories were identified as at-risk during planning, and whether the spillover came from scope change, dependency discovery, or execution challenges. Spillover is a lagging indicator that is more useful for retro diagnosis than most teams realize, and it is usually discussed only in terms of "what did not get done" rather than "what caused it not to get done."

The difference between what you remember and what the data shows

Memory retro vs. data retro — the same sprint, two different conversations
Same sprint. Two retros.

  Memory-based retro (what almost every team runs):
  "Unclear requirements caused blockers mid-sprint."
  "PRs sat in review too long."
  "Scope changed on the payments story."
  Action item: "Let's write better tickets."
  Action item: "Let's remind people to review PRs faster."
  Action item: "Let's freeze scope after grooming."

  Sprints later: same retro.

  Data-based retro (what the system actually showed):
  -> The payments PR was open for 8 days with zero reviewer activity for the
     first 5 days. It was not an unclear ticket — it was a capacity problem
     in a specific reviewer pool.
  -> 3 of 6 tickets had acceptance criteria changed after sprint start.
     2 of those changes came from product. 1 came from engineering discovery.
  -> The "unclear requirements" ticket was re-estimated twice. The original
     estimate was 3 points; final effort was 13. The complexity was in the
     service interface, not the story description.

  The memory retro produces process feelings. The data retro names causes.

The memory retro is not wrong about what the team experienced. It is wrong about why. "Unclear requirements" is the experience of the engineer who had to re-scope their story on day four. But the data shows whether that re-scoping was caused by an initially bad ticket, by a legitimate product discovery, or by a service interface they had not fully understood when the story was estimated. Those explanations point to completely different action items.

The PR review problem is an even cleaner example. "PRs sat in review too long" is true. But the data shows whether that was evenly distributed across all PRs or concentrated in two or three large ones; whether specific reviewers were the bottleneck or whether the whole team was at capacity; whether it happened in the first half of the sprint when everyone was shipping or the second half when everyone was wrapping up. Action items built from that specificity stick. Action items built from the general feeling do not.

This distinction matters most for scrum masters and engineering managers who are trying to improve team health across multiple sprints. A single data-grounded retro produces action items that can be tracked and measured. Did ticket churn decrease? Did PR age fall? Did the billing service stop appearing in every sprint's discussion? Those are questions you can answer with data in the next retro. "Did we write better tickets?" is not.

Three retro categories that improve with system data

Sprint health metrics — what system data surfaces for each retro category
Sprint health metrics that surface actual causes — not symptoms:

  PR age distribution (last sprint):
  -> PRs closed same day:    2
  -> PRs closed within 3d:   4
  -> PRs open 4–7 days:      3
  -> PRs open 8+ days:       2  ← these are where the sprint capacity went

  Ticket churn (acceptance criteria or scope changes after sprint start):
  -> Changed tickets:        4 of 11
  -> Changed by product:     3
  -> Changed by engineering: 1
  -> Average added points from churn: 4.5 per changed ticket

  Scope discipline signals:
  -> Stories added mid-sprint: 2
  -> Stories removed mid-sprint: 0
  -> Spillover stories carrying from prior sprint: 3
  -> Of those 3, how many were identified at planning? 1

  The data does not say "we have a process problem."
  It says which process broke, when, and by how much.

Planning quality retros are the most obviously improved by data. The question "was our sprint plan good?" is currently answered by whether the sprint completed. A data-based answer looks at ticket churn, re-estimation frequency, and spillover patterns — and can distinguish between a plan that was wrong because of bad estimation and a plan that was wrong because of mid-sprint scope changes. These are different problems. One is an engineering estimation problem. The other is a product-engineering alignment problem. Conflating them in the retro means the action items address neither.

Review process retros are the second category. "PRs sat in review" is a statement about symptoms. PR age distribution by reviewer, by PR size, and by sprint week tells you whether the problem is a cultural one (reviewers are not prioritizing it), a capacity one (reviewers were also building), or a structural one (PRs are too large to review quickly). Each of those has a specific fix. Retros that run on data make that distinction. Retros that run on memory produce another reminder to "prioritize PR review."

Scope discipline retros are the third. "Scope crept" is the feeling. The data shows which tickets changed, when, who initiated the change, and how much the change added to the sprint load. A team that consistently sees product-initiated scope changes after sprint start has a different problem than a team that sees engineering-discovered complexity changes. One points to planning ceremonies. The other points to codebase understanding at grooming time — which, as anyone who has run a planning session against stale system data knows, is its own category of problem.

What Kognita and Jira surface for retro preparation

Retro preparation is where the data gap is most expensive. Most scrum masters spend retro prep pulling velocity numbers from Jira and reviewing their notes from the sprint. What they cannot do — without engineering help — is ask questions that bridge ticket history and codebase activity: which services saw the most change, which PRs were correlated with which tickets, whether the same files keep appearing sprint after sprint as sources of instability.

This is exactly the kind of system visibility that scrum masters need but have never had access to. Not code-reading access — plain-language answers about what happened in the system during the sprint, framed in terms that are useful for retro facilitation rather than engineering debugging.

Retro preparation query — Kognita + Jira sprint health summary
Retro preparation query — what Kognita returns for sprint health:

  Query: "Summarize the sprint health for Sprint 51 based on Jira
  and codebase activity."

  Kognita returns:
  -> 6 tickets touched the billing service. 2 of those tickets were
     also modified in Sprint 50, suggesting recurring instability or
     incomplete scope in that area.
  -> PaymentGatewayAdapter was modified in 4 separate PRs this sprint
     by 3 different engineers. This is the highest churn of any
     single file in the sprint.
  -> JIRA-1842 had its acceptance criteria updated on day 4 of the
     sprint. The original story described frontend-only changes; the
     updated criteria added an API contract change. The PR remained
     open for 9 additional days after the scope change.
  -> 2 tickets in the sprint reference the same service method
     (processBatchPayment) from different directions. Neither ticket
     mentions the other as a dependency.

  Retro conversation this produces:
  "The billing service is the source of instability, not ticket quality.
  Why are we touching it every sprint without closing the loop?"

The output of a query like this changes the retro from the start. When the scrum master opens the meeting with "our most-changed file this sprint was PaymentGatewayAdapter, touched in four PRs by three engineers with no shared ticket context," the conversation is already different. It is not about blame. It is about understanding why the same area keeps generating complexity — which is a structural question, not a process hygiene question, and it has a structural answer.

The Jira MCP integration is what makes this possible at the level of sprint-specific analysis. Kognita connects ticket history — what was changed, when, by whom — to codebase state, so that a scrum master can ask about the sprint in terms of Jira work and get answers grounded in what the system actually did. This is not a report someone built. It is a live query against the actual sprint's data, available in plain language, without repo access or engineering mediation.

Nothing in this workflow requires a developer. The scrum master asks before the retro. The answers land in plain English. The retro runs on facts. That is a different kind of meeting than the one that produces the same action items every six weeks.

Final take

Retros that run on memory are not useless. They surface real team feelings, maintain psychological safety, and give everyone a voice. Those things matter. But they do not produce lasting change by themselves, because the feelings are often pointing at symptoms while the causes stay invisible in the codebase and the ticket history.

The action items that stick are the ones attached to specific, measurable causes. Those causes live in the data — which PRs ran long, which tickets changed scope, which services generated complexity sprint after sprint. That data exists. Making it available to the people who run retrospectives is not a technical challenge. It is an access challenge, and it is one that a managed codebase context platform connected to Jira is built to solve.