"Bugs in your product are a symptom of bugs in your process - if you focus on fire prevention, you'll reduce the need to fight fires" - Henrik Kniberg, Lean from the Trenches
Quality in agile software development is not negotiable. Teams should strive to deliver a fully functioning, high quality, potentially shippable product increment every iteration. In defining quality in software, we not only refer to the cumulative defects of a system but other attributes that combine to satisfy a customer’s needs. This article focuses on methods and practices that instill a sense of urgency on the topic of quality in your teams and agile projects.
Integrating these six factors in your development process will help improve the quality of your digital products:
1. Cross Functional Teams
Cross-functional teams can be challenged with a problem and self-organize around it through completion with no outside help. The team may be comprised of User Experience Designers, Testers, Developers and Business Analysts that, as a team, produce a fully functioning feature of a system.
What this allows is the elimination of bottlenecks and an increase in the exchange of information through conversation. Developers are not dependent on stale requirements documents that were written months before. Completed code does not await a testing phase for bugs to be identified. All quality checks occur during an iteration and should not be accepted as completed work if there are issues with the provided functionality.
2. Definition of Done
The Definition of Done (DoD) is an artifact the cross-functional team uses to gauge the completeness of a requirement. It is a roadmap of expectations that clarifies when an item can be marked as done. Items you may find on the DoD that help to instill quality in the software could be:
- Code was peer reviewed
- Automated unit tests are written
- A tester has confirmed the functionality
- Code is well written and consistent
- Functionality fits the product vision
- It has been reviewed with the customer
Not obeying the DoD trades short term gain for long term growth often leaving behind a trail of technical debt that will eventually catch up. Adhering to it ensures that you are setting yourself up for a bright future not plagued by urgent production bug fixes.
3. Automated Testing
Automated testing is bullet proofing your future. Modern advances in technology have given us the ability to not only write unit tests against functioning code but automate tests against a user interface. These tests identify problems early in development of a new requirement which makes integration later much simpler. On some agile software testing projects you may even consider them a form of documentation.
4. Continuous Integration Best Practices
Continuous Integration (CI) is the practice of merging developer working copies frequently to prevent integration issues. Coupled with automated unit tests and automated build servers quality can be assured through automated means.
Modern code repositories come with the means to make CI a seamless part of what you do. It is essential to use them to the utmost potential. Encourage developers to “check-in” code frequently (several times a day if at all possible). Write great unit tests against business logic and automate them in builds.
5. Test Driven Development
The practice of test driven development proposes that a developer start by writing a failing automated unit test against a new requirement. They then continue to develop that requirement until the automated test passes.
The major benefit to this practice is the simplicity of design that results from its use. Developers write just enough code to make the unit test pass. Small chunks of functionality are delivered very incrementally leaving a trail of automated tests.
6. Pair Programming
Pair programming is a method by which two developers sit at one computer and code as a unit. One acts as the ‘pilot’ and does the typing while the other as the ‘navigator’ guiding and offering advice. This method is proven to reduce defects, increase the design quality and is a great learning mechanism for developers.
According to The Agile Alliance, up to 32% of organizations report that "delivering customer value" is the most prioritized aspect of Agile projects. One way to fully realize this enhanced focus on the customer is through rigorous Agile software testing using the tactics above.