Walk us through your background. (Interests, degrees, work history)
I’m an embedded software engineer. I went to school at Harvey Mudd College where I took courses in applied computer science and systems engineering (yay Fourier!). I had no idea I was setting myself up for digital signal processing. I worked at one very large company for several years at the start of my career. From there, it has been mostly startups, some of which got big, some of which never got off the ground.
I’ve shipped consumer products and learned to save every penny of hardware; medical and aviation equipment and demonstrated to government agencies how we thought about safety throughout the process; and research gear and helped scientists explore the world.
I like the smallest companies the best, where my diverse skills can make a difference. And I like the companies that have neat applications.
I wrote Making Embedded Systems for O’Reilly. I co-host the Embedded podcast about making embedded systems more approachable (and diverse). I recently started teaching a cohort-based course in embedded software for Classpert. Mostly, I’m an embedded software engineer through my consulting company, Logical Elegance, Inc.
Please describe your path into embedded systems.
When I started working, it was on servers monitoring systems. I kept wanting to get closer to the hardware. I didn’t know the terms firmware, embedded system, or bootloader. It was just more fun to solve those sorts of technical puzzles.
In that same large company, I moved to a labs/research division where I wrote a motor driver. The first time a motor moved because my software controlled it, I was hooked.
I love the feeling that my code can change the physical world.
What is Logical Elegance all about?
Logical Elegance, Inc. is the consulting firm I run with Christopher White. We generally work with small companies to solve embedded systems problems. We like debugging crash bugs, designing system architectures and choosing technologies, and paper-napkin-to-manufacturing development.
We’re usually quite busy, but we’re open to hearing about new and interesting problems or applications.
Describe the most challenging embedded systems problem you’ve come across in your work. Walk us through what stumped you, and how you eventually solved it.
It always comes down to people.
Oh, sure, working with buggy alpha silicon or crash bugs deep in a vendor’s library, those feel awful and last far too long. But they are learning experiences. I’m a huge believer in a notebook and the scientific method for difficult debugging. I work one step at a time and frequently organize what I know, what I don’t know, and what changes I can make to gather information.
But trying to explain why specifying a chip that can only be programmed in assembly isn’t a good idea even if it is slightly lower power? Or describing a complex multi-pointer circular buffer with DMA system to a new college grad? Or telling managers that what they thought was a two hour task is more likely to take a few weeks?
People are hard. Through experience, I’ve gotten better at patience and listening. I’ve taught myself to read emails in a robotic voice so I don’t add connotations that aren’t there. I remind myself that other people like to start a conversation with small talk before getting to the good stuff. I was amazed to learn about scripts (Captain Awkward is awesome). I think I’m getting better but people are still much more difficult (and exhausting) than technology problems.
How did the embedded.fm podcast come about? What has the journey been like?
We were only going to do six shows, just to see what the world of podcasting was like. It was a learning experiment, not something we thought anyone would listen to. Somehow, 400 episodes later, the experiment continues.
I have learned so much. There is something wonderful about getting industry experts on the show so I can ask them all of my questions. They tell me about other career paths and new technologies. At the same time, I get to promote my not-very-secret agenda of increasing diversity in the voices that talk about technology.
Mostly though, I’ve found friends. I didn’t expect that. I’m not a joiner, I don’t “do” communities. But apparently, that is past tense because I found a community of interested and interesting engineers, educators, artists, and makers.
What’s your day-to-day like?
I stare at my computer too much these days. I used to do more field work, melting my hiking boots in rattlesnake country or being upside-down in a NASCAR driver seat as the pit crew got the car ready to race.
But now, well, I work from home so my environment is set up just-so with my tools in reach and a hoard of dev kits in the garage. It is quiet and I can go for walks in a forest or at a beach. It is pretty idyllic (when I manage to look up from the screen).
I read, write code, read code, write words, teach, talk to my partner about work, and take walks to think about the podcast, work, and life. I don’t have a set schedule, it works for me though I do have a never ending series of to-do lists.
What’s the biggest megatrend within the hardware industry, in your opinion?
There has been a scramble to port software to different chips (and different vendors). I’m hoping this will lead to better HALs as people argue for more consistency across vendor platforms. I think it will also push the poorer IDEs to have more modern features as folk try out different options.
I also hope that with hardware taking so long, we can finish the embedded software before production and stop forcing customers to do a firmware update as the very first out-of-box experience. We’ve always wanted more time between prototype and production. I hope folks are putting it to good use.
What are your thoughts on platforms like Arduino and Raspberry Pi, as it relates to embedded systems?
I love ‘em. These are the starter kits, the LEGO blocks. They are awesome for playing. They let people try out embedded systems without even knowing the term. I enjoy being able to hack something together to see if it works. I deeply appreciate the standardization of APIs in the Arduino world.
However, the Arduino UNO is exceptionally expensive for the features it provides, it doesn’t make sense as a part inside of a product. The Arduino IDE doesn’t have the programming features that even crummy embedded IDEs have. And don’t get me started about LGPL licensing and what that means for your code.
What is your least favorite embedded programming language, and why?
C/C++. It is hard to learn, it isn’t safe, it is too easy to make difficult to debug memory errors, and there is nothing to make concurrency robust. Unfortunately, it is also my favorite embedded programming language.
What are some interesting startups in the industry that you admire?
I think (hope) we are on the edge of a tools revolution in embedded systems. The IoT management platforms like Memfault, Golioth, Lager Data, Toit, and Mender.io bear watching. They are not only working on firmware update and node management, the tools they create will likely simplify error logging and distributed systems architecture.
I want to believe in energy harvesting like ONiO and brain interfaces like Neuralink. I’m not sure though. Maybe I should invite one of their engineers on the podcast to tell me more…
How do readers get in touch with you?
On Twitter: @logicalelegance
For podcast related inquiries: contact link on embedded.fm
For work related inquiries: contact link on logicalelegance.com