Learning Resources for Software Engineering Students »
Authors: John Yong
“DevOps is the practice of operations and development engineers participating together in the entire service lifecycle, from design through the development process to production support.” — the agile admin
The term DevOps comes from the amalgamation of two words - Development and Operations. While there are many definitions and opinions out there about what DevOps really is, and no one true answer, most agree that it is the idea of Developers and Operations working together to achieve a goal (source). This involves a shift in mindset away from the traditional view of Development and Operations as two distinct teams with few overlapping responsibilities, to a new mindset where developers and operations engineers communicate, collaborate and share the responsibility of developing and delivering software.
Indeed, some see DevOps as a culture shift that involves more than just developers and operations teams, but also everyone involved in delivering value to end users, including testers and Quality Assurance, Project Management and Human Resources teams (source). However, this document will focus more on the development and operations side of DevOps, which is what budding software engineers like yourself need to know.
Tip: for a comprehensive discussion of what DevOps is and is not, refer to the agile admin's article, What Is DevOps?
While DevOps is predominantly an organisational culture and mindset, there are several aspects it covers that you, as a software engineering student, need to be familiar with before entering the industry. These are outlined in the DevOps toolchain (source):
These can be roughly summarised into four major aspects:
This includes using version control tools, following a process when developing, frequently merging code with a central branch, and going through a code review process.
Version Control Software (VCS)
Web-based Hosted VCS
Involves using continuous integration tools that automatically build and test your software upon every push to a code repository (Git, Mercurial, etc.), so you don't have to do it yourself. They can also be configured to run on specific branches or pull requests.
Local Build Tools
In addition to automating builds, these also manage dependencies
Hosted CI Tools
These integrate with hosted VCS solutions like GitHub
This is about getting your software to run in a live server environment so that it is publicly accessible to end users. It also involves packaging your app such that it can be deployed in different environments.
Infrastructure Management Tools
After deployment, monitoring the system for any defects or potential defects is essential to minimise outages (infrastructure monitoring). This aspect also includes application performance management (APM) and log analysis.
As a software engineering student, the best way to get started is to gain some practical experience by trying out the various tools mentioned above. This is a suggested process you can try: