Software Delivery Models

Software development teams have been using different delivery models from their inceptions and achieved many benefits using them. Teams are primarily using three models, with the sole objective of delivering values with faster team agility and less risk.

Continuous Delivery

On the technical side, we can align this model with building our code pipeline using tools (Git, Github, Travis, Jenkins, etc…) to make sure project is always in a deployable state . CD model has changed our earlier belief of waterfall delivery model and code is now being continuously built, tested and committed in delivery cycles.

As team is now delivering continuously, changes are small, segregated and pose less risk in case of failure. Problems are also easily identifiable and easy to fix without impacting complete product/project life-cycle

Incremental Delivery

Incremental delivery is the process of breaking large projects into smaller units which can be released to customer sooner. These smaller units are often referred to as PSPIs – Potentially Shippable Product Increments. Doing this will provide early customer feedback which will help in optimizing the delivery process and achieve better results. You don’t need any specialized tools here but would need to adopt changes in how you plan your project using below three objectives

  • Planning. How can you decompose new features into incremental deliveries that provide customer value. Optimize your schedule around what is most uncertain. Consider what you need to learn most urgently. Failing to plan this way means lengthening your feedback cycles and delaying the time before a customer experiences the value of your work.
  • Feedback. Base your incremental delivery around feedback received. Not just gather that feedback but also act on it. Adjust your plans, clarify your design, or even terminate the project if it’s not moving towards customer business objectives.
  • Discipline. After most of the customer value has been shipped, do you have the discipline to follow through and create a desired product? Base your delivery towards real users needs, learning from real users is the surest way to get there

Progressive Delivery

Progressive delivery is a modern software development and devops practice for gradually rolling out new features in order to limit the potential negative impact and gauge the user engagement with new product features.  For example, first, the changes are rolled out to 1% of users and then progressively are released to more users (say 5% or 7%) before doing the complete delivery. It is built on the foundation provided by continuous delivery model.

Environments and users are the two complimenting factors of progressive delivery. In the case of environments, a user can deliver progressively into environments using canary builds , blue-green deployments or service mesh. When done for the users, progressive delivery limits the changes exposure to the users. At each stage of a progressive delivery, the metrics are maintained and the health of the application is measured. If anything goes wrong, the application is automatically rolled back to its previous stable state.

James Governor who coined this model proposed four building blocks of progressive delivery

  • User segmentation
  • Traffic management
  • Observability
  • Automation

Advantages of progressive delivery model are provided below and may not be limited to just these.

  • The capability to quality control the features as they are distributed.
  • The ability to plan for the failures or issues as only a small number of users are affected if the features don’t work correctly.
  • It facilitates the feedback collection from a group of expert users to revamp the changes before distributing them out to the client.
  • Progressive delivery allows development teams to add more value to the development process and less time in managing the risks.
  • The non-engineering teams, such as marketing or sales, can release the features to the users based on separate business timelines.

We can use many tools to achieve progressive delivery model like WeaveWorks, LaunchDarkly, Petri, SwitchIO, to name a few.

All the best for choosing the best delivery model!!!