VelocinatorVelocinator
Engineering Metrics7 min read

Flow Efficiency: Finding the 'Dark Matter' in Your SDLC

February 4, 2026
Flow Efficiency: Finding the 'Dark Matter' in Your SDLC — Engineering Metrics article on engineering productivity

Here's a uncomfortable truth: most of the time a feature is "in progress," nobody is actually working on it.

A ticket moves from "To Do" to "In Progress" on Monday. It gets deployed on Friday. Five days of lead time. But how much of that was actual work?

When you measure, it's often shockingly low:

  • 4 hours of coding
  • 2 hours of code review
  • 1 hour of QA
  • 8 hours of deployment pipeline

Total active time: 15 hours. Total calendar time: 40 hours.

That's 37.5% flow efficiency. The other 62.5%—25 hours—was waiting. Waiting for review. Waiting for CI. Waiting for deploy windows. Waiting for someone to pick up the next step.

This is the "dark matter" of software delivery: invisible delays that don't show up in any individual metric but dominate your actual cycle time.

Measuring Flow Efficiency

Flow efficiency is simple to calculate:

Flow Efficiency = Active Work Time / Total Lead Time × 100

But it's hard to measure, because "active work time" isn't automatically tracked. You need to reconstruct it from signals:

Signal 1: Commit Activity

When developers are actually coding, they're committing. Gaps between commits indicate waiting or context-switching.

A ticket with commits at 9am, 11am, and then not again until 2pm the next day has a visible 27-hour gap. What happened in between?

Signal 2: Status Transitions

Jira status changes mark handoffs. "In Review" to "Approved" might take 4 hours of calendar time. Was that 4 hours of active review, or 10 minutes of review and 3 hours 50 minutes of waiting for someone to start?

Signal 3: PR Timeline

GitHub PRs have detailed timestamps:

  • PR opened
  • First review
  • Each comment/response
  • Approval
  • Merge

The gaps between these events are wait states.

Where Work Waits

In most organizations, the same bottlenecks appear repeatedly:

Wait State 1: Review Pickup

The PR is ready. It sits in the queue. Reviewers are busy with their own work.

Symptom: Long time between "PR opened" and "first review comment."

Typical efficiency loss: 20-40% of cycle time.

Fix: Dedicated review time blocks. Review rotation. Smaller PRs that are easier to pick up.

Wait State 2: Review Response

Reviewer leaves comments. Author doesn't respond immediately because they've moved on to the next task.

Symptom: Long gaps between review rounds. Multiple days with back-and-forth that should take hours.

Typical efficiency loss: 10-25% of cycle time.

Fix: Prioritize addressing review comments over starting new work. The PR in review is inventory—clear it before creating more.

Wait State 3: CI/CD Pipeline

Tests run slowly. Flaky tests require reruns. Merge queues back up.

Symptom: Approved PRs wait hours (or longer) to merge.

Typical efficiency loss: 5-20% of cycle time.

Fix: Invest in faster tests. Fix flaky tests ruthlessly. Parallelize pipelines.

Wait State 4: Environment Availability

Work can't proceed because staging is broken, or shared resources are locked, or someone else's failed deploy is blocking.

Symptom: Work-in-progress tickets with no activity.

Typical efficiency loss: 5-15% of cycle time.

Fix: Isolated environments per developer/branch. Better environment management.

Wait State 5: External Dependencies

Waiting for another team. Waiting for API access. Waiting for design review. Waiting for legal/security approval.

Symptom: Tickets stuck in "blocked" status, or developers switching to other work while waiting.

Typical efficiency loss: Highly variable—can dominate cycle time for some work.

Fix: Better upstream planning. SLAs with dependent teams. Reducing coupling between teams.

Visualizing Flow

Velocinator provides flow visualization that shows where work spends its time:

The Flow Timeline

For each ticket, see a horizontal bar showing:

  • Green segments: active work (commits, PR activity)
  • Gray segments: waiting (gaps between activity)
  • Red segments: blocked (explicit blocked status)

At a glance, you can see if a 5-day ticket was 5 days of work or 1 day of work spread across 5 days.

The Wait State Breakdown

Aggregate view showing where time is lost across all tickets:

  • Average wait before review: 12 hours
  • Average review-to-merge time: 6 hours
  • Average time in blocked status: 4 hours

This tells you which wait state to attack first.

Flow Efficiency Trend

Track flow efficiency over time. As you eliminate bottlenecks, efficiency should improve. A healthy team might see 40-60% flow efficiency; elite teams reach 70%+.

Improving Flow Efficiency

Strategy 1: Reduce Batch Size

Smaller tickets and smaller PRs move through the system faster. Less wait time at each stage.

If your average ticket takes 5 days with 37% flow efficiency, and you break it into 3 smaller tickets that each take 2 days with 50% flow efficiency, you've improved both speed and efficiency.

Strategy 2: Limit Work in Progress

The more work in progress, the more context-switching and the more things waiting at each bottleneck.

Set WIP limits: "No developer should have more than 2 items in progress simultaneously." This forces completion before new starts.

Strategy 3: Swarm on Blockers

When work is blocked, make it the team's top priority to unblock it. Don't just flag it and move on—the blocked work is inventory accumulating carrying costs.

Strategy 4: Automate Handoffs

Every manual handoff is a wait state. Automate where possible:

  • Auto-assign reviewers when PR is opened
  • Auto-notify when review is needed
  • Auto-merge when approved and green
  • Auto-deploy when merged

Strategy 5: Measure and Discuss

Put flow efficiency on your team dashboard. Discuss it in retrospectives. "Our flow efficiency dropped to 30% this sprint—what happened?"

Make the dark matter visible, and teams naturally work to eliminate it.

The ROI of Flow Efficiency

Improving flow efficiency is often the highest-leverage investment an engineering team can make.

Consider:

  • 10 engineers
  • $1.5M fully-loaded annual cost
  • 30% flow efficiency → $450K of "active" work
  • Improve to 50% flow efficiency → $750K of "active" work

That's $300K of additional effective capacity without hiring anyone. It's not literally that simple, but the direction is right: reducing wait states is cheaper than hiring more people.

Start Measuring

You can't improve what you can't see. Connect your Jira and GitHub to Velocinator, and flow efficiency analysis becomes automatic.

Find the dark matter. Eliminate the wait states. Watch your cycle time compress even as your team stays the same size.

More in Engineering Metrics

Continue reading related articles from this category.

Understanding Code Churn: When Rework Indicates a Process Problem — Engineering Metrics article on engineering productivity

Understanding Code Churn: When Rework Indicates a Process Problem

High churn often points to unclear requirements or architectural misalignment—not bad developers.

January 30, 2026
How to Measure PR Cycle Time and Why It Matters — Engineering Metrics article on engineering productivity

How to Measure PR Cycle Time and Why It Matters

The single most important metric for understanding your team's delivery speed—and how to improve it.

January 28, 2026
Measuring MTTR: Building a Culture of Observability and Incident Response — Engineering Metrics article on engineering productivity

Measuring MTTR: Building a Culture of Observability and Incident Response

Mean Time to Recovery isn't just a metric—it's a reflection of your team's resilience and operational maturity.

January 26, 2026

Enjoyed this article?

Start measuring your own engineering velocity today.

Start Free Trial