Sunday, July 25, 2010

The Psychology of Marginal Cost

One of the side-effects of moving internationally is that one is typically required to completely re-evaluate the set of services which we are generally accustomed to - e.g water, power, telecommunications, transport etc. Partly because traditional utilities are very local and partly because the circumstances of life are more or less subtly organized differently in different places. One such difference can be the available pricing models for a particular service - most commonly some form of flat-rate or metered pricing.

In areas where both flat-rate and metered pricing plans exist, analysis often shows that even though many consumer prefer flat-rate, the typical user would be better off with metered pricing, as only very few heavy users manage to fully use or "abuse" the plan.

Consumers often quote predictable cost and "no bad surprise" at the end of the month as a key benefit of flat-rate pricing. But another interesting observation to take into account is that in most cases, flat rate pricing stimulates increased usage. The real motivation for consumer to choose flat-rate pricing, specially for things related to fun and entertainment, might also be to get the unpleasant financial considerations out of the picture once and for all and not to remain as a kill-joy, nagging question each time the user feels like making use of the particular service.

For us, the most significant area of changed behavior seems to have been transportation. In Switzerland there is a flat-rate pricing option for all public transport, popularly referred to as the GA (in German). For about 200CHF per month and person, this allows to hop on any train, bus or boat anytime, anywhere in Switzerland. On the other hand, we don't currently own a car. This decision was made easier by the existence of Mobility CarSharing - a dense and well established car sharing service. The signature red Mobility cars can be found at almost any train station and there are about 6 cars available in our neighborhood, just a few hundred meters from our front-door. Pricing is a mix of hourly rent and per-km charge, which clearly encourages a networked usage of trains for long-distance, mobility car for "last mile" service. Pricing is around 3CHF/h (0.6CHF during night-time) and 0.5-1CHF per km charge depending on the car model. This is clearly not cheap and for a long week-end trip breaks about even with a normal rental car.

However, the membership based system and the dense network of dispersed self-service locations offers hugely better pickup and drop-off experience than any rental-car company possibly could. Having a small child, we knew that the optimized combination of train and car would likely not work, due to having to lug around a heavy ECE R44 group II compliant car seat in addition to all the other stuff, small children generally come with. Yet assuming the cost of owning our own car to be at least about 1000 CHF per month, we could literally take a car for each week-end and still come out ahead.

After almost a year, it turns out that we have used the car less than half a dozen times (mostly going to IKEA or other furniture moving activities) and did all other travel including many spontaneous excursion by public transportation. One key factor is that the decision to take the care will most likely result in a bill in the order of hundred(s) of CHF, while the marginal cost of using any public transportation for any time or distance is for us now zero CHF. Even with the streamlined procedures, reserving, picking up and dropping of a mobility care requires some level of planing, preparation and discipline, while the combination of GA and Google mobile transit directions provides a near frictionless level of spontaneous mobility (at least between town centers). Yet, despite the very dense Swiss transportation network, a typical trip still takes us much longer by public transport than it would by car - but maybe because I don't particularly like driving, I am more willing to put up with time lost having to wait for a connection.

Despite a bit of traveling in the last year, we still did not reach or exceed the cost of the GA compared to the optimal strategy using individual fares. Yet we would still consider it as a success, by putting a lot of emphasis on convenience (not having to figure out what the idea fare is, and how each ticket vending machine works...) as well as not having any excuse to avoid going out and discovering our new surroundings - encouraged by the psychology of a zero marginal cost for each trip.

Friday, July 23, 2010

Android 2.2 - Froyo

I just finally got the new Android 2.2 release for my Nexus One (it's a long story...). Most of the significant features of this release are behind the scene like increasing java execution performance through just-in-time compilation or increasing javascript performance in the browser by using the V8 JavaScript engine from Chrome. Not sure I really notice much of a difference in everyday use, since I mostly use apps which are UI and framework bound for their performance (no CPU heavy games...) and most web-pages are light in JavaScript and browser performance is limited by network and rendering performance. But still these are very welcome optimization to help improve the platform overall.

There are a few small enhancement - most significant for me is the ability to switch auto-correct/complete languages for the on-screen keyboard on the fly, since I write emails and SMS in multiple languages on any given day. There is now also finally a switch to disable the use of cellular data independent of any other function, which had been one of my complaints for a long time.

New on the platform side are a few services like the ability to back up application data in the cloud, make use of the SD-card for installing a lot more apps than what the capacity of the internal flash memory can handle or the C2DM notification service discussed here earlier. Any of these require applications written with the new SDK and using these new features to show their full potential.

But I am most excited about the official support for tethering in Android 2.2 - i.e. the ability to use the phone's cellular connection as an uplink for other devices either through USB or wifi. While USB would clearly be better from a battery life perspective, the number of devices which support networking over USB via the phone is a lot more limited than the number of devices which support wifi: today pretty much any internet capable device seems to support wifi. When turning on the mobile wifi hot-spot feature, the phone is basically acting like a wifi base-station, creating a wifi subnet which other devices can join and access the Internet by sharing the phone's cellular data connection.

A quick test with from my tethered laptop vs. the speedtest Android app running on the phone shows no noticeable throughput degradation by tethering (about 2.7Mbps upstream and 1.5Mbps downstream on Orange CH 3G service from our house in Z├╝rich around midnight).

Friday, July 2, 2010

Push Notifications for Android

After struggling with a few apps which use lots of battery and network resources while trying to sync half the Internet onto the device, one wonders if Apple didn't accidentally have a point with their claim that most apps don't really need background processing as long as there is a way to push background notifications to the device.

This leads to a split application design, where part of the application resides on a server in the Internet, doing whatever the background service on the device would be doing, but with a lot less worries about power and bandwidth. If there is something new and interesting, a small notification is pushed to the device to alert the user, that there is something worth looking at. As long as the device has network connectivity when the user acts on this notification, the details of this notification might be about is loaded on demand. If mobile networks are ubiquitous and fast enough, the resulting experience is almost as good as an app which continuously loads and caches content in the background - and a lot friendlier on battery and network usage.

The upcoming Android 2.2 release includes support for the new Android Cloud to Device Messaging Framework, which promises to do that and then some in a generic fashion.

If an app on an Android device wants to receive some particular notifications, the application registers to receive the notification events from the Android OS and requests an authorization key from the C2DM framework and sends it to its backend server in the Internet (e.g. by http request, SMS or whatever). When the server wants to push an event to such a registered device, it uses the authorization key to contact the C2DM service, which will then push the notification to the device.

One of the sample apps included with the framework - Chrome to Phone - shows how this could work. From a Chrome browser extension, the user can choose to send the current page to their Android device, where the page then can be loaded from an entry in the notification bar:

But since Android does support background processing, this framework isn't limited to simply pass on notifications to the user. An app could still choose to act on some incoming notifications in the background, i.e. by fetching and caching the content which the notification event refers to. The frameworks seem flexible enough to create all kinds of new applications which create a more seamless integration of mobile and web-based applications.