Upload
badoo-development
View
5.951
Download
1
Embed Size (px)
Citation preview
Feature development: from feature flags to A/B
testing
Kateryna Trofimenko · Lead iOS developer1
2releas
14iOS
49countrie
About
2
10QA
14iOS
release
About
3
10QA
2releas
14iOS
2release
About
4
10QA
2releas 47
languag
14iOS
49countrie
2release
327Musers
About
5
10QA
2releas
5+applicatio
47languag
14iOS
49countrie
2release
327Musers
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 objectclass 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
28
Git flow
dev
feature_1
release_1
integration_1
feature_2
masterintegration_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 featurefinal 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 testingTopic 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
https://www.linkedin.com/in/ekaterina-trofimenko-b7515128
Thank you!
47