AWS Elastic Beanstalk, Under the Hood

AWS Elastic Beanstalk, Under the Hood

An expert-level walkthrough of how Elastic Beanstalk actually orchestrates CloudFormation, Auto Scaling, and health data underneath its deceptively simple "deploy and go" surface — built for engineers who already know what a load balancer and an Auto Scaling group are, and want to know what happens after they click "Upload and Deploy."

Most engineers meet AWS Elastic Beanstalk at the surface: you point it at a bundle of code, pick a platform, and a few minutes later there is a working environment with a load balancer, a fleet of instances, and a URL. That surface is intentionally simple. But underneath it, Elastic Beanstalk is quietly running a full orchestration engine — assembling CloudFormation stacks, tracking environment state machines, streaming health signals from every instance, and deciding, second by second, whether your environment is “Ok,” “Warning,” “Degraded,” or “Severe.” This guide skips the beginner tour of “what is a platform” and goes straight into the advanced machinery: how the internals actually work, how the five deployment policies trade risk for speed, how the health system computes its verdicts, and where teams get burned in production when they treat Elastic Beanstalk as a black box instead of a managed orchestrator they still need to understand.

1Internal Working: What Elastic Beanstalk Actually Orchestrates

Elastic Beanstalk is not a runtime. It is a control plane that assembles and supervises other AWS services on your behalf, and understanding that separation is the single biggest unlock for debugging it in production.

When you create an Elastic Beanstalk environment, Elastic Beanstalk does not run your application itself. It generates and manages an AWS CloudFormation stack, and that stack is what actually provisions the Auto Scaling group, the Elastic Load Balancer (Application, Network, or Classic depending on configuration), the launch template, the security groups, and — for environments that use it — the RDS instance. Elastic Beanstalk’s job is to translate a small set of high-level choices (platform, instance type, scaling policy, deployment policy) into a coherent, versioned CloudFormation template, submit it, watch the stack events, and reconcile the result into a single environment health status.

This matters because when something goes wrong, the error rarely originates “in Elastic Beanstalk.” It originates in the underlying CloudFormation stack, the Auto Scaling group, or the EC2 instance’s bootstrap process, and Elastic Beanstalk is simply the messenger reporting it back to you, sometimes in a heavily summarized form. Engineers who only look at the Elastic Beanstalk console health color miss the CloudFormation stack events and the underlying instance logs where the real root cause lives.

Analogy

Think of Elastic Beanstalk as a general contractor and CloudFormation as the construction crew. You tell the contractor “build me a two-story house with a garage,” and the contractor draws up detailed blueprints (a CloudFormation template) and hands them to the crew. If a wall goes up crooked, complaining to the contractor’s receptionist (the Elastic Beanstalk console health badge) tells you something is wrong, but the actual explanation is on the job site, in the crew’s own logs and blueprints.

Underneath a single Elastic Beanstalk environment there are, in practice, three cooperating layers. The first is the environment metadata layer, which stores your environment’s configuration, tier (web server or worker), platform version, and the pointer to the currently deployed application version — an immutable, versioned bundle stored in S3. The second is the orchestration layer, the CloudFormation stack itself, which owns the actual infrastructure resources. The third is the host agent layer: on every EC2 instance in the environment, Elastic Beanstalk installs a host agent that pulls the application version from S3, runs platform hooks in a strict, numbered order, and continuously reports instance-level health metrics back up through Amazon CloudWatch and the Elastic Beanstalk health-reporting endpoint.

A production example: Netflix’s internal deployment tooling and AWS’s own reference architectures for Elastic Beanstalk both rely on this same separation-of-concerns pattern — a thin, opinionated orchestration layer on top of primitives (Auto Scaling, ELB, CloudFormation) that remain independently inspectable. That is precisely why experienced AWS engineers still open the CloudFormation console and the underlying Auto Scaling group even when using a “fully managed” service like Elastic Beanstalk — the abstraction is real, but it is not the whole truth.

!
Advanced Gotcha

Because Elastic Beanstalk owns the CloudFormation stack, manually editing resources it created (for example, hand-changing an Auto Scaling group’s launch template outside of Elastic Beanstalk) will drift the stack. On the next Elastic Beanstalk deployment or configuration update, Elastic Beanstalk may silently revert your manual change, or the stack update may fail with a drift-related error that has nothing to do with your actual deployment.

