Works of R & D efficiency certification students: Talking about collaboration and automation in the transformation of agile development teams

author:

Yang Lingyu (currently working at China Telecom Research Institute)

R&D Effectiveness (DevOps) Engineer Certification Student 

foreword

With today's software development processes and tools becoming more mature, agile seems to be the goal for all software product teams. Many teams claim to be agile, but in reality, more of them are agile to some extent. In the process of our agile practice, there will always be a gap between our ideal situation, so what we need to think more about is not how to achieve agility thoroughly, but how to better use agile ideas to improve in the current actual situation. Agile covers a very wide range, from requirements collection to product design, development delivery, test security, operation and maintenance guarantee and a series of processes, you can use agile thinking. The process of development and delivery is the process of actually building a product. As a front-line developer, I also want to talk about how to carry out agile transformation in the development process and for the development team.

What is agile development

Agile development takes the needs of users as the core, splits large requirements, and adopts an iterative method for development, so that the software is always in a releasable state. Agile development is inseparable from teamwork. In any form of team, everyone will emphasize the word "teamwork". An important idea of ​​an agile development team is actually "teamwork", which we call "synergy".

In a Scrum team, there are product designers, developers, testers, etc., and everyone works together to form a complete life cycle of the product. There is coordination of large teams in large teams, and coordination of small teams in small teams. For the development team, when the development members in it can reach a consensus on agility and work together, the synergy formed in this way is the greatest, and the team can be regarded as beginning to move towards agility. After that, the team jointly selects the appropriate agile development tools, defines the process and norms of agile development, so that agile ideas can truly fall into agile practice, so as to realize the agile transformation of the team and deliver value continuously at low cost and high efficiency.

The core idea of ​​agile development team

As early as 2009, Flickr put forward a very important concept in his speech: "one center, two basic points". One of the two basic points is to insist on collaboration, and the other is to insist on automation. In agile development, these two concepts are also applicable. Collaboration is to improve productivity, and automation is to improve production efficiency. The goal is to continuously deliver value at low cost and efficiently. Then when a development team is transforming to agile, it should focus on these two points: improving collaboration and improving automation.

Improve collaboration

To improve collaboration, team members need to form a synergistic concept and reach a synergistic consensus. In traditional DevOps (integration of development, operation and maintenance), the various stages of development and operation and maintenance are colluded, and the emphasis is on the collaboration between developers and operation and maintenance personnel. Within the development team, collaboration among various development members is required. It is difficult to change the idea of ​​directly instilling collaboration into the team, but the following practical measures can be taken to promote the team's collaborative action.

1. More communication and communication. In many companies, a development team often sits together, or even works in a circle in a relatively independent conference room. This is a best practice. In the traditional impression of many people, developers are less talkative, they like to focus on developing silently in their own world, and they are not willing to communicate with others, and this may be an important reason that hinders agile. Agile emphasizes individuality and interaction. When everyone can sit together to develop and communicate face to face, many problems can be quickly solved. For example, is the understanding of the current development requirements in place? How to solve the bugs encountered in current development? Does the current function have relevant implementations that can be reused? Can you give help to other members after completing the task at hand? If everyone is willing to do this, the maximum value of a team can be brought into play, and the shortcomings that may exist due to the barrel effect can be filled. All developers deliver code as a whole, and everyone's knowledge and capabilities are also shared and improved. The daily stand-up meeting in the five Scrum meetings is also to strengthen communication, collect information, ask questions, and seek help. The essential ideas are the same. A team that lacks communication and communication will cause great waste, such as waste of waiting, waste of searching for information, waste of handover, especially waste of talents (the value of people has not been fully demonstrated and brought into play), which has a huge impact on the efficiency of the team.

2. Help more and complain less. The technical level of the members of a development team is inevitably uneven. As a senior senior, one should be able to help and support the juniors in all aspects, rather than blame or complain. Only when a positive atmosphere of mutual help is created in the team, can the team progress and grow faster, thus bringing about an increase in efficiency.

3. Discuss together to select the appropriate working software and formulate appropriate specifications. Each member of the development team may have their own good software and familiar specifications in the past experience. But in the new team, for the overall collaboration of the team, members need to let go of their preferences and discuss together the most suitable software and specifications for the entire team, including IDE, coding specifications, Git submission specifications, CICD tools, release process specifications, etc. Enhance team collaboration with consistent working software and norms.

