ailon's DevBlog: Development related stuff in my life

End-to-End Experiences Do Not Scale Globally

9/29/2011 4:46:39 PM

endtoendservice

I’ve been watching a live blog from Amazon’s new device unveiling yesterday. Jeff Bezos was repeating his “end-to-end service” mantra. I love the end-to-end experience idea … in theory. In practice I’m never able to experience it. Apple and Amazon are the best known end-to-end service providers. They are huge. They have a lot of weight. But even they don’t have enough power over content owners and/or don’t offer attractive services to content providers worldwide.

I own 2 Kindles. I read in English mostly and Kindle provides me with end-to-end experience most of the time. I love it! Except Mark Russinovich’s Zero Day: A Novel wasn’t available in Kindle format internationally for half a year. So I didn’t get any experience at all. But, yeah. Who cares!?

My wife reads in Russian and there are virtually no Russian books on Amazon. But Kindle is an end-to-end service and support for “obscure” formats like ePub isn’t a part of the end-to-end experience. So to read non-Kindle books on a Kindle you have to convert them to MOBI (provided they are not DRMed). It’s pretty easy to do with Calibre but it degrades your experience to a level lower than with non-end-to-end open market readers directly supporting multiple formats.

Our daughter reads in Lithuanian and there are basically no non-DRMed Lithuanian ebooks. So Kindle is just a useless piece of “premium product at non-premium price” for that.

And situation with books is actually much better than what goes on in the music and video area. So even before the Kindle Fire announcement it was obvious that it’s going to be US-only (or US + some Western European countries at best).

End-to-end experiences sound good in US. They are glorified by user experience advocates. But when it comes to worldwide scene, clunky duct taped Android experience dominates. That’s why it’s so huge. There’s no need for Amazon, Apple or Microsoft to strike a distribution license for Moldavian books to be available in Moldova. There’s some local company that would do that, because that’s their main market*. It’s crap and pocket change for the US juggernauts, but it’s the whole market for that little company.

Great end-to-end experiences are only great while you stay on course. One step off that course and you have a subpar experience, if any at all. Maybe someday these global corporations will manage to cover all the bases around the world. And maybe World Peace © will come too. Both are equally likely.

* P.S.:  I know nothing about Moldova and Moldavian books. Just a random country my brain picked.

Tags: ,

Unimportant state in Windows Phone 7.0 apps can bite you on Mango

9/1/2011 5:40:40 PM

We’ve learned to preserve important state on tombstoning in 7.0 Windows Phone apps. But what about state we don’t care to preserve?

Most of the time we don’t care about the state of some variable so we don’t store it on deactivation and don’t restore it on activation. The smartest of us have probably thought about these members too, but I’m not one of them. Some of my code assumed that these fields are reset to their default/initial values, even though I’ve never thought about it explicitly.

Turns out when you recompile your app for Mango this state is actually preserved since your app’s process isn’t killed. When user returns to your app this “unimportant” object still has the same state as it was when the user left, but you may have programmed your app in a way that it assumes the state to be reset.

I was thinking about a good example to illustrate this, since my real situation was too cumbersome and specialized for a general purpose blog post. Suppose you have an app that does some processing. During the processing it shows a busy indicator or a progress bar and when it’s done it fires an EmailComposeTask with Body set to the results of your processing. In 7.0 if a user later returns to your app the process would be restarted and you would restore the important state. Is Visibility of the progress bar an important state you’d like to preserve? Probably not. But you probably expect it to be hidden, since it’s a default and the process is restarted. But are you sure you’ve collapsed it before firing the EmailComposeTask launcher? Chances are you haven’t, because you assumed it’s not an important thing to do, when user leaves your app anyway.

Not the most elegant example, I know. But you probably get the idea. It’s less critical to preserve the state of important objects in Mango, but you need to check your implicit assumptions about unimportant state being reset on return to the app.

Tags:

Copyright © 2003 - 2017 Alan Mendelevich
Powered by BlogEngine.NET 2.5.0.6