Back to blog
10 min read

How to Approach Engineering Workflow Optimization: A Step-by-Step Guide

This guide walks through a data-first approach to engineering workflow optimization, showing teams how to audit real delivery data from GitHub and Linear to find true bottlenecks instead of guessing at fixes. It offers a repeatable process for identifying, fixing, and measuring improvements to engineering delivery speed.

How to Approach Engineering Workflow Optimization: A Step-by-Step Guide

Most engineering teams try to speed things up by adding more process, more meetings, or more headcount. That rarely works, because it treats the symptom instead of finding where time actually leaks out of the delivery pipeline. Engineering workflow optimization done well is a data exercise first and a process change second: you find the real bottleneck, fix it, measure the result, and repeat. By the end of this guide, you'll have a repeatable process for finding and fixing the bottlenecks slowing your engineering team down, rather than guessing at fixes. You'll need read access to your team's GitHub/Linear (or equivalent) history and at least one full sprint or delivery cycle of activity to analyze.

Step 1: Audit Where Engineering Time Actually Goes

Start by pulling raw activity data from GitHub and Linear (or whatever issue tracker and repo host you use) instead of relying on memory or what came up in standup. Standup reports are self-selected: engineers mention what's top of mind, not necessarily what's actually consuming the most time. The commit history, PR timestamps, and ticket status changes don't have that bias.

Break the time you find into a few honest categories:

  • Active coding: time between a ticket moving to "in progress" and the first commit or PR being opened.
  • Code review: time a PR sits open waiting for a reviewer to look at it, plus back-and-forth on comments.
  • Waiting on approvals: time blocked on a decision, a design sign-off, or a product owner, not on code itself.
  • Blocked or stalled work: tickets or PRs with no activity for several days despite still being "in progress."
  • Rework: commits that undo or significantly rewrite code merged in the same cycle.

The common mistake here is auditing only sprint velocity, the count of tickets or points closed per sprint. Velocity tells you output, not where the delay accumulates. Two teams can close the same number of tickets per sprint while one loses three days per ticket to review queues and the other loses three days to unclear requirements. Those are different problems with different fixes, and velocity alone won't tell you which one you have. Pull at least one full delivery cycle of raw timestamps before you draw any conclusions about where the time actually goes.

Step 2: Map the Delivery Lifecycle to Find Bottlenecks

With the raw data in hand, diagram the path a piece of work takes from ticket creation to production deploy. Mark every handoff: ticket created, picked up, PR opened, review requested, review completed, merged, deployed. Each handoff is a place where work can sit idle waiting for someone else to act, and idle handoff time is usually where the biggest losses hide.

Look specifically for stalled work: pull requests open for several days without a single review comment, tickets marked "in progress" with no commits attached for a week or more, or approvals requested but never acted on. These are the concrete signals of a bottleneck, not a feeling that "things feel slow."

Not every delay is structural, though. A true bottleneck is recurring: it shows up across multiple tickets, multiple engineers, and multiple weeks. A one-off delay, someone out sick, a holiday week, an on-call incident that pulled a reviewer away, is noise, not signal. If you fix process around noise, you'll add overhead that doesn't help the next cycle. Cross-reference any slow spot against your calendar and team roster before you label it a systemic problem. If PR review consistently takes three days regardless of who's on vacation, that's structural. If it took three days once during a week two engineers were out, that's not something to redesign your workflow around.

Step 3: Establish Baseline Metrics Before Changing Anything

Before you change a single process, write down where you stand. Four metrics give you a solid baseline set:

  • Cycle time: the elapsed time from ticket creation to production deploy.
  • PR review turnaround: the time from "review requested" to first reviewer response, and separately, to merge.
  • Deployment frequency: how often code ships to production, a core DORA metric that Google Cloud's DevOps Research and Assessment program has tracked for years as a proxy for delivery health.
  • Code churn: the rate at which recently written code gets rewritten or deleted, which often signals unclear requirements or rushed implementation.

Record these for at least two to four weeks before you draw conclusions. A single sprint can be skewed by one large feature, one person's vacation, or an unusual bug crunch. Two to four weeks smooths out that noise and gives you a number you can actually trust as "normal" for your team.

The mistake to avoid here is optimizing for one metric in isolation, usually velocity or deployment frequency, because it looks good on a dashboard. A team can ship faster while churn quietly climbs, which means more of that "shipped" code gets rewritten within days. That's not real velocity, it's borrowed time that shows up as rework later. Track the full baseline set together so a win in one number doesn't hide a growing problem in another.

Step 4: Prioritize the Highest-Leverage Fix First

Once you have a list of bottlenecks from Steps 1 and 2, resist the urge to fix whatever is most annoying or most visible. Rank each bottleneck by how many workstreams it touches. A delay that affects every PR regardless of team or feature area is higher leverage than one that only affects a specific type of ticket.

