Not long ago, the conversation around AWS API architecture was short. Most teams picked whatever language they knew, dropped it behind API Gateway, and moved on. The choices were forgiving enough that you could get away with not thinking too hard about them.
That window has mostly closed.
The difference between a runtime that suits your workload and one that doesn't shows up in real ways now: latency under load, infrastructure costs at scale, how long it takes your team to ship changes a year after the initial build. Getting these decisions roughly right at the start saves a lot of pain later.
Runtime choice matters more than people expect
The three runtimes that come up most in 2026 for AWS API work are Node.js with NestJS, Python with FastAPI, and Go.
NestJS works well for teams that are already deep in TypeScript and want a framework that enforces structure across a larger codebase. The framework overhead is real and cold starts on Lambda are heavier than lighter options, but for organizations where consistency across a big engineering team matters, the tradeoff often makes sense.
FastAPI has gotten genuinely strong for Python teams, especially if the API is doing anything adjacent to data processing or AI integration. The performance for async I/O workloads is solid, Pydantic validation cuts down on boilerplate significantly, and Lambda SnapStart has improved the cold start situation enough that running FastAPI serverless is now a real option rather than a workaround.
Go is fast. Cold starts are short, memory footprint is small, throughput is high. For teams already writing Go, it performs well on both Lambda and Fargate and has a real edge in latency-sensitive workloads. The catch is that it's not worth picking Go for the benchmark numbers alone. If your team doesn't already know it, the ramp-up cost eats whatever performance advantage you were chasing.
The honest answer is that the right runtime is the one your team can build and maintain confidently, within the performance constraints your API actually has. Most teams get into trouble by optimizing for the wrong variable.
Lambda vs Fargate: depends on your traffic
Lambda's serverless model is genuinely simple to operate. You deploy code, AWS handles the rest, and you pay per invocation. For APIs with unpredictable or spiky traffic, this usually works out well economically.
The problem shows up when traffic is steady and high-volume. At that point, per-invocation pricing starts looking expensive compared to a Fargate setup running containers at a fixed cost. Lambda also has execution time limits that matter for some workloads. If your API needs to do anything long-running, Lambda forces you into workarounds that Fargate handles naturally.
Fargate adds operational overhead that Lambda doesn't have. You're managing containers, task definitions, cluster resources. For teams that already work in Docker, this feels normal. For teams that don't, it's a meaningful addition to the cognitive load of a new project.
SnapStart has narrowed the gap between the two for Python and supported runtimes by reducing cold start latency, which was the main Lambda weakness. But it doesn't eliminate the cost model difference at high sustained load.
API Gateway config that's easy to skip and annoying to fix later
Authentication and rate limiting at the gateway level are worth getting right in the initial build. Doing auth inside each service instead of at the gateway means duplicating that logic across everything. Rate limiting configured after an incident is always less thoughtful than rate limiting designed upfront.
Same goes for observability. X-Ray tracing and structured logging cost little to set up initially and save a lot of time the first time something behaves unexpectedly in production.
The detailed runtime comparisons, SnapStart configuration specifics, infrastructure-as-code patterns, and the specific scenarios where each option pulls ahead are covered in depth in this guide to architecting custom APIs on AWS from bitcot. Worth reading before the architecture gets locked in rather than after.













