www.immobilienscout24.de www.immobilienscout24.de
Customer‘s Choice Let the user decide, which is the best solution
moosecon | 07.03.2013 | Hasan Hosgel
About me
Hasan Hosgel Twitter: @alosdev Github: alosdev Google+: Hasan Hosgel Slideshare: hosgel developer @ ImmobilienScout24
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 2
Agile Scenario
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 3
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.“
Source: http://www.flickr.com/photos/europedistrict/4292951182/
First design
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 4
Design Variants
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 5
User Test
moosecon 2013 | Customer‘s Choice | Hasan Hosgel page6
Source: http://www.flickr.com/photos/lwaldal/4900501706/
User Test Results
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 7
Source: http://www.flickr.com/photos/couragextoxlive/3054488331/
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 8
Source: http://www.flickr.com/photos/mkamp/2429091134/
What now?
What now? What do we normally in the web?
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 9
Source: http://www.flickr.com/photos/mkamp/2429091134/
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 10
Source: http://www.flickr.com/photos/8047705@N02/5366637592/
Make an AB-Test
AB-Test for Android
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 11
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.
The Development
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 12
Source: http://www.flickr.com/photos/geminidustin/275375865/
Developer’s Todo List
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 13
● 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
Smarter Solution The library Customer’s Choice with a common approach
Customer’s Coice
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 15
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
Usage
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 16
● 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
Usage
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 17
● Will an exception be raised?
Usage
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 18
● Will an exception be raised? " No
Usage
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 19
● Will an exception be raised? " No ● Will it have full functionality?
Usage
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 20
● Will an exception be raised? " No ● Will it have full functionality?
" Not really
Usage
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 21
● Will an exception be raised? " No ● Will it have full functionality?
" Not really ● Why?
Usage
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 22
● 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
Configuration of Variants
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 23
● 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
Variant’s Attributes
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 24
● 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
Extensibility
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 25
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
Demo time Showing code samples
Demo Application
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 27
Attention
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 28
source: http://i.imgur.com/h2JClux.jpg
Always make clear what and how to report for gaining the results you need. Otherwise you can get a comparison like the diagram.
Q & A
moosecon 2013 | Customer‘s Choice | Hasan Hosgel Page 29
Source: http://www.flickr.com/photos/21496790@N06/5065834411/
www.immobilienscout24.de www.immobilienscout24.de
Thanks for your attention! We are hiring! Contact: Hasan Hosgel Twitter: @alosdev Github: alosdev
Customer‘s Choice Repo: https://github.com/alosdev/CustomersChoice SlideShare: http://de.slideshare.net/hosgel/moosecon-2013-customerschoice