What Flow Lens needs
A CSV file where each row is one work item and each workflow stage has its own column containing the date the item entered that stage. Column names don't matter — you map them inside the tool.
The data stays entirely in your browser. Nothing is uploaded anywhere.
CSV structure
The simplest possible file that works:
| ID | Title | To do | Doing | Done |
|---|---|---|---|---|
| TKT-001 | Fix login bug | 2026-01-10 | 2026-01-13 | 2026-01-15 |
| TKT-002 | Add export button | 2026-01-11 | 2026-01-14 | — |
| TKT-003 | Update docs | 2026-01-12 | — | — |
Empty cells mean the item hasn't reached that stage yet — that's expected and handled correctly.
With more stages
Add as many workflow stage columns as your process has. Items that skip stages just have an empty cell for that column.
| ID | Title | Link | Blocked Days | To do | Doing | Ready for review | Review | Done |
|---|---|---|---|---|---|---|---|---|
| TKT-004 | API changes | https://… | 2 | 2026-02-01 | 2026-02-03 | 2026-02-07 | 2026-02-10 | 2026-02-12 |
| TKT-005 | Quick fix | https://… | 0 | 2026-02-04 | 2026-02-04 | — | — | 2026-02-04 |
TKT-005 skipped review stages — that's fine, the tool handles it.
Column types
Start stage — the first stage in your workflow (e.g. To do). Items without this date are ignored.
End stage — the completion stage (e.g. Done). Items without this date are treated as work in progress.
Workflow stage columns — one per stage, containing the date entered. You need at least two for the CFD. Add as many as your process has.
ID — ticket reference. Shown in the data table and control chart tooltips.
Title — item description. Shown in tooltips.
Link — URL to the ticket in your system. Makes IDs clickable.
Blocked Days — total days the item was blocked. Used in flow efficiency and the Blocked tab. Can exceed cycle time if blocking was recorded outside your configured stage window.
Currently Blocked — a boolean flag (Yes/No, True/False, 1/0) marking whether the item is blocked right now. Separate from Blocked Days — this is a live state, not a duration. If not mapped, the Blocked tab's "currently blocked" section is unavailable.
Epic Link — the ID of the Epic (or parent) each item belongs to, e.g. COC-24768. Called Epic Link in older Jira and Parent in newer Jira. Turns on the Epic Progress tab. Map it under Epic Link in the Config panel — it is picked automatically when the column is named Epic Link or Parent, and is saved with your config. Include the Epic rows themselves in the export too, so the tab can show Epic names rather than just IDs. Items with no Epic are simply left out of that tab.
What each tab shows
Flow Insights is your summary page. Every other tab sits in one of five menus along the top — hover or click a menu to see its tabs.
Flow Insights
Lead time percentiles, Monte Carlo forecast ("what can we close this month?"), current WIP, smelly tickets (WIP older than your p85), and multitasking index. Your daily summary page.
WIP & Flow menu
Cumulative Flow Diagram. Click to place markers — select two points to get a range analysis: items completed, throughput rate, and WIP change per stage across the period. Export the items in the range as CSV.
WIP count each week with a 4-week average. Counts items from Active Work Starts (or Start Date if not set) until Done — items waiting in your committed queue are not WIP. Rising WIP means more is starting than finishing.
How your work divides across a category column such as type or priority.
Every in-progress item plotted by current stage and age in days, against your completed lead time percentile bands. Red ring = currently blocked. Items above the p85 band are worth a conversation. Also shows WIP count vs average age over time.
Items started vs items finished each week. When arrivals keep beating departures, WIP — and lead time — will grow.
Lead Time menu
Weekly lead time trend. Click a week to see the items behind it.
Lead time distribution — where most items cluster. Min/max inputs hide outliers from the view.
Every completed item by finish date and lead time, with p50/p70/p85/p95 lines. Orange dots had blocked time. Spot outliers and trends.
Share of each item's time spent in active (process) stages vs queues. Needs stages marked P or Q in Config (X stages are ignored). 100% usually means dates were entered in bulk rather than as work happened.
Pre-commitment analysis — how long items wait before the team commits to them. Needs stage columns before your Start column. See the FFE section below.
P50 and P85 days spent in each stage. The stage with the highest numbers is usually your bottleneck.
Throughput menu
Items completed per week, with an optional normal range (XmR) and a distribution chart. Click a bar to see what was delivered that week.
Completed items climbing towards a scope target, with a straight-line forecast and optional faster/slower scenarios.
Needs an Epic Link column. One row per Epic: progress bar (Done / In progress / Committed / Not started), start date, pace and a finish forecast. Click an Epic to see its stories. How pace and forecast are worked out ↓
Monte Carlo forecasting — "when will these N items be done?" and "how many by this date?", at 50/70/85/95% confidence, based on your throughput history.
Health menu
Scorecard comparing this period with the previous one of the same length. Traffic lights for throughput, lead time p50, WIP, backlog size, FFE time, flow efficiency and currently blocked. Numbers are period-scoped, so they will differ from the summary bar.
Needs a Blocked Days column. Lead time for blocked vs never-blocked items, items blocked right now (needs Currently Blocked), and completed items sorted by blocked days.
Data menu
Metrics side by side for each value of a category column — backlog, committed, WIP, done, throughput, lead time and blocked %. Best used without slice filters.
Full table of every imported item. Useful for checking items flagged elsewhere.
Where every row went (completed, WIP, committed, backlog) and any problems found — e.g. dates out of order, Done before Start, or items committed but not moved in 4+ weeks. The ⚠ next to Items completed links here.
Builds a prompt from your flow data that you can paste into an AI assistant for a written analysis.
How Epic Progress works out pace and forecast
Each story linked to an Epic is put in one of four groups: Done (has a Done date), In progress (reached Active Work Starts or any later stage), Committed (reached Start Date only) or Not started.
Started is the date the Epic's first story reached Active Work Starts — when real work began, not when it was committed.
Pace = stories done ÷ weeks since Started (counted as at least 1 week).
Forecast = today + (stories left ÷ pace).
Example: an Epic started on 18 Sept. On 9 Oct — 3 weeks later — 6 of its 7 stories are done. Pace = 6 ÷ 3 = 2 stories a week. One story left ÷ 2 a week = half a week, so the forecast is about 12 Oct.
The forecast only appears once an Epic has 3 or more stories done — before that it shows Too early, because one or two data points can't tell you a pace. It is a rough guide, not a promise: it assumes the team keeps the same pace on that Epic and that no new stories are added. If stories keep being added, the date will keep moving — and that in itself is worth a conversation.
Date formats
The tool detects dates automatically using strict matching. Supported formats:
2026-03-19ISO 8601 — preferred
2026-03-19 14:34:53ISO 8601 with time
19/03/2026Day/Month/Year
03/19/2026Month/Day/Year
Fuzzy Front End and the commitment point
The commitment point is the moment the team commits to doing the work — typically a "Ready" or "Selected" stage. In Flow Lens, this is your Start column.
Cycle time is measured from the commitment point to Done. It represents the customer's wait time once the team has accepted the work.
Everything before the commitment point is the Fuzzy Front End (FFE) — the time an idea spends being created, discussed, refined, and prioritised before the team commits to it. This is not part of cycle time.
How Flow Lens handles this
Any workflow stage columns ordered before your Start column are automatically treated as backlog. You don't need to configure anything separately — the order you set in the Config panel is all that matters.
For example, if your stages are:
| Idea | Refine | Ready ← Start | Doing | Done |
|---|---|---|---|---|
| ← FFE (backlog) | ← cycle time measured here | |||
Idea and Refine are FFE. The Fuzzy Front End tab shows how long items spend here before being committed.
If you don't have pre-start stages
If your CSV only has stages from the commitment point onwards (e.g. To do, Doing, Done), the FFE tab and Team Health backlog metrics will show a blank state. That's expected — there's simply no pre-commitment data to analyse.
A note on "Ready"
Some teams debate whether "Ready" is the commitment point or still part of the queue. In Flow Lens, Ready (your Start column) is the commitment point — cycle time starts here. Items sitting in Ready waiting to be picked up are counted as committed WIP, not backlog. This is the stricter interpretation and the one that keeps cycle time honest.
Setting up the tool
- Drop your CSV onto the tool. It will detect date columns automatically.
- In the Config panel, map your columns: set Start, End, and optionally Active Work Starts, ID, Title, Link, Blocked Days, Currently Blocked and Epic Link.
- Drag the workflow stage rows into the correct order — left to right, earliest to latest.
- Set each stage's type with its button: P process, Q queue, X discarded (e.g. Cancelled, Withdrawn, Not done). More on discarded stages ↓
- The charts update immediately. Use the date range filters to zoom in.
- Click Save config to keep your setup as a small JSON file. Next time, drop in the new CSV and click Load config.
If your export gains a new stage column (say you start capturing Withdrawn), just load your old config. Your saved settings are applied and the new column is added to the workflow with a note asking you to check its type. Then Save config again to keep it.
Tips and gotchas
Cancelled / rejected items — mark them Discarded (X)
Each stage in the Config stage list has a type button. Click it to cycle through:
- P — Process: active work (Dev, Testing). Counts as work time in flow efficiency.
- Q — Queue: waiting (Ready for Dev, Awaiting Deploy). Counts as wait time.
- X — Discarded: the item left without being delivered (Rejected, Cancelled, Withdrawn, Not done, Won't do). Picked automatically for stages with those kinds of names.
A discarded item stops being WIP or backlog on the date it was discarded, but it is never counted as delivered — it is left out of throughput, lead time, forecasts and Burn Up scope. You'll see discarded items as their own band at the bottom of the CFD, a dashed "Discarded" line on Arrival vs Departure, a "Discarded" row on the Data Quality tab, and "+N discarded" on Epic Progress.
Items that skip stages
Common and expected. Leave the cell empty — the tool handles this correctly in all charts including the CFD.
Zero cycle time
If many items show 0-day cycle time, your start and end date columns contain the same date in the source data. The histogram will show an empty state — this is correct, not a bug.
Stage ordering matters for the CFD
Drag stages into the correct process order in the Config panel. The CFD is built from that order — wrong order produces meaningless bands.