Delivering embedded systems on-time is a struggle for many developers and teams. From time-to-time, I’ve struggled with delivering on-time as well. I think it’s part of the human condition or at least the software developers’ condition. After some consideration, I’ve realized that there are generally 3 tips that can be followed to improve the chances that a project is delivered on-time.
Tip #1 – Learn Expectations Management
The developers and teams that I see most consistently deliver on-time are masters at managing expectations. They dig through the weeds, decline the Kool-Aid, and get at the root of what needs to be done. (Yes, what needs to be done, not necessarily what the stakeholder wants to be done! Scotty from Star Trek was a master at this as well!). Once they understand the needs, they clearly lay out a plan and work very carefully to understand that not just the timing is understood, but where things can go wrong, what the hopes are for things to go right and so forth.
I have a colleague who is a master at managing expectations. It’s literally his mantra. I’ve seen him decline working on projects that he really wanted to work on because he couldn’t meet their delivery expectations. Successfully managing expectations means that the stakeholder clearly understands what they are getting and when. At that point, if things are late or go awry, expectations were clearly pie in the sky or something else dramatically went wrong.
Tip #2 – Limit Project Scope
I see a lot of teams and developers aim big. There’s nothing wrong with that. We need a challenge. We need to push ourselves. However, I’ve rarely seen products or projects that try to be the “one ring to rule them all” succeed within a reasonable timeframe. They are often too complex to properly scope out accurately. Too many unknowns pop up that affect the schedule and delivery dates.
This is where I think using Agile can come to the rescue! Having sprints that are targeted at developing specific features or investigations that limit project scope. Who knows how long it would take the properly develop, test and deploy a new space telescope like James Webb (we are still waiting to find out after a decade!). However, having a general timeline that is revised every sprint based on new information that is learned can help fine tune delivery timeframes and help teams to manage delivery expectations.
Tip #3 – Front Load Projects
As much as possible, developers need to front load their projects. There is a lot that can be done up front, before embedded hardware arrives to prove out a system. I often start with an Interface Control Document (ICD) for the system and then move to work out and test as much of the interactions with the system as I can. This often employs either using a development board or even simulating the system on a PC. The more items that can be proven out ahead of time, the better the chances that the timeline will be minimized. (This often requires more up-front spending, which can be an issue for projects that are budget constrained, even though it saves in the long run).
Unfortunately, front loading a project doesn’t always solve the late project delivery. I once worked on a project where I developed my interface firmware and low-level drivers prior to the hardware or interface software ever arriving. The hardware arrived when the project was supposed to be completed, which left zero time for further firmware development. Instantly, the project was late. All the up-front work should have helped minimize further delays, but the interface software was also provided later which then pushed out integration testing and debug for that. The moral of the story, sometimes it doesn’t matter how much effort you put in to make things on time, there will always be aspects of a project that you don’t have control over that you have dependencies on.
I don’t think any of us are alone when it comes to delivering a project late. At some point, it happens to all of us. Some are able to minimize late deliveries simply through sheer work effort and working as many hours as it takes to get the job done. This isn’t a healthy or long-term strategy though. At the end of the day, being on time comes down to managing the stakeholders’ expectations on what will be delivered and when. Managing those expectations incrementally can go a long way in smoothing over timelines and meeting deadlines every time.
I hope that these tips help you to consider what you can do differently to deliver your own projects on-time.