Archive for June, 2010

Last Call Widget - Metrics

Wednesday, June 30th, 2010

Metric

Despite all the pretty visualisations generated by the Google Analytics tool, essentially so far all it has been good for is recording how many people have been using my app.  This falls short of useful, now that I am at the stage where I want to redesign my interface to support an improved user workflow.

The next step is to come up with some kind of useful success vs. failure definition metric, which will allow me to analyse aggregated (opt-in) user behaviour and try to make design decisions accordingly.

Initially I thought this would be impossible for a “stateless” home screen Widget (with just two buttons) to collect data on wider user activity, until I realised that the widget regularly performs processing on the users call log data, meaning that outgoing calls could easily be matched against the most recent UI event, resulting in simplified (and anonymous) UI “Success” and “Fail” like events.

On my first pass, I am looking for these events:

Condition Conclusion Result
New outgoing call detected.
No recent Widget UI events.
User is not using our app. Fail
Widget “Last Call” button clicked.
No new outgoing call detected.
User wanted to check on call history. Success
Widget “Last Call” button clicked.
New outgoing call detected with same number.
User should have pressed the “Quickdial” button. Success
Widget “Last Call” button clicked.
New outgoing call detected with same contact, different number.
User should be given more dial options. Fail (add more options)
Widget “Last Call” button clicked.
New outgoing call detected for X most recent call contact.
User should be shown last X call contacts in Widget. Fail (add X list items)
Widget “Last Call” button clicked.
New outgoing call detected for non-recent call contact.
Widget used as shortcut only (use cases not relevant). Fail
Widget “QuickDial” button clicked.
New outgoing call detected for given number (call longer than 10 seconds).
User returned a call. Success
Widget “QuickDial” button clicked.
No new outgoing call detected for given number.
User inadvertently clicked on this button, or wanted to return the call with a different number. Fail

Note to self: refine this list after further experimentation, and add extra scenarios to measure the success of changes made in version 2.

Last Call Widget - Use Case Analysis

Wednesday, June 30th, 2010

Android

I am approaching the big two point nought milestone of the Last Caller Widget and feel the need to give it a cool new feature.

FEEDBACK
So far feedback from users has been mostly positive.  I have fixed a number of home screen and life cycle related issues, as well as responding to feedback from Sense UI users who felt the Widget needed more transparency to fit in with the HTC flavoured home screen.  For my next minor release I am only looking to clean up a few edge cases around withheld numbers and custom contact detail labels (both bugs) and to investigate one report of the Widget looking ugly on the Sony Ericson X10 (yet another custom home screen – still have to verify).

As of now, I am not able to reproduce any “Widget does not update” issues on the current Android Market build, on any test device (anyone still seeing this issue?).

Sequential Art
Sequential Art - Anything I damn well please!

As this is free software done in my spare time, I don’t have to religiously chase after users with minority bugs (like I do in my day job) and can instead relax and start to think about the next cool feature.

NEW FEATURES
Looking through my email (feedback@zedray.co.uk), it seems people want a larger widget (with more calls listed), a smaller widget (4:1 just takes up too much of my valuable screen space), filtering by type (lots of people just want to see missed calls), open sourced (seriously, go to the Android Open Source project for more complete reference code), localisation (Russian & Chinese), and of course SMS support (complicates the UI in surprising ways hence I  am thinking of doing this as a paid app).

Of course you can only get so far by listening to your users, which brings me back to the origin story (blog post).  Basically (for vaguely work related reasons) I found myself analysing how well the native UI on the Nexus handles key uses cases (e.g. return the last call), and found some significant gaps.

My method came from some of Russels comments on measuring UI usability based on the number of clicks required to perform a particular task.  His argument centred on how important it is that we reapply this (very well established UI metric) to objectively analyse UI on touch screen devices (tablets in his case), as developers need to redesign their UI paradigms to support a completely new way of interacting with computers.

ANALYSIS
For these measurements I have chosen a very tight scope, covering only a few key use cases (wondering what more I should be adding?).  Also, all measurements are taken after the phone has been unlocked (not a valid assumption if someone adds this kind of functionality to the lock screen or comes up with a gesture based control, etc).

