Yeah, It Does

It’s another weekday during COVID-19 quarantine. Day 50? 55? I lost count. To help keep myself sane I’ve taken up meditation. It’s good for my soul on rough days like this. I’m frustrated. Between the trains, birds, and my upstairs neighbour’s AC I snapped and couldn’t sleep last night. I wasn’t very productive at work today and it’s got me wound up. Meditate, that’s what I’ll do; inner zen the crap out of my day.

Let’s Get Down To Business

Unless I can drown myself in the sound of rain droplets there will be no peace. I use [well known meditation app] on my phone to keep me focused.

Walking over to the center of my room, I pull out my phone, gently sit on my rug, and click the app. And it’s blaring the calm rain sounds in full tinny phone glory. Ironic. Can I turn it off? No. Not without turning it off during the meditation session.

Have You Tried Turning It Off And On Again?

I bolt up in a huff to get my wireless headphones. I turn them on and the robotic voice chimes in:

Battery 20%. Connected to… the-best…

Yes, I named my phone the-best.

Peace and quiet at last. Wait, where’s the rain sounds? F**k. I click on a meditation session for the day; no sound. Restarting the app and trying again also doesn’t work. Maybe it’s a problem with the phone? I try Spotify, nothing. Okay, resetting the phone’s Bluetooth and the headset should work.

Battery 20%. Connected to… the-best…

and ssmith-lt

And ssmith-lt?

Can I Find My Inner Peace Now?

New theory, my work laptop is hogging the Bluetooth connection. Did I mention the headset was using Bluetooth? I didn’t need too, what other substandard protocol would it be using?

The real question is, why is my laptop active? Its lid is closed. Because I think it’s relevant, it’s a Mac work laptop. I open it up to take a look. Yup, it’s connected to my headphones. I try sleeping the laptop from the system menu. It’s still connected. Why is a sleeping computer keeping active Bluetooth connections?! I’ve got to shut the laptop down. The sea of browser tabs makes it pretty clear I’m not going to do that. Now I’ve got a headache.

After a few choice words I realize I can shut off the Bluetooth driver. Good riddance.

Victory?

Ticked off I plop down on the floor, turn on the headset, open the noisy meditation app, and boom. Sound. Finally.

On second thought, I’m not in the mood.

Bad Design

I had my mom on the phone when I first complained about the meditation app sound triggering on app open. We decided we would start to meditate together. We downloaded the same app and started it up together. I was frustrated at the noise, she was relaxed by the sounds of nature. She couldn’t understand why I didn’t like it. “It should never do something so intrusive, especially without the option to turn it off” I said. “You’re just whining.” Two weeks later were on the phone ready to start our ritual. We both open up the app and… “Ugh. You were right. I hate this stupid noise.”

As software developers we have a responsibility to understand how our products impact people. Not today, and not tomorrow, but for as long as that product is in use and however it is being used. I knew the sound playing on app open was terrible because on some future day when I was in a bad mood and trying to calm down it wouldn’t be cute. And if I felt like that, others will too. Plus who has high quality sound from phone speakers these days?

When you review code and design features, you have to understand how it impacts your users. You also have to make it usable.

Bluetooth is a great example of something that is barely usable. How many people do you know that have had Bluetooth issues? Have many have you had in the last year? Month? Week? It’s everywhere and yet seems to work properly nowhere. Bluetooth is always the first thing to get flaky on all my phones. Some of the issues I’ve encountered are so obscure that I’m not sure a non-developer could solve them. How is a regular user supposed to know that a MacBook can ‘hog’ a Bluetooth connection? How is a sleeping computer keeping an active Bluetooth connection? That’s absurd! It shouldn’t be this hard. With so many Bluetooth devices being supported by dozens of companies, how has nobody figured this out yet? It was invented in 1989!

Software Quality

Why is it that software just doesn’t seem to work anymore? It seems like every piece of tech I use must be turned off and on again. Machines have never been faster, tools have never been better, and people have never had more access to information. Why is it that we can’t make things work anymore?

My University professor once told me that he felt bad for my generation of programmers. In his day, he could open up the back of his PC and follow the data lanes across the big circuit board. He could see every logic gate they passed through. “I used to write formulas in code and trace the execution path on silicon”, he said.

Current processors are intangible for programmers. Frankly, they are intangible to hardware designers too. I’m confident in saying that no single person could understand the design of a modern processor from front end unit to logic gates and circuit layout in its entirety. When it comes to building modern hardware, each person has their own specialty and knows little about anything outside of it. Not to say that ‘little’ implies a small amount of knowledge. It’s small in comparison to the what there is to know laid out on silicon.

It’s an entire field of study to understand something as fundamental to good programming as cache locality on processors. It’s so hard, that it’s a feature to a language when you have limited control of it. Not because it doesn’t matter, but because you can’t do anything about it. Picking certain languages implies from the get-go that you are foregoing control. Write whatever you want to your hearts content! It’ll be slow anyway! And yet modern processor design is fast enough to allow for most non-performance driven code to run reasonably well. I’m looking at you and your multiple second startup time Microsoft Office.

Yet never has programming been so easy. Anyone can google “python tutorial”, pick any hit, and be running a reasonable program in an hour. Assuming environment setup is smooth. We all know how that goes. In theory this gives people much more time to get to the real meat of programming and what it means to write good software. On the other hand, maybe that’s the problem. Is it so easy to program now that it encourages laziness? More on this later.

I think the real meat of the issue is two fold: companies want to ship products first and foremost, and the people writing those products aren’t invested in the quality of the products. The number of times that I’ve seen a programmer work in a language they don’t understand or a product they barely know just because the team needs to “get something working” is crazy.

From a language perspective, writing Python when you don’t have much experience could arguably be a reasonable expectation. But JavaScript? You could easily write spaghetti or overwrite an existing identifier. Inheritance as a prototype chain? Good luck. And let’s not get started on JavaScript WTFs. And asking someone who doesn’t know C++ to write it is asking for trouble. What is undefined behaviour? Modern memory management semantics (std::unique_ptr1)? Optimizing allocations (std::vector::reserve2)? Copy and move semantics? There’s a lot of ways to write functional, but really poor, C++.

On the other hand you have many people working on projects where they don’t have the full picture. Being thrown into a half a decade old codebase and told to implement a new feature hardly prepares someone for doing it well. Sure, it can be done. In industry this is done all the time. As far as a lot of companies are concerned, at the end of the day it’s about completing the feature. Completing it well is a bonus, hopefully served by the senior team only by their sheer experience with the system.

Is this what’s happening en mass; companies throwing bodies at products to ship faster?

Is that why I can’t meditate?