Home

Why Modern Embedded Development Sucks

I enjoy building embedded devices - finding a problem that a small chunk of technology can solve. Then it's a case of wiring it together and testing the electrical connections. Finally it ends up with ... writing firmware. And that sucks. Don't get me wrong, the actual software side is fine - it's the toolchain side.

Let me give an example. In the "desktop" world, lets say I want to work in python. I download the python interpreter, create a text file, and away I go. Or maybe Rust. Grab rustup, install cargo, and a bit later I have a local development environment all set up and can start working on my project. That development environment will work all the way from tiny projects through to massive ones, though I may chose to add a few more tools (eg linters) along the way.

Now lets look at the embedded world. I've got a bunch of ESP32's. The simplest way to program them is with the Arduino IDE. Hook them up, hit compile and go. Until you realize that the String class is bugged, you can't specify board settings on a per-project basis, and changing function definitions in header files requires closing/opening the IDE to force it to clean build. Fine for something small, but as soon as the project expands a little it becoes unwieldy
Maybe I can use micropython. To bad I want one specific extra thing not exposed yet - so I've got to build it myself. Cue hours of fighting compiler warnings because apparently my compiler is slighly different to theirs.
Maybe I should use the ESP-IDF directly. Why the heck does it use it's own custom build system??? What is this "idf.py" custom build tool and why does it need to exist? Why is it going and setting up python virtual environments when I want to build C code???? How long is it going to take me to figure this out? Maybe I can use platformIO or ... Hang on, am I using a cloud based system to build a 2000 line program for a microcontroller sitting in front of me? And what is the long-term longevity of said cloud service? It's not unusual for me to want to update firmware months or years later.

My computer is fine for compiling code - it has compiled gigabytes of code. My brain is fine for writing embedded software, and the hardware is all wired up ready to go. But before I can start I have to spend several hours fighting useless problems!