User Goal Native Last Caller Widget
Who called last? 2 0
List last callers 3 1
Return last call 3 1 (2 with quick dial disabled)
Return Nth last call 3 2
Return last call, but with a different number ~5-6 ~4-5

Note to self: repeat theses tests using trackball only.

As you can see above, the Last Caller Widget performs admirably in the first four use cases, making it by far the most useful Widget on my home screen (or for anyone who uses their phone as a phone).

Unfortunately that last use case is a dozy, as it turns out I have several numbers for the people I call most (go figure), hence I am always fiddling through the clumsy sequence in the native UI:

Call log -> Call info -> View contact -> Select number.

This is made slightly worse in 2.x as calls are sometimes grouped, adding yet another click to this already tedious chore.

This issue has been addressed under the contacts tab with the new 2.x “Quick actions”, which I’ll have to investigate as soon as I have finished working my way through the Google IO 2010 session videos.

>10,000 Last Call Widgets!

Monday, June 14th, 2010

logo.png
Time for a statistics round up now that my “Last Call Widget” has breached the 10,000 downloads mark on the Android Market.

ratings.png

According to the developer console, the widget currently scores 4 out of 5 stars, taken from 83 mostly anonymous ratings.  Looking at the public comments (which are dated), it’s possible to see how several bug fixes and new features have increased the score as the product has improved over time.

Downloads
The Market reports raw numbers of 4,966 active installs for 10,814 downloads (i.e. 45%), which are good numbers for a free application downloaded off an App Store (I haven’t tried promoting it yet).  To get more in-depth information I had to abandan Flurry (due to its technical limitation) and adapt the Google Analytics plug-in to make it work with Android home screen widgets.

Unfortunately, Analytics’s web front end is designed around tracking website usage (supporting a variety of inappropriate use cases, i.e. session length), meaning I have to process the numbers somewhat before I get useful information.

Activations
enable_small.png
The widget was enabled 23,390 times in its first 41 days.  By enabled, I mean that the user installed the widget on their Android home screen while the Analytics opt-out check box remained ticked (as it is by default).

To get a more useful impression of user loyalty, we need to understand how long the widget has been present on the users home screen.  As widgets are stateless (i.e. designed not to consume system resources), there is no way to accurately measure session length as you would do in a regular application.  So instead I opted to write a simple algorithm that generates a series of custom events over time, giving us an idea of how long each widget instance has been around.

cumulative_enable.png

Custom events make most sense when shown cumulatively.  In this chart, the number of “Enable” events takes off quickly, while the first update “0″, and the second update “12″ (i.e. twelve hours on screen) report lower numbers later on (as expected).  Looking at the chart, its obvious that there is a serious gap between users who enable the widget and then subsequently go on to use it.  This could be explained by users immediately disabling the widget (possibly a bug), deactivating reporting (optional in the UI) or simply by having data switched off on their phones (very common).

cumulative_usage.png

Looking at the subsequent events, there is a good conversion of users from 12 hours onward to 72 hours (I have omitted intermediate events for clarity), upto the highest value reported of 144 hours (i.e. 12 days).

buttons.png

As an added bonus, we also get to see how often each of the widget’s buttons were pressed.  Looking at the percentages, there appears to be an almost 1:1 relationship between button size and how oftern it was used.  With later users deciding to activate the “QuickDial” mode once it became available in later versions.

Awesome Lisbon

Monday, June 14th, 2010

Three cool things about our weekend trip to Lisbon…

lisbon1.jpg

The Landing
The airport is so deep inside the city, that on landing the pilot may as well be driving a tour bus (if you look to your right you can see the Santuário do Cristo Rei, next is the Praça do Comérciothe headquarters of several Portuguese government ministries…).

lisbon2.jpg

Elétrico em Lisboa (Electric Trams)
Feeling like an old amusement part ride, the historic 28E (electric, not the regular 28 bus) will take you through winding streets, up and down hills and past the main tourist sites in the Lisbon old town.

lisbon3.jpg

Old Town Apartment
Enjoy getting lost as you walk along narrow winding streets, full of tiny shops and hidden family run restaurants.  Try and work out where the hills are on the map, and which set of steps take you where you want to go.  I suggest you either ask for directions of warm up that GPS!


Geo Visitors Map