The #1 Reason Software Delivery Stalls (And How to Fix It)
By Martin Zokov
• 6 min read• software
Your team shipped 3 features last sprint. But stakeholders are still asking “when will X be done?”
You’ve tried everything: more developers, better tools, tighter deadlines. Yet delivery still feels harder than it should be.
If you’re an engineering manager, tech lead, or CTO, you know this frustration. The problem isn’t what you think it is-and the solution starts with a fundamental shift in how you view your organization.
The Mental Model That Changes Everything
Everything stems from a simple yet profound framing of what a software company is. It’s a mental model that’s not even taught in schools, but the best business leaders have internalized without realizing.
The core idea: a software company is a single system, not a set of departments.
It’s a complex system where you can’t draw clear boundaries between departments when you need to deliver a new feature or project. Therefore, you need to examine relationships between the parts, not just optimize each part in isolation.
I know this can sound abstract, but let’s examine some critical implications from this shift in mindset.
Optimizing the Parts vs. the Whole
A very common issue is setting team incentives and performance goals based on a team’s function, without considering how those incentives affect the entire system.
The Sales Team Example
Say a B2B software consultancy has a sales team whose performance and bonuses are based on how many new clients they can get.
They will do whatever they can to achieve that goal and can easily overwhelm the developer team who may not have enough capacity to take on new work.
One part excels but the other one struggles! We get local optimization but the global structure is harmed.
The Engineering Velocity Trap
Similarly, engineering teams are often measured on velocity-story points completed per sprint. When you optimize for this metric alone, teams might:
- Break down work into artificially small pieces to inflate point counts
- Avoid tackling complex refactoring that would benefit the system long-term
- Rush through code reviews to meet sprint commitments
- Skip documentation and knowledge sharing
Each of these behaviors improves the engineering team’s metrics while degrading the overall system’s ability to deliver value.
The Product Team Dilemma
Product teams measured on “features shipped” might prioritize quick wins over strategic initiatives. They might:
- Avoid customer research that would slow down feature delivery
- Skip validation steps to move faster
- Create features that don’t align with business goals
- Ignore technical debt that will slow future development
Again, the product team looks productive, but the system suffers.
Linear Thinking vs. Feedback Loops
We want a clear relationship between cause → effect, but reality is messier.
The Myth of Adding More People
Adding more people to a project to make things go faster? You end up managing dependencies between teams, more meetings to sync work, and velocity actually decreases. It’s counterintuitive, but it’s exactly what happens.
This is Brooks’ Law in action: “Adding manpower to a late software project makes it later.” The communication overhead grows exponentially with team size, and new team members need time to ramp up.
Understanding Feedback Loops
Instead, if we view the work process through feedback loops, we gain deeper understanding into how software delivery actually works:
- Customer feedback loop: How long does it take from customer request to delivered feature?
- Technical feedback loop: How long does it take to go from first commit to production?
- Learning feedback loop: How long does it take to propagate customer feedback and take action on it?
- Quality feedback loop: How long does it take to discover and fix a bug?
By aiming to shorten these feedback loops, we increase the pace of learning within an organization. Teams that learn faster can adapt faster, and adaptation is the key to sustained high performance.
Real-World Example: The Deployment Bottleneck
Consider a team that ships features every two weeks. Their deployment process takes 4 hours and requires manual steps. When a bug is discovered, it takes another 4 hours to roll back.
The feedback loop here is: deploy → wait for feedback → discover issue → roll back → fix → redeploy. This could take days.
A team that deploys multiple times per day with automated rollbacks has a much shorter feedback loop. They discover issues faster, fix them faster, and learn faster.
Treating Root Causes Rather Than Symptoms
If I have a stomach ache and take some medicine but then the pain comes back, it means I didn’t address the real issue. Treating a symptom is not the same as treating a cause.
The Deadline Problem
Let’s say there’s a problem in your software team where developers consistently miss deadlines. You may try to add more developers to the team, but as mentioned-it ends up slowing you down even more.
To understand what’s driving this, we’d need to look deeper past the obvious solution if you want a sustainable high-performing team.
Common Root Causes
Are developers constantly switching context because there are too many projects? This is a symptom of poor prioritization and work-in-progress limits.
Are developers constantly firefighting production bugs? This might indicate: - Insufficient testing before deployment - Lack of proper monitoring and alerting - Technical debt that makes the system fragile - Inadequate code review processes
Each of these hides a deeper truth that needs to be uncovered and solved via a completely different solution than what we initially thought.
The Investigation Process
When investigating root causes, ask “why” five times:
- Why did we miss the deadline? → Too much work in progress
- Why do we have too much work in progress? → Stakeholders keep adding urgent requests
- Why do stakeholders keep adding urgent requests? → They don’t trust we’ll deliver on time
- Why don’t they trust we’ll deliver on time? → We’ve missed deadlines before
- Why have we missed deadlines before? → We don’t have a reliable way to estimate and communicate capacity
Now you’ve identified the real problem: lack of trust and communication, not developer productivity.
The Interconnected Nature of Systems
These three points-optimizing parts vs. whole, linear thinking vs. feedback loops, and treating symptoms vs. root causes-are all interconnected and just a few of the implications of the holistic organizational mental model.
How They Connect
When you optimize parts in isolation (like sales targets), you create longer feedback loops (customers wait longer for features). When feedback loops are long, you’re more likely to treat symptoms (add more developers) rather than root causes (fix the underlying process issues).
Understanding these connections is crucial for making effective changes.
The Systems Thinking Approach
Systems thinking teaches us to:
- Map the system: Understand all the parts and how they connect
- Identify leverage points: Find where small changes create big impacts
- Measure the right things: Focus on system-level metrics, not local optimizations
- Experiment safely: Make changes and observe the system’s response
- Learn continuously: Use feedback loops to improve your understanding
Practical Steps Forward
So how do you apply this mental model in practice?
1. Map Your Value Streams
Start by mapping how value flows through your organization. For each feature or project:
- Where does the idea originate?
- What steps does it go through?
- Where does it wait?
- Where does it get transformed?
- How long does each step take?
You’ll likely discover that most time is spent waiting, not working.
2. Measure System-Level Metrics
Instead of measuring individual team performance, measure:
- Lead time: From idea to delivered value
- Cycle time: From start of work to completion
- Throughput: Value delivered per unit of time
- Work in progress: How many things are being worked on simultaneously
These metrics reveal system health, not just team performance.
3. Identify Bottlenecks
Look for where work accumulates. That’s your bottleneck. Common bottlenecks include:
- Prioritization processes that require too many stakeholders or approvals
- Asynchronous code review processes that create long wait times
- QA processes that require manual testing
- Deployment processes that are slow or risky
4. Optimize the Bottleneck
Once you’ve identified the bottleneck, optimize it. But remember: optimizing a bottleneck that’s not the constraint doesn’t help. If your bottleneck is code review, adding more developers won’t help-you need to improve the review process.
5. Repeat
As you optimize one bottleneck, another will emerge. This is normal and expected. The key is to continuously identify and address the current constraint.
Conclusion
The #1 reason software delivery stalls isn’t lack of talent, tools, or time. It’s viewing your organization as separate departments instead of a single interconnected system.
When you shift to systems thinking, you start to see:
- How local optimizations harm global performance
- How feedback loops determine learning speed
- How symptoms mask root causes
- How everything connects
This mental model changes everything. It’s the foundation for understanding team structure, product management, technical delivery, and collaboration-all topics we’ll explore in depth.
The journey to high-performing teams starts here, with this fundamental shift in perspective. Once you see your organization as a system, you can start optimizing it as one. The best teams aren’t the ones with the most developers or the best tools. They’re the ones that understand their system and optimize it holistically.
If you want a fast, objective view of what’s slowing delivery down in your organization, you can do my 2-minute Delivery Flow Assessment to get a personalized report of how your team operates and suggestions on how to improve.
Or if you’d like to a more personalized approach and 1-to-1 time with me let’s have a conversation - Book a Call here
It’s a more comprehensive analysis where we’ll map your value streams, identify bottlenecks, and outline how we can work together to improve your delivery system.