2Data Flow & Lifecycle of a Deployment

A single “deploy” click triggers a precise, ordered sequence across S3, CloudFormation, the host agent, and the load balancer’s health checks — and every one of those steps is a place a deployment can stall or fail.

The lifecycle begins the moment you upload a source bundle. Elastic Beanstalk stores that bundle as an immutable, versioned object in an S3 bucket dedicated to the application, and it registers that object as an “application version” — a first-class, named artifact you can roll back to later. This immutability is deliberate: it means a rollback is not a rebuild, it is simply re-pointing the environment at a previously stored version.

flowchart TD
    A["Developer uploads source bundle"] --> B["S3: Application Version stored (immutable)"]
    B --> C["Elastic Beanstalk Environment Manager"]
    C --> D["CloudFormation Stack Update triggered"]
    D --> E["Auto Scaling Group launches/replaces instances per deployment policy"]
    E --> F["EC2 Host Agent pulls Application Version from S3"]
    F --> G["Platform Hooks run: prebuild, predeploy, appdeploy, postdeploy"]
    G --> H["Instance registers with Load Balancer Target Group"]
    H --> I["ELB Health Checks + Enhanced Health Agent report status"]
    I --> J{"Health Status Ok?"}
    J -- Yes --> K["Traffic routed to new instance"]
    J -- No --> L["Deployment marked Degraded/Severe, policy-dependent rollback"]
    
Fig. 1 — The full data-flow path from source upload to traffic serving, including the health-gate decision point

Once the CloudFormation stack update begins, the Auto Scaling group starts replacing or updating instances according to the environment’s configured deployment policy (covered in depth in Chapter 3). Each instance that comes up runs the host agent’s platform hook sequence — a fixed, numerically ordered set of hook directories (things like prebuild hooks, predeploy hooks, the actual application deployment step, and postdeploy hooks) that platform-specific and custom `.ebextensions`/`.platform` configuration can hook into. This hook ordering is one of the most misunderstood parts of Elastic Beanstalk for advanced users: hooks execute in lexical/numeric filename order within each stage, not in the order you happened to write your configuration files.

After the application code is in place, the instance is registered with the load balancer’s target group, and two independent health signals start flowing: the load balancer’s own target-group health checks (a simple HTTP/TCP check), and, if Enhanced Health Reporting is enabled, a much richer stream from the host agent covering CPU, latency percentiles, request counts, and process-level status, which is aggregated by the Elastic Beanstalk service into the single color-coded environment health you see in the console.

Stage

Version Storage

Bundle becomes an immutable S3-backed Application Version, enabling instant rollback by re-pointing rather than rebuilding.

Stage

Stack Update

CloudFormation computes the diff between current and desired state and issues only the necessary resource changes.

Stage

Hook Execution

Ordered prebuild/predeploy/appdeploy/postdeploy hooks run on each instance in strict numeric sequence.

Stage

Health Convergence

ELB checks and Enhanced Health data are reconciled into one environment-level status color.

3Deployment Policies: Trading Speed for Safety

Elastic Beanstalk offers five distinct deployment policies, and choosing the wrong one is one of the most common causes of self-inflicted production outages on the platform.

All at once deploys the new version to every instance simultaneously. It is the fastest policy and the only one with genuine downtime risk, because every instance is briefly running the new code at the same moment, with no fallback fleet serving traffic. Rolling deploys in batches, taking a batch out of service, updating it, and moving to the next — capacity dips during the rollout because outgoing-batch instances are removed before replacements are ready. Rolling with additional batch fixes that capacity dip by launching one extra batch of new instances first, so full capacity is maintained throughout, at the cost of briefly running (and paying for) extra instances. Immutable deployment is the most conservative built-in option: it launches an entirely new, parallel Auto Scaling group running the new version alongside the old one, validates its health, and only then swaps traffic over — if the new group fails health checks, the old environment is completely untouched and nothing is rolled back because nothing was ever changed. Traffic splitting extends the immutable pattern into a canary release, routing a configurable small percentage of live traffic to the new fleet before committing to a full cutover.

PolicyDowntime RiskCapacity During DeployRollback Cost
All at onceHighFull, briefly all-newManual redeploy of prior version
RollingNoneReduced (per batch)Continue rolling old version forward
Rolling with additional batchNoneFull, plus temporary surplusContinue rolling old version forward
ImmutableNoneFull, doubled temporarilyTerminate new stack, zero old-fleet impact
Traffic splittingNoneFull, gradual cutoverShift weight back to old fleet instantly

