Our capacity planning used to be a two-week spreadsheet exercise every quarter. We replaced most of it with a query that runs in seconds.

Capacity planning ate two weeks of an engineer's quarter, manually exporting metrics into a spreadsheet and eyeballing growth trends. Almost none of that work needed a human.

Automate the growth projection

We compute trailing growth rate per service directly from telemetry and project it forward, rather than having someone manually chart request volume in a spreadsheet every quarter. The query produces the same projection a careful analyst would, in seconds instead of days, and it's reproducible the same way every time.

from metrics("requests.count")
| summarize monthly_total = sum(value) by service, bin(_time, 30d)
| summarize growth_rate = (last(monthly_total) - first(monthly_total)) / first(monthly_total) by service
| extend projected_90d = growth_rate * 3
| order by projected_90d desc

Reserve human time for the exceptions

The automated projection is right most of the time and wrong in interesting ways for services with known upcoming changes — a marketing campaign, a new integration partner, a planned deprecation. We spend the time we saved reviewing only the outliers and the services flagged with an upcoming known event, not re-deriving numbers the query already gets right.

Tie the output directly to a provisioning decision

A projection that doesn't lead to a decision is just a chart. Every service with projected growth above its current headroom threshold automatically generates a provisioning ticket with the target date attached, so the loop from "we noticed" to "we acted" doesn't depend on someone remembering to follow up after the planning meeting.

Keep last quarter's projection visible next to this quarter's

We display the prior quarter's forecast alongside the new one so anyone reviewing can see at a glance how accurate the model actually was, not just what it predicts now. A service that consistently over- or under-shoots its own projection is telling you something about its growth pattern — usually that it's lumpy rather than linear — and that's a signal worth a human look even when the current quarter's number seems unremarkable.

  • Compute trailing growth rate and forward projection directly from telemetry.
  • Spend human review time only on flagged exceptions and known upcoming events.
  • Auto-generate a provisioning ticket when projected growth exceeds current headroom.
  • Show last quarter's forecast next to this quarter's to track model accuracy over time.
  • Re-run the projection query quarterly instead of rebuilding the spreadsheet each time.