RantWhen I was living in Toronto, Internet was ubiquitous. I was one of the first people in the city (probably the country) to have DSL (1 mb/s). That was around 1998/1999. I was also one of the first people to sign up for HSDPA, paying an exorbitant amount to have fast internet available on my phone (I think I was getting between 1-2 mb/s consistently). That was around 2007. These experiences led me to believe that the Internet was ubiquitous, and that in 2010 we don’t need to worry about not having an Internet connection.

Well, travel 180° around the globe (or to any developing nation really) and things change.

I’m paying for 3 mb/s DSL. Sometimes it hits that. Most of the time it hovers around 1 mb/s. Sometimes it stops completely for some services but not for others (NNTP seems to be one of the sometimes-it-works-sometimes-it-doesn’t services). Sometimes it goes down for extended periods (19.5 hrs is my latest downtime) with no explanation other than “there’s a problem in your area”. Sometimes web sites/services just don’t work (lately Google Bookmarks has been a major offender – it just times out, even though all the other Google services are working fine). And then there’s the “national filter” in place in a lot of these countries. Some sites redirect you to a government page indicating that that site is disallowed in the country (and probably that my IP has been flagged and I’m now on the most-wanted list). And to be honest, everything I described here is “pretty good”. Crossing the border into Laos the speed drops to around 160 kb/s. Upstream is much slower, and any app that has high upstream requirements (voice, video) generally just crashes as the applications just aren’t built to deal with not only the slow speeds, but also the high latencies and extreme amount of line/packet errors.

What does this mean as an application user? It means that I am highly dependent on offline applications. For a long time I was using an excellent time tracking tool called Time Tiger, but it’s online-only. 90% of the time that was fine, but the times that I was working away with the timer running only to have my ‘net go down for an extended period caused no end of pain. Or the aforementioned Google Bookmarks issue. If I had a local bookmark store that sync’ed with Google, it’d be no problem. But I don’t. All I have is an online bookmarking service that is sometimes inaccessible even when my connection is up. And really, if you’re developing an online bookmarking service, do you even consider the fact that it might need offline capability (I mean, if your users are surfing the web and bookmarking things, they’re obviously online, right?). This is at a time when the offline world is quickly being engulfed by the online one. Games are online-only. Instant communication (IM, VoIP) is highly dependent on a solid Internet connection – and living outside of my home country these are the primary methods I use to communicate with my friends/family. Hell, my job is online. Without a ‘net connection I’m pretty useless. Even doing local development I probably need to look something up / reference something on the ‘net about once every 5 mins. I’ve actually started collecting local PDF/CHM reference books for those times that php.net or developer.mozilla.org are inaccessible… but there’s no offline substitution for the likes of stackoverflow.com.

What does this mean as an application developer? Well, this is tricker. It’s a case of “you can’t please all the people all of the time”. Do you target the rich nations with their reliable Internet (if you want to make money, the answer is probably yes), or do you target the developing nations and try to make your app (or site or whatever) work on the slowest, crappiest, most error-prone connection imaginable? I think that ideally it’s a combination of the two, but as a developer I don’t want to test my app on a bad connection. Slow, high latency, error-prone networks just aren’t fun, and being a developer is supposed to be fun, isn’t it? But living here (and sometimes having customers here) I need to cater to the environment. And the environment sucks.

The other issue I see is a sociological/anthropological (not sure which one really fits, but I’m neither a sociologist nor an anthropologist, so I’m including both). Applications that are being developed are being developed for the high-end. They’re being developed for the future, when the Internet will be ubiquitous. This shuts the door on a lot of these countries who are just now getting their infrastructures together. When I started using my 1 mb/s DSL connection there was hardly an application in the world that took advantage of it. Now that falls far below the minimum requirement in a lot of cases. But for these emerging countries,  1 mb/s is all that’s available (and in a lot of cases far, far less). Basically, us First World countries grew the Internet up around us. As it evolved, so did our use cases. But these Second and Third world countries aren’t afforded the same luxury. The Internet has grown up. The applications have matched its growth. But these countries are stuck where I was 10+ years ago. The applications available then have evolved or been killed off. So the experience for the people in these countries – the countries that a solid Internet could help the most as it opens the doors to FREE (as in beer) education and allow them to enter the global community as a viable player – is severely lacking. And since the costs are exorbitant – even for these horrendous connections – it’s unlikely that we’re going to see many Lao information architects anytime soon.