How to build production-grade embedded systems
"Production-Grade" Is Relative
First of all, production-grade means differently from companies to companies. I've been working in 5 different companies and they had different standards.
Yes, they want embedded systems that are:
- Robust
- Reliable
- Efficient
- Maintainable
- Safe
- Secure
But I could say they all have one additional word for each point above. And that word is "enough-for-our-case" (okay, it's actually 4 words). Updating the points above:
- Robust enough
- Reliable enough
- Efficient enough
- Maintainable enough
- Safe enough
- And secure enough...
...for our case.
You see, that 4 additional words immediately hint that production-grade is all relative. You don't need to use automotive standards to your IoT systems.
and you CANNOT use hobbyists standard to your medical-grade heart pacemakers.
You Should Define What Production-Grade Means
Knowing everything is "enough for our case", that means you need to understand the limit, what's the acceptance criteria of a feature?
Reliable can mean:
- It will run for 3 months straight without a single crash
- Or it will keep transmitting data without data lost
Define those first.
Can you use Arduino hardware for Production-Grade embedded systems?
Absolutely yes, if your project is mostly indoor, non-humid, has stable power supply, Arduino can run for impressively long time. If you read forum posts, you will find many hobbyists/engineers managed to run their project with Arduino hardware for months!
Can you use Arduino software (framework, IDE, etc) for Production-Grade embedded systems?
Good question. And the answer is yes.
Arduino framework is just like any other framework. It's just a tool. The quality of your embedded systems is only the matter of how you use Arduino framework to your project.
Using complicated SDK from Texas Instruments doesn't mean your embedded project will be automatically production-ready. That's not how it works.
But using Arduino framework can make your embedded project production-ready when you add proper file structuring, make the source code modular, add adequate unit testing, using proper coding standards, etc. Basically all the embedded software techniques to make the project's quality skyrockets.
So production-grade is about techniques, not just the framework.
Beware of Arduino Framework License
The only downside of Arduino framework is the licensing model.
It uses GPLv2 license, although you're not required to release your embedded project source code, you're obligated to provide object files (those *.o files) so people can recompile your firmware and reflash their modification into your hardware.
For me, that's just ridiculous practice for embedded project. You can't just recompile and reflash, and expect it will work flawlessly. It isn't desktop program, it's an embedded software.
Anyway.
If you're using Arduino framework, take an extra attention to the license.
How to build production-grade embedded systems?
Simple (but not easy, mind you). The solution is by acknowledging that there are "tiers" in embedded systems projects. And you apply that tier's standards into your embedded project.
And I think the easiest way to communicate this concept is by drawing a matrix diagram (nobody has done it, so I will draw it myself). Here you go:

One thing you need to remember is this: choose your tier wisely.
Because overshooting (applying tier 4 standards for your tier 2 project) wastes time. And undershooting can be dangerous or damaging your company reputation (e.g. picking tier 1 standards for your tier 4 project, which I'm 100% sure you're not allowed to do anyway).
We can explore how each tier mean massive difference in the firmware source code, the CI/CD pipeline, the docs template. I can write more deeply on this.
But for now, I'm too lazy to prepare the material (hey, becoming a teacher isn't easy, you know!)
Whenever you're ready, there are 2 ways I can help you:
1. Becoming Embedded Freelancer Book. Learn how to earn more money (even more than your main job) working on freelance projects using a proven path explained from an embedded engineer's point-of-view.
2. Firmware Development Workflow Guide. Upgrade your workflow to achieve efficient development, consistent code quality, robust firmware, and skyrocketed your productivity as an embedded engineer.