Feature development:
from feature flags to A/B
testing
Kateryna Trofimenko · Lead iOS developer
1
2
releas
14
iOS
49
countrie
About
2
10
QA
14
iOS
release
About
3
10
QA
2
releas
14
iOS
2
release
About
4
10
QA
2
releas
47
languag
14
iOS
49
countrie
2
release
327M
users
About
5
10
QA
2
releas
5+
applicatio
47
languag
14
iOS
49
countrie
2
release
327M
users
About
6
7
Feature service
8
9
Feature Service
Feature Object
Feature Object
Feature Object
10
Feature Service
Major feature
Remote dev feature
Feature Object
Feature Object
Feature Object
11
Feature Service
Major feature
Remote dev feature
Dev feature
Feature Object
Feature Object
Feature Object
Feature object
class BPFFeature : NSObject, NSCoding {
let key: String
var title: String?
var group: String?
let isOnByDefault: Bool
func isOn() -> Bool { ... }
func toggle() { ... }
}
12
Feature service in debug
13
Feature service
Server
14
Feature service
Server
15
Feature service
Server
16
Feature service
Server
✦ Platform type
17
Feature service
Server
✦ Platform type
✦ Product type …
18
Feature service
Server
✦ Platform type
✦ Product type …
✦ Product requirements
19
Feature service
Server
✦ Platform type
✦ Product type …
✦ Product requirements
✦ Client version
20
Protocol evolution
Change of the data format for existing feature
21
22
23
Minor feature
✦ Informs server that client supports certain data format
24
Minor feature
✦ Informs server that client supports certain data format
✦ Removes client version dependency on the server
✦ Easy to QA old and new version of the client
25
Chat redesign
26
Chatto
27
https://github.com/badoo/Chatto
28
Git flow
dev
feature_1
release_1
integration_1
feature_2
master
integration_2
Release branch
Pending release
On Live
In Progress
In Review
In QA
In dev
In integration
In master
autodeveloper qa time
2-3 days
1 week
Dev Feature
… and chat redesign
29
Dev feature
final class ChattoFeature: NSObject, BPFFeatureSource {
class func feature() -> BPFFeature {
let feature = BPFFeature(title: "Chat V2",
group: "Chat",
key: self.featureKey())
feature.isOnByDefault = false
return feature
}
class func featureKey() -> String {
return "com.badoo.chat.chatto"
}
class var enabled: Bool {
return BPFGlobals.shared().features().isFeatureEnabled(featureKey:
self.featureKey())
}
}
30
Dev feature
- (void)configureFeatures {
id<BPFFeaturesService> featureService = [self features];
[featureService loadFeatures:[self classBasedFeatures] withRuntimeSearch:NO];
}
- (NSArray *)classBasedFeatures {
NSArray *classes = @[ ...., [ChattoFeature class],....];
NSMutableArray *classBasedFeatures = [NSMutableArray array];
for (Class class in classes) {
NSAssert([class conformsToProtocol:@protocol(BPFFeatureSource)], @"Class %@
should conform to BPFFeatureSource protocol", NSStringFromClass(class));
BPFFeature *feature = [(id<BPFFeatureSource>)class feature];
[classBasedFeatures addObject:feature];
}
return [classBasedFeatures copy];
}
31
32
Remote dev feature
… and gradual release
33
Remote dev feature
34
Remote dev feature
35
Remote dev feature
36
A/B testing
Topic Description
37
A/B testing
38
A/B testing
39
A/B testing
40
Overview
41
✦ Major feature
Overview
42
✦ Major feature
✦ Minor feature
Overview
43
✦ Major feature
✦ Minor feature
✦ Development feature
Overview
44
✦ Major feature
✦ Minor feature
✦ Development feature
✦ Remote Development feature
Overview
45
✦ Major feature
✦ Minor feature
✦ Development feature
✦ Remote Development feature
✦ A/B testing
Overview
46
kateryna.trofimenko@corp.badoo.com
https://www.linkedin.com/in/ekaterina-trofimenko-b7515128
Thank you!
47

More Related Content

PDF
Cocoaheads Meetup / Alex Zimin / Swift magic
PDF
Java8 stream
PDF
Kotlin Bytecode Generation and Runtime Performance
PDF
The Ring programming language version 1.8 book - Part 86 of 202
PDF
The Ring programming language version 1.8 book - Part 39 of 202
PPTX
Mca 2nd sem u-4 operator overloading
PPTX
Operator Overloading & Type Conversions
PDF
Monads in Swift
Cocoaheads Meetup / Alex Zimin / Swift magic
Java8 stream
Kotlin Bytecode Generation and Runtime Performance
The Ring programming language version 1.8 book - Part 86 of 202
The Ring programming language version 1.8 book - Part 39 of 202
Mca 2nd sem u-4 operator overloading
Operator Overloading & Type Conversions
Monads in Swift

What's hot (20)

PDF
All Aboard The Scala-to-PureScript Express!
PPTX
operator overloading
PDF
Kotlin, why?
PDF
Building a Tagless Final DSL for WebGL
PDF
Comparing JVM languages
PDF
The Ring programming language version 1.2 book - Part 21 of 84
PDF
Planet-HTML5-Game-Engine Javascript Performance Enhancement
PPT
The Kotlin Programming Language
PPTX
Bca 2nd sem u-4 operator overloading
PDF
Functional Programming Patterns for the Pragmatic Programmer
PDF
Kotlin: Why Do You Care?
PDF
Introduction to functional programming using Ocaml
PDF
Kotlin in action
PDF
Kotlin Slides from Devoxx 2011
PPTX
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
PDF
The Ring programming language version 1.5.1 book - Part 32 of 180
DOCX
Java practical
PPT
20100712-OTcl Command -- Getting Started
PDF
Advanced functional programing in Swift
PDF
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
All Aboard The Scala-to-PureScript Express!
operator overloading
Kotlin, why?
Building a Tagless Final DSL for WebGL
Comparing JVM languages
The Ring programming language version 1.2 book - Part 21 of 84
Planet-HTML5-Game-Engine Javascript Performance Enhancement
The Kotlin Programming Language
Bca 2nd sem u-4 operator overloading
Functional Programming Patterns for the Pragmatic Programmer
Kotlin: Why Do You Care?
Introduction to functional programming using Ocaml
Kotlin in action
Kotlin Slides from Devoxx 2011
#OOP_D_ITS - 5th - C++ Oop Operator Overloading
The Ring programming language version 1.5.1 book - Part 32 of 180
Java practical
20100712-OTcl Command -- Getting Started
Advanced functional programing in Swift
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Ad

Similar to Cocoaheads Meetup / Kateryna Trofimenko / Feature development (20)

PDF
From Java to Kotlin - The first month in practice
PPTX
Kotlin / Android Update
PDF
Introduction to Tekton
PDF
Save time with kotlin in android development
PDF
Practical tips for building apps with kotlin
PDF
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
PDF
Kotlin Developer Starter in Android projects
PDF
Koin Quickstart
PDF
Kandroid for nhn_deview_20131013_v5_final
PPTX
Java script Techniques Part I
PPTX
PDF
Cloud Native Serverless Java — Orkhan Gasimov
PDF
How to create an Angular builder
PDF
Service Oriented Architecture in Magento 2
ODP
Drools & jBPM future roadmap talk
PDF
purely_functional_play_framework_application
PDF
The Ring programming language version 1.4 book - Part 3 of 30
PDF
Gitlab and Lingvokot
PDF
The Possibilities and Pitfalls of Writing Your Own State Stores with Daan Gertis
PDF
Android and cpp
From Java to Kotlin - The first month in practice
Kotlin / Android Update
Introduction to Tekton
Save time with kotlin in android development
Practical tips for building apps with kotlin
Kotlin Developer Starter in Android - STX Next Lightning Talks - Feb 12, 2016
Kotlin Developer Starter in Android projects
Koin Quickstart
Kandroid for nhn_deview_20131013_v5_final
Java script Techniques Part I
Cloud Native Serverless Java — Orkhan Gasimov
How to create an Angular builder
Service Oriented Architecture in Magento 2
Drools & jBPM future roadmap talk
purely_functional_play_framework_application
The Ring programming language version 1.4 book - Part 3 of 30
Gitlab and Lingvokot
The Possibilities and Pitfalls of Writing Your Own State Stores with Daan Gertis
Android and cpp
Ad

More from Badoo Development (20)

PDF
Viktar Karanevich – iOS Parallel Automation
PDF
Как мы делаем модули PHP в Badoo – Антон Довгаль
PDF
Григорий Джанелидзе, OK.RU
PPTX
Андрей Сидоров, Яндекс.Браузер
PDF
Филипп Уваров, Avito
PDF
Alex Krasheninnikov – Hadoop High Availability
PDF
Андрей Денисов – В ожидании мониторинга баз данных
PDF
Александр Зобнин, Grafana Labs
PDF
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
PPTX
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
PDF
TechLeads meetup: Алексей Рыбак, Badoo
PPTX
TechLeads meetup: Евгений Потапов, ITSumma
PDF
TechLeads meetup: Макс Лапшин, Erlyvideo
PDF
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
PPTX
Как мы готовим MySQL
PPTX
Архитектура хранения и отдачи фотографий в Badoo
PDF
5 способов деплоя PHP-кода в условиях хайлоада
PDF
ChromeDriver Jailbreak
PDF
Git хуки на страже качества кода
PDF
Versioning strategy for a complex internal API
Viktar Karanevich – iOS Parallel Automation
Как мы делаем модули PHP в Badoo – Антон Довгаль
Григорий Джанелидзе, OK.RU
Андрей Сидоров, Яндекс.Браузер
Филипп Уваров, Avito
Alex Krasheninnikov – Hadoop High Availability
Андрей Денисов – В ожидании мониторинга баз данных
Александр Зобнин, Grafana Labs
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Макс Лапшин, Erlyvideo
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Как мы готовим MySQL
Архитектура хранения и отдачи фотографий в Badoo
5 способов деплоя PHP-кода в условиях хайлоада
ChromeDriver Jailbreak
Git хуки на страже качества кода
Versioning strategy for a complex internal API

Recently uploaded (20)

PPTX
1402_iCSC_-_RESTful_Web_APIs_--_Josef_Hammer.pptx
PDF
The Evolution of Traditional to New Media .pdf
PPTX
10.2981-wlb.2004.021Figurewlb3bf00068fig0001.pptx
PPSX
AI AppSec Threats and Defenses 20250822.ppsx
PDF
Session 1 (Week 1)fghjmgfdsfgthyjkhfdsadfghjkhgfdsa
PPTX
Reading as a good Form of Recreation
PDF
Alethe Consulting Corporate Profile and Solution Aproach
PDF
The_Decisive_Battle_of_Yarmuk,battle of yarmuk
PDF
Computer Networking, Internet, Casting in Network
PPTX
Partner to Customer - Sales Presentation_V23.01.pptx
PPTX
Cyber Hygine IN organizations in MSME or
PDF
Slides: PDF The World Game (s) Eco Economic Epochs.pdf
PDF
mera desh ae watn.(a source of motivation and patriotism to the youth of the ...
PPTX
AI_Cyberattack_Solutions AI AI AI AI .pptx
PPTX
MY PRESENTATION66666666666666666666.pptx
PPTX
在线订购名古屋艺术大学毕业证, buy NUA diploma学历认证失败怎么办
PPTX
IPCNA VIRTUAL CLASSES INTERMEDIATE 6 PROJECT.pptx
PDF
Virtual Guard Technology Provider_ Remote Security Service Solutions.pdf
PPT
12 Things That Make People Trust a Website Instantly
PDF
Course Overview and Agenda cloud security
1402_iCSC_-_RESTful_Web_APIs_--_Josef_Hammer.pptx
The Evolution of Traditional to New Media .pdf
10.2981-wlb.2004.021Figurewlb3bf00068fig0001.pptx
AI AppSec Threats and Defenses 20250822.ppsx
Session 1 (Week 1)fghjmgfdsfgthyjkhfdsadfghjkhgfdsa
Reading as a good Form of Recreation
Alethe Consulting Corporate Profile and Solution Aproach
The_Decisive_Battle_of_Yarmuk,battle of yarmuk
Computer Networking, Internet, Casting in Network
Partner to Customer - Sales Presentation_V23.01.pptx
Cyber Hygine IN organizations in MSME or
Slides: PDF The World Game (s) Eco Economic Epochs.pdf
mera desh ae watn.(a source of motivation and patriotism to the youth of the ...
AI_Cyberattack_Solutions AI AI AI AI .pptx
MY PRESENTATION66666666666666666666.pptx
在线订购名古屋艺术大学毕业证, buy NUA diploma学历认证失败怎么办
IPCNA VIRTUAL CLASSES INTERMEDIATE 6 PROJECT.pptx
Virtual Guard Technology Provider_ Remote Security Service Solutions.pdf
12 Things That Make People Trust a Website Instantly
Course Overview and Agenda cloud security

Cocoaheads Meetup / Kateryna Trofimenko / Feature development