Recently my iPhone 6 died on me. The touchscreen didn’t like being touched anymore, preventing me to do anything with the damn thing. Even unlocking was an impossible task.
It was still 6 months old, clearly inside the warranty period, so I handed it over to an Apple authorised repair shop. They told me “3 to 5 weekdays until we send you a new one”… 3 to 5 days without a smartphone!! no way!!
After a couple of hours I was able to get an old Android from a friend, a Samsung GT-S5600 with Android 2.3.5. What a piece of crap… (just because it is old, not because it is Android, no flame war please).
I needed at least to get Gmail and whatsapp working so that I could keep my sanity for the next couple of days.
Gmail was already installed, no problems there, and whatsapp after a visit to the play store was also easy to setup.
The biggest surprise came when I started using whatsapp… what an awesome experience! Even in this crapy old phone the experience was as smooth as on my top of the line Apple device. How can this be even possible ?!?
I caught the whatsapp boat late in the game, already a lot of my friends were using it and I never really understood why it had caught fire, gaining users by the millions so fast as it did.
But now I understand why it is so widely distributed over the world, the app just thrives in any crapy device. Fast, low on resource consumption and no crashes… just as you would want for a reliable messaging app.
This episode led me to think about programming, specifically about the quality of todays programmers. This performance present in the whatsapp Android app is rare, even Gmail is painfully slow…
Did we just got accustomed to the easy and forgiving life of the modern tools and performant computing machines?
My first computer was a ZX Spectrum +3, 128K of pure joy from Sinclair
I used it mostly for gaming but I also discovered some way (I don’t really remember the details anymore) of copying some code from books and “making” really simple games I could play, this was how I started to learn what coding was all about.
Some time later, in the first years of the internet I rediscovered programming so that I could publish my first websites (also devoted to video-gaming).
With the drive to make my websites more flashy I kept learning really basic stuff up to the point I stumbled into the first versions of PHP and made my first “complex” database driven websites…
PHP allowed me to do everything I could dream of (fun small web applications just for my personal delight) without understanding the most basic principles of programming.
Nowadays I see this happening more and more.
Powerful development tools really easy to use, pressure from the markets to release as fast as possible, broadband connections everywhere, increasingly powerful mobile phones and desktop computers… is all of this making life too easy for the programmer? Are we starting to become just some lazy guys just connecting dots?
Performance and resilience seem to be in the mind of an ever shrinking group of programmers.
And this doesn’t seem to be improving, adding to the masquerade of the performance issues I stated before, there is also the current shift in focus towards UI and UX. Although a good UX implies a responsive and performant interface, one more time, with the rise of animations and subtle interface changes we are increasing our dependency on performant devices and most of the times we have no fallbacks to deal with lack of available resources.
In a recent post @zengabor talks about a related problem, the way many app developers fail to consider situations where the internet connection is less than ideal, suggesting how using today’s tools can address this problem.
A colleague of mine, @cesarmcferreira while reviewing a draft of this post reminded me of “the free lunch is over” from Herb Sutter, “Oh, performance doesn’t matter so much, computers just keep getting faster”. In this article he explains how this statement is now not just naive but most of the times wrong. The worse is that with the advent of multiple-core and parallelization paradigms, performance is a much more complex problem today than it was before.
Maybe the continuous effort from google, prioritising performant pages in search results will be enough to keep this performance issues at top of mind but right now, to me, it doesn’t seem enough.
If a company business model depends on an app being reliable and performant under less than ideal conditions, Product Managers must be the ones prioritising performance and not letting the UX hypnosis steal all the thunder.