In practice, slow code review is usually the highest-leverage fix available. It touches nearly every piece of work that reaches production, and a two-day review delay compounds across every engineer on the team, every week. Compare that to something like ticket grooming cadence, which is often the thing people complain about loudest in retros but affects a narrower slice of work. Fix the review bottleneck before you touch process ceremonies that feel inefficient but don't actually block much delivery.

Pick one or two changes to pilot, not a full workflow overhaul. If you try to fix review turnaround, deployment cadence, and ticket grooming all in the same sprint, you won't be able to tell which change caused which result, and you'll overwhelm the team with new rules at once. Choose the highest-leverage item, define what "better" looks like in terms of the baseline metrics from Step 3, and give it a real trial period, typically four to six weeks, before judging it.

Step 5: Automate and Standardize Repetitive Steps

Once you know which bottleneck you're fixing, look for the manual coordination overhead sitting inside it. Required-reviewer rules, PR templates, and CI/CD checks all remove the "who's supposed to do this next" ambiguity that causes work to stall at handoffs. If review turnaround is your target, an automatic reviewer assignment rule and a service-level expectation (say, first response within one business day) will do more than another reminder in Slack.

Standardize your definitions too. Ambiguity about what "done" means or what "ready for review" requires is a quiet source of stalled work: engineers sit on a PR a little longer because they're not sure it's actually finished, or reviewers bounce it back over things that should have been caught earlier. A short, explicit checklist for both states removes that guesswork and keeps handoffs from stalling on interpretation.

Only automate steps you already understand well. If your review process is inconsistent, some PRs get thorough review, others get rubber-stamped, automating reviewer assignment alone won't fix the inconsistency, it will just distribute it faster. Automation is a multiplier: applied to a broken process, it makes the breakage more efficient, not less broken. Fix the underlying expectation first, then automate the mechanics of getting there.

Step 6: Monitor Signals Continuously Instead of Auditing Quarterly

A one-time audit tells you what was true four weeks ago. Team composition changes, codebases grow, and new features introduce new risk, so the bottleneck you fixed in Step 4 can quietly resurface, or a new one can take its place, without anyone noticing until delivery slows down again. Ongoing tracking of merge volume, change-pressure (the combination of merge volume and code churn that signals rising deployment risk), and stalled-work indicators keeps you from having to rerun the full manual audit every sprint.

This is where a platform like Progress fits into the process. Progress ingests activity from GitHub, Linear, and similar tools and continuously analyzes it, surfacing pre-computed signals for stalled work, deployment risk, and change-pressure rather than leaving you to dig through raw PR and ticket data yourself. Instead of manually rebuilding the Step 1 audit every few weeks, you get a running view of where risk is accumulating and whether a workstream is stalling before it shows up as a missed deadline. Progress can also generate executive summaries on demand and answer plain-language questions about engineering activity through its MCP server and Claude API integration, which is useful when you need to explain a delivery slip to a founder or board without pulling raw data yourself.

Watch team momentum and morale trends alongside the delivery metrics, not as a separate concern. A team's pace or morale often shifts weeks before it shows up in cycle time or deployment frequency, so a wellness or momentum signal trending down is often your earliest warning that a new bottleneck is forming, well before the raw delivery numbers confirm it.

Step 7: Review Results and Iterate with the Team

After four to six weeks of your pilot change, revisit the baseline metrics from Step 3: cycle time, PR review turnaround, deployment frequency, and code churn. Compare them directly against the numbers you recorded before the change. If review turnaround dropped from three days to one, and cycle time fell with it, you've confirmed the fix worked. If cycle time didn't move, the bottleneck you targeted probably wasn't the real constraint, and it's worth revisiting Step 2's map to see what shifted the delay elsewhere.

Share the findings with the team openly, including the parts that didn't work. Engineers adopt workflow changes more durably when they understand why a required-reviewer rule or a new PR template exists, rather than experiencing it as an arbitrary policy handed down after a private analysis. Walk through the before-and-after numbers in a retro, and invite the team to flag anything the data missed, like a dependency or external blocker that wouldn't show up in GitHub or Linear activity.

Treat this as a loop, not a one-time project. Engineering workflow optimization isn't a reorg you complete and move past, it's a habit of measuring, fixing the highest-leverage constraint, and measuring again. Once you've confirmed one bottleneck is resolved, go back to your ranked list from Step 4 and pick the next one.

Confirming the Win Before You Move On

Before you call any fix successful, check that your new baseline metrics show measurable, sustained improvement, not a one-week blip that reverts once the novelty wears off. A real fix holds for several cycles in a row across cycle time, review turnaround, deployment frequency, and churn together, not just one number moving in isolation. Once you've confirmed that, resist the temptation to stop at a single win. Go back to your ranked list of bottlenecks, pick the next highest-leverage one, and run the same loop again. Teams that treat this as an ongoing practice, rather than a project with an end date, are the ones that keep shipping faster without adding headcount or process bloat.

Learn more about our services


Start your 7-day free trial

Try it on this week's work.

Connect your tools and Progress fills in your last two weeks, so you see what's moving and what's stuck from day one.

7-day free trial · cancel anytime