Release Engineering (“RE”) is a sub-discipline in Software Engineering concerned with the compilation, assembly, and delivery of source code into finished products of other software components. It is Release Engineering that making Software Engineering as manufacturing is to an industrial process. We can say that without RE, the Software Industry was still in primitive society.
Let me take Oracle EBS as an example,
How many product family (every product family will consist with around 10 small product) Oracle EBS have?
Oracle Mobile Supply Chain Applications
Oracle Order Management
Oracle Project Portfolio Management
Oracle Transportation Management
Oracle Warehouse Management Systems
Oracle Enterprise Asset Management
And in the techology stacks, it has to support Linux-32/64, Solaris-32/64, AIX, HPUX-IA64, Windows; Weblogic, Oracle iAS, Oracle Forms, Oracle OC4J, Jrockit, SUN JDK, and comprehensive support plans for different customers, different release and different upgrade paths.
You can have a good understanding how complicated in EBS from,
As software development evolves, it is more difficult and even impossible that without a professional release engineer in a software development team and they can succeed to provide good quality products in time. Actually I am a passionate practitioner of Book <Continuous Integration: Improving Software Quality and Reducing Risk> and book <Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation>. I strongly recommend you to read these two books if you are interested in RE.
An Release Engineer’s daily job,
1. Code Management,
It has lots of good code management tools, like CVS, SVN, Perforce, even with Linux’s RCS. Here has to work as an SCM.
2. Mainline/Branch management,
Manage mainlines, branches, branching strategies and the bugs attached to them. Here was like a product manager 🙂
3. Install/Upgrade Testings,
Install testing, fixes, bugs, and verify all of the possible upgrade paths for customers. Here works as a system testing engineer.
4. Report/analysis/triage any build compile issues,
Here works as a debuger. Find out who do the evil and expedite fixes. There are some nice build tools like Maven, Nant, ant.
5. Code qualities,
Leverage JUnit, Findbugs, PMD, Checkstyle, Sonar to enhance code quality. And it is easy to plugin them into a workflow build engine like Hudson, Cruise. Here works as a Quality Controller.
6. Integration issues,
How to integrate a product suite with a complicated tech stacks is a big challenge nowadays.
Utilize VM tools to templatize the latest artifacts into templates. Works as IT guys.
8. Internal tools enhancement,
Release Engineers have to get ready to product tools to enhance productivity. Works as developers.
9. Database management/OS management
We can see that as Release Engineer, ppl have to involve into OS, Database, Middle tier, Languages, Build/Release, Testing, Code quality, IT, even requirement management!
So in my opinion, how to become a professional Release Engineer?
1. Firstly, you need to love the Software Industry and take it as your interesting but not merely a job!
2. Release Engineer is a Dev + Ops. (DevOps) + Test + IT. You need to develop your skills as a generalist.
3. Enhance some key skills, like Database, Mid-tier services, development skills. (That is why I took Oracle Database, Java certified).
4. Detailed in analysis, and always ready to help ppl. You have to have development sense and get ready to work after office hours sometimes as the build will fail in the midnight and get it fixed before testers yell to you in next morning.
5. Think from customers’ view sometimes. You are the last chance to find out issues before rolling out the products.
6. Be responsibility. When a build issue, exception, bugs occur, do NOT throw it to Dev/Tester right away although you can do like that. You should have a detailed and quick analysis that firstly.
Release Engineer -> Have sense in Release Engineering. Good knowledge in tools/Scripts/tech stacks.
Sr Release Engineer -> Can do detailed analysis and deep knowledge and skills. Conduct Release plan.
Release Lead/Manager -> Compose Release plan and lead the team.