aboutsummaryrefslogtreecommitdiff
path: root/_slides
diff options
context:
space:
mode:
Diffstat (limited to '_slides')
-rw-r--r--_slides/2020-10-22-datomic-on-global-good-reasons-for-and-against-it.slides161
-rw-r--r--_slides/2020-10-22-graphql-for-bffs-navigating-the-trade-offs.slides216
2 files changed, 0 insertions, 377 deletions
diff --git a/_slides/2020-10-22-datomic-on-global-good-reasons-for-and-against-it.slides b/_slides/2020-10-22-datomic-on-global-good-reasons-for-and-against-it.slides
deleted file mode 100644
index 8f207c9..0000000
--- a/_slides/2020-10-22-datomic-on-global-good-reasons-for-and-against-it.slides
+++ /dev/null
@@ -1,161 +0,0 @@
----
-title: "Datomic on global: good reasons for and against it"
-date: 2020-10-22
-layout: slides
-lang: en
-ref: datomic-on-global-good-reasons-for-and-against-it
-published: false
----
-
-# Datomic on global
-
-**Good** reasons for and against it
-
----
-
-# Premise
-
-Datomic's bottleneck is **write** throughput, not read
-
----
-
-When creating a new service...
-
----
-
-```clojure
-(defn database-for-service
- [service]
- (let [prototype (prototype-for-service service)]
- (if (= :global prototype)
- :datomic
- #{:dynamodb :redis :nothing})))
-```
-
----
-
-...which is, in my opinion, a poor heuristic.
-
----
-
-The deciding factor shouldn't be the prototype, but the **cardinality**
-
----
-
-```diff
- (defn database-for-service
- [service]
-- (let [prototype (prototype-for-service service)]
-- (if (= :global prototype)
-- :datomic
-- #{:dynamodb :redis :nothing})))
-+ (let [cardinality (cardinality-for-service service)]
-+ (if (= :too-high cardinality)
-+ #{:dynamodb :redis :nothing
-+ :datomic))))
-```
-
----
-
-```clojue
-(defn database-for-service
- [service]
- (let [cardinality (cardinality-for-service service)]
- (if (= :too-high cardinality)
- #{:dynamodb :redis :nothing
- :datomic))))
-```
-
----
-
-But how to determine when the cardinality is
-
-**`:too-high`**?
-
----
-
-Let's think about the cardinality of existing services we know
-
----
-
-What is the cardinality of...
-
----
-
-# savings-accounts
-
----
-
-# inductor
-
----
-
-# crebito
-
----
-
-# diablo
-
----
-
-# lost-boy?
-
----
-
-# hook?
-
----
-
-# ledger
-
----
-
-# blackleach
-
----
-
-# notification
-
----
-
-# toasty
-
----
-
-# auth
-
----
-
-# waypoint
-
----
-
-# jurassic-park
-
----
-
-Compare the database choice of services with similar cardinalities:
-
-## notifications vs toasty
-
----
-
-Compare different cardinalities for services on global prototype:
-
-## jurassic-park vs auth
-
----
-
-Compare different cardinality for different services inside the same domain:
-
-## savings-accounts -> blackleach -> diablo -> ledger
-
----
-
-## Thank you!
-
-References:
-
-1. these slides: [{{ site.tld }}/slides.html]({% link slides.md %})
-2. [prose version of this presentation]({% link _articles/2020-10-22-datomic-on-global-good-reasons-for-and-against-it.md %})
-3. "[Understanding Database Sharding](https://www.digitalocean.com/community/tutorials/understanding-database-sharding)"
diff --git a/_slides/2020-10-22-graphql-for-bffs-navigating-the-trade-offs.slides b/_slides/2020-10-22-graphql-for-bffs-navigating-the-trade-offs.slides
deleted file mode 100644
index ce79b0d..0000000
--- a/_slides/2020-10-22-graphql-for-bffs-navigating-the-trade-offs.slides
+++ /dev/null
@@ -1,216 +0,0 @@
----
-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