Last week, my colleagues and I attended the Agile 2006 conference in Minneapolis, Minnesota. Amongst other sessions, several of us attended the stealth session on Agile practices in the embedded domain. The session was one of the best I attended and I came away with three new, significant pieces of knowledge.
The first discovery, and arguably the most important, is that an Agile embedded community exists. Atomic Object has been practicing Agile in the embedded domain now for about a year, but we are hardly the pioneers. It was good to meet some of people, such as Dan Pierce (Thales) and James Grenning (Object Mentor), who have already identified key issues and worked their way through some tough problems in Agile embedded development. My hope is that we can build on their work and continue to make Agile practices worthwhile in the embedded world.
During the session, the group worked together on identifing and rating Agile practices in the embedded world. For example, one person suggested ‘effective hardware abstraction’ as an important practice, while another offered ‘loosely coupled design.’ After the group was finished rating the items, something very interesting was uncovered: the top five practices were hardly specific to embedded. Instead, the familiar practices of loosely coupled design, demonstratable progress, acceptance testing, etc. all revealed themselves as important. Indeed, in my own experience with embedded Agile, there is very little we do differently. In fact, even giving ‘embedded Agile’ its own category almost seems wrong. Many of the people in the room felt the same way.
Finally, at the conclusion of the session, we discussed why it is the embedded community as a whole has yet to embrace Agile. We had just agreed that Agile practices can and do work in embedded development—-but those of us in the room were already doing it. Someone suggested it must be a cultural thing: the majority of people in embedded development have a notion that embedded is just too different and that practices we use in desktop and web application development, like Agile, simply do not apply. Sure, there are certainly very different concerns, but ultimately we’re still developing software. And the good practices Agile brings us, such as automated unit testing, system testing, flexible design, etc. can be applied to all software.
I found this intriguing, since I had always assumed that yes, embedded and other development is different. But after talking about it and reflecting on my own experience, it really isn’t. So the challenge isn’t making Agile work in embedded; we’re past that. The challenge is convincing everyone else that indeed, Agile and embedded can go together. Going forward, I think the best thing to do is just do it. When we go into a new embedded project, just do Agile. It will work, and hopefully any naysayers will be convinced Agile is worthwhile.
P.S. The full name of the session was “Agile practices and challenges in the embedded world,” but we like to call it the ‘stealth’ embedded session since almost every piece of literature referred to it simply as “Agile practices and challenges.” It was only an accident that a couple of us discovered the session’s true name and realized we should check it out.