I call myself a Software Engineer and a Maker. During the days I like to hack on embedded systems of all shapes or sizes. Currently I am employed by Zenseact to make autonomous driving real.
Having worked on systems running Yocto Linux and the Android Open Source Project (AOSP) I am very passionate about software architecture and clean code being the enablers for high quality, reusability, and maintainability. Consequently, I incorporate this mindset and principles into my way of working as I believe they are fundamental for agility and effectiveness.
Usually I spend my evenings on open source projects which I blog about on https://platis.solutions
My favorite ones revolve around IoT, robotics and handheld gadgets where I love to develop the entire product stack. Hardware-wise, this includes everything from the PCB to the physical case around the electronics and software, from the embedded firmware to the cloud.
Additionally, I teach the DIT112 course on Systems Development at the University of Gothenburg, where students learn how to create a system composed of both software and hardware components in regards to development, requirements handling, testing and quality assurance; all that, in an agile manner.
Using open source paradigms to teach system development
Developing a system comprised of both software and hardware components comes with its extra set of challenges. Hardware gets delayed, the team that works closer to the electronics has to sync with the ones hacking on the cloud or the app, arguments erupt over unilateral assumptions about how things should be, etc. On the other hand, it is particularly rewarding seeing your efforts materialized in a physical form and the customers naturally interacting with your precious device.
Software Engineering students at the University of Gothenburg, as part of their compulsory curriculum, are offered a course on systems development. They work in teams and are given a small robot development platform with the task to create a multitier product around it. They are inexperienced, with different availability, priorities and expectations, but full of creativity.
How do we teach them to avoid the common pitfalls we witness in the industry? How do we facilitate collaboration between individuals engaged in separate parts of the system? How do we inspire them to establish a repeatable, well-defined development process? How do we convince them to build a robust and valuable system with the discipline of an engineer along with the freedom of an artist?
In this talk, we are going to illustrate how we address these issues through the adoption of best practices common in open source projects and organizations. Combined with freely available tools, we enable and inspire the students to follow industrial standards and eventually produce better engineers for the future.