As software systems, development processes, and resources become more distributed, they invariably become more complex. Further, software products used to be in an ongoing cycle of development, testing, and releases. Moreover different platforms add more complexity to this. Hence it is quite understandable that there are many different dynamic pieces that must fit together seamlessly to ensure the success and long-term value of a product or project.
Release Process means a set of well defined steps which MUST be followed before giving any new project version to end users for use. These steps involves various components like:
- Planning of features/enhancements/support/bugs we are covering in this release
- Versioning of releases
- Time line for release - release date for testing and for users
- Repository structure like branching in repository maintain the changes
- Trace-ability matrix to track the quality
- A good build system to ensure the quality deployments
- Test cases and procedures
- UAT management
- Release to production environment
- Procedures to revert the deployment in case of any failure
- Information to client and training wherever required
Release process is the core of a stable system. If engineering team is heart of the project, release process is like heart beat of the project. Stability of every release is directly proportional to the strength and quality of release process and how good are we adhering to it. Ideally Release process is so important that it is being kept at first step even before building the software. Because it is the prorces which will ensure a smooth and quality delivery to the end users. Software team responsibility is not only to build a great software, but also to deliver it to users on time as expected and with desired level of quality.
Release Process is very important because:
- It enables to do a planned development, rather than development with adhoc decisions ("as and when required"). Absence of Release process is like feeding the babies whatever they demand and whenever they feel hungry without any schedule, without developing a nutritious plan for them maturely - knowing that meeting the short term requirements may not benefit their health in long term. Result - bad habits in babies, no schedule, bad health, and when babies grow up, of course they will blame the system for all wrong practices which feed them wrong things at wrong time.
- It helps the various stake holders to know the time table of various features and fixes. With this expectations, they can contribute to the release by defining that what they want from the release.
- It helps to create a routine for all the teams like engineering development team, functional team, marketing team, operation team and end users.
- It instill confidence in end users for system that they can request something and it will be delivered as expected.
- It creates an opportunity to meaningfully discuss nonfunctional testing that the software may need. Once the complete release cycle is defined, these things come in practice.
- It helps to avoid wastage of many valuable hours which goes in fixing the regression and integration issues, after an adhoc release.
- Overall effect - Absence of release means; Project find itself in critical situation recurrently after some time. Whole project team feel the heat and find themselves in pressure and applies the fixes abruptly to manage the situation in fire fighting mode. And mistakes done in this fire fighting practice again replicate the same situation in next release.
Release Structure Definition: Release process should be well defined, well documented, well circulated and understood, and above all well followed. So release dates and procedures should be realistic. It is better have good time in hand and then follow the release procedures, rather than to release a failed version which will bring more loss of time for every team involved including end user also.
Release Cycle Duration: Generally a release cycle used to be fixed considering the functional requirements and team capabilities. Like one cycle could be that development team can put all the production ready developed code in testing system. It would be test for next two weeks and then will be deployed to production. Any intermediate bug will be fixed in testing environment itself. The day we deploy the release to production after two weeks, the next development version will be available for testing. Ideally small release cycles are quite favourable with nowadays complex environment, however, duration should be decided based on the project requirement. An good small cycle could be two weeks as defined above.
Release Documentation: Documentation is required to have a track of what has been done. As without this, there would be nothing to review. However documentation should be that large that a reader start sleeping, rather it should be brief but informative about all important steps.
Automation and Standardization of Release Process: - Automation is very important value addition. There are many tasks in release process which used to be repetitive, and monotounous in nature. If we do these tasks again and again manually, there are good chances to do mistakes. Also it consumes a lot of time, which can otherwise be utilized in some other job. So best thing is to automate all the repetitive tasks. However for it, first requirement is to define the standards process and structure for release. Standards are like, time duration for releasing the production ready code for testing, duration for testing cycle, type of test cases we need in system, structure of deployable packages, environment configurations to test the solution for performance and quality, environment for final deployment, different source code versioning system and so on. Once these standards are defined, then we can identify which all process can be automated. Like,
- Various type of automated test cases for regression, integration and stress testing
- Reporting of test cases output to various stake holders with all possible details
- Build Procedures which can build the whole system upto deployment stage
- Deployment procedures and so on
Communicate the Release Process and Set the expectations: - Once release process is defined, it is very important to communicate this process to all key stakeholders and make them understand every aspect of the process. If all stakeholders understand the value of release process, that would add a great value to whole procedures. As release processes itself needs a lot of manual inputs like requirements, development code, testing cycles and UAT etc. So making all teams understand its important is very important. Only then they would be able to set the right set of expecatations from the release and moreover release process would be getting the desired inputs at each input point.
At last, release process would be successful only if you have the right persons in team to implement the various steps of the release. So it is very important to have right persons as per the project requirement and to invest in people. In whole software development life cycle, whatever you invest in sofware or hardware or other infrastructure, all comes after investment in people and it will be most important investment to have a successful software.