Production Example — Financial Services Pattern

Regulated fintech environments running on Elastic Beanstalk commonly standardize on Immutable or Traffic Splitting specifically because an auditor can point to the fact that a failed deployment never touched the previously-passing, currently-serving fleet — the failure mode is “new stack terminated,” not “production fleet partially updated and now inconsistent.”

When Rolling Is Right

  • Stateless services with tolerance for brief capacity reduction
  • Cost-sensitive environments unwilling to run duplicate capacity

When Rolling Is Wrong

  • Services near peak capacity, where even a temporary batch removal risks saturation
  • Deployments with a real chance of a broken build, since a bad batch can partially serve broken traffic before detection

4Advanced Configuration: .ebextensions, Platform Hooks, and Custom Platforms

Beyond the console’s dropdown options, Elastic Beanstalk exposes a configuration-as-code layer that lets experienced teams reach into the underlying CloudFormation resources directly — powerful, and equally capable of quietly breaking an environment.

`.ebextensions` configuration files, packaged inside the application bundle, let you declare additional resources, modify option settings, and inject arbitrary Linux commands or files at deploy time. Because these files are parsed and merged into the same CloudFormation template Elastic Beanstalk itself generates, a poorly scoped `.ebextensions` resource declaration can conflict with resources Elastic Beanstalk manages natively, producing update failures that only surface deep in a CloudFormation stack trace rather than anywhere in the Elastic Beanstalk UI.

Platform hooks (the newer, Amazon Linux 2 and later mechanism, superseding the older container-command approach) organize custom logic into `.platform/hooks` directories with four fixed stages — prebuild, predeploy, postdeploy, and preinit — each executed in numeric filename order. This ordering guarantee is what lets teams safely sequence, for example, a database migration script before the application process restarts, without racing the two.

For teams whose runtime needs exceed what a managed platform provides, Elastic Beanstalk supports fully custom platforms built with Packer, producing a custom AMI that becomes the base image for every instance in the environment. This is the escape hatch used when a team needs a specific kernel module, a proprietary agent baked into the image, or compliance-mandated hardening applied before the instance ever boots the application.

ADR-EB-04Anti-Pattern
Anti-Pattern

Using `.ebextensions` to directly modify Auto Scaling group or launch configuration properties that Elastic Beanstalk’s own environment configuration UI already controls (instance type, scaling limits).

Why It Fails

Elastic Beanstalk’s environment configuration and `.ebextensions` both write to the same underlying CloudFormation resources. When both attempt to own the same property, the next configuration change from either side can silently overwrite the other, producing configuration drift that is extremely difficult to trace.

Better Approach

Use `.ebextensions` only for settings genuinely absent from the console/CLI configuration surface, and treat every option Elastic Beanstalk exposes natively as owned exclusively by that native configuration path.

5High Availability & Reliability

Elastic Beanstalk’s availability guarantees are entirely inherited from the Auto Scaling group and load balancer it provisions — the service adds convenience and health awareness, not a fundamentally different reliability model.

A properly configured Elastic Beanstalk environment spans multiple Availability Zones because its Auto Scaling group is configured with subnets in more than one AZ, and its load balancer distributes traffic across all of them. If a single AZ fails, healthy instances in the surviving AZs continue serving traffic, and the Auto Scaling group launches replacement capacity in the remaining zones — exactly the behavior you would get by hand-building the same Auto Scaling group and ELB, because that is literally what is running underneath.

Where Elastic Beanstalk adds real value is instance replacement decision-making. Enhanced Health Reporting doesn’t just check “is the process alive” — it evaluates request latency percentiles, 5xx error rates, and CPU saturation at the instance level, and Elastic Beanstalk can be configured to automatically replace instances that are technically passing a basic TCP health check but are clearly degraded by these richer signals — catching “gray failures” that a naive load balancer health check would miss entirely.

Analogy

A basic ELB health check is like asking someone “are you conscious?” — a degraded instance can technically answer yes while barely functioning. Enhanced Health Reporting is like also checking their pulse, blood pressure, and reaction time, catching the case where the answer is technically “yes” but the underlying condition is clearly deteriorating.

