What does “software delivery” actually mean?
November 28, 2021
“In enterprise organizations, software delivery is essential for the efficient and stable delivery of core capabilities to the business, and it is the driving force for the innovation and differentiation of new services and products to the market.”
—Alan Brown, Software Delivery Thought Leader
In recent decades, businesses have gradually shifted from rigid traditional workflows to more pliable approaches emphasizing flexibility, adaptability, and communication. This has especially been the case for IT companies.
As we’ve explained in a recent piece, the main reasons for the shift to more flexible operations are globalization and the rapid development of technology. In today’s fast-paced and ultra-competitive markets, businesses cannot survive if they don’t continuously adapt to the evolving requirements of their markets. And because agile development and its derivative approaches allow companies to respond to changing environments quickly, they are dominant in the software industry.
Software delivery is an approach that can reduce risk, help software companies adapt to ever-changing trends, and ensure that their efforts continue bringing results month after month. However, not every business understands what software delivery is and how exactly it can benefit them.
What is software delivery?
Many definitions of software delivery exist, but they all come down to one thing – software delivery is the process of making software products and delivering them to end users.
Contrary to what its name may imply, software delivery isn’t concerned with just the rollout stage of software to the market. It is a far broader concept that incorporates the following stages of software development:
Steffens, et al., (2018, May, p. 2) described the detailed relationships between the Software Delivery Process, Model, and System (comprising Software Delivery Management-SDM):
Balancing the relationship between these three entities is the critical success factor for successful software delivery. Software delivery can be considered synonymous with concepts such as the software development lifecycle (SDLC) due to the overlap in their goals and structure.
Today the evolving expectations, challenges, and demands on enterprise software delivery suggest (Brown, 2013, p. 1):
- Economic pressures have focused the attention of IT management on cost-cutting activities, severely stretching existing delivery practices.
- New organizational models are required to support software delivery that spans geographic boundaries and integrates software supply chains.
- Growing client demands, and the great variety of those demands, require the development of new services and improved access to existing capabilities.
- A primary focus for the coming years will be balancing the need for governance and control with increased flexibility and agility in enterprise software delivery.
What is the goal of software delivery?
The end goal of software delivery isn’t the production of an application for the sake of novel features or incredible technological solutions. Unlike software development, software delivery isn’t concerned with just making software. Instead, the four ultimate goals of software delivery are to:
- Meet the business goals of stakeholders (competitive advantage). These business goals are typically associated with the generation of revenue and the maintenance of the competitive edge, whether in the long or short term.
- Meet the software reliability requirements of the enterprise (reliability). Software reliability is the probability of failure-free software operation for a specified period of time in a specified environment.
- Meet the evidential requirements from the implementation of high-quality code (quality). Software code quality is primarily measured by evaluating the volume and criticality of production defects. In Agile development, testing has embraced test-driven development (TDD) and behavior-driven development (BDD) practices to produce high-quality software and reduce the number of defects.
- Meet the needs of the end-users via the delivery of working software (usability). Software should satisfy customers today and have room for growth to be able to adapt to changes in market trends and consumer demand tomorrow.
To meet these four goals, software delivery ensures that software is produced as quickly as possible with as few resources spent as possible and balances agility with efficiency. Therefore, software delivery can help businesses develop innovative solutions to their customers’ issues faster than their competitors.
At the same time, software delivery workflows should also keep the needs and desires of software development teams in mind because these teams ultimately create the mutually-beneficial connection between stakeholders and consumers. Communication, encouragement, and appreciation are essential aspects of modern-era software development, and they should be cherished and encouraged in software companies.
These elements of software delivery have resulted in a number of toolsets to achieve success:
- DevOps—A DevOps environment is based on principles such as a culture of collaboration, measurement of development efforts, and system health monitoring. Loukides (2012) defined this approach as:
“a culture, movement or practice that emphasizes the collaboration and communication of both software developers and other information-technology (IT) professionals while automating the process of software delivery and infrastructure changes. It aims at establishing a culture and environment where building, testing, and releasing software, can happen rapidly, frequently, and more reliably.”
- Continuous Integration (CI)—Fitzgerald and Stol (2017, p. 7) defined this process as:
“…a typically automatically triggered process comprising interconnected steps such as compiling code, running unit and acceptance tests, validating code coverage, checking coding standard compliance and building deployment packages.”
- Continuous Delivery (CD)— Fitzgerald and Stol (2017, p. 7) defined this process as:
“… the practice of continuously deploying good software builds automatically to some environment, but not necessarily to actual users.”
All of these processes and approaches have also spawned other components of the “continuous everything” movement within agile development: continuous deployment, continuous verification, continuous testing, continuous compliance, continuous security, continuous evolution, continuous improvement, continuous innovation, continuous experimentation, etc.
How can software delivery enhance agile development?
The twelve priorities or principles of agile development, as a reminder, are as follows:
- Continuous customer satisfaction.
- Adaptation to changing requirements.
- Frequent delivery of working software.
- Communication between stakeholders and developers.
- Supportive and collaborative development environments.
- Face-to-face meetings and communication.
- Working software as a measure of progress.
- Sustainable development over the long run.
- Technical excellence and good software design.
- Simplicity and efficiency.
- Self-organization in teams.
- Continuous improvement in teams.
If we were to view these principles more broadly, agile development (along with related approaches) emphasizes:
- Flexibility and adaptation to change.
- Continuous evolution and improvement.
- Communication and collaboration.
- Healthy working environments.
- Efficiency and longevity.
- Customer satisfaction.
How is all this related to software delivery?
The agile-centered trends of the recent decades have significantly impacted the process of software delivery. In fact, the effect of “agilization” can be considered from two viewpoints:
- On the one hand, market trends have forced businesses to replace rigid development practices with more flexible approaches. This means that software delivery workflows have had to evolve to conform to the needs of agile development.
- On the other hand, software delivery has become the very tool that allows businesses to stay compliant with the aforementioned twelve principles.
The second point flows naturally from the first one because it is the need for flexibility that amplifies the role and importance of software delivery. Brown (2013) proposed a framework of activities for an enterprise software delivery organization as illustrated in Figure 3:
Because software delivery stretches from conceptualization to deployment and maintenance, it allows teams and businesses to adapt their software development pipelines to meet global goals. Software delivery helps companies ensure that the stages in their workflows aren’t built around isolated milestones and are working in unison to satisfy both customers and stakeholders.
Software delivery allows teams to meet business goals efficiently and effectively in time and within budget. However, it takes effort to construct a working and efficient software delivery process.
As a first step toward delivery-centric operations, businesses can try using software delivery simulation. Simulation of software delivery can be beneficial in that it enables teams to:
- Figure out if their current workflow meets the business needs of stakeholders.
- Identify bottlenecks and areas that need optimization.
For example, Dlugi, et al. (2015, September) proposed a model-based performance change detection process using modeling and simulation methods to evaluate different software versions' performance metrics.
D’Ambrogio, et al., (2018) introduced an enabling tool (see Figure 4) to evaluate and compare different CD choices against requirements through effective implementation of simulation techniques and virtual testing. Modeling and Simulation (M&S) techniques discussed were based on the Business Process Model and Notation (BPMN) standard, which the authors propose could represent valid support offering a graphical notation to easily specify the deployment pipeline steps as a standard and repeatable process.
|Metric||Unit of Measure|
|Features Per Month (FPM)||Features / Time|
|Releases Per Month (RPM)||Releases / Time|
|Fastest Possible Feature Lead Time||Time|
Figure 4: Summary of Relevant Metrics
Software delivery by itself can be a beneficial tool, but its benefits can be vastly amplified with simulation. With that in mind, businesses should consider combining simulation with software delivery to leverage the strengths of both and reduce risks.
Brown, A. W. (2013). Enterprise software delivery: bringing agility and efficiency to the global software supply chain. Addison-Wesley.
D’Ambrogio, A., Falcone, A., Garro, A., & Giglio, A. (2018). On the Importance of Simulation in Enabling Continuous Delivery and Evaluating Deployment Pipeline Performance. In 2018 Proceedings of the INCOSE Italia Conference on Systems Engineering (CIISE) (pp. 53-59).
Dlugi, M., Brunnert, A., & Krcmar, H. (2015, September). Model-based performance evaluations in continuous delivery pipelines. In Proceedings of the 1st International Workshop on Quality-Aware DevOps (pp. 25-26).
Fitzgerald, B., & Stol, K. J. (2017). Continuous software engineering: A roadmap and agenda_. Journal of Systems and Software, 123_, 176-189.
Loukides, M., (2012). What is DevOps? Infrastructure as code. O´Reilly Media.
Steffens, A., Lichter, H., & Döring, J. S. (2018, May). Designing a next-generation continuous software delivery system: concepts and architecture. In 2018 IEEE/ACM 4th International Workshop on Rapid Continuous Software Engineering (RCoSE) (pp. 1-7). IEEE.