One idea runs the whole thing: a backlog is a bathtub. Tasks pour in, you drain them out. mini looks at the last two weeks and counts both taps:
IN = tasks created in the last 14 days ÷ 14 (arrivals per day) OUT = tasks finished in the last 14 days ÷ 14 (finishes per day) OPEN = tasks open right now
That's every number the feature needs. No velocity charts, no story points — two taps and the water level.
OPEN == 0 → "all clear" — nothing left.
OUT > IN → you're winning. The tub is draining.
days left = OPEN ÷ (OUT − IN)
→ "~12 days left · done Jul 14"
OUT <= IN → you're losing ground. Two honest numbers:
catch-up today = (arrived − finished, last 14d) + 1
→ "do 8 today to get back on track"
sustain = floor(IN) + 1 per day
→ "then 2/day to stay ahead"
The winning case divides by the net drain rate (OUT − IN), so tasks that keep arriving are already subtracted — it's not the wishful "if nothing new ever comes in" date most tools give you.
When you're behind, "catch-up today" is the exact number that tips your last-14-days window back to finished > arrived, and "sustain" is one more than the daily arrival rate — finishing exactly IN per day only holds even.
Yes. To finish in D days while tasks keep arriving at IN per day, you must clear what's open now plus everything that still arrives:
pace(D) = (OPEN + IN × D) / D = OPEN/D + IN (round up)
Read one way it answers "what pace finishes by this week / month / quarter". Read the other way (solve for D at your current pace OUT) it gives the finish date. Let D go to infinity and it collapses to IN + 1 — the get-ahead breakeven. Same equation, no special cases.
Run it: mini burndown (optionally project:NAME).