Multi-AZ
Default for production-tier environments
2+
Recommended minimum instances per environment for HA
10s
Typical enhanced health reporting interval

A production example worth internalizing: e-commerce platforms running Elastic Beanstalk web tiers for checkout services typically pair Immutable or Traffic Splitting deployments with a minimum of three instances spread across three AZs specifically so that a single bad deployment batch or a single AZ outage never drops available checkout capacity below what peak traffic demands — the deployment policy and the HA configuration are designed together, not independently.

6Performance & Scalability

Scaling in Elastic Beanstalk is Auto Scaling policy configuration wearing a friendlier interface, and the advanced levers — warm pools, capacity rebalancing, custom CloudWatch-metric triggers — are exactly the same levers you’d use if you built the Auto Scaling group by hand.

Elastic Beanstalk lets you attach scaling triggers based on CloudWatch metrics — CPU utilization, network I/O, request count, or a custom application metric published to CloudWatch — and defines the same scale-out/scale-in cooldown mechanics as a hand-configured Auto Scaling group. The advanced consideration most teams miss is cooldown tuning: a cooldown period that’s too short causes scaling “thrashing” (rapid scale-out followed immediately by scale-in as the newly launched instances briefly reduce average utilization), while a cooldown that’s too long leaves the environment under-provisioned during a genuine traffic spike for longer than necessary.

For environments with predictable but slow-to-warm instances (heavy JVM applications, for example, with long class-loading and JIT warm-up), Elastic Beanstalk-managed Auto Scaling groups support warm pools — a set of pre-initialized, stopped instances that can be resumed far faster than a cold launch, directly reducing the effective scale-out latency during sudden demand spikes.

i
Advanced Tip

When request latency, not CPU, is your real bottleneck (common for I/O-bound services waiting on a downstream database or external API), scale on a request-count-per-target or custom latency metric rather than CPU utilization — CPU-based scaling will systematically under-scale I/O-bound workloads because the CPU never actually gets busy even as latency climbs.

Netflix and similar high-scale operators that have used Elastic Beanstalk for auxiliary services (as opposed to their primary custom orchestration) consistently report the same lesson: the platform scales exactly as well as the Auto Scaling group and metric selection underneath it are tuned, and no amount of Elastic Beanstalk-specific configuration compensates for scaling on the wrong metric.

7Security: The Two-Role Model and Network Boundaries

Elastic Beanstalk security hinges on correctly distinguishing two separate IAM roles that are easy to conflate, plus the VPC and security group boundaries the environment provisions on your behalf.

Every environment uses two distinct IAM identities. The service role is assumed by the Elastic Beanstalk service itself, granting it permission to call CloudFormation, Auto Scaling, and EC2 APIs on your behalf to manage the environment’s infrastructure. The instance profile is attached to the EC2 instances themselves and grants your running application permission to call other AWS services — S3, DynamoDB, SQS, and so on. Confusing the two is a common security misconfiguration: over-privileging the instance profile because a permission error was actually a service-role problem (or vice versa) leaves the running application with far broader AWS access than the code itself ever needs.

Service Role Scope

  • CloudFormation stack operations
  • Auto Scaling group management
  • ELB and CloudWatch integration calls

Instance Profile Scope

  • Application-level AWS API calls (S3, DynamoDB, SQS, etc.)
  • CloudWatch Logs streaming from the host agent
  • Should follow least-privilege scoped to what the app code actually calls

Network-wise, Elastic Beanstalk provisions the load balancer’s security group to accept inbound traffic on the configured listener ports, and a separate instance security group that, by default, accepts traffic only from the load balancer’s security group — not directly from the internet. Advanced deployments inside an existing VPC should verify that this instance-tier security group truly has no direct public ingress path, since a misconfigured custom VPC setup can accidentally expose instances directly, bypassing the load balancer entirely.

!
Common Trap

Storing database credentials or API keys as plain environment properties in the Elastic Beanstalk console is visible to anyone with read access to the environment configuration. Production-grade setups instead retrieve secrets from AWS Secrets Manager or Systems Manager Parameter Store at instance startup via a platform hook, keeping the actual secret value out of the environment configuration entirely.

8Monitoring, Logging & Metrics

Elastic Beanstalk’s observability stack layers three distinct systems — Enhanced Health, CloudWatch Logs streaming, and X-Ray tracing — and advanced teams treat all three as complementary, not redundant.

