Customer’s Choice is a AB-Test library for Android. Unlike the Amazon’s offer, you can use it in every productive application, configure it freely and it’s easily extensible. It is provided as an Open Source library that can be used within any Android project. The slides will be an introduction into the library and will present a Demo for showing the practical usage of Customer’s Choice.
2. About me
Hasan Hosgel
Twitter: @alosdev
Github: alosdev
Google+: Hasan Hosgel
Slideshare: hosgel
developer @ ImmobilienScout24
Page 2
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
3. Agile Scenario
The Product Owner defines following user story:
„As a user I want to purchase the products on a
shopping card with a click on a button.“
Page 3
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
Source: http://www.flickr.com/photos/europedistrict/4292951182/
4. First design
Page 4
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
6. User Test
page6
Source: http://www.flickr.com/photos/lwaldal/4900501706/ moosecon 2013 | Customer‘s Choice | Hasan Hosgel
7. User Test Results
Page 7
Source: http://www.flickr.com/photos/couragextoxlive/3054488331/ moosecon 2013 | Customer‘s Choice | Hasan Hosgel
8. What now?
Page 8
Source: http://www.flickr.com/photos/mkamp/2429091134/ moosecon 2013 | Customer‘s Choice | Hasan Hosgel
9. What now?
What do we normally in the web?
Page 9
Source: http://www.flickr.com/photos/mkamp/2429091134/ moosecon 2013 | Customer‘s Choice | Hasan Hosgel
10. Make an AB-Test
Page 10
Source: http://www.flickr.com/photos/8047705@N02/5366637592/ moosecon 2013 | Customer‘s Choice | Hasan Hosgel
11. AB-Test for Android
You have an application, which is probably publicly
available.
Send an amount of users to another variant than the
normal one.
Depending on success ratio you have the best
suiting solution.
Page 11
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
12. The Development
Page 12
Source: http://www.flickr.com/photos/geminidustin/275375865/ moosecon 2013 | Customer‘s Choice | Hasan Hosgel
13. Developer’s Todo List
● Create switches depending on the business logic
● Create a proprietary solution
Not reusable
● Publish application
Waiting for the results
● Remove switches and republish application
Waiting that everybody updates to the new version
Page 13
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
15. Customer’s Coice
A lightweight Open Source Android library making
simple AB-Tests in an application, which can be
configured over the network.
Possible AB-Tests variants:
● For layouts and positions
● For colors
● For workflows
● For texts
https://github.com/alosdev/CustomersChoice
Page 15
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
16. Usage
● Add the library (*.jar) to your project
● Configure your switch based on the variant
CustomersChoice.getVariant(context,“VariantName”);
● When you reach your expected goal, report it
CustomersChoice.reachesGoal(“VariantName”);
● done
Page 16
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
17. Usage
● Will an exception be raised?
Page 17
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
18. Usage
● Will an exception be raised?
No
Page 18
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
19. Usage
● Will an exception be raised?
No
● Will it have full functionality?
Page 19
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
20. Usage
● Will an exception be raised?
No
● Will it have full functionality?
Not really
Page 20
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
21. Usage
● Will an exception be raised?
No
● Will it have full functionality?
Not really
● Why?
Page 21
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
22. Usage
● Will an exception be raised?
No
● Will it have full functionality?
Not really
● Why?
It is not configured, therefore #getVariant(String) will
always return variant 1 for the given variant name
Page 22
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
23. Configuration of Variants
● Through code
● JSON String in resources
● Configuration file on SD card
● Configuration file in the network with standard caching
mechanism, like Etag- and Modified Since Header
● For testing purposes you can overwrite a variant with a
broadcast intent
Page 23
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
24. Variant’s Attributes
● name: String (required)
● startTime: Integer in Milliseconds
● endTime: Integer in Milliseconds
● spreading: Integer array for ratio of different variants
● reset: Boolean for resetting the current value
{“variants”:[{
“name”:”VariantName”, “startTime”:768997,
“endTime”:1022222, ”spreading”:[1,2,1],
“reset”:true}, {…}
,…]}
Global Attribute: resetAll – reset all variants
Page 24
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
25. Extensibility
You can write custom plugins for:
● Logging
● Reporting
You can fork the library on Github, make your changes and
send a pull request.
https://github.com/alosdev/CustomersChoice
Page 25
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
28. Attention
Always make clear
what and how to
report for gaining the
results you need.
Otherwise you can get
a comparison like the
diagram.
source: http://i.imgur.com/h2JClux.jpg
Page 28
moosecon 2013 | Customer‘s Choice | Hasan Hosgel
30. www.immobilienscout24.de
Thanks for your attention!
We are hiring!
Contact:
Hasan Hosgel Customer‘s Choice
Twitter: @alosdev Repo: https://github.com/alosdev/CustomersChoice
Github: alosdev SlideShare: http://de.slideshare.net/hosgel/moosecon-2013-customerschoice