Software development includes several processes like defining scopes, requirement specifications, and use cases, designing solution architect, converting use cases to tasks, writing code, testing and validations, managing releases, and deployments, and then maintenance. These tasks are repetitive and can be highly manual process which can significantly be prone to errors. The software development process comprises of different teams from operations, development as well as business. Day by day, these processes are becoming more complex which shows the need of proper tools and practices to handle it. Additionally, technology had drastically changed and evolved in last one decade which again adds complexity in development process. Because of development, implementation and operational teams having different skill sets are involved together in software development process, and they can be out of sync, can lack proper visibility which can delay in the overall delivery and result in disappointing the business stakeholders.
To overcome the complex situations and manage efficiently, we have DevOps.
In this article, I will cover following points:
- What is DevOps
- Background, why DevOps is required
- DevOps culture and How DevOps comes
- Development and Operation responsibilities
- DevOps Principles and Practices
What is DevOps?
We appreciate Patrick Debois, father of DevOps, for outlining the importance of sharing within the DevOps culture. The term was formed by joining Development and Operations.
DevOps is not a technology, or a standard, it is commonly referred as culture, DevOps culture.
DevOps is a software development culture or practice that creates collaboration among development and operations to speed up the quality software delivery in efficient way.
According to Gartner (https://www.gartner.com/en/information-technology/glossary/devops)
DevOps represents a change in IT culture, focusing on rapid IT service delivery through the adoption of agile, lean practices in the context of a system-oriented approach. DevOps emphasizes people (and culture), and it seeks to improve collaboration between operations and development teams. DevOps implementations utilize technology — especially automation tools that can leverage an increasingly programmable and dynamic infrastructure from a life cycle perspective.
DevOps unifies the members of Development and Operation into one culture and enables proper sync up among them. DevOps incudes core development, IT Operations, quality engineering and security to work together to produce reliable and better products faster. What is more, adopting this culture helps organization to respond better to customers, provides current and correct visibility, builds confidence to the product delivery, and know the future implications.
High level Development Responsibilities
- Functional Requirements
- Planning Development Task (use cases, user stories and Task)
- Writing Code
- Build Pipeline
- Test Plan and QA
- Code Quality and Management
High Level Operation Responsibilities
- Non-Functional Requirements
- Software Infrastructure (Server or web apps) Readiness
- Deployment Task Planning
- Release Pipeline
DevOps Principles and Practices
DevOps is all about cultural adoption and mindset change in an organization. DevOps teams establish some practices throughout the application lifecycle; however, we cannot limit the culture only to these principles. Most known principles and practices are under this philosophy:
Collaboration: The main aim of DevOps is to bridge the gap across function teams. Create a collaborative environment between development, IT operations and quality assurance. This is cultural shift to build a unilateral team that has common objectives related with fast and quality deliveries. Additionally, DevOps create a proper sync up, accountability and ownership towards common goal among the team.
Automation: Automate the workflows and whatever possible. DevOps encourages automation of some manual and time-consuming processes related with testing, building, releasing, deployments etc. This principle suggests automating the build process, testing, releasing and deployment. Automation enables team to focus on core activities instead of doing manual jobs and quickly response to customer feedbacks. This is a primary action toward continuous integration and continuous delivery (CI/CD) or ability to deliver new version/release to clients in less time.
Incremental Release: It is also called as Iteration where DevOps encourages to deliver a project into small chunks throughout the project timeline. It is also encouraged to divide a project into small, testable, and deliverable chunks, so that it can follow the complete process like code merge, test, release and deploy before production one. This incremental release will reduce the error, bugs, and problematic cause before going to final release or production. Additionally, this will create sync up and proper understanding of solution. This Iterative method makes the development process more flexible and error free.
Continuous Improvement: Adopting to change is another concept for DevOps. We should be flexible to adopt changes in any aspect if those are related to improvement, optimization, cost effective, technology advancement and likewise. DevOps culture motivates to learn from failure and flexible to act based on circumstances. Change can be on software, customer needs, technology advancement, change to process, methodology and so on for improvement and those should be welcomed as continuous improvement.
Continuous Monitoring: DevOps teams need to keep the tack of delivered software and make sure to perform without any issue. Continuous monitoring includes system tacking, monitoring logs, performance, application environments, defects, and so on.
Some DevOps practices which are based on above principles are given below:
- Agile Approach in Software Development
- Continuous Integration and continuous delivery (CI/CD)
- Managing code through Version control
- Infrastructure as Code: flexible to deployment environments where we can create servers or applications for testing which are identical to production and destroy easily.
- Configuration Management
In this article, I have discussed about how DevOps concept evolved and why it is essential. DevOps is neither a technology nor a standard but a culture and practice to unite the development, testing and operations for effective, quality, smooth and speedup up the overall software delivery time. I have also elaborated its principles and practices; however, those are not limited only to above mentioned. The core principles enable the collaboration and integration among the development and IT operations, bring automation wherever possible with incremental delivery. It also suggests to be flexible to adopt changes for continuous improvement and monitoring. Its primary aim is to sync development and operation for smooth and faster delivery.