2/23/10

google analytics advanced segmentation for funnel analysis

many of you probably are already using goals and funnel visualization to analyze the performance of various conversion events on your website (shopping cart conversions, form completions, etc.)

One way to take your analysis to the next level is to use advanced segmentation to create a custom segment for each critical stage in your funnel - and then look for differences.

we recently observed that the time spent on one required page during a checkout process was 2 minutes longer for the segment of users who made it all the way through the process - as compared to those who didn't.

the conclusion? the required page was taking too long to complete - so our users were abandoning it.

advanced segmentation can be an amazing way to develop insights into web use - give it a try!

2/22/10

Adding live chat to conversion pages

One of the holy grails of web development is increasing conversion rates on key pages - new user registration, vacation booking, product purchasing, etc. In addition to traditional approaches, why not try adding a live chat client to the page - so that your customer support people can be there "virtually" during important conversion processes?

www.olark.com is one of many providers of this service. For the past couple of weeks i've been testing their web based service with good results. On this post you'll see a 'click here for...' overlay in the lower right hand corner of the page.

The concept is simple - create an account on olark.com - couple this with a chat client (they use jabber) and paste a few lines of javascript just before the close body tag on your key pages and you are ready to roll. Because i find myself having to offer support during off hours it was important for me to be able to offer chat support from my iPhone - this required two additional steps.

1. after configuring the olark account i used Meebo.com on olark's recommendation. Meebo.com is a universal web based chat client.

2. I tested a few iPhone chat apps and finally settled on meebo's own free iphone app - no ads, stable and free. Since the app stays 'online and available' by default - i was essentially able to offer 24/7 live chat support.

The verdict? Although my users don't take advantage of the feature very often - those that do are grateful. It is a bit tricky to remember to log off during my sleep hours or time away from the phone - so i've ammended my chat instructions to read "if you don't get an immediate response, please email..."

Good luck and happy coding.

2/19/10

Working with data type Duration Google Visualizations

i have a website that works with duration measures (length of workout
for instance). Values are stored in the dB as total seconds and
displayed to the user as HH:MM:SS.0

When attempting to migrate to the Google visualizations for displaying
data and charts, I have tried a variety of methods to work with this
type of information with mixed success- some things i tried were
pretty stupid in retrospect, as I progressed, my mistakes become more
interesting.

Initial data table display
1. store "HH:MM:SS.0" as datatype=string
Appears correctly to the user, however doesn't sort correctly (sorts
alpha) and can't be charted. Bad idea.

data.setCell(0,2,'8:15');

2. store as time of day datatype=timeofday
This requires converting my seconds to the javascript time of day
array. This appeared correctly to the user (HH:MM:SS.0) and sorted
correctly - however since you can not plot timeofday datatype, when it
came time to display progress reports and ATL's this fell short.
data.setCell(0,2,[0,8,15,0]);

3. Store as datatype=number but use the display value as HH:MM:SS.0
e.g. data.setCell(0,2,495,'8:15');
495 are the total seconds, 8:15 is what appears to the user

This works well for most chart types and gives me a great deal of
control over the way times are displayed (value labels are created
server side) - and the chart lines are drawn correctly - however in
the annotated timeline - the values that appear to the user on data
point mouse over are still the total seconds (495) instead of the
desired display value (8:15)

4. Store as datatype=number, but store the value as decimal minutes
(totalseconds/60).
This allows the axis that is shown to the user during charting to use
minutes as the unit (which is good) however on mouse click tooltip the
value that is shown to the user is the decimal minute value - which is
confusing.

5. store as datatype=number, but store the value as minutes.seconds -
e.g. instead of storing 495 seconds as:
8.25 (decimal)

store as

8.15 (8 minutes, 15 seconds). Then use a formatter to make the decimal
separator ":" instead of the default "."

This supports correct sorting, correct graphing, correct ATL display
and makes a bit more sense to the user. It ceases to work when going
over 59.59 (over 1 hour duration). I have not figured out a way to
force the ATL to modify the decimal separator character.

If anyone else has struggled with similar issues i'd love to hear your
solution - if not maybe this will save some testing on some one else's
part.