What is DevOps?
Like most buzzwords surrounding software development,
DevOps has no accepted definition.
Definitions range from simple (as in these two definitions) to complex (can last a whole book).
DevOps is a combination of cultural philosophy,
practice and application rapid delivery tools
DevOps is an interdisciplinary collaboration within an organization that aims to ensure the continuous and automated delivery of new versions of software while ensuring its correctness and reliability
Rather than trying to define DevOps, let us understand how software development has evolved into DevOps.
Waterfall model (Waterfall)
Decades ago, software development focused on the Waterfall model.
Waterfall model development is similar to construction projects-for example, to build an amazing bridge.
You will build the software in multiple stages, which can last from weeks to months.
In most Waterfall projects, it takes a few months for companies to see a valid version of the application.
Key elements for building excellent software
After working in the waterfall model for decades, I learned some key elements for developing great software:
communication
Feedback
automation
The importance of communication
Software development is an interdisciplinary work involving multiple skills.
Interpersonal communication is critical to the success of software projects.
In the waterfall model, we try to enhance communication by preparing detailed documents about requirements, design, architecture, and deployment.
However, for some time, we learned
The best way to enhance intra-team communication-unite the team so that you can acquire various skills in the same team.
A cross-functional team with multiple skills will make the job excellent.
The importance of early feedback
Getting feedback quickly is important. To develop great software is to get quick feedback.
Are we building applications that meet business expectations?
You cannot wait for months to get feedback. You may want to learn quickly.
If you deploy it to a production environment, will your application have problems?
The sooner we find a problem, the easier it is to solve.
We found that the best software teams are usually quick feedback. Help us know if we are doing the right thing as early as possible.
The importance of automation
Automation is essential. Software development involves a wide range of activities. Manual operation is slow and error-prone.
After understanding the key elements of developing great software, let's see how we have evolved into agile development and DevOps.
Agile development
If you strengthen communication between teams, get quick feedback and introduce automation, agile development is the first step.
Agile development integrates the business team and the development team into one team, which is dedicated to building great software in small iterations (called Sprints).
The focus of agile development is that the development cycle is not a few weeks or a few, but small requirements within a few days or even a day.
How does agile development enhance communication between teams?
Agile development brings business and development teams together.
The business team is responsible for defining what to build. what do you need?
The development team is responsible for building products that meet the requirements. Development includes everyone involved in the design, coding, testing, and packaging of your software.
In agile development, business representatives (often called product owners) often appear on the team, and the team can clearly understand the business goals.
When the development team understands the requirements incorrectly and goes the wrong way, the product owner will help them make course corrections and maintain the correct path.
Result: The final product built by the team is what the company wants.
Another important factor is that the agile development team has cross-functional skills: coding skills (front end, API and database), testing skills and business skills.
Agile development and automation
What areas of automation does the agile development team focus on?
Software products may have multiple defects:
Functional defects mean that the product cannot work properly.
Technical defects make software maintenance difficult. For example, code quality issues.
Generally, agile development teams focus on using automation to discover technical and functional defects early.
The agile development team focuses on automated testing. Write excellent unit tests to test your methods and classes. Write excellent integration tests to test your modules and applications. Agile development teams also focus extensively on code quality – using tools such as SONAR to evaluate the code quality of applications.
If you have excellent
automated testing and excellent code quality checks, is it enough?
You may also want to run them as often as possible. The agile development team focuses on continuous integration. Submit code, run unit tests, automated tests and code quality checks. These are automatically performed in the continuous integration pipeline. In the early days of agile development, the most popular CI/CD tool was Jenkins.
How does agile development promote instant feedback?
The most important factor is that companies do not need to wait for months to see the final product. At the end of each version iteration, the product will be demonstrated to all stakeholders. When giving priority to the end of the next version iteration, all feedback will be adopted. Result: The final product built by the team is what the company wants.
Another important factor for immediate feedback is continuous integration. Suppose I submit some code to version control. Within 30 minutes, if my code causes unit tests or integration tests to fail, I will get feedback. If my code does not meet the code quality standards or there is not enough code coverage in the unit test, I will get feedback.
Was agile development successful? Yes. of course. By focusing on improving communication between the business and the development team, and focusing on early detection of various defects, Agile takes software development to a new level.
However, new challenges have emerged.
Evolution of microservices architecture
Now, we are slowly turning to microservices architecture, and started to build many small APIs, rather than building large overall applications.
What are the new challenges?
Operation and maintenance become more important. You have to release hundreds of small microservices every week, not a whole month. It becomes important to debug problems in microservices and understand what is happening in microservices.
It's time to use a new buzzword in software development – DevOps.
The emergence of DevOps
What is the focus of DevOps?
The focus of DevOps is to strengthen communication between development and operations teams.
How to make deployment easier?
How to make the operation and maintenance team better understand what the development team does?
How does
DevOps enhance communication between teams?
DevOps brings the operation and maintenance team closer to the development team.
In a more mature enterprise, the development team and the operation and maintenance team are the same team. They began to share common goals, and both teams began to understand the challenges faced by the other team.
What are the areas of automation that DevOps teams focus on?
In addition to the key areas of agile development (continuous integration and test automation), the DevOps team is also committed to helping automate the operations team, for example, configuring software on servers, deploying applications, and monitoring production environments. Some key terms are continuous deployment and infrastructure as code.
Continuous deployment is to continuously deploy new versions of software on the test environment. In more mature organizations like Google and Facebook, Continuous Delivery can help continuously deploy software into production.
Infrastructure as code is to treat infrastructure as application code. You can use automated configuration to create infrastructure (servers, load balancers, and databases). You will have version control of the infrastructure-so that it can be tracked.
How does DevOps promote instant feedback?
DevOps brings together O&M and development teams. Because O&M and development are part of the same team, the entire team understands the challenges related to O&M and development.
Any operation and maintenance problems will be quickly paid attention to by developers.
Any challenges encountered when launching the software will arouse the early attention of the operation and maintenance team.
DevOps encourages continuous integration, continuous delivery, and infrastructure as code.
Due to continuous delivery, if I make code changes or configuration changes that break the test or environment, then I will know within a few hours.
Because of the use of "infrastructure as code," developers can configure the environment themselves, deploy code, and find problems themselves without any help from the operations team.
Although we say that agile development and
DevOps are two different things that make things simple, in reality, there is no accepted definition of the meaning of DevOps.
I think agile development and DevOps are two stages that can help us improve and build great software. They will not compete with each other, but together they can help us build great software products.
In my case, agile development and DevOps are complementary
Facilitate communication and feedback between business, development and operation and maintenance teams
Relieve pain points through automation.