The AWS ECS autoscaler doesn't know Node.js exists. It watches the CPU.
Node.js doesn't choke on CPU; it chokes on event loop saturation. By the time CloudWatch fires, the event loop has been backed up for minutes.
Target Tracking: 3 minutes before the alarm fires. Then container pull, health checks, and ALB registration. Link this to 5–7 minutes of degraded service before new capacity arrives.
We benchmarked it:
929ms median, 74.76% success rate with Target Tracking because it watches CPU.
20ms median, 99.99% with ICC because it watches ELU instead of CPU and predicts 35 seconds ahead.
The metric is the problem. CPU is the wrong signal for an event-loop runtime.
blog.platformatic.dev/aws-ec…