
Yesterday’s “Flow Radar” post showed you how to wire Jira and your CI/CD pipeline into an AI bot that pings Slack with the day’s top three bottlenecks, WIP age, blocked status, and cycle-time outliers.
That quick win turned dashboards into real-time alerts, giving many of you your first taste of data that talks back. Today, we take the next step: translating those alerts into reliable delivery forecasts by mastering cycle time and percent plan complete (PPC).
Think of cycle time as the speedometer and PPC as the arrival board, hit both and don’t just move fast, you land close to when you said you would. Let’s unpack the setup, the metrics, and the AI tricks that make predictable flow a daily habit.
Forecast tomorrow’s drag today, stop spill-over before it starts, the team has to learn how to spot that, let's help them.
Why These Two Metrics Matter Together
- Cycle time measures how long work takes once it begins.
- Percent Plan Complete (PPC) shows how much of what you promised actually crossed the finish line.
If you achieve one but miss the other, you are fooling yourself; if you achieve both, your sprint predictability soars.
The Real-World Spark
A multinational company in Peru consistently kept “finishing” construction tasks only to carry 40% of them into the next phase. After capturing cycle-time distributions and PPC on the same dashboard, they discovered that review queues, not on-site work, were the bottleneck. One AI forecast later (flagging every task whose cycle time exceeded its 90th-percentile trend), carry-over dropped to 7% across three iterations, and PPC climbed from 62% to 89%.
Your Own Cycle-Time + PPC Radar
Step | What to Do | Tool / Script |
---|---|---|
1 | Pull timestamps for started and finished states | ETL Python cron job |
2 | Calculate cycle_time_days & build a weekly boxplot | df.groupby(week)['cycle_time_days'].describe() |
3 | Define 90th-percentile threshold as early-warning line | ct_thresh = df['cycle_time_days'].quantile(0.90) |
4 | Flag any story crossing that line while in progress | LLM prompt “cycle-time outlier” |
5 | Compute PPC each Friday | committed_done / committed_total |
6 | Forecast tomorrow’s PPC by subtracting current outliers | LLM prompt for PPC forecast |
7 | Push outlier list & PPC forecast to Slack channel #flow-radar | Webhook integration |
Daily Workflow in Practice
- Morning stand-up: bot posts
- 5 items exceed cycle-time threshold; PPC forecast → 74% (-11 pts)
- The team swarms the worst outlier, slicing scope or pair-programming.
- A mid-day re-run shows the PPC forecast nudging upward; morale spikes.
- Sprint review: display the before-and-after PPC chart; stakeholders see predictability, not excuses.
Keep Cycle Time Honest
Symptom | Root Cause | Fix |
---|---|---|
Long tail of outliers | Hidden scope creep | Enforce Definition of Ready; slice stories smaller |
Cycle time fine, PPC bad | Over-commitment | Use AI forecast as a capacity brake during planning |
Good PPC but growing cycle time | Team gaming the plan | Track WIP age alongside cycle time to expose hidden drag |
What Good Looks Like
- 85% of stories finish within one inter-quartile cycle-time range.
- PPC stays above 85% for three consecutive sprints.
- Forecast accuracy (bot vs actual PPC) is within ±5%.
Try It Today (30-Minute Challenge)
- Export the started and finished timestamps for your last three sprints.
- Run the Python snippet below to identify cycle-time outliers and PPC.
Paste the report in Slack and tag the owner for the ugliest card.
import pandas as pd df = pd.read_csv('sprint_data.csv') df['cycle'] = (pd.to_datetime(df['finished']) - pd.to_datetime(df['started'])).dt.days+1 outliers = df[df['cycle'] > df['cycle'].quantile(0.90)] ppc = len(df[df.status=='Done']) / len(df) * 100 print(outliers[['key','cycle']]) print(f"PPC = {ppc:.1f}%")
Tomorrow, we dive into DORA metrics and teach your LLM to translate deploy frequency and lead time into board-ready talking points. Keep your data handy, building our predictability muscle.
Download the sample scripts, wire them into your backlog today (make them better BTW), and post your first cycle-time chart in Slack before tomorrow’s stand-up.
Then grab a seat in our AI for Scrum Master or AI for Product Owner micro-courses to turn those insights into automated coaching workflows.
Spots fill fast, hit the link, reserve your cohort, and show up with real data.