When was the last time you had an unstable Internet connection? Was it riding the subway home from work? Was it using the wifi at a local coffee shop a few days ago? Or at a hotel, on a plane, or at an airport? When you were able to connect, was it painfully slow? Could you load a webpage other than google.com?
Even in America, the country that developed the first iteration of the Internet, the truth is a stable Internet connection is an aberration, not the norm.
Why is it, therefore, that we have built the World Wide Web for a stable & fast Internet connection, rather than the much more common unstable & slow Internet connection?
In last week’s Hacker Newsletter, one of the top stories was “Most of the web really sucks if you have a slow connection” by Dan Luu. This post really resonated with me. I have written about this before. Every time, I always come back to this central problem: the Web and all its many billions of websites are built for a stable internet connection, when the normal case is an unstable internet connection. Dan focuses and describes well the problem on slow & unstable internet outside of the U.S and Europe, but I believe that the problem is much more prevalent than that. The only place you’re safe is at home.
I went to a coffeeshop today to work. I work remotely and wanted a change of scenery. The coffeeshop I chose is known for having good internet. The Yelp reviews even talked about it. When I sat down with my coffee and logged in to get to work, I couldn’t load a single webpage. Not even google.com would connect. To ensure it wasn’t just my machine, I looked around. “Page could not be loaded,” shone back at me from three computer screens around me. Another visitor sat down next to me and opened his computer and logged in. No connection to the Internet. The wifi connection itself was stable, but somewhere between the wifi router and the webservers for the websites we all wanted to visit, something was awry. After a few hours, I gave up and left.
I’m sure you have many such experiences yourself. Whether due to congestion in the network or some outdated hardware along the path, the most common internet connection we all encounter on a daily basis is unstable and slow.
Why is it that the makers of the Web decidedly ignore this worldview? Besides blind optimism, we can surely say that they have fallen victim to the fallacies of distributed computing:
“The network is reliable.” “Latency is zero.” “Bandwidth is infinite.”
Don’t all of these sound an awful lot like the conversations you hear around Silicon Valley? “What if they don’t have a reliable internet connection?” “Let’s just focus on when they do, and we can figure out a solution to that later.” Many years later, very few internet services work without the web at all. On our mobile devices – devices much more prone to instability in its connection – almost nothing works without a stable, fast internet connection.
It’s time for us to start considering an offline-first approach. Email is a brilliant example: the post office protocol (POP) available for all major mail providers allows users to download their mail when they have a stable connection, read & compose messages offline, and send them when they’re back to a stable connection. Web services should enable the same high-fidelity offline operation.
Offline-first is the approach I will be using from now on for all web services I create and websites I create. They must be downloadable or otherwise useful when the networked device is disconnected or finds its connection unstable. Every web service must have an ability to download all of a user’s data and must have the ability for me to compose updates to my data the next time I have a connection.
Web developers in highly-connected offices demanding online services incredibly high availability must consider people who aren’t using their creations in the same environment they’re developing them.