Commentary- Our approach to software development has changed in the last few years. IT professionals and software developers are working more closely together than ever before. The DevOps trend also extends to an acknowledgement that automation is a key factor in reducing costs and increasing release speeds.
Striving to be cost effective is a constant for any business but the increased focus on speed of deployment is a product of the growth of the cloud and Agile development methodology. The bottom line is – the faster new features, fixes and improvements reach the customer, the greater their satisfaction. The same principle applies in an enterprise environment – the faster the latest version of an application reaches users, the more productive they can be.
Both environments require scalability. As your product offerings grow and branch out, the delivery method must be capable of handling the changes. In the enterprise environment a large portfolio of software applications is the norm and any deployment solution must be able to scale.
Automated app deployment can reduce costs, increase speed and scale as needed, but before we take a look at the solution let’s discuss the problem.
App deployment nightmares
There are a lot of potential problems in deploying applications manually. Not least of which is the time it can consume for developers and IT support. Configuration is the first challenge. Where is the application stored? Which version should be installed? Where should it be installed? Where is the configuration file and how is it applied?
Security is another issue. What permissions are required to install and run the application? How much access do users have?
Manual steps also cost time and money and they introduce the potential for human error. You may have to copy a specific file to a specific location or rename a file. Even running separate scripts for different environments and projects can be a time drain and every manual process required increases risk.
Automated app deployment has its own set of problems. If you have someone create custom deployment scripts then you can bypass some of the problems but that will only work for one app deployment. It also takes time and it means you are relying on that one specialist to update the scripts as required. Scripts can be very complex and they aren’t standardized, especially if different developers write different scripts.
If you have a series of scripts then you need a process in place and instructions on how to run them correctly. They will also need to be edited frequently to cater for any changes. A monolithic script might be able to cover the entire deployment process so that you have just one script to run but what happens when you have to deploy to a different environment? What about partial upgrades? Any changes will necessitate a modification of the script.
Either case requires specialist support to run and adapt and results in a system that won’t work for a different app deployment. If you need to rollback for any reason it will be a major headache. So what is the solution?
Looking to push Application Release Automation to the next level requires some clever tools. In order to break the bottleneck you need a system that is truly automated, standardized and capable of handling multiple application deployments across projects. The aim is to avoid reliance on specialists writing scripts.
The advantages can be impressive. According to a Gartner report by Ronni J. Colville, ARA tools help to minimize the risk of human error and add reliability. They also provide transparency for all of the stakeholders involved and, more importantly, limit downtime and ensure faster delivery to the end user. That visibility throughout the process can be a real boost to DevOps as both ends of the operation can see the process in action.
There’s one step beyond an intelligent app deployment system and that’s the idea of rolling out software updates as soon as possible to the live server through a continuous integration system. Realistically this requires you to have some kind of continuous automated testing system in place so you can reduce the risk of introducing problems. On the other hand it means you can push out extremely frequent updates, dispense entirely with any manual tasks associated with release and forget about the last minute rush to squeeze in features before the build deadline which so often results in bugs.
A fully automated system capable of planning and adjusting as necessary to serve various environments makes continuous deployment a potential reality. Provided you have the ability to track the process, rollback and uninstall where necessary, you can minimize the risks. For true commitment to an agile development methodology this is a natural endpoint.
Bottleneck at the funnel
As software development has advanced a number of new trends and ideas are helping developers to get their product to market faster. It is always more cost effective to solve problems as early as possible in the process and this simple truth has transformed our approach to development and testing.
The deployment end of the funnel has remained as a bottleneck sapping up the time and energy of talented software engineers and IT professionals. It is still often a potential source of human error and when it is badly handled the results can be devastating in terms of downtime or dissatisfied customers.
The same logic being applied to software development needs to carry over into the deployment phase. Ultimately by building a complete pipeline from development, through quality assurance, to deployment, where automation and standardization is the ideal, we can save money, deliver as fast as possible and scale as needed. It just makes sense.
Coert Baart is CEO of XebiaLabs, a developer of platforms that automate the delivery of applications onto middleware environments like WebSphere, WebLogic, Microsoft .Net, JBoss, Tomcat and cloud environments like VMware, Puppet, Red Hat and IBM. You may reach him at email@example.com.