๐ช๐ต๐ ๐๐บ๐ฏ๐ฒ๐ฑ๐ฑ๐ฒ๐ฑ ๐ฆ๐๐๐๐ฒ๐บ๐ ๐ก๐ฒ๐ฒ๐ฑ ๐๐ฒ๐๐๐ฒ๐ฟ ๐ฃ๐ฟ๐ผ๐ฐ๐ฒ๐๐๐ฒ๐ ๐ฎ๐ป๐ฑ ๐ฃ๐ฟ๐ฎ๐ฐ๐๐ถ๐ฐ๐ฒ๐ ๐ณ๐ผ๐ฟ ๐๐ฝ๐ฝ๐น๐ถ๐ฐ๐ฎ๐๐ถ๐ผ๐ป ๐๐ฎ๐๐ฒ๐ฟ ๐๐ผ๐ฑ๐ฒ
Last week, I shared an observation that the application layer in embedded systems is often overlooked โ especially compared to low-level work like drivers, BSPs, and microcontroller setup โ and why I believe that is the case. (That post is linked here) ๐ ๐ช๐ต๐ ๐๐บ๐ฏ๐ฒ๐ฑ๐ฑ๐ฒ๐ฑ ๐ฆ๐๐๐๐ฒ๐บ๐ ๐ก๐ฒ๐ฒ๐ฑ ๐๐ฒ๐๐๐ฒ๐ฟ ๐๐ฝ๐ฝ๐น๐ถ๐ฐ๐ฎ๐๐ถ๐ผ๐ป ๐๐ฎ๐๐ฒ๐ฟ ๐๐ฒ๐๐ถ๐ด๐ป
In that post, I suggested we could elevate the quality of the application layer in embedded systems by adopting proven design techniques from the desktop, mobile, and enterprise software domains.
๐ ๐ ๐ผ๐ฑ๐ฒ๐ฟ๐ป ๐ฃ๐ฟ๐ผ๐ฐ๐ฒ๐๐๐ฒ๐/๐ช๐ผ๐ฟ๐ธ๐ณ๐น๐ผ๐๐ ๐๐ฎ๐ป ๐๐น๐๐ผ ๐ ๐ฎ๐ธ๐ฒ ๐๐บ๐ฏ๐ฒ๐ฑ๐ฑ๐ฒ๐ฑ ๐๐ฒ๐๐๐ฒ๐ฟ We can go even further by adopting workflows from the other domains to improve quality:
- Agile-style development: iterations, demos, early feedback
- TDD / Unit testing: validate logic without hardware
- CI/CD pipelines: build/test on every commit
- Static analysis & coverage tools: get feedback and metrics
These help us test, demo, and gather feedback early, building confidence that the behavior is correct and intentional.
๐ก ๐ฃ๐ฟ๐ผ ๐ง๐ถ๐ฝ: ๐ฌ๐ผ๐ ๐๐๐ก ๐ง๐ฒ๐๐ ๐๐ฝ๐ฝ๐น๐ถ๐ฐ๐ฎ๐๐ถ๐ผ๐ป ๐๐ผ๐ฑ๐ฒ ๐๐ฎ๐๐ฒ๐ฟ ๐ช๐ถ๐๐ต๐ผ๐๐ ๐๐ฎ๐ฟ๐ฑ๐๐ฎ๐ฟ๐ฒ Ideally, these processes and workflows are applied across all system layers, but even limiting them to the application layer yields major benefits.
This is done by isolating application logic from hardware:
- Run on PC or CI (dual-targeting)
- Stub/mock interfaces (GPIO, I2C, UART)
- Simulate inputs (sensors, user events)
This enables early validation of application logic and lowers integration risk when the hardware becomes available.
๐ง ๐ช๐ต๐ฎ๐โ๐ ๐๐ผ๐น๐ฑ๐ถ๐ป๐ด ๐จ๐ ๐๐ฎ๐ฐ๐ธ?
- Lack of exposure to modern processes/ workflows and their benefits
- Perceived simplicity of application logic
๐ง ๐๐ฒ๐โ๐ ๐๐ถ๐ ๐ง๐ต๐ฎ๐
- Teach modern software practices in embedded education
- Cross-pollinate ideas from desktop, mobile, web
๐ ๐๐ถ๐ป๐ฎ๐น ๐ง๐ต๐ผ๐๐ด๐ต๐๐ Modern workflows like TDD, CI, and agile iteration help us build embedded applications that are higher quality in less time.
๐๐ฒ๐๐๐ฒ๐ฟ ๐๐ฟ๐ฐ๐ต๐ถ๐๐ฒ๐ฐ๐๐๐ฟ๐ฒ + ๐๐ฒ๐๐๐ฒ๐ฟ ๐ฃ๐ฟ๐ผ๐ฐ๐ฒ๐๐ = ๐๐ฒ๐๐๐ฒ๐ฟ ๐๐ถ๐ฟ๐บ๐๐ฎ๐ฟ๐ฒ.
What tools or practices have you brought into embedded development from other domains?
By @Greg Burk, cross-posted from LinkedIn
#EmbeddedSystems #FirmwareEngineering #WolffElectronicDesign