Customer's Choice @ Moosecon 2013

Preview:

Citation preview

www.immobilienscout24.dewww.immobilienscout24.de

Customer‘s ChoiceLet the user decide, which is the best solution

moosecon | 07.03.2013 | Hasan Hosgel

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

About me

Hasan Hosgel

Twitter: @alosdevGithub: alosdevGoogle+: Hasan HosgelSlideshare: hosgel

developer @ ImmobilienScout24

Page 2

Agile Scenario

moosecon 2013 | Customer‘s Choice | Hasan HosgelPage 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/

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

First design

Page 4

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Design Variants

Page 5

User Test

moosecon 2013 | Customer‘s Choice | Hasan Hosgelpage6

Source: http://www.flickr.com/photos/lwaldal/4900501706/

User Test Results

moosecon 2013 | Customer‘s Choice | Hasan HosgelPage 7

Source: http://www.flickr.com/photos/couragextoxlive/3054488331/

moosecon 2013 | Customer‘s Choice | Hasan HosgelPage 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 HosgelPage 9

Source: http://www.flickr.com/photos/mkamp/2429091134/

moosecon 2013 | Customer‘s Choice | Hasan HosgelPage 10

Source: http://www.flickr.com/photos/8047705@N02/5366637592/

Make an AB-Test

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

AB-Test for Android

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 HosgelPage 12

Source: http://www.flickr.com/photos/geminidustin/275375865/

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Developer’s Todo List

Page 13

●Create switches depending on the business logic●Create a proprietary solution

Not reusable

●Publish applicationWaiting for the results

●Remove switches and republish applicationWaiting that everybody updates to the new version

Smarter SolutionThe library Customer’s Choice with a common approach

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Customer’s Coice

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

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Usage

Page 16

●Add the library (*.jar) to your project

●Configure your switch based on the variantCustomersChoice.getVariant(context,“VariantName”);

●When you reach your expected goal, report itCustomersChoice.reachesGoal(“VariantName”);

●done

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Usage

Page 17

●Will an exception be raised?

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Usage

Page 18

●Will an exception be raised?No

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Usage

Page 19

●Will an exception be raised?No

●Will it have full functionality?

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Usage

Page 20

●Will an exception be raised?No

●Will it have full functionality?Not really

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Usage

Page 21

●Will an exception be raised?No

●Will it have full functionality?Not really

●Why?

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Usage

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

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Configuration of Variants

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

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Variant’s Attributes

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 – reset all variants

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Extensibility

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 timeShowing code samples

moosecon 2013 | Customer‘s Choice | Hasan Hosgel

Attention

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 HosgelPage 29

Source: http://www.flickr.com/photos/21496790@N06/5065834411/