Donald’s Trap

In 1983, I was a hardware designer with a degree in Electronics, and four years practical experience. I thought this made me a firmware designer too. So, initially, firmware was hard work for me, and I produced one bug-ridden big ball of mud after another.

Because I knew what skills a firmware designer needed, and I had those skills, I tried to improve my work by improving my command of them. Of course, it didn’t work. I was caught in Donald’s Trap.

I’ve named this trap after Donald Rumsfeld, an American politician who famously referred to unknown unknowns — the ones we don’t know we don’t know. Donald’s Trap works because you don’t know you’re caught, so you don’t look for a way out. There were skills I needed to be a firmware designer, skills I didn’t know I needed. I didn’t know that I didn’t know, so I was stuck.

I’m not the only firmware designer to be caught like this. Some spend their careers there. I worked for one not too long ago.

Firmware designers are a solitary breed. We don’t seem to socialise, online or elsewhere, as much as our software peers do, so our expertise is less easily propagated. Some firmware designers are hardware designers lumbered with firmware as a side-line. It isn’t only designers who sometimes believe a hardware background is sufficient to write firmware. Employers often think so too.

I escaped by accident, because I love design. At first I thought I was learning all that prissy software stuff for my personal benefit. As I started to really appreciate software design, I also came to realise that this stuff applied to firmware too!

I learned from Cope and Uncle Bob (and many others) about software patterns, OO design, SOLID principles, TFD, DRY, and the like. Finally, my firmware improved. Adding new features became easy. There were less bugs, so I could spend more time doing design. Life was good.


Edited to add: would visitors leave a comment, please? I’d appreciate your feedback. Nice to see you; thanks for dropping by!

Donald’s Trap

5 thoughts on “Donald’s Trap

  1. This has been my experience as well. Only in the past few years have my eyes opened up to the great-big-world of software development out there.

    But where are the firmware guys? The community needs help (like this blog!).

    Love this. Looking forward to more!

    Liked by 1 person

    1. There is no online firmware community that I have found. Perhaps I just looked in the wrong places? You are the first firmware designer I’ve met on line, so: Hi Matt! Nice to meet you!

      Maybe we could use this blog to post and discuss firmware design issues? [I’m not sure if that’s allowed on a blogging site…?]


  2. Hey, nice to meet you too 🙂

    I’ve been hanging out a bit over on the ECE subreddit (, but I think most embedded developers would rather talk about hardware.

    I’m interested to hear more about how you’ve used OO principles in embedded. I’ve done some C# and Java development — so I’m aware of stuff like SOLID and DRY — and would be interested in your experiences. Are we talking C++ here? Or OO-ish patterns in C?


    Liked by 1 person

  3. It seems like I’m not the only embedded guy to start a blog for new years! I agree that spending time learning ‘software’ techniques has made me a much better embedded developer. I found design patterns an incredibly useful idea for architecting code.

    I have just recently been trying to stick my head out and get more involved with the online communities, and it is hard finding non-Arduino/RPi communities – that is until I stumble upon new blogs like this (at Matt’s now above!)

    Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s