If you’re modernizing your organization by embracing DevOps and digital transformation, you’ll need to modernize your approach to software delivery as part of that process. Although developers have been writing applications for decades, the way they organize software development and deployment has changed dramatically over the past ten years or so.
Keep reading for details on what modern software delivery entails, including which stages comprise the software delivery lifecycle and how to organize your team for effective software delivery.
What is software delivery?
Software delivery is the complete set of processes required to design, build, test, deploy and manage software.
The term “software delivery” can be a bit misleading because it may be read to imply that it’s just about “delivery,” or transmitting code into production environments. You may think, in other words, that software delivery is akin to delivering a pizza – that it’s about placing a finished product into the customer’s hands.
The actual act of delivering software is part of software delivery, but it’s certainly not all of it. Instead, when people talk about software delivery, they are using the term in a broader sense. It’s the equivalent of the full set of steps required to create a pizza and bring it to a customer’s home, not just the trip between the pizza parlor and the purchaser’s house.
Software delivery and DevOps
Again, businesses have been building software for decades, and they have long organized that process in a consistent way.
However, it was only after the emergence of the DevOps concept that the term “software delivery” came into vogue. In DevOps, software delivery refers to a specific approach to producing and deploying software. DevOps software delivery emphasizes:
- Velocity: Software delivery processes in DevOps aim to enable rapid production and deployment of code.
- Continuousness: DevOps promotes the concept of “continuousness,” which means that software delivery processes should be constantly in motion. Developers shouldn’t sit idle waiting for one process to finish before they can begin another.
- Feedback loops: In DevOps, the software delivery lifecycle is usually conceptualized as an “infinity loop,” wherein feedback from the latest release of an application is used to inform the next iteration in the application’s software delivery pipeline.
Note, however, that – like DevOps itself – software delivery is a somewhat loosely defined concept. It’s associated with certain goals and priorities, but there is not a specific set of rules you need to follow, or tools to use, to implement modern software delivery. As long as you embrace software delivery processes that are fast and continuous, and that leverage feedback to improve software on a continuous basis, you are meeting the basic goals of modern software delivery.
Stages of the software delivery lifecycle
Although your approach may vary somewhat, most software delivery pipelines can be broken down into several discrete stages, each of which represents a distinct phase in the software delivery lifecycle:
- Design: Working with other stakeholders, developers plan the next set of application updates or feature enhancements. Sometimes, the design process is broken down into sub-processes: One for backend application design and another for frontend or UI/UX design.
- Development: New code is written and integrated into the application’s codebase.
- Testing/quality assurance: The updated version of the application is tested to make sure it meets functionality and usability requirements. Tests may initially be performed on specific parts of the application, then transition to testing of the entire application. Tests usually take place in a so-called dev/test environment, where the application runs but is not accessible to end-users.
- Deployment: The new version of the application is deployed into a production environment, where it is accessible to end-users.
- Maintenance: The deployed application is monitored and managed. Performance or security issues are addressed as they arise, and the application is scaled up or down depending on usage demand.
- Feedback: Data from the production environment is used to help developers design the next round of application updates. This data might include, for example, information about performance bottlenecks or usability problems, which developers can address when creating the next version of the application.
Software delivery managers and other roles
Software delivery involves a variety of stakeholders:
- Developers, who design and write code.
- Quality Assurance engineers, who test code.
- IT operations engineers, who help to deploy and manage code.
- End-users, who use the final software product.
- Business stakeholders, who help define what the software needs to do.
To ensure that everyone works together efficiently, some organizations choose to designate a software delivery manager. His or her job is to oversee the software delivery process and serve as a liaison between different groups of stakeholders.
Another approach is to create roles for DevOps engineers, who work across the various teams within software delivery pipelines to keep operations running smoothly.