Federation is the only thing that made GraphQL viable for me at scale. Here's the honest breakdown of what worked, what didn't, and where I still reach for plain HTTP.
I have a complicated relationship with GraphQL. I've watched it accelerate teams to delivery and I've watched it become a black hole of N+1 queries. The deciding factor — every single time — was whether the org was willing to invest in the schema as a first-class artifact.
Where federation actually shines
- Multiple teams owning slices of a domain that compose into one product surface.
- Frontends that stitch heterogeneous data with low patience for waterfalls.
- Schema-driven codegen across web, mobile, and BFFs.
Where I still pick REST
Internal service-to-service calls with simple shapes. File uploads. Streaming endpoints. Anywhere the operational surface area of a federated graph is more cost than the schema is value.
graphql# subgraph A — owns the user type User @key(fields: "id") { id: ID! name: String! } # subgraph B — extends with billing extend type User @key(fields: "id") { id: ID! @external plan: Plan! }