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
LINE Developers Taiwan
PRO
July 17, 2024
Technology
87
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
Building applications in the Gemini API family.
line_developers_tw
PRO
0
2.1k
20260514 - build with ai 2026 - build LINE Bot with Gemini CLI
line_developers_tw
PRO
0
500
2026.04.09_台灣客服協會_從資料重新理解客服_ Charlie Wang
line_developers_tw
PRO
0
53
Zona 台北大學 GDG 分享
line_developers_tw
PRO
0
81k
台大資料分析與決策社 機器學習的商業應用_Rei
line_developers_tw
PRO
0
38
政大數據分析社 機器學習的商業應用_Rei
line_developers_tw
PRO
0
67
Gemini 2025 新功能回顧 LINE Bot 完美結合
line_developers_tw
PRO
0
660
NTUAI企業參訪
line_developers_tw
PRO
0
26k
Data TECH FRESH企業參訪- Amber
line_developers_tw
PRO
0
56k
Other Decks in Technology
See All in Technology
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
1.8k
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
190
Dario Amodi『Policy on the AI Exponential』を理解する
nagatsu
0
200
Databricks 月刊サービスアップデート 2026年05月号
tyosi1212
0
210
もりもり新機能を一挙紹介! AgentCoreに入門して、AWS上にAIエージェントを構築しよう
minorun365
PRO
6
850
会社紹介資料 / Sansan Company Profile
sansan33
PRO
18
420k
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.2k
Microsoft Build Keynoteふりかえり
tomokusaba
0
110
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
0
360
Claude Code×Terraform IaC テンプレート駆動開発
itouhi
1
430
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
270
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
0
8.6k
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
400
First, design no harm
axbom
PRO
2
1.2k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
160
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
150
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
210
Building an army of robots
kneath
306
46k
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