I’ve used GraphQL, specifically Apollo Client and Server, for a couple of years in a real enterprise-grade application.

Not a toy app. Not a greenfield startup. A proper production setup with multiple teams, BFFs, downstream services, observability requirements, and real users.

GraphQL solves a real problem, but that problem is far more niche than people admit. In most enterprise setups, it’s already solved elsewhere, and when you add up the tradeoffs, GraphQL often ends up being a net negative.

So now your GraphQL layer still has to overfetch from downstream REST APIs, then reshape the response. You didn’t eliminate overfetching. You just moved it down a layer.

There is a case where GraphQL wins here. If multiple pages hit the same endpoint but need slightly different fields, GraphQL lets you scope those differences per query.

Yes, Apollo lets you customize this behavior. But that’s kind of the point. You’re constantly paying a tax in extra configuration, extra conventions, and extra mental overhead just to get back to something REST gives you out of the box.

If you have two queries where only one field differs, Apollo treats them as separate queries. You then have to manually wire things so:

Apollo expects every object to have an id or _id field by default, or you need to configure a custom identifier.

Embedding large payloads like PDFs directly in GraphQL responses leads to bloated responses and worse performance.

When you add everything up, GraphQL often ends up solving a narrow problem while introducing a broader set of new ones.

And after all that time, I’ve come to a pretty boring conclusion:

This isn’t a “GraphQL bad” post. It’s a “GraphQL after the honeymoon” post.

The main problem GraphQL tries to solve is overfetching.

Most enterprise frontend architectures already have a BFF (Backend for Frontend).

That alone significantly diminishes GraphQL’s main selling point.

That’s a very expensive trade for a few extra kilobytes.

GraphQL takes significantly longer to implement than a REST BFF.

GraphQL optimizes consumption at the cost of production speed.

In an enterprise environment, production speed matters more than theoretical elegance.

If you filter dashboards by 2XX, you know those requests succeeded.

With GraphQL, a 200 can still mean partial or full failure.

This matters when you’re on call, not when you’re reading blog posts.

Apollo’s normalized caching is genuinely impressive.

Meanwhile, REST happily overfetches a few extra fields, caches the whole response, and moves on.

That assumption does not hold in many enterprise APIs.

So now the BFF has to generate IDs locally just to satisfy the GraphQL client.

Which is ironic, considering the original goal was to reduce overfetching.

REST clients don’t impose this kind of constraint.

Most frontend and full-stack developers are far more experienced with REST than GraphQL.

That learning curve creates friction, especially when teams need to move fast.

That’s why, after using it in production for years, I’d say this:

Especially if your architecture already solved the problem it was designed for.

GraphQL isn’t bad.It’s just niche.And you probably don’t need it.

This is the xdefiance Online Web Shop.

A True Shop for You and Your Higher, Enlightnened Self…

Welcome to the xdefiance website, which is my cozy corner of the internet that is dedicated to all things homemade and found delightful to share with many others online and offline.

You can book with Jeffrey, who is the Founder of the xdefiance store, by following this link found here.

Visit the paid digital downloads products page to see what is all available for immediate purchase & download to your computer or cellphone by clicking this link here.

Find out more by reading the FAQ Page for any questions that you may have surrounding the website and online sop and get answers to common questions. Read the Returns & Exchanges Policy if you need to make a return on a recent order. You can check out the updated Privacy Policy for xdefiance.com here,

If you have any unanswered questions, please do not hesitate to contact a staff member during office business hours:

Monday-Friday 9am-5pm, Saturday 10am-5pm, Sun. Closed

You can reach someone from xdefiance.online directly at 1(419)-318-9089 via phone or text.

If you have a question, send an email to contact@xdefiance.com for a reply & response that will be given usually within 72 hours of receiving your message.

Browse the shop selection of products now!

Reaching Outwards