Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time. - Martin Fowler
Continuous Delivery - Introduction
The ultimate goal of any software development organization is to deliver valuable features to its clients on a regular basis. Increasing the speed of new feature releases, while maintaining quality, is what we strive for and is built upon three pillars:
- Agile Software Development
- Feedback Loops
At Datafaction, we recognized that to truly improve both the quality and the cadence of our software releases we needed to implement these foundational elements. However, this was not an overnight or one-time effort; to reach the goal of Continuous Delivery, we need to engage in an effort of continuous improvement. We initially made the change to Agile Development, then added tighter and more frequent feedback loops and did so by gradually automating more and more of the process to create a an overall flow that built in quality, but still enabled a quick pace.
This series of blog posts will explore and explain what these concepts are, how we have implemented them at Datafaction, and how they bring us closer to achieving the goal of consistently delivering value to our customers.
Continuous Delivery – Agile Software Development
In traditional software development multiple teams work on individual areas in sequence to produce the final product. Requirements would be gathered up front, documented, and then provided to the development team. After development was completed, testing would begin and, after cycles of bug fixing and repeated testing, the new feature would be complete. This process would be repeated for any additional features and then included in a release that was delivered to the client.
Agile Software Development takes a more collaborative and iterative approach to producing software. In Agile we put a single multi-disciplinary team together that works closely throughout all stages of development. This means that requirements gathering, development and testing are done by a single team of people that understand all aspects of the feature. The teams consist of developers, testers, analysts and a product owner who determines the acceptance criteria for the feature as well as the team priorities. In addition, these teams are self-managed and self-organizing, they are given the opportunity to determine the best approach to solving a problem and all team members are given equal say in the process. This team structure ensures that we consider all aspects of the project throughout the development lifecycle and that we incorporate the best ideas from all sides of the process.
In Agile, working software is the primary measure of progress. At Datafaction, we work in two week sprints. This means that the team reviews the backlog of features and breaks them down into a set of Work Items that they commit to completing within the two week cycle. At the end of that period, they are expected to be able to demonstrate this completed (and tested) functionality to the stakeholders. Using this method, we can deliver small updates on a regular basis.
Using the Agile Methodology, we can deliver higher quality software more quickly – by ensuring that developers and testers work hand in hand and can demonstrate their working software every two weeks – we provide more value to our customers. In addition, by working in short sprints, we can be more responsive to the needs of our clients. Every two weeks, we can evaluate the priority of the items in our backlog and determine what features would be most valuable to deliver next. We can also deliver functionality incrementally and react to customer feedback in the next two-week cycle.
Agile Software Development is a key foundation to achieving Continuous Delivery of value to our clients. In the next Blog posts, we will look more closely at the other components of this process: Feedback Loops and Automation.