Measuring What Matters
You can’t improve developer experience without measuring it. But most teams track the wrong things. Here’s a practical framework combining DORA, SPACE, and custom metrics.
DORA Metrics: The Foundation
The four key metrics from the DORA research program:
| Metric | Elite | High | Medium | Low |
|---|---|---|---|---|
| Deployment Frequency | Multiple/day | Weekly | Monthly | < Monthly |
| Lead Time for Changes | < 1 hour | < 1 week | < 1 month | > 1 month |
| Change Failure Rate | < 5% | < 10% | < 15% | > 15% |
| Mean Time to Recovery | < 1 hour | < 1 day | < 1 week | > 1 week |
Tracking DORA Automatically
# GitLab/GitHub webhook handler
@app.post("/webhook/deployment")
async def track_deployment(event: dict):
metrics = {
"deployment_frequency": count_deployments_today(),
"lead_time": calculate_lead_time(
first_commit=event["first_commit_at"],
deployed_at=event["deployed_at"],
),
"change_failure": was_rollback_needed(event["deployment_id"]),
}
prometheus_metrics.deployment_frequency.inc()
prometheus_metrics.lead_time.observe(metrics["lead_time"].total_seconds())SPACE Framework: Beyond Speed
DORA measures throughput. SPACE measures the human side:
- Satisfaction and well-being → Developer surveys
- Performance → Does the code do what it should?
- Activity → Commits, PRs, deployments (use carefully)
- Communication → PR review times, documentation quality
- Efficiency → Time spent on productive vs. toil work
Developer Survey (Run Quarterly)
Rate 1-5:
1. I can deploy my changes to production easily
2. I can find the documentation I need
3. Our CI/CD pipeline is fast and reliable
4. I spend most of my time on meaningful work (not toil)
5. I feel productive with our current tools
Open-ended:
- What's the biggest blocker to your productivity?
- What would you change about our platform?Custom Platform Metrics
Time to First Deployment
How long from “new developer joins” to “first production deploy”:
# Track onboarding funnel
onboarding_stages = {
"account_created": timestamp_1,
"first_commit": timestamp_2,
"first_pr_merged": timestamp_3,
"first_deploy": timestamp_4,
}
time_to_first_deploy = (
onboarding_stages["first_deploy"] - onboarding_stages["account_created"]
)
# Target: < 1 weekPlatform Adoption Rate
-- What percentage of teams use the golden path?
SELECT
COUNT(DISTINCT team) FILTER (WHERE uses_golden_path) * 100.0 /
COUNT(DISTINCT team) as adoption_rate
FROM service_catalog
WHERE lifecycle = 'production';Toil Ratio
# Track time spent on operational tasks vs. feature development
toil_ratio = time_on_ops / (time_on_ops + time_on_features)
# Target: < 20%Building Your Dashboard
Essential panels:
- DORA metrics — trend over 90 days
- CI/CD pipeline duration — P50 and P95
- Self-service success rate — % of requests that complete without manual intervention
- Developer satisfaction score — from quarterly surveys
- Time to first deploy — for new joiners
Key Insights
- Don’t gamify activity metrics — measuring commits incentivizes small commits, not better code
- Surveys matter more than logs — developer perception IS reality
- Trend matters more than absolute — are you improving quarter over quarter?
- Share metrics publicly — transparency drives improvement
- Act on feedback — metrics without action breed cynicism
Want to measure and improve your developer experience? I help teams build data-driven platform strategies. Get in touch.