Enhanced Health Reporting produces the environment health color and the per-instance causes feeding it, refreshed roughly every ten seconds, and is the fastest signal for “is this deployment currently healthy.” CloudWatch Logs streaming, when enabled, forwards application and web-server logs off the ephemeral instance to a durable, centrally queryable location — essential because Auto Scaling terminates instances (and their local logs) without warning during normal scaling activity. AWS X-Ray integration, layered on top, provides distributed tracing across service calls, letting you see exactly which downstream call inside a request is responsible for the latency the Enhanced Health system is flagging.

1

Detect

Enhanced Health flags elevated latency or 5xx rate at the instance level within seconds.

2

Correlate

CloudWatch Logs Insights queries across the streamed application logs for the affected time window and instance.

3

Trace

X-Ray service maps pinpoint the specific downstream dependency contributing the latency.

4

Act

Instance is replaced, deployment is rolled back, or the downstream dependency is scaled — decided from data, not guesswork.

A well-known industry pattern: Uber’s early platform teams, before building fully custom deployment tooling, relied on exactly this layered observability approach on managed PaaS-style environments — fast health signals for immediate action, durable logs for postmortems, and tracing for root-causing latency that no health check alone could explain.

9Design Patterns & Anti-Patterns

Elastic Beanstalk supports two fundamentally different environment tiers — web server and worker — and the most durable production patterns come from combining them correctly rather than forcing everything through one tier.

The web server tier is what most people picture: a load-balanced Auto Scaling group serving HTTP requests directly. The worker tier instead attaches instances to an SQS queue, pulling messages and processing them asynchronously with no load balancer in the path at all. The durable pattern — used across countless production SaaS platforms — is to run a lightweight web tier that accepts requests and quickly enqueues background work (image processing, email sending, report generation) onto SQS, then a separately-scaled worker tier that drains that queue independently, letting each tier scale on its own appropriate metric (request rate for the web tier, queue depth for the worker tier).

Pattern

Blue/Green via CNAME Swap

Deploy a full parallel environment, validate it independently, then swap the environment CNAMEs to cut traffic over instantly and reversibly.

Pattern

Web + Worker Split

Decouple synchronous request handling from asynchronous processing so each tier scales on the metric that actually matters to it.

Anti-Pattern

One Environment For Everything

Running staging, load-testing, and production traffic against the same environment guarantees a bad deploy or a load test takes down real users.

Anti-Pattern

Ignoring Immutable Instance Doubling

Treating Immutable deployments as “free” ignores that they briefly double compute cost — fine occasionally, expensive if run many times a day at scale.

10Advantages, Disadvantages & Trade-offs

Elastic Beanstalk’s core trade-off is fixed and well understood: it buys operational speed at the price of some infrastructure opacity, and the right call depends entirely on how much that opacity actually costs your team.

Advantages

  • Fast path from code to a fully provisioned, load-balanced, auto-scaled environment
  • Built-in deployment policies covering common risk/speed trade-offs without custom tooling
  • Enhanced Health Reporting surfaces degraded instances faster than a bare ELB health check
  • Underlying resources (CloudFormation, ASG, ELB) remain independently inspectable and even directly usable

Disadvantages

  • Two-layer ownership (Elastic Beanstalk config vs. raw CloudFormation/`.ebextensions`) creates real drift risk
  • Less granular control than hand-rolled CloudFormation, CDK, or Terraform for highly bespoke architectures
  • Platform version upgrades require care — an unmanaged, long-neglected platform can fall behind on OS and runtime patches
  • Some teams outgrow it as microservice counts and cross-service orchestration needs grow

The trade-off resolves cleanly for teams running a moderate number of relatively conventional web services who want managed scaling and deployment safety without owning a custom CloudFormation/CDK codebase — and resolves against Elastic Beanstalk for teams running dozens of interdependent microservices needing fine-grained, service-mesh-aware orchestration, where a purpose-built platform (ECS, EKS, or a custom internal deployment system) becomes worth the additional operational investment.

11Best Practices & Common Mistakes

Nearly every advanced Elastic Beanstalk incident traces back to one of a small set of recurring mistakes — and each has a well-established, low-effort fix.

