aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--_articles/2020-10-12-feature-flags-differences-between-backend-frontent-and-mobile.md (renamed from _articles/2020-10-10-feature-flags-differences-between-backend-frontent-and-mobile.md)4
-rw-r--r--_slides/2020-10-09-rollout-feature-flag-experiment-operational-toggle.slides (renamed from _slides/2020-10-10-rollout-feature-flag-experiment-operational-toggle.slides)39
-rwxr-xr-xscripts/assert-content.sh10
-rwxr-xr-xscripts/assert-spelling.sh2
-rw-r--r--scripts/spelling/en.txt5
-rw-r--r--scripts/spelling/international.txt20
6 files changed, 54 insertions, 26 deletions
diff --git a/_articles/2020-10-10-feature-flags-differences-between-backend-frontent-and-mobile.md b/_articles/2020-10-12-feature-flags-differences-between-backend-frontent-and-mobile.md
index b655bfd..00d56f0 100644
--- a/_articles/2020-10-10-feature-flags-differences-between-backend-frontent-and-mobile.md
+++ b/_articles/2020-10-12-feature-flags-differences-between-backend-frontent-and-mobile.md
@@ -1,6 +1,6 @@
---
title: "Feature flags: differences between backend, frontend and mobile"
-date: 2020-10-10
+date: 2020-10-12
layout: post
lang: en
ref: feature-flags-differences-between-backend-frontent-and-mobile
@@ -8,7 +8,7 @@ category: presentation
published: false
---
-*This article is derived from a [presentation]({% link _slides/2020-10-10-rollout-feature-flag-experiment-operational-toggle.slides %}).*
+*This article is derived from a [presentation]({% link _slides/2020-10-09-rollout-feature-flag-experiment-operational-toggle.slides %}).*
When talking about [feature flags][feature-flags-article], I find that their
costs and benefits weight differently when talking about backend, frontend and
diff --git a/_slides/2020-10-10-rollout-feature-flag-experiment-operational-toggle.slides b/_slides/2020-10-09-rollout-feature-flag-experiment-operational-toggle.slides
index cb374f4..7c78150 100644
--- a/_slides/2020-10-10-rollout-feature-flag-experiment-operational-toggle.slides
+++ b/_slides/2020-10-09-rollout-feature-flag-experiment-operational-toggle.slides
@@ -1,6 +1,6 @@
---
title: Rollout, feature flag, experiment, operational toggle
-date: 2020-10-10
+date: 2020-10-09
layout: slides
lang: en
ref: rollout-feature-flag-experiment-operational-toggle
@@ -104,6 +104,8 @@ Relevant as long as the new code is being developed
Lives for as long as the code is in production.
+It feels like a system-level circuit breaker.
+
---
We now know about the types
@@ -114,28 +116,28 @@ We now know about the types
# backend
-1. **rollout**: k8s, blue/green, canary pipeline and `common-rollout`
+1. **rollout**: k8s blue/green, canary and `common-rollout`
2. **feature flag**: `common-rollout` and datasets
-3. **operational toggle**: `common-rollout`
-4. **experiment**: `common-xp`
+3. **experiment**: `common-xp`
+4. **operational toggle**: `common-rollout`
???
-rollout: k8s, common-rollout
-
This is a bit why common-rollout isn't called *common-feature-flag*: it was
-initially designed with backend usage of *rollouts* in mind.
+initially designed with backend usage of mostly *rollouts* in mind, and just a
+bit *feature flags*.
-feature flag:
+Avoid using configuration for doing operational toggles: it is less dynamic, so
+it defeats the purpose.
---
# frontend
1. **rollout**: CDN and page refreshes
-2. **feature flag**: percentages and maybe IPs (no `:customer/id` on [www.nubank.com.br](www.nubank.com.br))
-3. **operational toggle**: via dynamic backend control
-4. **experiment**: via dynamic backend control
+2. **feature flag**: percentages and maybe IPs (no `:customer/id` on the website)
+3. **experiment**: via dynamic backend control
+4. **operational toggle**: via dynamic backend control
---
@@ -143,8 +145,8 @@ feature flag:
1. **rollout**: app stores
2. **feature flag**: via dynamic backend control
-3. **operational toggle**: via dynamic backend control
-4. **experiment**: via dynamic backend control
+3. **experiment**: via dynamic backend control
+4. **operational toggle**: via dynamic backend control
---
@@ -193,13 +195,14 @@ But it is easy to fallback to "reload the page and try again".
# Costs
- more complex code
-- nested flags combine exponentially
+- compatibility with old app versions
+- nesting is exponential
---
# Benefits
-- dynamically choose code paths for each customer
+- dynamicity
---
@@ -293,7 +296,7 @@ Use `:app-version` with `:min-version` instead
# ***Always*** rely on a feature flag on the app
-Hotfixes and expedited releases is a thing of the past
+Hot fixes and expedited releases is a thing of the past
???
@@ -314,8 +317,8 @@ You should ask yourself:
References:
-1. these slides: https://euandre.org/slides.html
-2. [prose version of this presentation]({% link _articles/2020-10-10-feature-flags-differences-between-backend-frontent-and-mobile.md %})
+1. these slides: [euandre.org/slides.html]({% link slides.md %})
+2. [prose version of this presentation]({% link _articles/2020-10-12-feature-flags-differences-between-backend-frontent-and-mobile.md %})
3. ["Feature Toggles (aka Feature Flags)"](https://martinfowler.com/articles/feature-toggles.html),
by Pete Hodgson
4. [Continuous integration vs. continuous delivery vs. continuous deployment](https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment),
diff --git a/scripts/assert-content.sh b/scripts/assert-content.sh
index e694580..626353c 100755
--- a/scripts/assert-content.sh
+++ b/scripts/assert-content.sh
@@ -8,7 +8,7 @@ red() { echo -e "${red}${1}${end}"; }
## Constant definitions
-jekyll build
+jekyll build --future
JSON='_site/site.json'
LANGS=(en pt fr)
@@ -63,6 +63,7 @@ assert-frontmatter() {
F="$1"
DESIRED_LAYOUT="$2"
PREFIX="${3:-}"
+ EXTENSION="${4:-md}"
LANG="$(get-lang "$F")"
REF="$(get-ref "$F")"
URL="$(get-url "$F")"
@@ -90,11 +91,10 @@ assert-frontmatter() {
if [[ -n "${PREFIX}" ]]; then
DATE="$(get-date "$F" | awk '{print $1}')"
URL_BASENAME="$(basename "$(get-url "$F")")"
- FILE="${PREFIX}/${DATE}-${URL_BASENAME%.html}.md"
+ FILE="${PREFIX}/${DATE}-${URL_BASENAME%.html}.${EXTENSION}"
[[ -f "${FILE}" ]] || {
- red "date/filename mismatch: '${FILE}' does not exist. To fix, run:"
- echo " mv '${PREFIX}/${URL_BASENAME%.html}.md' '${FILE}'"
+ red "date/filename mismatch: '${FILE}' does not exist."
exit 1
}
fi
@@ -125,7 +125,7 @@ done
echo Linting slides... >&2
for slide in $(jq -r '.slides[] | @base64' "${JSON}"); do
- assert-frontmatter "$slide" 'post' '_slides'
+ assert-frontmatter "$slide" 'slides' '_slides' 'slides'
done
echo Asserting unique refs... >&2
diff --git a/scripts/assert-spelling.sh b/scripts/assert-spelling.sh
index e7bd3b8..edc56dd 100755
--- a/scripts/assert-spelling.sh
+++ b/scripts/assert-spelling.sh
@@ -15,7 +15,7 @@ done
OUT="$(mktemp)"
shopt -s globstar
-jekyll build
+jekyll build --future
for f in _site/**/*.html; do
if ! grep -E '^_site/vendor/' <(echo "$f") > /dev/null; then
l="$(head -n2 "$f" | tail -n1 | cut -d\" -f2)"
diff --git a/scripts/spelling/en.txt b/scripts/spelling/en.txt
index bebfc76..8a4f0d0 100644
--- a/scripts/spelling/en.txt
+++ b/scripts/spelling/en.txt
@@ -4,15 +4,19 @@ Slides
aren
autocommit
backend
+barcode
behaviour
+chargeback
couldn
cronjobs
curation
declaratively
decrypting
didn
+differentiator
doesn
duplications
+dynamicity
embeddable
filesystem
filesystems
@@ -36,4 +40,5 @@ tradeoffs
untrusted
ve
wasn
+whiteboarding
wouldn
diff --git a/scripts/spelling/international.txt b/scripts/spelling/international.txt
index 12126cc..b56072c 100644
--- a/scripts/spelling/international.txt
+++ b/scripts/spelling/international.txt
@@ -15,6 +15,7 @@ BSON
BY
BY-SA
Bitbucket
+CDN
CI
CLI
Cantrill
@@ -27,22 +28,27 @@ F
FFI
FTS
Fastmail
+Forsgren
GADTs
GPLv
GPLv3
GTK
GitLab
Gmail
+GoCD
GuixSD
HN
HTTPS
Halloway
Haskell
+Hodgson
+IPs
IndexedDB
JS
JSON
Joyent
L1
+LTS
LaTeX
Lerna
LilyPond
@@ -56,6 +62,7 @@ Nextcloud
NixOS
POSIX
Pastebin
+Pittet
PouchDB
README
RPN
@@ -68,6 +75,7 @@ Sourcehut
Spacemacs
StackOverflow
Staltz
+Sten
TAB
TBs
TOML
@@ -79,7 +87,9 @@ WebAssembly
Yandex
YouTube
Zig
+apk
boneco
+br
brainer
buildGoModule
cargo2nix
@@ -93,9 +103,11 @@ datoms
dl
edn
en
+euandre
euandreh
eval
fr
+frontend
gcrypt
gt
guix
@@ -104,14 +116,17 @@ h1
h6
hinarioespirita
html
+https
i5
i7
ify
intbytes
+ios
ish
jekyll
jemoji
js
+k8s
kramdown
libre
lockfile
@@ -130,6 +145,8 @@ pastebins
plaintext
progn
pt
+rollout
+rollouts
sbcl
songbooks
sourcehut
@@ -137,7 +154,10 @@ sr
swift2nix
systemd
touchpad
+txt
v8
+www
+xp
xyz
youtube
à