Start with the workload, not the label.
Scaling decisions depend on how an application behaves, where its bottlenecks sit, and which changes the team can operate safely. A useful plan makes those assumptions explicit.
- Understand the constraintsIdentify application state, shared services, database behavior, availability requirements, and the kinds of load the system needs to serve.
- Compare the operational tradeoffsConsider architecture complexity, deployment effort, observability, and the operational ownership needed for each approach.
- Validate against real demandAgree what to measure, how to evaluate performance, and which signals should trigger the next change.
Company Profile
ReadyPay is a Series B fintech running a real-time payment authorization + settlement platform on Azure Kubernetes Service (AKS). It supports ~200 merchant integrations and connects to upstream processors including StripeConnect, Adyen, and BankNet.
Current footprint:
AKS: 3-node cluster on D8s_v5 with Azure CNI on a /24 subnet
Workloads: transaction engine + settlement workers + webhook processors
Data: Azure SQL + Redis (Private Endpoints)
Egress: Standard Load Balancer outbound SNAT
Observability: App Insights + Container Insights
The Problem
ReadyPay saw predictable p99 latency spikes from ~120ms baseline to 800ms+ during peak windows (market open and lunch rush), causing SLA breaches with enterprise merchants. Leadership was split on what to do:
CloudGo.ai benchmarked the same prompt against Claude without access to ReadyPay's internal docs.
But the key limitation: it had to hypothesize and ask ReadyPay to validate before acting. It could not confirm what was actually happening or what was operationally blocked.
CloudGo.ai connected two things Claude did not have:
Confirmed reality from telemetry:
Pulled critical constraints from ReadyPay docs:
The Decision
CloudGo.ai reframed the “horizontal vs vertical” debate into a sequencing problem:
Finding: Both scaling strategies were premature because three independent bottlenecks would persist (or worsen) under scaling—and one strategy (horizontal) was physically blocked by subnet/IP capacity.
Context-aware conclusion:
Horizontal scaling first is not just risky—it’s not currently executable (subnet IP ceiling), and it would likely worsen SNAT exhaustion.
Vertical scaling is attractive because it leverages existing D16s_v5 RIs, but it should happen after addressing the immediate causes of tail latency (SNAT + throttling) and after planning IP headroom for safe node-pool migration.
What CloudGo.ai Recommended
Phase 0 (immediate): stop the p99 spike drivers
Deploy NAT Gateway for AKS egress (massively increases SNAT port capacity vs default LB allocation)
Adjust/raise/remove CPU limits for the latency-sensitive transaction engine (keep requests; stop throttling during bursts)
Add app-side guidance (e.g., .NET connection reuse/pooling) to further reduce SNAT churn
Phase 1 (weeks 1–3): unblock safe scaling
Address IP constraints (expand subnet / add subnet + new node pool / move to overlay/dynamic IP allocation) acknowledging PCI change gates
Phase 2 (after prerequisites): capture RI value + add resilience
Migrate node pool to D16s_v5 using existing Reserved Instances
Then enable HPA + Cluster Autoscaler with guardrails once IP and egress are stable
Business Impact of Adding Context
Why the company context materially benefited ReadyPay:
-
✅ Speed + certainty: shifted from “investigate then remediate” to “remediate now with confirmed parameters” (critical when SLAs are being breached).
-
✅ Avoided a costly wrong move: prevented a horizontal scale-out plan that was blocked by subnet IPs and likely to increase SNAT failures — a classic “make it worse while spending more” outcome.
-
✅ Operationally executable plan: integrated real constraints (PCI lead times, vendor allowlisting/notice windows, prior incident learnings), not generic best practices.
-
✅ Cost-aware optimization: identified that the full plan was likely net-neutral or net-saving after applying existing RIs (including an example of -$1,960/mo eliminable on-demand compute offsetting modest NAT costs).
-
✅ Reduced commercial risk: faster stabilization of merchant-facing tail latency reduces ongoing SLA penalties, churn risk, and executive-level escalation pressure.