Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
0
75
The Magic of Feature Toggles:
Speaker: Aki Wang, Noah Hsu
Event: iThome DevOps Day 2024
LINE Developers Taiwan
PRO
July 17, 2024
Tweet
Share
More Decks by LINE Developers Taiwan
See All by LINE Developers Taiwan
Data Team 實習分享
line_developers_tw
PRO
0
2.1k
Backend Intern之旅
line_developers_tw
PRO
0
4.7k
清大企業參訪- Ben
line_developers_tw
PRO
0
1.2k
LLM 商品規格萃取大冒險- Vila
line_developers_tw
PRO
0
1.2k
Playwright/MCP/AI -Winter
line_developers_tw
PRO
0
1.2k
LINE EC Product Catalog Development- Rei
line_developers_tw
PRO
0
1.2k
LINE 與 AI 機器人技術應用現況
line_developers_tw
PRO
0
16
QA Testing
line_developers_tw
PRO
0
270
jcconf_datadev_prod
line_developers_tw
PRO
0
15
Other Decks in Technology
See All in Technology
AI時代の開発フローとともに気を付けたいこと
kkamegawa
0
2.1k
ブロックテーマとこれからの WordPress サイト制作 / Toyama WordPress Meetup Vol.81
torounit
0
390
Playwrightのソースコードに見る、自動テストを自動で書く技術
yusukeiwaki
13
4.8k
手動から自動へ、そしてその先へ
moritamasami
0
280
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
200
意外とあった SQL Server 関連アップデート + Database Savings Plans
stknohg
PRO
0
290
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
260
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
250
21st ACRi Webinar - Univ of Tokyo Presentation Slide (Ayumi Ohno)
nao_sumikawa
0
120
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
3
400
著者と読み解くAIエージェント現場導入の勘所 Lancers TechBook#2
smiyawaki0820
12
5.9k
技術以外の世界に『越境』しエンジニアとして進化を遂げる 〜Kotlinへの愛とDevHRとしての挑戦を添えて〜
subroh0508
1
380
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.4k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Context Engineering - Making Every Token Count
addyosmani
9
490
How STYLIGHT went responsive
nonsquared
100
5.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Optimizing for Happiness
mojombo
379
70k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Building Adaptive Systems
keathley
44
2.9k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
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