Software Development Metrics
How do you know the engineering is getting better — not just busier?
The Engineering Quality Benchmarks define thresholds. This page tracks whether you're hitting them. Without both, standards are static checklists. With both, Deming's loop runs: Plan (set the threshold) → Do (build to spec) → Check (measure here) → Act (update the standard).
The Loop
STANDARDS (eng quality benchmarks) → defines "module count < 200 per route"
↓
BUILD (best practices) → developer follows checklists
↓
DETECT (anti-patterns) → catch violations before they compound
↓
MEASURE (this page) → did we hit the threshold?
↓
BETTER STANDARDS → benchmarks evolve
Leading Indicators
Predict engineering quality before users encounter problems.
| Metric | Threshold | Tool | Cadence |
|---|---|---|---|
| Modules per route | <= 200 | Module count script | Every build |
| JS bundle per page | <= 200KB gzipped | next build output | Every deploy |
| Full typecheck | 0 errors | tsc --build | Every PR |
New any or @ts-ignore | 0 added per PR | Grep diff | Every PR |
| Module boundary violations | 0 on nx lint | ESLint | Every PR |
eslint-disable count | Trending to 0 | Grep + track | Weekly |
export * outside entry-points | 0 instances | Grep | Weekly |
composite: true compliance | 100% of lib tsconfigs | Grep | After config changes |
| Build time (affected) | <= 60 seconds | CI timing | Every PR |
| Dev server cold start | <= 15 seconds | Local measurement | After dependency changes |
Lagging Indicators
Confirm engineering quality through delivery outcomes. These are DORA metrics — the industry standard for software delivery performance.
| Metric | What It Reveals | Threshold | Tool |
|---|---|---|---|
| Deployment frequency | How often you ship | Daily or more (Elite) | CI/CD pipeline |
| Lead time for changes | PR open to production | Under 1 day (Elite) | Git timestamps |
| Change failure rate | How often deploys break | Under 5% (Elite) | Incident tracking |
| Mean time to recover | How fast you fix breaks | Under 1 hour (Elite) | Incident tracking |
| Cycle time | Code to merged PR | Under 24 hours | Git + review tooling |
| Code churn rate | Rewrites within 2 weeks | Under 15% | Git analysis |
| Build cache hit rate | Nx cache effectiveness | >= 80% | Nx Cloud or CI stats |
Monitoring Cadence
| Frequency | What to Check |
|---|---|
| Every PR | Type errors, boundary violations, new any usage, bundle size diff |
| Every deploy | Module count per route, build time, cache hit rate |
| Weekly | eslint-disable count, barrel hygiene, export * audit |
| Monthly | DORA metrics, cycle time trends, code churn rate |
| Quarterly | Full engineering quality audit against benchmarks, review which thresholds need updating |
Feedback Path
When metrics reveal patterns, update the standard:
| Pattern | Action |
|---|---|
| Module count consistently under 100 | Tighten threshold |
| Build time creeping above 60s | Audit dependency graph for new barrel blowouts |
eslint-disable count increasing | Block PRs that add new disables without justification |
| A threshold is always met effortlessly | Automate it (CI check), remove from manual checklist |
| A threshold is never met | Either fix the system or adjust the threshold with justification |
| DORA metrics stalling | Trace bottleneck — usually review turnaround or flaky tests |
If the system always prevents the violation, stop checking manually and let CI enforce it.
Dig Deeper
📄️ Dev Ops
Apply the 4x4 Method to gain comprehensive understanding of delivery processes, identify key improvement areas, and make data-driven decisions to enhance performance.
📄️ Developer Activity
Who is winning the race to attract developers?
📄️ Developer Experience
How easy is it to fall into the flow for optimum productivity?
Context
- Engineering Quality Benchmarks — The thresholds being measured
- Engineering Anti-Patterns — What to detect and eradicate
- Product Design Metrics — Parallel metrics for visual quality
- Best Practices — Pre-deploy quality gates
- Standards — Why measurable thresholds matter
- Process Optimisation — PDCA loop mechanics