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!