1. What Agile Development Is
In the traditional software development model, the cycle from raising a requirement to final delivery is long. The waterfall model proceeds through six steps: requirements analysis, design, coding, integration, testing, and maintenance. Once a requirement changes, the work invested earlier is not only wasted but also hard to adjust.
Agile development is a software development capability for responding to rapidly changing requirements. For internet software in particular, the early design can never be perfect, and it will be continuously adjusted and refined over the course of development.
Agile development is delivery-oriented and collaboration-oriented. Rather than advocating polished design, documentation, and process standards, agile development emphasizes continuous delivery, so that goals are validated earlier and defects are exposed earlier.
In practice, we need to keep iterations to 1-2 weeks. With an overly long iteration cycle, schedule estimates are usually inaccurate and easily lead to delays. At the same time, a longer iteration cycle means complex features. Bringing a complex feature into the main version in a single iteration is not a good idea. Splitting features up effectively reduces the complexity of the problem and improves software quality.
On the other hand, the requester, the designer, and the developer also need to stay informed of progress at all times. A 1-2 week iteration provides a short-term goal and cannot be broken down to each day’s work. The suggestion is that the person in charge organize a daily stand-up meeting, where the people involved spend 2 minutes reporting progress and feeding back any problems they run into. After the meeting, the main owner coordinates to solve the problems so the project keeps moving forward.
Given this characteristic of rapid iteration and continuous delivery, we need to find a suitable branch development model. For a project team of just a few people, what I recommend is trunk integration with branch releases. For version control software I recommend Git; if you are using SVN, I suggest switching to Git. Here is a blog post you can refer to: Pushing Code from GitLab to an SVN Repository.
2. Feature Development, Trunk Integration, Branch Release
- Feature development means that for every small piece of functionality, a new feature branch is created for development. Feature development guarantees the independence of each feature and allows features to be developed in parallel. At the same time, unfinished features will not affect the trunk branch.

- Trunk integration means merging code into the main branch as early as possible and running continuous integration on the main branch.
Suppose each iteration has N features. If these features are all merged into the trunk branch on the same day, cross-validating whether they meet expectations requires N ^ 2 worth of work. But if each of these features, once its own development and self-testing are done, immediately goes through the MR/PR process and is merged into the trunk branch, then for N features the merge cost drops to the N level.
Raising a merge request as early as possible lets other developers learn about your changes as soon as possible. During development, other developers can then resolve most of the conflicts.
- Branch release means creating a new branch for every release, rather than releasing the trunk branch.
Suppose we now need to ship version 2.1. First, based on the trunk branch, create release branch 2.1, run testing on the 2.1 branch, and merge defects back into the trunk branch. Once it passes acceptance, tag the 2.1 branch with Tag 2.1.0 and release it externally.
After the release, if the Tag 2.1.0 version has a defect, it needs to be fixed on the 2.1 branch, then the defect is merged back into the trunk branch, Tag 2.1.1 is applied, and the version continues to be released.
The benefit of branch release is that released versions are traceable, allowing developers to fix released versions and keep releasing. On the other hand, a release branch does not affect the development of new features and is not disturbed by trunk integration.
3. Testing Determines the Speed of Agile Development
Delivery without quality is worthless.
In the agile development process, testing is an important part of continuous integration. Testing is both a goal that drives developers to achieve it, and a credential of delivery, an endorsement of the project’s quality.
Testing should be integrated into the R&D process and run through the entire project. Unit testing, API testing, integration testing, and functional testing β different testing stages can uncover problems at different granularities.
In practice, we encourage shifting testing left. Following the testing pyramid, writing as many unit tests as possible yields better results. In a team, the tester-to-developer ratio is usually very low. It is more reasonable for developers to write unit tests and for testers to do integration testing and functional testing.
In the MR/PR process, adding a CI pipeline to automatically run test cases and assist in verifying functionality is also a practice that achieves twice the result with half the effort.
