
Software development is an inherently creative process. Many developers compare it to art, and like artists - take great pride in their work. However, creative processes are typically not efficient. The software development process is no exception.
“Current software projects spend about 40% to 50% of their effort on avoidable rework”
-Barry Boehm, USC and Victor Basili, U. of Maryland
Software development is an inherently creative process. Many developers compare it to art, and like artists - take great pride in their work. However, creative processes are typically not efficient. The software development process is no exception, as the quote below clearly indicates.
Given that software development is a business, many software development managers and team leads want to make it more productive and predictable. Yet, they worry that such efforts will frustrate developers and impact the creativity that is vital for successful software projects.
Fortunately, efficiency and creativity can peacefully coexist in the software development process. When the more mundane aspects of development are automated, developers can focus on the creative tasks they enjoy most…and still deliver better software in less time. This
article explains how five industry-standard practices reduce the amount of avoidable waste in the software development process, enabling developers to satisfy business goals without compromising their craft.
Examples of Waste
The first step in moving towards this optimal development zone is identifying the kind of waste that can and should be avoided. Granted, there's some unavoidable waste inherent in the software development process. For instance, examples of such waste include basic R&D that doesn't get productized, prototyping, and so forth.
The scope of avoidable waste, however, is quite substantial. It can include:
Notice the common thread here: a lot of waste stems from late detection of defects that could have been found much earlier or prevented altogether. This applies to all types of defects - including missing requirements, lack of error checking for unexpected user actions, or structural code problems.

Motivators for Waste Reduction
One benefit of reducing waste is that it allows your team to reach a development point that results in reduced development time and a very low percentage of remaining defects. The other tangible benefit of reducing waste is that it improves the professional life of developers. Their job satisfaction typically goes up when they're relieved from having to spend excessive time fixing bugs (unproductive work), and can instead focus on the creative tasks they enjoy the most.
Five Countermeasures to Development Waste
Five cornerstones that have been proven to reduce development waste are:
• Robust development infrastructure
• Consistent coding - personal and team practices
• Consistent peer code review
• Early testing
• Automated regression testing
Finally - and most important - reducing waste in a systematic manner also requires a reporting system that enables teams to track qualitative progress towards their goals for all five of the above countermeasures.The strategies above are explained in the following sections.
1. Robust Development Infrastructure
A robust infrastructure automates repetitive tasks, organizes project activities, tracks project status, and seamlessly collects project data to provide measures necessary for decision making. Most of all, this infrastructure sustains and facilitates the improvement of human-defined processes.
This foundation comprises the following components:
2. Consistent Coding - Personal and Team Practices
Following established coding practices, which may vary from person to person and team to team, significantly improves productivity. These best practices include:
Explicit published guidelines are critical to effective policy enforcement. The most effective way to enforce such guidelines is to check compliance automatically using code analysis tools. Automatic code analysis saves time, reduces the chances of issues being overlooked, and provides a reliable source of data for process monitoring.
3. Consistent Peer Code Reviews
Code review is one of the most powerful techniques to find defects and prevent sub-optimal software. Code reviews engage the human brain, which is a very powerful analysis instrument. Studies show that up to 90% of software defects can be eliminated by human inspections, with the average being around 60%. As a rule, code review needs to be done on any new code or critical legacy code to ensure that issues don't slip through. Historically, in many organizations, code review implementation is impacted by issues such as:
• Lack of consistent coding policies and explicit guidelines
• Review time is spent mostly on validating conformance with coding policy, not algorithm/architecture/reuse
• Issues are not recorded
• Resolution of code review issues aren't tracked
• Scheduling/meeting logistics (especially for distributed teams)
• High cost and induced boredom of participants
Some solutions address these inefficiencies better than others. Focused code reviews are known to work better on average, so a code review checklist (beyond a coding policy) should improve ROI and help address architectural considerations, code reuse, and proper use of components. Taking this one step further, automated code analysis relieves reviewers of the burden of checking compliance with coding policies. Additionally, to ensure that new code always gets reviewed; automating preparation, notification of code reviews, and tracking of issue status further improves the results.
4. Early Testing
On average, fewer than 50% of software defects are structural, and the rest result from missing or incorrectly implemented requirements. Finding such functional defects requires testing: exercising some portion of the software according to how it's expected (and not expected) to work.
"Early testing" is typically done at the unit and component level before the application is fully assembled. The two main goals of such testing are, generally, performing functional validation of implemented code and securing handling of corner cases. Good testing tools facilitate testing of incomplete systems by using automated stubbing at various levels, which is vital for test efficiency at that stage. Consequently, dealing with missing or incomplete dependent components becomes much easier than if you were trying to do it by hand. Again, automation helps productivity.
5. Automated Regression Testing
When many people hear the term "regression testing," they think of activities done by QA or test groups before a software release. This approach is more wasteful and less effective than the continuous testing approach.
With continuous regression testing, the software behavior previously captured by automatically generated and/or user-defined tests is verified by re-running the tests on a regular basis (preferably daily) and comparing the current results with those from the originally captured "golden set." This provides developers with a safety net when they're modifying code: they can rest assured that if they accidentally break existing functionality, they will be notified immediately.
The high value-add of this regression approach is that it's automated. It's impractical to have test groups retest the same thing over and over again every day or every week - they would all quit in a month. Moreover, tests need to be run frequently so that if problems occur, they are detected and repaired without delay. To run frequently, these tests must be automated.
Report and Track Results
The famous saying states that you can't correct what you can't measure. Hence, it's important to assess the impact of any new techniques added to the software development process. A reporting system is a vital component: it can be used both to check the pulse of development and to analyze any changes that result from improvement initiatives.
Any practical system should automatically collect relevant data from the software development process, analyze the data, and make it available to all team members and management in a convenient form - typically via Web access and role-based dashboards with drill-down capability.
Summary
Implementing an Automated Defect Prevention system benefits everyone involved, from the developers right through to the customer. This is not a silver bullet, but through dedication, strong leadership and clear goals to improve quality and productivity Automated Defect Prevention will immeasurably improve the company’s bottom line. The book on Automated Defect Prevention can be found on Amazon!
