Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Magic of Feature Toggles:
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
LINE Developers Taiwan
PRO
July 17, 2024
Technology
91
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Magic of Feature Toggles:
Speaker: Aki Wang, Noah Hsu
Event: iThome DevOps Day 2024
LINE Developers Taiwan
PRO
July 17, 2024
More Decks by LINE Developers Taiwan
See All by LINE Developers Taiwan
Zona Codex Community Meetup 分享
line_developers_tw
PRO
0
1.2k
Evan & Zona COSCUP 2026 分享
line_developers_tw
PRO
0
170
台大資管營企業參訪-Bowen Chen
line_developers_tw
PRO
0
80
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
3.1k
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
3.1k
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
3.1k
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
3.1k
2026 TECHFRESH 畢業分享會 - 開發日常大解密!從領域驅動到企業級上線
line_developers_tw
PRO
0
3.1k
2026TECHFRESH畢業分享會 - Lightning Talk - E起 See See : 電商推薦讀心術? 數據說了算
line_developers_tw
PRO
0
3.1k
Other Decks in Technology
See All in Technology
AI駆動開発をチームに根付かせる - 「1行も書かない」チームがHarnessを育てた1年 -
kenichirokimura
6
3.5k
[RSJ26] Building a VLA Model Based on Self-Distilled Classification
keio_smilab
PRO
0
110
LLMアプリ、 雰囲気で運用してませんか? 〜LLMOpsの現在地〜
taka_aki
1
630
Cloudflare製品を活用した AIガバナンス実践入門 / AI governance with Cloudflare Service
delta_tech
1
160
Microsoft MVP プログラムを紹介するから目指す人増えてくれ
tsubakimoto_s
0
160
マイナンバーカード本人確認の実装比較(OAuth/OIDC Numa (Immersion) Workshop 2026) / 20260825 numa-12
oidfj
PRO
0
420
KAEN Company Deck
kaen
PRO
0
110
1000⼈規模のClaude Enterprise運⽤を「Oktaのグループ」と「Slack」に集約する
sansantech
PRO
1
550
「ミスを許さない手順書」を作ってみた 〜 個人的にはこれ以上できることはあまりなさそう/20260827-ssmjp-operation-procedure-update
opelab
17
17k
1.5時間を無駄にして学んだwsl2におけるaptとsnapの選択と仕組み
yosaka0123
0
480
AWSとAzureのマルチクラウド活用における強い味方___AWS_Kiroを使った二刀流スキル作成.pdf
duelist2020jp
1
160
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
77k
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
580
Optimizing for Happiness
mojombo
378
71k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
290
A designer walks into a library…
pauljervisheath
211
24k
Rails Girls Zürich Keynote
gr2m
96
14k
Bash Introduction
62gerente
615
220k
Practical Orchestrator
shlominoach
191
12k
Ethics towards AI in product and experience design
skipperchong
2
360
Embracing the Ebb and Flow
colly
88
5.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Darren the Foodie - Storyboard
khoart
PRO
3
3.8k
Transcript
None
The Magic of Feature Toggles
王天甫 (Aki Wang) 許子庭 (Noah Hsu)
Feature Toggle
Function A Function B
Function A Function B
None
@RestController public class LayoutController { @GetMapping("/layouts/order") public ResponseEntity<?> getLayoutOrder() {
return ResponseEntity.ok(buildLayoutOrder()); } private Map<?, ?> buildLayoutOrder() { throw new UnsupportedOperationException("Not implemented yet"); } }
@RestController public class LayoutController { @GetMapping("/layouts/order") public ResponseEntity<?> getLayoutOrder() {
boolean isLayoutOrderEnabled = false; if (isLayoutOrderEnabled) { return ResponseEntity.ok(buildLayoutOrder()); } else { return ResponseEntity.notFound().build(); } } private Map<?, ?> buildLayoutOrder() { throw new UnsupportedOperationException("Not implemented yet"); } }
BUY NOW BUY NOW V S
@RestController public class LayoutController { @GetMapping("/layouts/order") public ResponseEntity<?> getLayoutOrder() {
return ResponseEntity.ok(buildLayoutOrder()); } private Map<?, ?> buildLayoutOrder() { return Map.of("color", "blue", "radius", "8px", "pos", "page"); } }
@RestController public class LayoutController { @GetMapping("/layouts/order") public ResponseEntity<?> getLayoutOrder() {
return ResponseEntity.ok(buildLayoutOrder()); } private Map<?, ?> buildLayoutOrder() { return Map.of("color", "green", "radius", "0px", "pos", "bottomNav"); } }
@RestController public class LayoutController { @GetMapping("/layouts/order") public ResponseEntity<?> getLayoutOrder() {
String themeName = "themeB"; switch (themeName) { case "themeB": return ResponseEntity.ok(buildThemeBLayoutOrder()); default: return ResponseEntity.ok(buildThemeALayoutOrder()); } } private Map<?, ?> buildThemeALayoutOrder() { return Map.of("color", "blue", "radius", "8px", "pos", "page"); } private Map<?, ?> buildThemeBLayoutOrder() { return Map.of("color", "green", "radius", "0px", "pos", "bottomNav"); } }
Invisibility Speed Experimentation Safety Live Update
longevity dynamism Release Toggles Ops Toggles Permission Toggles Experiment Toggles
years months weeks days changes with a deployment changes with runtime re-configuration changes with each request from https://martinfowler.com/articles/feature-toggles.html
Feature Toggle is second best solution. The best solution is
to find a way to gradually integrate, without Feature Branches or Feature Toggles
Flagship4j
Standardizing Feature Flagging for Everyone
One SDK, any backend Supports your favorite tools Speaks your
language
One SDK, any backend OpenFeatureAPI api = OpenFeatureAPI.getInstance(); api.setProvider(new OpenFlagrProvider());
Client client = api.getClient(); Boolean isHelloWorldEnabled = client.getBooleanValue("hello-world-enabled", false); if (isHelloWorldEnabled) { System.out.println("Hello World"); }
Supports your favorite tools
Speaks your language
OpenFlagr Open source feature flagging, A/B testing, and dynamic configuration
microservice in Go.
None
None
USE CASES
ON On / Off 100%
ON Rollout 100%
Blue A / B Testing Green 50% 50%
Q & A
None