I recently returned home from a two-week trip to Ethiopia. My family spent some time in the capital, Addis Ababa, as well Awassa in the south of the country and Bahir Dar in the north.

I had many experiences that will probably influence my view of the world, and many others that were interesting or beautiful or difficult.

But that's not what this post is about. If you are looking for a fun and provocative take on Ethiopia, look no further than Anthony Bourdain's Parts Unknown episode; it has the emotional depth and helpful reflection you are looking for. Or, if you know me personally, please ask me about my experiences there. I'm happy to share.

This post is about some of the practical, nerdy lessons that I learned while traveling around a developing country.

Client-side webapps can be better than server-generated content in high-latency environments

Here in the U.S., I am accustomed to high-speed, low-latency networks. Occassionaly, I have to deal with low-speed, low-latency. In that scenario, everything is pretty much the same, you just wait longer.

But throughout this trip, I was on high-latency networks the whole time. Regardless of the network infrastructure, just trying to reach servers that were probably hosted on a different continent meant long round trips.

So I got to experience first hand what many have been saying for a while: well-implemented, client-side webapps may handle high latency connections better than traditional server-generated pages. Usually this point is made in the context of mobile networks. But it is probably even more applicable for the kind of remote networks that I was dealing with.

Using Gmail illustrated this point perfectly. As you may recall, Gmail provides a link to "Load basic HTML (for slower connections)". If you have a Gmail account, you can try it at mail.google.com/mail/h/. This seemed like the right thing to do over there. After all, my connection felt really slow.

But using the basic HTML, server-generated version didn't feel faster at all. And after I thought about it for a moment, the reason was obvious. In my case, the high-latency network requests weren't necessarily slow, they just sort of behaved erratically; the timing felt off. Sometimes I would make a request and wait 30 seconds before there was any response at all. Sometimes I would get a response almost right away. And this erratic response pattern fits much better with the async architecture of a client-side webapp. The user is already accustomed to initiating an action and then moving on as the action is dealt with in the background. Very often, the speed with which the action is resolved is either not very important or is masked because the user is immediately shown a notification.

So yay for webapps.

Immediate UI feedback is crucial

In addition to Gmail, I also use Yahoo mail. And though Yahoo mail is a webapp with UX similar to Gmail, the experience of using it on a high-latency network was terrible, simply because it does not give immediate UI feedback. When you click to delete a message or to open a different folder, the app waits for the server response to update. This is ok on low-latency, moderately fast networks (except when the response takes longer than usual, which happens not infrequently), but unbearable when dealing with high-latency.

Without immediate UI feedback, you just don't know if anything happened after you clicked. Should you click that button again? Was there an error? What is happening!? Just a simple spinner or some kind of status indicator would alleviate all of that frustration.

I admit that I have built UIs that commit this exact error. I justified it because I thought that the particular response would always be fast. Well, high latency can definitely mess that up. Better to always let the user know when something is happening.

Cheap Chromebooks make for awesome travel dev systems

I needed a development machine to take with me in case something went wrong at work. My normal dev system is a Macbook, but I really didn't want to take it. It seemed too risky and even though its a newer model, it seemed too bulky to carry around in backpack everywhere I went.

So I bought a 11.6" Acer CB3-111 Chromebook. This felt risky at the time. I had never used a Chromebook before. I knew it was possible to run Ubuntu in chroot environments on Chromebooks, but it couldn't possibly work as well as advertised, right? Could I really get my dev environment working on this underpowered little computer? Also, it only has 16GB of SSD space, and some of that is devoted to the Chromebook OS. Would whatever is leftover really be enough to run a Linux distribution?

Well, it all worked out; even better than advertised. First of all, the hardware is great. Yeah, it feels sort of plasticy, but the thing costs less than $200! And Chromebook OS is very smart. Boot time is incredibly fast and the UI is fantastic.

But the Linux chroot setup - well, that was a revelation. Chromebooks are built on Linux, so running Ubuntu in a chroot is nothing like running a virtual machine. There is barely any performance penalty. And the lack of disk space was no problem for me. I really wasn't interested in running a full Gnome or Unity or KDE Plasma UI. I just wanted a shell environment to install my development tools. Thanks to years of sysadmining, I'm happy fixing bugs with just bash and vim.

The Chromebook was probably the best $175 I have ever spent on a computer. I imagine it will be my travel computer for years.

iPhone ups and downs

I took my trusty iPhone 4S. No, that's not a typo. If it ain't broke...

More than I expected from the battery

I was surprised how well the battery did. Battery life is one the main problems with an aging phone. In my normal life, I sometimes barely make it home before I need to recharge. I worried that I would be unable to take pictures at times because I wouldn't be able to recharge often enough.

But in Ethiopia, because I couldn't connect to the local GSM networks, the phone was on airplane mode when we were away from hotels and wifi. Apparently even an old phone can go a long time on airplane mode. And it was probably just my imagination, but recharging on 220V seemed even faster than 110V.

Less than I expected from iCloud and Photos

I did have a problem with not being able to take pictures at all times, but it was more with iCloud's syncing protocol. I use iCloud Photo Library, which means that theoretically all the pictures I take are synced to iCloud whenever the phone is online. And, the Photos app is smart enough to ditch the fullsize images in favor of smaller thumbnails when you are running out of disk space. Since this is an old phone and I have a lot of pictures, I am pretty much always running out of disk space.

What I didn't know is that iCloud will not sync if it can tell you have a poor connection. So there were a few days when I had to frantically delete apps or podcasts or other stuff to make more room for photos even though I did have an Internet connection, albeit a bad one. Once we got to a hotel with a better connection, the Photos app was able to upload, sync, and purge.

New Balance Minimus 10v3s are the perfect shoes for exploring a developing country

These New Balance Minimus trail shoes are one in a series of minimal running shoes I have tried. I got lucky and bought these shortly before the trip. They were perfect. Even in the biggest cities in Ethiopia many of the roads are unpaved or have no sidewalks. Almost everywhere I was walking on dirt and rocks. A shoe designed for trails was ideal both in the cities and in the country side.

This is a great shoe. The Vibram outsole is awesome. Probably the best minimalist shoe I have tried so far.

New Balance Minimus 10v3