Pin platform versions deliberately and upgrade on a schedule, rather than letting environments silently drift onto whatever platform version was current at creation time.
Always test a new deployment policy against a non-production clone before switching a live environment’s policy, since policy changes interact with instance count and cost in ways that surprise teams the first time.
Treat `.ebextensions` and `.platform/hooks` as code — version-controlled, reviewed, and tested — not as one-off console tweaks pasted into the bundle.
Enable Enhanced Health Reporting and CloudWatch Logs streaming from day one; retrofitting observability after an incident means the incident’s own logs are already gone.
Separate web and worker tiers whenever background processing exists, instead of doing slow work inline inside a request handler on the web tier.
!
Most Common Mistake

Using the “All at once” deployment policy in production because it’s the default in some SDKs and CLI flows, without a deliberate decision — this is the single most common source of avoidable, self-inflicted downtime on the platform.

12Real-World & Industry Examples

Elastic Beanstalk’s sweet spot in industry is consistently the same: teams that need managed, production-grade infrastructure fast, without standing up a dedicated platform engineering function on day one.

Early-Stage SaaS Backends

Many venture-backed SaaS startups run their initial production API on Elastic Beanstalk specifically because it gives them a multi-AZ, auto-scaled, load-balanced environment without hiring a dedicated infrastructure engineer in the first year — then migrate to ECS/EKS only once service count and organizational complexity justify the switch.

Batch and Report Generation Pipelines

Companies with periodic, bursty background workloads (nightly report generation, bulk email sends) commonly use Elastic Beanstalk’s worker tier paired with SQS specifically to get automatic queue-depth-based scaling without building custom autoscaling logic from scratch.

Enterprise Internal Tools

Large enterprises frequently standardize internal, lower-traffic line-of-business applications on Elastic Beanstalk because the deployment safety net (Immutable deployments, rollback via application versions) reduces the operational burden on small internal tooling teams supporting many small applications.

“The services that thrive on Elastic Beanstalk are rarely the ones pushing its scaling limits — they’re the ones that never wanted to think about scaling limits in the first place.”

13Frequently Asked Questions

Q1Does Elastic Beanstalk charge extra on top of the underlying resources it creates?
No — Elastic Beanstalk itself carries no additional service fee. You pay only for the underlying EC2 instances, load balancer, RDS instance if used, and any other resources the generated CloudFormation stack provisions.
Q2Can I attach an existing RDS instance instead of letting Elastic Beanstalk manage the database?
Yes, and for production workloads this is strongly preferred — a database created inside the environment’s own CloudFormation stack is tied to that environment’s lifecycle and can be accidentally deleted along with it, whereas a decoupled, externally managed RDS instance survives independently.
Q3What actually happens during a rollback?
Elastic Beanstalk re-deploys a previously stored, immutable application version from S3 using the environment’s currently configured deployment policy — it is functionally a normal deployment pointed at an older artifact, not a special “undo” mechanism.
Q4Why does my environment health show “Warning” even though the application seems to work?
Enhanced Health Reporting flags conditions beyond simple availability — elevated latency percentiles, rising 5xx rates, or CPU pressure — any of which can trigger a Warning state well before the application becomes fully unavailable to users.
Q5Is Elastic Beanstalk suitable for containerized workloads?
Yes, via the Docker platform, which can run a single container or a multi-container definition on each instance — though teams with extensive container orchestration needs (service discovery, complex networking between many containers) typically outgrow this into ECS or EKS.

14Summary and Key Takeaways

Key Takeaways

  • Elastic Beanstalk is an orchestration layer, not a runtime — it generates and supervises a CloudFormation stack of real, independently inspectable AWS resources.
  • Choose deployment policy deliberately — All at once trades safety for speed; Immutable and Traffic Splitting trade a temporary capacity/cost increase for near-zero blast radius on failure.
  • Two IAM roles exist for a reason — the service role manages infrastructure, the instance profile scopes what your running application can access; never conflate the two.
  • Enhanced Health Reporting sees more than a load balancer health check — latency, error rate, and CPU signals catch degraded-but-technically-alive instances early.
  • `.ebextensions` and platform hooks are powerful but shared-ownership risky — never duplicate control of a setting Elastic Beanstalk’s native configuration already owns.
  • Separate web and worker tiers whenever asynchronous work exists, so each scales on the metric that genuinely reflects its load.
  • The platform’s real ceiling is organizational, not technical — it fits teams that want managed infrastructure velocity, and is deliberately outgrown by teams whose service topology has become complex enough to need bespoke orchestration.