Release engineering, or releng, is the process of preparing completed computer software for distribution. This can involve many separate programming and engineering disciplines, and not all definitions of release engineering are the same across different companies. Some of the tasks that can be involved in release engineering include compiling source code, tracking and maintaining development tools and environments, maintaining a library of releases throughout the life of a program, and sometimes implementing the deployment of software on a live server or system. A few of the benefits of having a dedicated release engineer in the software development cycle are a better experience for end-users — because release methods are first tested — better overall program documentation throughout upgrades, and a kind of quality control in situations in which different parts of a program originate from separate sources.
During the development of software, there comes a point at which the application is completed and needs either to be distributed to customers or installed on a live server so it can be used. Without a release engineer, this process could involve having the developers compile a program through development tools and then move the binaries to the target media or server. Some of the problems that can be encountered with this process are that the program might have dependencies that are not quantified, some change could be forgotten or, ultimately, the process may not necessarily be reproducible in the future.
One of the largest parts of release engineering is tracking the progress of how a program develops. This could mean using a versioning system or employing other software not only to track and label each step of a program during its development but also to store snapshots of the program so they can be recalled later. In addition to just handling the source code, successfully building a program requires that information about the tools being used and the different libraries or other resources that are employed also be stored. The ultimate goal is to be able to recompile a program at any stage during its development, independent of the development systems used to create it.
Another possible part of release engineering is preparing an application for distribution to customers. Once the program has been compiled into binaries, methods for getting the program installed on the computer of an end user are developed and explored. This could involve writing an installation program or testing the program in different situations if it is live to ensure that it is functioning according to specifications. Release engineering sometimes involves actually installing a program multiple times on multiple systems to ensure that different configurations or errors are handled in the proper way.