Quite a few companies and teams that I encounter have an expectations problem. They have unrealistic expectations for the time and effort that it takes to develop an embedded system. On the spectrum between pessimistic and optimistic, they typically blow past optimistic into the fantasy land zone. The result is often debilitating, stressful, late and buggy embedded systems. What can development teams do to avoid unrealistic expectations? Here are five tips developers can use to help ensure that they set expectations that are realistic and not fictional fantasy.
Tip #1 – Track Project Metrics
My all-time favorite recommendation is that that developers define critical development metrics such as features, estimated effort, actual effort and lines of code just to name a few. Developers and teams can’t set realistic expectations for delivery times and costs if they don’t have any data to help them create their estimates. Keeping historical project metrics provides a baseline and allows a team to go back and see how they performed on other projects, time required to create similar features and should help bring the project expectations back towards realistic. Without any data for comparison, estimates become nothing more than hunches and can vary drastically depending on the teams’ mood that day.
Tip #2 – Don’t Sugar Coat It
Sometimes a project might be for a new client and the team becomes tempted to provide the customer with information and data that they want to hear rather than how it will really go. This may make the customer, or even your project manager, happy in the short term but it will only end in disaster later. Don’t sugar coat estimates. Instead, give the hard facts and provide alternatives on what might be done to mitigate delays or budget overruns. It may disappoint the project manager or end client but in the long run it will result in a better working relationship.
Tip #3 – Consider Parallel Projects
There are times when development teams will properly determine the time and effort required to develop and deliver a project. Fantasyland once again enters the equations because they don’t consider that the team may have multiple projects in process simultaneously. Resources may not be available for an entire project or may be bouncing around. When eighty hours of work needs to be crammed into a forty-hour work week, the projects are not going to be done on time.
Tip #4 – Use a Project Management System
Project expectations are rarely set in stone. They often shift through-out the project and even sometimes based on the mood of the developers and clients involved. One way to make sure that all stakeholders stay on the same page and have the same expectations is to use a project management system that can track the project. Developers can then use burn-down graphs and many other tools in order to track project at least on a weekly basis which will also allow for fine-tuned adjustments to be made to the development cycle. There are plenty of systems available ranging from free open-source projects such as Trac to systems like JIRA that require a subscription.
Tip #5 – Keep in Close Contact
As I mentioned earlier, things change through-out a project and the best way to make sure that everything goes smoothly is to communicate often. If initial expectations were too optimistic, the expectations can be adjusted as new discoveries are made that affect the project. Small adjustments to timing and budgets are far more palatable than major shifts if targets don’t remain moving and end up far from the original target.
People naturally want to be optimistic. That driver doesn’t seem like it should be too bad so I can have it done in a day. There are always unknowns that lurk in embedded system projects that are nearly impossible to anticipate other than the fact that they will occur. Using metrics can help back up estimates and set expectations towards a realistic course but data alone is not enough. Teams need to stay in constant contact, providing updates, reviewing progress and understanding the major challenges they are facing. The product development cycle is iterative and time consuming. Setting the right expectations from the onset can reduce pressure and stress on a team which allows them to perform at their peak which results in not only a better product but a more sustainable team.