Software deployment is all of the activities that make a software system available for use. [1] [2]
Deployment can involve activities on the producer (software developer) side or on the consumer (user) side or both. Deployment to consumers is a hard task because the target systems are diverse and unpredictable. [3] [4] Software as a service avoids these difficulties by deploying only to dedicated servers that are typically under the producer's control.
Because every software system is unique, the precise processes or procedures within each activity can hardly be defined. Therefore, "deployment" should be interpreted as a general process that has to be customized according to specific requirements or characteristics. [5]
When computers were extremely large, expensive, and bulky (mainframes and minicomputers), the software was often bundled together with the hardware by manufacturers and provided for free. [6] A pivotal moment occurred in 1969 when IBM, influenced by antitrust lawsuits, began charging for software and services separately from hardware. This "unbundling" effectively created the modern software industry, turning software into a commercial product. [7] Early deployment processes were highly structured; the Lincoln Labs Phased Model, developed in 1956 for the SAGE air defense system, introduced sequential phases that influenced later methodologies. [8] This approach was formalized in the waterfall model, which became dominant after being described by Winston Royce in 1970. It led to infrequent, costly, and lengthy release cycles, often taking years. [9] If business software needed to be installed, it often required an expensive, time-consuming visit by a systems architect or a consultant. [10] For complex, on-premises installation of enterprise software today, this is sometimes still the case. [11]
The development of mass-market software for the new age of microcomputers in the 1980s brought new forms of software distribution –first cartridges, then Compact Cassettes, then floppy disks, and later (in the 1990s and beyond) optical media, the internet and flash drives. [12] [13] This shift meant that software deployment could be left to the customer. [14] During this period, alternatives to the rigid waterfall model emerged. The Spiral Model, proposed by Barry Boehm in 1988, introduced a risk-driven, iterative approach that challenged waterfall's linear structure and paved the way for more flexible, agile methodologies. [15] As customer-led deployment became standard, it was recognized that configuration should be user-friendly. In the 1990s, tools like InstallShield became popular, providing installer wizards that eliminated the need for users to perform complex tasks like editing registry entries. [16]
In pre-internet software deployments, releases were by nature expensive and infrequent affairs. [17] The spread of the internet fundamentally transformed software distribution and made end-to-end agile software development viable by enabling rapid collaboration and digital delivery. [18] The foundations for modern rapid deployment were laid in the 1990s when Kent Beck developed Continuous Integration as a core practice of Extreme Programming, advocating for developers to integrate their work daily. [19] The advent of cloud computing and software as a service (SaaS) in the 2000s further accelerated this trend, allowing software to be deployed to a large number of customers in minutes. This shift also meant deployment schedules were now typically determined by the software supplier, not the customers. [20] [21] Such flexibility led to the rise of continuous delivery as a viable option, especially for web applications. [22]
Modern deployment strategies that build upon these principles include blue–green deployment and canary release deployment. [23]
The complexity and variability of software products have fostered the emergence of specialized roles for coordinating and engineering the deployment process. For desktop systems, end-users frequently also become the "software deployers" when they install a software package on their machine. The deployment of enterprise software involves many more roles, and those roles typically change as the application progresses from the test (pre-production) to production environments. Typical roles involved in software deployments for enterprise applications may include: [25]
Configuration management systems are designed to make controlling large numbers of servers easy for administrators and operations teams. They allow you to control many different systems in an automated way from one central location.