4. Adjust the plan flexibly according to the situation. In the Agile Manifesto, there is such a sentence: Responding to change is higher than following the plan. In a development team, it is impossible to develop 100% according to the plan, and each developer has his own technical parts and technical parts that he is not good at, which leads to changes in the development efficiency of each developer. If the development tasks are scheduled 100% according to the plan, it will inevitably lead to uneven busyness. And if you want to make the plan perfect first, it is even more impractical and you have to pay a lot of energy for it. So a better situation is that after developers have a preliminary task schedule for PBL, they can carry out actual development, that is, "stop starting, start finishing". In the actual development process, according to the difficulty of the task and its own situation, respond flexibly, and team members communicate and help each other, so as to maximize the development efficiency of the team.

Therefore, it is not difficult to practice collaboration. The key is whether team members can reach a consensus on collaboration, put the team above the individual, and have the values ​​and sense of mission of sharing weal and woe.

Improve automation

If collaboration is a shift in thinking, automation is a shift in action. Generally speaking, the software development process is also the longest process in the entire product delivery cycle, so which automation tools and means can be used to assist it, and how to improve the level of automation is particularly critical. It is a qualitative leap from delivering one version in 100 days to delivering 100 versions in one day.

In fact, the development of software automation has gone through a very long time and technical precipitation. In the past, after the developers wrote the code locally, they needed to manually compile and build it, package it into a software product, and then deploy it to the test server through scripts or commands. Sometimes, various exceptions during the deployment process were caused by server environment problems. After all the hard work and successful deployment, it is handed over to testers for professional testing. During the period, the testers tested the problems, and the developers had to repeat the above process after fixing them, which was time-consuming and labor-intensive. In the end, it was found that the developers only spent a small part of their time actually writing code, and more time was spent doing repetitive and tedious tasks. Later, the emergence of the Jenkins tool made both continuous integration (CI) and continuous deployment (CD) automatic. After the developer configures it on Jenkins, he only needs to write and submit the code, and Jenkins can help with the rest of the steps. In the deployment environment, because developers write programs on their own computers, debug and run them, and then need to publish them to the server, problems caused by inconsistencies in the environment are always a headache. Later, technologies such as Docker and K8S emerged to solve the problem of unified and automated management at the deployment and maintenance level. By combining these automated tools and technologies, developers only need to focus on code processing, and the subsequent processes can be executed automatically.

The above-mentioned automation technologies focus more on the integration and deployment levels, but in fact, software automation is more than that. There are actually many automation technologies at the development level. After the rise of the B/S architecture, more developers began to do web development, but you may have to write a lot of underlying web code, which is repetitive and has nothing to do with the business, so many web frameworks have emerged since then, such as the Spring framework in Java and the ASP.Net framework in C#. These frameworks encapsulate the underlying technology of the Web, and through some simple configurations, many underlying logics can be automatically implemented. In addition, the current IDE is becoming more and more advanced and intelligent. Through many plug-ins, we can automatically generate code for us, check code and correct errors for us during the development process.

Therefore, the emergence of these automation technologies, tools, and frameworks allows developers to focus more on business implementation, relieve various complicated and tedious tasks, and thus improve the efficiency of value delivery. And with the maturity of big data and AI technology, people are no longer satisfied with automation, but will move towards a higher level of intelligence. For developers, if the code of some non-core functions can be handed over to AI for implementation, it will undoubtedly be a further leap in production efficiency.

The combination of collaboration and automation

Collaboration and automation are the two key points of agile development team transformation, and we should not only focus on one, but integrate them organically.

I once had a project experience. Although the project team was organized in accordance with the Scrum method, daily stand-up meetings were held every day to collect information and synchronize work progress. Various CICD automation tools were also used during the development process, but the overall R&D efficiency was still not improved. In fact, collaboration and automation were not well combined. Everyone is staring at the tasks assigned to them, and will not take the initiative to communicate when encountering difficulties, but solve them by themselves, which will slow down the progress of the entire team. There is no review mechanism when the code is submitted. Everyone wants to upload their own code first, because those who submit the code late have to solve the troublesome conflicts. Whoever is responsible for the functional module will solve the problem. There is no atmosphere of mutual cooperation. On the surface, this seems to be a form with rules and regulations, but it actually deviates from the agile thinking.

So when we do development based on the concept of agile, everyone will use automation tools on the one hand, and more importantly, everyone will use automation tools for collaborative development.

The Outlook for Agile Development

The evolution of agile development is a process with no end point. It will always move towards one goal: maximizing people's value. Whether it is team collaboration or the assistance of various automated tools, it is essentially constantly magnifying the value of people. As the development team gradually moves towards agile, maybe the code they generate every day will decrease, but the value generated every day will definitely increase.

Guess you like

Origin blog.csdn.net/m0_69584846/article/details/131677633