As a firmware engineer, I’ve seen several themes repeat themselves over the years with regards to design philosophy. I’ve distilled these themes down into a few simple principles that have served me well. They follow the acronym “KLAT,” which is easy to remember if you think of it as “TALK” backwards. Here they are for your reading enjoyment.
Keep it Simple Stupid
The world is a complex place. As an engineer, it’s tempting to make complex designs too. Often, the most effective solution to a problem is the simplest one. More complexity means more problems that can happen and more testing to verify your design. It’s best to start simple, and only add complexity when you can prove you need it. https://en.wikipedia.org/wiki/KISS_principle
For every clever idea that you come up with, someone else has probably already thought of it and has dealt with its unforeseen issues and pitfalls. A quick Google search often shows this. As a designer, re-inventing the wheel can be fun, but leveraging what you can from similar projects will save you boatloads of time and headaches. Don’t forget that your time is valuable!
Doing things repetitively can be boring and drain your soul. This can apply to tasks such as regression testing and stress testing. Machines running procedures remove human error and can run tirelessly. Examples of this include automated build and regression testing every time you check in your latest code. Automating a process may take more time in the beginning but will save time and find more issues in the long run.
“Everything that’s not tested will break.” Many companies think of testing as an afterthought instead of designing it in up-front. Most engineers like designing and coding; test isn’t glamorous or fun. By adding hooks early to enable testing or enforcing TDD (test-driven-development), projects will save tons of time as bugs get fixed or new features get added. Combining this with the “Automate” guideline reduces the burden of testing as well.
I have the “KLAT” acronym taped to my monitor on a Post-It to keep the above principles in my mind at all times. They have never let me down and continue to prove their worth the more projects I work on.