The production launch of any brand new software solution for any company usually means change, and people by nature do not like changes. There will always be someone who will be dissatisfied and will try to prove that before the software was created, life was better or that using new software is “pointless” or it requires a million improvements to be “usable”. What to do then, to deal with these challenges and efficiently deploy software that was just developed? I will try to explain it in the article below.
Before I give some advice, it is worth explaining the meaning of the term software deployment. It should also be remembered that software development is a process, and the deployment is one of its phases that cannot be skipped.
Copying the definition from Wikipedia doesn’t make any sense. I assume you can check it out for yourself. To put it simply, the software deployment includes all the activities that must be performed to enable its use. I know, it still doesn’t say much… So let me try to describe it a bit more specifically.
First of all, let’s think about the software development process and when the software deployment occurs… Assume that you ordered the development of a custom, tailor-made software i.e. website, web or mobile application. The development team have just finished its job and the product has been tested. However, the created software is still at the Contractor, for example at a software house such as Evertop.
Now, this Contractor together with its Client has to do a little more work to launch the system and make it available to end users. Looking at the entire software development process, the next step after deployment is the production use of the system and the transition to the maintenance phase.
I hope that the concept of software deployment is a bit more understandable, or at least the moment when this deployment occurs. So what should you pay attention to? What stages of deployment should consist of?
The first step is to install the created software in the production environment. Regardless whether it will be the Contractor’s, Client’s or currently popular cloud infrastructure, the compiled code should be deployed to the target environment, so that users can access, run and use them.
More specifically. In the case of internet applications (those available via a web browser), the application must be deployed on the application server.
In the case of mobile applications at the deployment process, they are placed in the so-called stores. Hence, users can freely download and install them on their devices.
In the case of desktop applications, which in principle are used less and less, compiled applications are deployed on users’ computers.
Very often, the installation of the application is accompanied by the installation of a database that stores information necessary for its correct operation.
In the case of large organizations, it is important to ensure consistency with the existing infrastructure. You should remember about the naming convention or about the use of appropriate paths to directories where the applications will be installed so that they do not differ from those defined for the existing systems.
You should also take care of resources (disk space, RAM, processing power of the processor) adequate to the deployed software needs. This will help to avoid performance problems in the future.
In case of large organizations software deployment tools are used more often. They are more likely to use also tools that help to provide continuous integration and continuous delivery but these are the subjects for another article.
The installation itself is just the beginning of the software deployment process. Each application must be configured to work properly. Remembering such “trifles” as the language or date format of the operating systems where the software is deployed is a must. The point is to configure the environment for the software to work in it was created.
Configuration also includes an appropriate connection with the database, as well as with any other system with which it is integrated and should be able to communicate with. Otherwise, the software deployment will fail because the information will not be exchanged correctly.
This is an optional element that occurs when the deployment is to replace an old application with a new one. Migration itself is a complex issue and probably deserves a separate article. At the software deployment stage, you should certainly ensure that all the necessary information from the old system is also included in the new one. It will definitely be critical to the proper operation of the company after the software delivery.
After installation and configuration, the system should be launched. It requires checking whether all its components are properly loaded. Often this stage requires a return to one of the previous ones. It turns out that you need to install the missing libraries or configure additional network settings.
After starting the system, it is worth to perform functional tests once more to ensure that all features work as they should. The testing basically does not differ from testing in the development or test environment. However, minor errors or problems often appear at this stage. For example, it turns out that with the”empty” database the application throws unexpected critical exceptions, because it cannot read needed data. Correctly carried out deployment aims to eliminate such defects.
The tests will also show the correct operation of data integration and migration. Nevertheless, special care should be taken in this element because you can “confuse” other systems in the production environment.
Along with the software deployment, the Contractor should also provide documentation. It should consist of at least the following elements:
Depending on the complexity and specificity of the system, training may be required. Of course, it is always an individual aproach and decision whether such training is required or not. The mobile application for viewing information on air quality does not require special training (a tutorial at the start may be useful). On the other hand, the system for the notification and management of vehicle traffic on the premises of a huge power plant – on the contrary. In this case, selected user groups will have to be trained. And I know these two examples from my own backyard.
Ideally, if we can conduct training in the training environment, but if such an environment is not available, you need to choose whether to conduct training in the production, test or even development environment.
The point is, not to disturb the operation of the real system and to ensure data consistency, as well as the most faithful representation of the environment in which the training is carried out in relation to the production environment.
Training is often the first real test for a system. Its future users begin a real work with it and they confront their expectations with reality. It is worth preparing them well for this. You should actually make sure that they learn not only how to use the new system, but also inform them why it was created, how it will help the organization and how it will be used by it in a broader approach.
The last thing is to make the deployed software available to users. If it was not done during the training, now is the last moment to explain to users why you decided to do this. That is, in short, lead them through the change.
As people, we do not like changes very much and we treat every “novelty” at least with reserve. Providing a link to the application or a shourtcut icon on the desktop is definitely a marginal issue in relation to the change in the approach of users.
Finally, the most important thing – a plan. I kindly note, dear Clients- do not allow any software to be deployed without proper planning. It does not matter what kind of company or organization you are representing – make sure to consult the Contractor how he wants to perform the steps described above.
If the deployment is difficult and complex, ask for these issues to be written down and sent in the form of a document. This will facilitate the work of your team and streamline the entire process.
In order for the software deployment to be fruitful, you also need to have a plan on how to convince users to it and spend some time on this element. I know from my own experience that the easiest way to do this is by involving them in the creation of the system from the very beginning – i.e. from defining and analyzing the requirements, then they feel like co-authors of the application being created and are a bit more willing to implement it and use it after the deployment.
It is easier to answer this question when we imagine what would happen if the deployment did not take place or if it was carried out incorrectly. It’s more or less like letting an unprepared user into a rocket or a plane. At best it would fail, at worst it would be a disaster. The conclusion is therefore quite trivial. Correct software deployment is to prevent a disaster!
And more seriously… the software deployment is to ensure the proper operation of the system both in terms of infrastructure (network, servers, databases, integration) and functionality. Secondly, it helps guide users through the change of launching a new tool that they will be using.
Author: Maciej Kotok
The article was first published here