Engineering organization anti-patterns that kill velocity
The most common organizational anti-patterns we see in engineering teams, and how to fix them before they kill velocity and morale.
Antonio J. del Águila
Knaisoma
Across decades of working with engineering organizations at some of the largest companies in the world, we have seen the same dysfunctional patterns emerge again and again. Different industries, different tech stacks, different leadership, yet the anti-patterns are remarkably consistent.
What makes these patterns so insidious is that they often start as reasonable responses to real problems. An approval process that made sense for a 50-person team becomes a bureaucratic stranglehold at 500. A platform team created to reduce duplication becomes an ivory tower. A metrics dashboard built for visibility becomes a performance theater.
Here are the five most damaging organizational anti-patterns we have encountered, and what to do about them.
The approval bottleneck
Symptom: A simple infrastructure change requires sign-off from 7 different people across 4 teams, takes 3 weeks, and by the time it is approved, the requirements have changed.
We once worked with a financial services company where deploying a new microservice required approval from: the architecture review board (meets biweekly), the security team (5-day SLA), the infrastructure team (3-day SLA), the change advisory board (meets weekly), the data governance team (if any data is involved, so always), and two levels of management sign-off. The average time from “code complete” to “running in production” was 47 days.
The root cause is almost always fear. Something went wrong once, so a control was added. Then it went wrong differently, so another control was added. Layer upon layer of approval, each one rational in isolation, collectively forming an impenetrable barrier to delivery.
What the approval process often looks like:
Developer: "I need to deploy a service"
|
v
Architecture Review Board (2 weeks wait)
|
v
Security Review (1 week wait)
|
v
Infrastructure Request (3 days wait)
|
v
Change Advisory Board (1 week wait)
|
v
Management Approval x2 (3 days wait)
|
v
Production (47 days later, requirements have changed)
The fix: Replace gates with guardrails. Instead of humans approving every change, encode your standards into automated checks that run in CI/CD. A policy-as-code approach lets you enforce security, compliance, and architectural standards without the human bottleneck:
# policy-as-code: replace approval gates with automated guardrails
apiVersion: policy/v1
kind: DeploymentPolicy
metadata:
name: production-guardrails
spec:
rules:
- name: security-scan-passed
check: "trivy scan --severity HIGH,CRITICAL --exit-code 1"
required: true
- name: architecture-compliance
check: "arch-lint verify --config standards.yaml"
required: true
- name: load-test-baseline
check: "k6 run --threshold 'p95<500' load-test.js"
required: true
- name: data-classification-tagged
check: "data-lint verify-classification"
required: true
Reserve human review for genuinely novel situations: new technology adoption, significant architectural changes, regulatory-impacting decisions. Everything else should flow.
The platform team that does not ship
Symptom: The internal platform team has been building a “developer platform” for two years. It has a beautiful architecture diagram, a detailed roadmap, and zero production users.
This happens when platform teams are organized around technology rather than developer experience. They build what they think is elegant rather than what their internal customers actually need. We have seen platform teams spend 6 months building a custom service mesh when their developers just needed a reliable way to deploy a container.
The fix: Treat your internal platform as a product. Your developers are your customers. Interview them. Understand their pain points. Ship a minimum viable platform in weeks, not months. Measure adoption, not architecture completeness.
The best platform teams we have worked with follow a simple principle: reduce the cognitive load on product teams. Every feature should be justified by a specific developer pain point, and validated by actual usage.
- Deploy a thin platform layer that solves the top 3 developer complaints first
- Measure time-to-first-deployment for new services as your north star metric
- Hold regular “customer” interviews with product engineering teams
- Kill features that do not get adopted within 90 days
Metrics theater
Symptom: The engineering dashboard has 47 charts, all green. Customers are unhappy, features are late, and engineers are burned out.
Metrics theater is what happens when organizations optimize for the appearance of performance rather than actual outcomes. We watched a retail company celebrate having “99.99% uptime” while their checkout conversion rate had dropped 15% due to latency issues that their uptime metric did not capture.
The most common manifestations:
- Story point inflation: Teams learn that completing more points makes leadership happy, so estimates quietly inflate. Velocity goes up, throughput stays flat.
- Test coverage vanity: 95% code coverage with tests that assert nothing meaningful. The coverage number looks great. The defect escape rate tells a different story.
- Deployment frequency gaming: Counting every commit to main as a “deployment” to inflate engineering delivery metrics, as we discussed in a previous post.
The fix: Tie every engineering metric to a business outcome. Deployment frequency matters because it correlates with time-to-market. Test coverage matters because it should correlate with defect rates. If the correlation is broken, the metric is broken.
Ask your teams: “If this metric went to zero tomorrow, what business impact would we see?” If no one can answer that question clearly, the metric is theater.
The hero culture
Symptom: There is one person on the team who “knows everything.” They are in every critical incident, every architectural decision, every code review for the important services. They are also burning out.
Hero culture is one of the most dangerous anti-patterns because it masquerades as excellence. “Sarah is amazing, she always saves the day.” What that actually means is: your system has a single point of failure, and it is a human being.
At a logistics company we consulted for, one senior engineer was the only person who understood the routing algorithm at the core of their business. When he went on vacation for two weeks, the team shipped nothing. When he eventually left the company, it took 8 months and three replacement hires to rebuild that knowledge.
The fix: Make hero behavior structurally impossible.
- Enforce rotation: No one owns a service for more than two quarters without a handoff
- Pair programming on critical systems: Knowledge must exist in at least three heads
- Documentation as a deployment requirement: If it is not documented, it is not deployed
- On-call breadth: Everyone rotates through on-call, including for services they did not build
# Knowledge distribution health check
# If any score is below 3, you have a hero dependency
Bus Factor Assessment:
routing-service: [2] CRITICAL - Only 2 people can modify
payment-service: [5] HEALTHY
user-service: [4] HEALTHY
inventory-service: [1] EMERGENCY - Single point of failure
notification-service: [3] ACCEPTABLE
The solution: empowered teams
Every anti-pattern above shares a common root cause: a lack of trust in engineering teams to make good decisions. The approval bottleneck does not trust teams to ship safely. The ivory tower platform team does not trust teams to know what they need. Metrics theater does not trust teams to be accountable without surveillance. Hero culture does not trust the team to function without a savior.
The solution is well-documented in the Team Topologies model and in the work of Marty Cagan on empowered product teams. The principles are straightforward:
- Stream-aligned teams own a business capability end-to-end, from ideation to production operation
- Platform teams exist to reduce cognitive load, not to gatekeep
- Enabling teams help other teams adopt new skills and technologies, then move on
- Guardrails replace gates: Automated checks enforce standards; human review is reserved for genuinely novel decisions
A blameless culture is the foundation. None of this works if people are afraid to fail. Blameless postmortems, psychological safety, and celebrating learning from failure are not soft skills. They are engineering infrastructure. Without them, every other improvement initiative will be undermined by fear.
The organizations we have seen transform successfully all share one trait: leadership that is willing to give up control in exchange for velocity. That is harder than it sounds. But after decades of this work, we can tell you it is the only thing that consistently works.
Stop optimizing for control. Start optimizing for flow.
Stay updated
Get insights on engineering transformation delivered to your inbox.
Newsletter coming soon.