A Cyclic Model for Software Deployment

A Cyclic Model for Software Deployment

In this article, we will see a simple theoretical model for software deployment. We will focus on deploying software over the Web, but what is said here can be applied to other situations as well. For concreteness, we will use the Java platform as an example. Here, instead of providing practical advice, we will discuss some basic concepts in a simple intuitive way. A definition of software deployment is also provided.

By software deployment and related services, we mean a broad range of software services comprising the first installation, upgrades, and other maintenance facilities.

The ideas proposed here can be summarized as: (1) adopting an additional layer of specialized software services (deployment services) that programs can rely on. (2) Think of such services as based upon a cyclic deploymeny model.

A Simplistic Model of the Software Lifecycle

The Internet and all its related technologies (mainly the Web) have not made the software deployment issue obsolete. On Web-enabled platforms, all-HTML clients are suitable for some kind of applications only. After all, similar "thin client" technologies in other contexts have turned out to be much less successful (for example, the WAP on wireless devices). This emphasizes the importance of sophisticated deployment and maintenance of software applications on client platforms. (This term refers to any suitable computing platform, such as PCs, sophisticated personal devices, etc.)

We start from a rather simple, high-level view of the software lifecycle, as shown in Figure 1.

Figure 1 The waterfall software lifecycle model.

After the software is developed and published, it is distributed to the target clients, is properly installed, and is ready to be used. This is the well-known waterfall model of the software lifecycle.

What we will see in the rest of this article is how this familiar situation has changed with the advent of the Internet, in particular for deployment.

Deployment: A Neglected Topic

Even a language such as Java, which has been expressly designed for the Internet age, does not have convenient mechanisms for deployment. The deployment issue has historically been a neglected one.

In the Internet age an average connection can support much more than a stack of CDs. Being interactive, it can enable more sophisticated deployment features that were not even thinkable before the Internet advent.

Some Benefits of Deployment

Deployment techniques were intended to support the installation of software in a once-and-for-all fashion. Things are changing because devices are increasingly connecting to each other, and deployment is becoming a kind of established service, in which software is released more often, maintained, customized, and even billed over the network. Deployment can be used as a marketing instrument, as a means to lower development costs, or as a way to add value and services to the software being deployed.

The lifecycle shown in Figure 1 is not realistic when it comes to the details of today's software deployment technology. We will now introduce a useful abstraction, general to the kinds of software deployment that comprise Figure 1.

Introduction to the Deployment Circuit

Figure 2 below shows a high-level representation of the Deployment Circuit.

Figure 2 The Deployment Circuit.

