A quick reminder: this is my opinion, as of a particular moment in time, in a particular moment in my maturity as a person and a software engineer. It is my opinion only, not that of my employer or anyone else. And I reserve the right to revise it or completely reverse it at any time. Send hatemail or otherwise to jarau -at- mtu dot edu.

Minimalism: a competitive edge for 2018?

S**t's slow, yo.

2018-04-13

It all started with my blasted Galaxy S7.

When I got it new, it was fresh and clean, nice and fast. I'd tap an app icon, the app would come to the foreground with no perceptible delay. Scrolling was smooth, animated transitions were without hiccup, panning and zooming was flawless. Exactly the way our devices should all be.

Now, a year into ownership of the same device, it is almost unbearably slow.

Google Maps takes about 20 seconds to become stable after tapping the app icon. Once it is responsive enough for me to perform a search, I tap in the search box and then must wait another 2-3 seconds for the transition to the "around you" screen, the one with recent history and likewise on it...and another second or two before the keyboard pops up. Starting the route to a destination takes another 5-10 seconds.

No other apps are quite so badly behaved, but each has its own ugly spots. Scrolling through my text messages in Verizon's default messaging app, Message+, showed a fair bit of jank--tiny lags where the animation was not smooth and the UI went unresponsive. Youtube, if I leave it in the foreground with a full-screen video (in landscape mode) and then lock the device, when I go to unlock it, the sequence of events goes: the unlock happens, the screen goes black, pause 3 seconds, animation of a flip to landscape, pause 3 seconds, animated flip to portrait, pause 3 seconds, animated flip back to landscape, then the app becomes responsive again.

Sometimes even answering an incoming call is ugly--the screen will light, the ringtone will start to play, and a second or two later the "incoming call" overlay appears.

Even just unlocking the device is a case study in lag. I instinctively know when the device has unlocked successfully, not because of any helpful animation or the presentation of my home screen, but instead, when I fail to unlock it immediately buzzes and shows the "try again" message at the bottom, but on success, the phone freezes for about a second.

None of this is a complete deal-breaker. I'm living with it, the phone is still functional and I can generally accomplish what I set out to do.

But the joy is gone.

The clouds parted slightly when I met Textra, a rather popular third party SMS app. As I mention, I had been using Verizon's Message+, a perfectly functional albeit laggy, slightly buggy SMS/MMS app. After being bitten one too many times by a particular bug (receive a text from my brother, tap the notification, and be presented with the message thread scrolled to a conversation about a year old--the new text is at the bottom, but I have to scroll-scroll-scroll down to it), I decided to try Textra.

And WOW. I mean seriously, oh my goodness.

My life has been changed.

I tap the icon for Textra in my home screen, and the app just opens. No perceptible delay. No blank screen or spinner waiting for texts to load, the conversations are all just there. I choose a long-lived conversation (I migrate my SMSs from one phone to the next, so some of these threads are maybe 5 years old), and it just opens, no delay, no jank. Scrolling is smooth, animations are glossy, there are no delays waiting for my keyboard to pop up, there's no indication whatsoever of distress. It just. Freaking. Works.

The joy I have in computing is rekindled by a week of tinkering with a third party messaging app.

And in this exploration of an alternative, I had a revelation.

My slow, janky phone isn't slow and janky because of hardware limitations.

My slow, janky phone isn't slow and janky because it is old. My mid-90s Palm Pilot has instant response times to every button tap, and it is so slow it can't emulate an original GameBoy at 100% speed.

The software didn't degrade over time and need "blown out". That's not how software works.

The real reason my phone is so slow?

Craftsmanship is dead.

My device is so slow because Google et al failed to give a damn.

They had a glance at the size of their binaries, knowing full well they are inching up higher and higher with each release, and pushed the new release out anyway.

They saw their beta run like hot garbage on a 1 year old device, and said to themselves, "oh well, guess the user will upgrade in a year anyway."

They got complaints from their users that their app was consuming too much RAM, making the user's device hot, burning through battery, scrolling full of janky hiccups, and they said "eh, we can't be arsed."

They used a horrid cross-platform framework like Xamarin or Cordova, ignoring the fact that their app neither looks and feels native on either platform, nor runs worth a damn on either.

This isn't just about phones, either.

They knew that their website was getting a little chunky, but they couldn't help themselves installing the newest JavaScript framework, one more dependency atop a mountain of dependencies.

They had the option of creating a native app in a perfectly sensible framework, and chose instead to use an abomination like Electron to bodge some hacky HTML5 solution together into something masquerading as a native desktop app.

They accepted hauling around a half-gigabyte runtime to host their app.

Can we take a time-out?

Is it possible to be basically as productive writing code with fewer layers between the programmer and the metal? Can we accept that some of these frameworks are incredibly wasteful and not worth the huge UX cost incurred?

Can we get back to basics, and reject the idea that just getting to "hello world" should cost more than 50KB?

I want to try.

I'm the first to admit, I've been coddled. I've been writing Java for several years. I've never had to interact with the Win32 API. I've rarely dealt with low-level APIs of any kind. I tend to use libraries for everything I can.

But I'd like to try eschewing all that high level, abstracted mess of layers upon layers, just once.

I've thought of a couple projects; right now the Win32 API is catching my interest, so I think I'll start with a Windows app. Perhaps a music player. It might be nice to be able to port it easily to something else, Android or a Raspberry Pi. I want to hold high standards for it, things like multiple codec support, quick full text search for all metadata fields, sorting by tracks inside albums, gapless playback, zero load time. It's ambitious, and I have no idea if I will succeed.

But I sure think I need to try.

To be continued, perhaps one day...

Return to home