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 – Boolean for resetting 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