Release delays often start in the org chart, not code
Release delays often come from approval loops, split ownership, and clashing goals. Learn how to spot the pattern and fix it before teams slip again.

Why late releases are often an org problem
A team can write clean code, test it well, and still miss the date. That happens more than most teams admit. The delay is often not in the repo. It is in the line of people who need to review, approve, schedule, or bless the work before anyone feels safe shipping it.
Most release problems run on two clocks. One clock measures build time: writing code, reviewing it, testing it, and fixing bugs. The other measures waiting time: the hours or days when nothing moves because one team handed work to another team and nobody picked it up yet.
That second clock usually causes the real slip.
A small change might pass through product for scope, design for behavior, engineering for risk, QA for test time, and the person who owns production for the release window. None of those steps feels dramatic on its own. Together, they can add five days to a task that took one day to build.
That is why solid teams still ship late. Engineers finish on Tuesday. The work sits in a testing queue until Thursday. QA signs off, but the release manager is waiting on another team. The founder wants one more tweak. Operations would rather ship next week. The code is done, yet the feature stays idle.
Work also stalls because ownership breaks at the edges. Engineering owns the code. QA owns test coverage. Product owns the decision. Operations owns the deploy. If nobody owns the full path from idea to release, each group can do its part and the work still stops.
This is usually easy to spot once you look in the right place. Branch history looks fine. Engineering cycle time looks fine too. The real problem is the time between decisions, approvals, and handoffs.
When a release slips, check where the work waited, who had to say yes, and how long each pause lasted. That tells you more than another argument about coding speed.
Approval loops that slow simple work
Many teams think a release waits on code. Often it waits on permission.
A small change can clear review, pass tests, and still sit for days because too many people must approve it. Each person adds another message, another calendar, and another chance for the work to stop until tomorrow.
Start with a simple count. After code review ends, how many yeses does a release need before it can go live? In some teams, the answer is one. In others, it is six or seven across product, design, security, operations, and a manager who was not involved until the last hour.
The count matters, but the shape of the chain matters more. Some people can approve. Others cannot approve, but they can still block progress by asking for one more pass, one more deck, or one more meeting. If nobody owns the final call, the release waits for the safest person in the room.
Duplicate review is a common drag. Product approves scope, then leadership approves it again. Design signs off on screens, then product asks for another visual pass. Security checks the change type, then operations asks for a second review out of caution. The team is not learning anything new. It is repeating the same decision in different calendars.
A quick map makes this visible. List every approval after code review, write the role next to each step, mark who can approve and who can only comment, and note what new information each step adds. If a step adds nothing, remove it.
One startup needed product approval on Tuesday, design approval on Wednesday, and founder approval on Friday for a text change in onboarding. Nobody disagreed with the change. The delay came from waiting for three calendars to line up.
This is where a clear owner helps. One person should decide whether the release is ready. Everyone else should review only when their input changes risk or scope.
Split ownership creates hidden waiting
When nobody owns the whole release, work keeps moving but the date does not. Engineering finishes code, QA waits for a prompt, product reopens scope, and marketing waits for final messaging. Everyone is busy, but the release still stalls.
Split ownership often looks tidy on a chart. Engineering owns code. QA owns quality. Product owns scope. Marketing owns launch communication. Trouble starts when nobody owns the release date itself. One person needs the job of asking, "What is blocking this today?" and making a call when teams disagree.
You do not need one person to do every job. You do need a name next to each one: who owns the release date and final go/no-go call, who owns quality standards and test sign-off, who owns scope once work starts, and who owns launch communication.
Hidden waiting shows up at handoffs. A developer moves a ticket to QA, but testing does not start until someone pings the QA lead. QA finds an issue and sends the ticket back, but product has not decided whether the fix belongs in this release or the next one. Support asks for release notes, and nobody answers because each team thinks another team owns that message.
Watch for tickets that bounce between teams more than once. If a ticket moves from engineering to QA to product and back again, the problem is often not the code. The problem is that nobody can decide fast enough.
A small example makes this obvious. A startup plans to ship a billing change on Friday. Engineering finishes on Wednesday. QA finds one edge case on Thursday morning. Product wants the fix. Sales wants the release on time. Marketing already drafted the announcement. By Thursday afternoon, the ticket has changed hands three times, and nobody has clear authority to trade scope for speed.
Mapping handoffs usually exposes the delay fast. Write down each step, who can act without being prompted, and who can make the final call. Teams often find the bottleneck sooner than they expect.
Goals that pull teams in different directions
A release can stall even when the code is ready because each team gets rewarded for a different outcome.
Sales wants the feature live before a deal cools off. Product wants the feature to feel complete. Engineering wants to avoid outages and late-night rollbacks. Support wants fewer tickets next week, not a rough launch that doubles the queue.
Those goals all make sense on their own. They become a problem when the company treats them as equal during a deadline.
A familiar pattern goes like this:
- Sales pushes for speed because the quarter ends on Friday.
- Product asks for one more change because the first version feels thin.
- Engineering slows the release because uptime targets punish risk.
- Support asks for better docs and training because they know users will get confused.
Nobody is wrong. The release still waits.
This is why release delays can feel mysterious. Teams say they are aligned, but their targets say something else. If one group gets paid for shipping fast and another gets judged for zero incidents, delay becomes the safest shared outcome.
Bonuses make this worse in quiet ways. If managers get credit for stable systems, they add extra checks. If product gets measured on adoption, they keep adding scope. If support gets measured on ticket volume, they resist launches that look rough at the edges. No one says, "Let's delay it." Their targets say it for them.
A small startup can hit the same wall. A team is about to release a new billing flow. Sales already told two prospects it will ship this month. Engineering found an edge case that affects 2 percent of users. Support knows billing questions are always painful. If nobody has final say, the team spends four days arguing in Slack and another three waiting for approval.
Set one rule before this happens: one person decides when goals clash. That person should hear the risks from every team, make the call, and own the date. In many companies, that is the product lead or CTO. The title matters less than the rule.
If nobody can break the tie, the org chart will do it for you, and it will almost always choose delay.
One release that slips by two weeks
On Monday, the team thinks the feature is done. QA signed off on Friday. The bug list is empty, release notes are drafted, and engineers have already moved to the next task.
Then the waiting starts.
Legal needs to review one part of the flow because the feature changes customer-facing terms. Nobody scheduled that review earlier, so the request lands in a queue behind contract work and policy updates. Three days pass. The code stays the same, but the date moves anyway.
By Thursday, legal clears it. Marketing now wants to change the launch copy because the final screen reads a little differently than the draft campaign. That sounds minor, but the email text, in-app message, and product announcement all need updates. The campaign slot slips into the next week.
Support hears about the release late. They ask for a short training session, a help article, and a list of likely customer questions. None of that is unreasonable. It still adds more waiting because nobody set time aside for it.
At that point, one simple decision could save the date: cut scope. Ship the feature without the campaign. Or launch it to a smaller group first and train support the next day. But no single owner makes that call.
Product owns the roadmap. Engineering owns the code. Legal owns risk. Marketing owns the launch. Support owns readiness. Each team protects its part, which makes sense on its own. Together, that creates delay.
This is how a release slips by two weeks even when engineering finished on time. People look at the repo and ask what went wrong in development. In reality, the release process broke down outside the codebase.
The delay is usually not hidden in a bug or a slow build. It sits in approval loops, split ownership, and the absence of one person who can say, "We ship this version on Friday, and the rest follows on Tuesday."
How to trace the delay step by step
Start with the promised date, not the day code merged. That date shows where pressure first appeared. If a release slipped on June 20, walk backward through every step that had to happen before June 20 and mark the moment work stopped moving.
Then map the full path on one page. Include planning, design approval, development, review, QA, security, content, deployment, and any sign-off that can block launch. Many release delays look like engineering problems until you see seven handoffs and three people who can say "wait" but only one person who can say "go."
A simple table or whiteboard is enough. For each handoff, capture five facts:
- what moves to the next step
- who sends it
- who must act next
- how long the work itself takes
- how long it usually waits untouched
Wait time matters more than task time. A code review may take 20 minutes and still add two days if it sits in a queue. QA may need one afternoon and still hold the release for a week if nobody owns the next move after testing ends.
At each step, ask one plain question: who owns the next move right now? If the answer is "it depends," "the team," or "whoever notices it," you found a delay point. Split ownership hides inside vague language.
One startup thought tests caused the slip. The trace showed something else: code waited for product approval, then legal approval, then a deployment window. Tests took four hours. Waiting took nine days.
Fix the longest wait before you buy a new tool or change the workflow. New software rarely fixes a queue that nobody owns.
Mistakes teams make when they fix the wrong thing
When a release slips, many teams look at the repo first and the org chart second. That order wastes time. A lot of release delays come from how people hand work off, who can say yes, and which team owns the final call.
The first bad move is blaming developers before anyone maps the full workflow. If a team spends three days waiting for design sign-off, another two days waiting for QA capacity, and one more day waiting for product approval, faster coding will not save the date.
Another mistake is adding meetings to fix slow decisions. A new sync sounds harmless, but it often creates one more place where nobody decides. Teams leave with notes, not answers. If approval loops already slow the release, extra meetings usually make the queue longer.
Teams also chase perfect estimates when the bigger problem is obvious waiting. A manager asks engineering for tighter timelines, finer task breakdowns, and daily status updates while the same feature still needs approval from three people who rarely reply on the same day. The estimate was not the problem.
I have seen this in startups and larger companies. A feature looks "almost done" for a week, not because the code needs major work, but because product, marketing, and operations each think someone else owns the release call. Split ownership often hides inside polite language. Nobody blocks the launch on purpose, but nobody moves it forward either.
Moving the date is another weak fix. If the same people still own the same steps, the new date will slip too. The team gets less trust, more pressure, and no real change.
A better response is simpler:
- draw the release path from request to deploy
- mark every approval and handoff
- assign one owner for the final release decision
- remove any approval that adds little risk control
Once the workflow is visible, the problem usually looks smaller and more fixable. You can cut two weeks of delay faster by removing two approval steps than by asking engineers to estimate harder.
A short check before you promise a date
Before you promise Friday, check who can still stop the release. Most delays do not start with code. They start when nobody owns the date, teams disagree on scope, or a simple decision sits in someone's inbox for two days.
This check takes five minutes. If you cannot answer these questions clearly, the date is still a guess.
- Is one person clearly responsible for the release date?
- Can the team ship without extra executive sign-off?
- Did every team confirm the scope this week?
- Is anyone waiting on a decision older than 24 hours?
- Can you name the slowest handoff right now?
Each question points to a common failure. If no one owns the date, everyone assumes someone else is managing risk. If executives must approve routine work, small changes wait for busy calendars. If product, engineering, QA, and marketing each hold a different version of scope, the team will discover the mismatch late.
The 24-hour rule matters more than most teams admit. One old unanswered question can block testing, copy, pricing, legal review, or deployment. The work may look 90 percent done in the tracker while the release is actually frozen.
The slowest handoff usually tells the truth about the release process. It might be QA waiting for product to confirm expected behavior. It might be engineering waiting for design to approve a tiny text change. It might be a manager asking for one more review after the team already finished. Name that handoff before you name the date.
A simple example makes the gap clear. A team says a feature will ship next Wednesday. On Monday, engineering is done, but marketing has not approved the launch message, support has not seen the final workflow, and the VP still wants a last look. The code is ready. The release is not.
What to do next
Start with one release that felt late or messy. Skip the worst disaster and skip the unusually smooth one too. Pick a recent example that people still remember clearly.
Put the whole release process for that release on one page. Write down every approval, handoff, status check, and sign-off from "code is done" to "it is live." Add who owned each step, how long it sat there, and what blocked it. That usually explains more than another debate about developer speed.
A short review is enough. Mark any step where work waited more than a day. Circle places where two teams thought the other team owned the decision. Note approvals that existed "just in case" but almost never changed the outcome. Count how many people could stop the release for a small change.
Then change one thing this week. Remove one handoff if the same team can finish the work end to end. If you cannot remove the handoff, assign one person who owns the decision and the date. One missing pause often saves more time than asking engineers to push harder.
After the next release, review the map again. Check what actually changed. Did the team wait less? Did fewer people ask who approves what? Did one delay disappear only to show up somewhere else? Use timestamps, not memory. If nothing moved, the map missed a step or the owner still cannot make the call.
Sometimes teams need an outside view because every group thinks the delay lives somewhere else. Oleg Sotnikov does this kind of work through oleg.is as a Fractional CTO and startup advisor. He can review approvals, ownership, and release flow without turning it into a big reorg, which is often the fastest way to get a clear answer before the next release slips.