Release engineering
Encyclopedia
Release engineering, frequently abbreviated as "releng", is a sub-discipline in software engineering
concerned with the compilation
, assembly, and delivery of source code
into finished products or other software components. Associated with the software release life cycle, it is often said that release engineering is to software engineering as manufacturing is to an industrial process. While it is not the goal of release engineering to encumber software development with a process overlay, it is often seen as a sign of organizational and developmental maturity.
Modern release engineering is concerned with several aspects of software production:
Identifiability: Being able to identify all of the source, tools, environment, and other components that make up a particular release
Reproducibility: the ability to integrate source, third party components, data, and deployment externals of a software system in order to guarantee operational stability.
Consistency: the mission to provide a stable framework for development, deployment, audit and accountability for software components.
Agility: the ongoing research into what are the repercussions of modern software engineering practices on the productivity in the software cycle, i.e. continuous integration and push on green initiatives.
Release engineering is often the integration hub for more complex software development teams, sitting at the cross between development, product management, quality assurance and other engineering efforts, also known as DevOps
. Release engineering teams are often cast in the role of gatekeepers (i.e. at Facebook, Google, Microsoft) for certain critical products where their judgement forms a parallel line of responsibility and authority in relation to production releases (pushes).
Frequently, tracking of changes in a configuration management
system or revision control
system is part of the domain of the release engineer. The responsibility for creating and applying a version numbering scheme into software—and tracking that number back to the specific source files to which it applies—often falls onto the release engineer. Producing or improving automation in software production is usually a goal of the release engineer. Gathering, tracking, and supplying all the tools that are required to develop and build a particular piece of software may be a release engineering task, in order to reliably reproduce or maintain software years after its initial release to customers.
While most software engineers, or software developers, do many or all of the above as a course of their work, in larger organizations the specialty of the release engineer can be applied to coordinate disparate source trees, projects, teams, and components. This frees the developers to implement features in the software and also frees the quality assurance
engineers to more broadly and deeply test the produced software.
The release engineer may provide software, services, or both to software engineering and software quality assurance teams. The software provided may be build tools, assembly, or other reorganization scripts which take compilation output and place them into a pre-defined tree structure, and even to the authoring and creation of installers
for use by test teams or by the ultimate consumer of the software. The services provided may include software build
(compilation) automation, automated test
integration, results reporting, and production of or preparation for software delivery systems—e.g., in the form of electronic media (CDs, DVDs) or electronic software distribution mechanisms.
Software engineering
Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software...
concerned with the compilation
Compiler
A compiler is a computer program that transforms source code written in a programming language into another computer language...
, assembly, and delivery of source code
Source code
In computer science, source code is text written using the format and syntax of the programming language that it is being written in. Such a language is specially designed to facilitate the work of computer programmers, who specify the actions to be performed by a computer mostly by writing source...
into finished products or other software components. Associated with the software release life cycle, it is often said that release engineering is to software engineering as manufacturing is to an industrial process. While it is not the goal of release engineering to encumber software development with a process overlay, it is often seen as a sign of organizational and developmental maturity.
Modern release engineering is concerned with several aspects of software production:
Identifiability: Being able to identify all of the source, tools, environment, and other components that make up a particular release
Reproducibility: the ability to integrate source, third party components, data, and deployment externals of a software system in order to guarantee operational stability.
Consistency: the mission to provide a stable framework for development, deployment, audit and accountability for software components.
Agility: the ongoing research into what are the repercussions of modern software engineering practices on the productivity in the software cycle, i.e. continuous integration and push on green initiatives.
Release engineering is often the integration hub for more complex software development teams, sitting at the cross between development, product management, quality assurance and other engineering efforts, also known as DevOps
DevOps
"DevOps" is an emerging set of principles, methods and practices for communication, collaboration and integration between software development and IT operations professionals...
. Release engineering teams are often cast in the role of gatekeepers (i.e. at Facebook, Google, Microsoft) for certain critical products where their judgement forms a parallel line of responsibility and authority in relation to production releases (pushes).
Frequently, tracking of changes in a configuration management
Configuration management
Configuration management is a field of management that focuses on establishing and maintaining consistency of a system or product's performance and its functional and physical attributes with its requirements, design, and operational information throughout its life.For information assurance, CM...
system or revision control
Revision control
Revision control, also known as version control and source control , is the management of changes to documents, programs, and other information stored as computer files. It is most commonly used in software development, where a team of people may change the same files...
system is part of the domain of the release engineer. The responsibility for creating and applying a version numbering scheme into software—and tracking that number back to the specific source files to which it applies—often falls onto the release engineer. Producing or improving automation in software production is usually a goal of the release engineer. Gathering, tracking, and supplying all the tools that are required to develop and build a particular piece of software may be a release engineering task, in order to reliably reproduce or maintain software years after its initial release to customers.
While most software engineers, or software developers, do many or all of the above as a course of their work, in larger organizations the specialty of the release engineer can be applied to coordinate disparate source trees, projects, teams, and components. This frees the developers to implement features in the software and also frees the quality assurance
Quality Assurance
Quality assurance, or QA for short, is the systematic monitoring and evaluation of the various aspects of a project, service or facility to maximize the probability that minimum standards of quality are being attained by the production process...
engineers to more broadly and deeply test the produced software.
The release engineer may provide software, services, or both to software engineering and software quality assurance teams. The software provided may be build tools, assembly, or other reorganization scripts which take compilation output and place them into a pre-defined tree structure, and even to the authoring and creation of installers
Installation (computer programs)
Installation of a program is the act of putting the program onto a computer system so that it can be executed....
for use by test teams or by the ultimate consumer of the software. The services provided may include software build
Software build
In the field of computer software, the term software build refers either to the process of converting source code files into standalone software artifact that can be run on a computer, or the result of doing so...
(compilation) automation, automated test
Test automation
Test automation is the use of software to control the execution of tests, the comparison of actual outcomes to predicted outcomes, the setting up of test preconditions, and other test control and test reporting functions...
integration, results reporting, and production of or preparation for software delivery systems—e.g., in the form of electronic media (CDs, DVDs) or electronic software distribution mechanisms.
Related disciplines
- Build automationBuild AutomationBuild automation is the act of scripting or automating a wide variety of tasks that software developers do in their day-to-day activities including things like:* compiling computer source code into binary code* packaging binary code* running tests...
- PortingPortingIn computer science, porting is the process of adapting software so that an executable program can be created for a computing environment that is different from the one for which it was originally designed...
- Product Line EngineeringProduct Family EngineeringProduct family engineering , also known as product line engineering, is a synonym for "domain engineering" created by the Software Engineering Institute, a term coined by James Neighbors in his 1980 dissertation at University of California, Irvine...
includes porting of a software product from one platform to other. - Software configuration managementSoftware configuration managementIn software engineering, software configuration management is the task of tracking and controlling changes in the software. Configuration management practices include revision control and the establishment of baselines....
- Although release engineering is sometimes considered part of Software Configuration Management, the latter, being a tool or a process used by the Release Engineer, is actually more of a subset of the roles and responsibilities of the typical Release Engineer. - Continuous integrationContinuous integrationIn software engineering, continuous integration implements continuous processes of applying quality control — small pieces of effort, applied frequently...
- Change management
- Release managementRelease managementThe release management process is a relatively new but rapidly growing discipline within software engineering of managing software releases....
- Packaging & Deployment
Further reading
- "Software Release Methodology" by Michael E. Bays; ISBN 0-13-636564-7.
- "Software Configuration Management" by H. Ronald Berlack; ISBN 0-471-53049-2.
- "Design of a Methodology to Support Software Release Decisions" by H. Sassenburg; ISBN 90-367-2424-4.
- "Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation" by Jez Humble, David Farley; ISBN 0-321-60191-2