aboutsummaryrefslogblamecommitdiff
path: root/_slides/2020-10-22-graphql-for-bffs-navigating-the-trade-offs.slides
blob: ce79b0d5b0999c04e5d55edde13b9ee95365a051 (plain) (tree)



















































































































































































































                                                                                   
                                                                   


                                                                                                                                              
---
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