We can individuate three main roles involved in this simple model:

  • Software Producer. An organization that builds the software and owns its commercial rights.
  • Software Distributor. The entity that takes charge of distributing and installing the software to the proper clients. It can be the organization itself or a team of specialized developers within the Software Producer organization. Sometimes, it can take charge of some specialized services on the deployed software.
  • End-User. A person who will use the final software artifact.
  • In Figure 2, the journey of a set of resources bundled together as a software executable is defined in the following five stages:

  • Development. The software developer develops the software, planning its deployment from the beginning.
  • Publication. The software developer releases the software.
  • Distribution. The distributor organization releases the software to end-users.
  • Installation. All the needed pieces are properly placed on the client platform, left ready to be launched by end-users.
  • Running. Finally, the installed software is launched on the client platform.
  • The concept of a Deployment Circuit is similar to the steps of delivering a milk bottle to a house. After the production and the packaging, bottles are transported to consumer homes, happily emptied by customers, and left outside the door to find their way back to the factory. A whole organization with its costs and benefits is behind this service.

    Another implicit concept is the "cycle-ness" inherent to the fact that updates will follow installations, just as empty milk bottles are followed by filled ones. Therefore, a Deployment Circuit must be set up by means of Web servers and then maintained. The period of these cycles has been shortened with the advent of new distribution channels (in other words, the Net in all its forms); and by the overall evolution of the software industry, which is heading toward integrated, up-to-date services rather than standalone, once-and-for-all installed applications. In addition, competition presses to shorten these cycles. If software vendors can rely on more effective Deployment Circuits, they can afford more releases with shorter time-to-market, and so on. We will discuss the potential benefits of Deployment Circuits shortly.

    The interactivity between clients and distribution servers is also required (in its roughest form) in milk deliveries. For example, when the number of family members change, there's the need to adjust the number of delivered bottles. With software, appliances are much more critical because we must know exactly what is already installed on client machines, together with other data such as the identity of each end-user, the hardware platform they are using, and so on.

    As an example, large software applications usually ship in CD-ROMs, and only after the first installation, next updates, and other services (such as license registration) can take place via the Internet.

    As a result, we saw cycle-ness, interactivity, and the establishment and maintenance of the whole circuit related to the software deployment as a sophisticated service offered by a Distributor entity to both a Software Producer and an End-User.

    Deployment Circuit Issues

    Let's examine in detail what this concept entails.

    Related Costs

    A Deployment Circuit has a series of costs associated with it:

  • The cost of setting up the circuit. Buying distribution servers, connecting them to the Internet, or hiring skilled personnel to take care of installing the software on your organization's computers are major costs. Likewise, buying the needed wireless bandwidth for assuring the weekly update of the software running on your agents' handhelds across the country is another hidden cost.
  • The cost of running the circuit. If you deploy your software by using mailed CDs, you must bear the costs of preparing, packaging, and sending them. If you have specialized personnel in addition to system administrators, the costs include the hours they spend while paying a visit to all your employees, plus the time the latter remain idle while the installer staff performs the physical installation and fine-tunes the end-users' computers.
  • The cost of ensuring the reliability of the circuit. This is usually seen as a part of the previous class of costs. It depends on the quality needed for the given circuit. If you deploy software on telecommunication satellites, for example, you cannot afford any errors.
  • The cost to Software Producers of outsourcing this service to external organizations. This is nothing new in companies specialized in distributing software. For example, just think of the shareware phenomenon on the Web. Currently, distributors limit their service at file downloads, often installation software utilities. Then, they provide additional services such as billing, statistics, and the like. What is possible with the current technology is much greater.
  • Main Benefits of Deployment Circuits

  • For Software Producers, employing a Deployment Circuit is about gaining a powerful competitive advantage, exploiting the features of sophisticated Deployment Circuits while possibly outsourcing the complexities and possible risks to a third-party (the Distributor).
  • For End-Users, the net effect is an enhanced service, given that the services (implemented by deployed software) are more ubiquitous, less implementation-dependent, and much easier to manage as well as possibly more reliable and personalized.
  • For Distributors, it is possibly the rise of a new profession, something akin to a software broker.
  • Taking Advantage of the Deployment Circuit

    After the Deployment Circuit has been built, the next step is to add extra services that take advantage of the distribution channel or the application helper installed on the clients. These services could be more diverse, but we will focus on those closest to deployment.

    The most common services (offered to client applications) are debugging, various types of management, offerings of a richer client environment, and customization. Advanced services include the need for particular clients, such as enhanced reliability.

    Let's discuss two concrete examples for the Java platform:

  • Integrating a standard form of debugging into the Deployment Circuit is almost straightforward, given the capabilities of the Java 2 platform with regard to remote debugging.
  • The step of adding new services to the deployed executables is also made easy by taking advantage of the application helper eventually installed on client platforms. A typical and useful advanced service offered by Deployment Circuits is the so-called management on-the-run. Take, for instance, a J2EE executable running 24 X 7 on a back-end server. The capability to update it while running is critical in this case.
  • Such software services can be implemented via public protocols (such as JNLP for J2SE) and proprietary mechanisms; or even through non-standard, ad-hoc implementations used for some particular applications only.

    You may think that a new era is beginning. In the future, we will assist at the creation of a whole new generation of such services, taking advantage of the Internet and of the ubiquity of new generation computing devices.

    A Simple Definition of Software Deployment

    Finally, we are ready to propose an original definition of software deployment that is closer to the new scenarios prompted by the Internet.

    A simple definition of software deployment:

    A technical facility consisting of the establishment and maintenance of a Deployment Circuit between a business service provider and a business service client.

    A definition of a Deployment Circuit:

    A virtual connection supporting the provider's business services by means of the delivery, assembly, and management of software resources and configurations on a client environment.

    Connection policies are defined by the (software) business service provider. We refer to the Distributor as the Deployment Circuit supplier.

    Note that the established circuit generally is an abstraction rather than something real; it can be implemented using different technologies. We used the term virtual circuit to describe this aspect.

    In conclusion, our vision of software deployment is network-centric, service-minded, and focused on more articulate roles.

    Conclusion

    In this article, we discussed an approach to software deployment (an additional layer of specialized software services based upon a cyclic model of deployment) and related software services that can be provided to client programs.

    For feedback please contact me here

    .

    © 1998-2005 Mauro Marinilli