Home > On-Demand Archives > Theatre Talks >
How to ShiftLeft in Embedded
Mark Hermeling - Watch Now - EOC 2023 - Duration: 22:54
I'll give a lightning introduction on how to make ShiftLeft work in embedded:
- containerize -everything-
- automate -everything-
- provide scalable compute
- break your software up into components
- invest in unit test
- emulate hardware as much as possible
- Statically analyze everything, constantly
- Optimize developer workflows
Even if you need a fresh start, having reproducible builds and full automation will be a tremendous amount of efficiency gain. So I don't see a big difference between the two to be honest.
Thanks for the great talk. Having a team that enables the Developer Journey is new to me, but it makes definitively a lot of sense.
While containers are a great technology as you pointed out, sometimes they get a bit in the way (possibly because where I work there is no dedicated team :-) ). Alternative solutions like NixOS promise to fix all the dependency detail to achieve repeatable builds without the need for containers. Have you tried them? How would you rate them for embedded software development?
Hi Max,
I am not familiar with NixOS, it seems a bit more tailored towards clouds and multi-language environments. Not sure how well they would work for embedded, it would depend on whether they have the packages available.
Since embedded often depends on licensed compilers, I fear that that is going to limit the applicability. Containers are the best of all worlds here as you have full control over their content and can easily pull them down when you need them.
Hi Mark - really interesting talk. I have been trying to focus more on setting up a better development environment for myself as of late. The challenge is that in the very small company I am in, I am the electronics department. I do all of the hardware and software work by myself. With that in mind, I am usually rushing to just get things designed, fabricated, coded, and tested within the timeline. So I rarely have time to focus on a better or more efficient process to actually do my work. This was OK for a while, but as our projects have gotten more complex and building upon previous work done, I am finding that my current work flow was not built on a stable foundation and I am struggling to keep up. The real challenge now will be to convince my team that I need to be given time to figure all of this development operation out so I can be more productive in the future.
Thanks for the comment Kurt,
Yes, especially in small companies this can be a challenge. We (as in GrammaTech) often do small services engagements to offload the engineering teams and do the integration of tools for them. Something to look into maybe for your situation as well.
Hi Mark, thanks for the talk. One gentle push towards what feels like the right direction. :-)
When you talked about testing solutions, you mentioned the importance of emulators which make testing high-level code much easier. I noticed you did not mention Renode (https://renode.io/) and wondered if you had an opinion on it. Looking forward to hearing from you.
Cheers
Thanks for the pointer to Renode! I had not heard of it before, but yes, that is exactly the type of emulation/simulation that is needed for embedded.
Great, I'll be looking forward to testing Renode in the future; the Zephyr RTOS project has set up a public dashboard of its tests using Renode (https://zephyr-dashboard.renode.io/) which made me discover it. Happy to have shared something interesting today.
Thanks very much, Mark, for your containerize hints concerning a "clean desk". Tool chains depending on locally installed tools should be deprechiated indeed.
Good talk. As discussed in the Peopleware book, something as simple as management providing a quiet room to work in, instead of open-plan, improves developer productivity.
Thanks for the great talk. I can't agree more. I really loved how you mapped how this way of working gives returns for the whole project.
I wonder how this translates to for iterating over existing architecture versus having a fresh start (maybe once in a while) for successive products. It probably varies on a case-by-case basis but would it be better to clean things up and shrink bloat down for every project when you are iterating despite the high load it brings? Will it give meaningful returns on productivity/efficiency/quality, say compared to fixing things only when issues arise?