---
title: "GraphQL for BFFs: navigating the trade-offs"
date: 2020-10-22
layout: slides
lang: en
ref: graphql-for-bffs-navigating-the-trade-offs
published: false
---
# GraphQL for BFFs
Navigating the trade-offs
???
1. slides já estão online, com sugestões incorporadas
2. artigo online
3. tupy: começar pelos slides é mais fácil
---
# Mobile is **hard**
---
## Immature ecosystem
???
Compared to desktop, browser and server ecosystem, which are many years older.
iOS SDK released on 2008, which is:
- the same year Python 3.0 was released;
- 1 year after Clojure's release and 13 years after Java's and JavaScript's
release;
- 10 years after GTK release
---
## Almost no competition
???
Effectively a duopoly, better than a monopoly, but meh.
Closed, walled gardens.
Less competition, lower quality.
Compare to: browser ecosystem, desktop ecosystem
---
## Little to no control over the environment
???
Bad on Android, worse on iOS.
---
## Our usage of GraphQL
History goes here
???
savings: React Native, GraphQL, TypeScript, stormshield
---
# Proposal
Adopt GraphQL as the default for BFFs
---
## Target
**data fetching** and **chaining**
???
It is not about:
- over fetching
- different clients with different data requirements
---
## Goal
Move **complexity** out of mobile to the backend, get more **dynamicity** out of it
???
The complexity doesn't vanish or shrink, it just shifts.
https://media.tenor.com/images/ce1962c14da22c969e664560e098b2bc/tenor.gif
---
# Alternatives
AKA, why not "just use a RESTful BFF"?
---
## REST
???
It doesn't address JOINs
---
## Fulcro
???
For 10 reasons for using GraphQL, 8~9 are shared for Fulcro.
The other 1~2 aren't so relevant:
- data > syntax: already false for Swift, Kotlin, Dart
- attributes > aggregates: already false for Swift, Kotlin, Dart
---
## Falcor
---
## SOAP
---
# Implications
---
## Invalid arguments
---
### "GraphQL isn't RESTful"
🤷
???
Similar to saying "REST isn't GraphQL"
---
### "GraphQL has a bad caching story"
True, but we don't do HTTP caching
---
### "query-params can be used for selection in a BFF with REST"
👎
???
This isn't RESTful, and is an *ad-hoc* querying format
---
### "over-fetching isn't a problem"
???
That is not the main reason for GraphQL
---
### "library X for GraphQL is bad"
---
## Valid arguments
---
### "Throttling by query complexity is hard"
---
## Lessons learned
---
### Error handling
---
# Takeaways
---
## None of the points are specific to Flutter
---
## GraphQL enables declarative **dynamicity**
---
## Thank you!
References:
1. these slides: [{{ site.tld }}/slides.html]({% link slides.md %})
2. [prose version of this presentation]({% link _articles/2020-10-22-graphql-for-bffs-navigating-the-trade-offs.md %})
3. "[Clients in control: building demand-driven systems with Om Next](https://www.youtube.com/watch?v=Zb18iPjDgwM)", by António Nuno Monteiro
4. "[Om Next](https://www.youtube.com/watch?v=MDZpSIngwm4)", by David Nolen