The Downsides of Embedded Software

As a software engineer, I should welcome the increasing penetration of software into more and more everyday devices.  But as a consumer, it’s easy to spot the obvious downsides.

Physical and mechanical connections don’t crash or have bugs.  They usually work well and when they do fail, you can sometimes open up the device to figure out what’s going on (wire came unsoldered, gear broke, etc.).

Embedded software, when written well, is great.  There are a lot of software focused companies that write good software.  The problem is that most hardware companies now have embedded software.  And these companies are not software companies, and they tend to write buggy software, or software with poor user experiences.

These are just a couple examples from our daily life:

  • Our clock radio made by iLuv sometimes crashes when you drop an iPhone into the dock.  This requires “rebooting” the clock radio by unplugging and plugging it back in.  In it’s crashed state, it still shows the time, just frozen at the time of crash.  It also inexplicably continues to play while crashed – the UI is just frozen.  Solution: debug your software.
  • Our Toyota Prius radio system has a physical volume knob – but it’s fly-by-wire.  When you start the car, the radio plays at the volume it was last set at (just like an old school radio).  The problem is, this might have been pretty loud, and twirling the knob down has no effect until the audio system has ‘booted up’, which takes several seconds.  This means you get to listen to a very loud radio while looking at the Toyota logo on your audio screen.  Two solutions: (a) don’t start the actual audio until the user has control over the volume, and (b) allow the user to set a maximum volume at startup, so they won’t get blasted when starting the car.
  • The Prius also has a fly-by-wire shift knob.  More than once, I’ve put it in reverse before the electronics are fully booted.  But unlike a normal car, the Prius does not actually get engaged into any gear unless you are fully booted up.  I do like the Prius, but I still don’t like that behavior.  Our other car is a manual transmission, and there is something deeply satisfying about feeling the mechanical connection between the gears and knowing the whole thing can be done without any electronics.  I have no idea how you’d push a Prius off the road if the electronics system was down. Can you even put it in neutral without booting up?

Let’s just hope that hardware companies bet better at writing software.  A crashed clock radio is one problem, but once software controls items that our lives depend on, you don’t want a crash to lead to a crash.