Software development was once the province of only specialized, tech-based companies. Now, firms of all sizes and industries regularly engage in these processes in order to create and push forward applications for both internal and consumer-facing purposes. Yet despite the rapid proliferation of software development projects, companies continue to struggle in numerous ways. Notably, a high percentage of these efforts tend to go over budget or are delivered well beyond their deadlines.
Writing for Dr. Dobb's, industry expert Carol Dekkers recently argued that these shortcomings are largely due to a number of commonly held misconceptions. Developers rely upon these mistaken beliefs when estimating the cost and time required for their new projects, and this results in unrealistic expectations.
To overcome these problems, software developers must discard these misconceptions, as well as embrace optimized strategies and tools.
Those who don't learn from history
Dekkers pointed out that numerous studies have found that fewer than one-third of all software projects are delivered on time or at budget. This highlights just how inaccurate most estimates ultimately turn out to be.
One of the most serious of these incorrect notions that lead to such problematic estimates, the writer explained, is that a new project will not fall victim to whatever factors slowed down or increased costs for previous efforts.
"History is glossed over with niceties such as 'well, we hadn't predicted that the hardware would be delivered so late' or 'we didn't count on having to change project managers part way through,'" Dekkers wrote. "The fact is that history does repeat itself if nothing is done to change it."
She stated that past projects are actually very good indicators of likely future outcomes, and software developers need to acknowledge the likelihood of unforeseen problems arising when creating estimates.
Looking on the bright side
On a related note, Dekkers argued that software developers too frequently adopt an overly optimistic attitude toward their projects. Just like they ignore previous problems, developers have a tendency to assume that future progress will be smooth sailing. They overestimate their own capabilities and underestimate the likelihood that requirements will change, interruptions will occur or other events will arise that can slow down progress. Accurate estimates demand acknowledgement of real-life conditions, and these are often messy and difficult to predict.
The perfect teamwork
Finally, Dekkers noted that software developers frequently embrace the misconception that their team will perform every task successfully on the first attempt. This is virtually impossible, as conditions change rapidly and frequently.
"There are always missing pieces where requirements were not quite right (the users didn't put all the fields on the report layouts), the business changes (this is a given), designs have to be updated (data was not available as anticipated), mistakes are made (we're dealing with humans here) and new things come up (additional functionality needed)," Dekkers wrote.
Teamwork is obviously critical to any software development effort, but even the best team cannot overcome all of these inevitable issues without delay or additional expense.
However, Dekkers acknowledged that there are steps that firms can take to mitigate these various factors and, in doing so, improve their ability to meet estimates. Among the most important of these is emphasizing collaboration and strategies such as Agile. Maximizing collaboration increases the team's ability to overcome the unforeseen problems that arise during development.
For such efforts to prove successful, though, firms need to invest in and deploy the right tools. For example, code review solutions enable multiple developers to look at and work on a single piece of code at the same time. This greatly increases the chances that an error will be caught before it becomes a serious problem, thereby streamlining the overall development process. Going even further, peer code review strategies enable developers to share knowledge throughout their teams, which helps members to gain new skills and understanding that will improve future software development efforts.
While these tools and strategies cannot completely counteract the problematic misconceptions Dekkers highlighted, they can go a long way toward mitigating their effect, improving estimations' accuracy by upgrading performance.