Process and Method
Distinguish Steady State from Agile State
In 2014 Gartner proposed the idea of bimodal IT: predictable business uses traditional waterfall development, the steady state; exploratory business uses agile development, the agile state.
Steady-state projects have long cycles, large development efforts, and high risk; they are clear and concrete.


Agile-state projects have uncertain requirements and need fast responses; they are fuzzy and directional.

Today most internet projects suit the agile state better.
Internet projects iterate quickly, release frequently, and their requirements keep changing.
Branching Model
- Feature development
Every small feature gets its own feature branch. Feature-based development keeps features independent, allows parallel work on features, and means an unfinished feature does not affect the main branch.
- Trunk integration
Merge code into the main branch as early as possible, and run continuous integration on the main branch. Suppose each iteration has N features. If those features are all merged into the main branch on the same day, cross-validating whether they meet expectations costs on the order of N ^ 2. But if each feature, once developed and self-tested, immediately opens an MR/PR and merges into the main branch, the merge cost for N features drops to the order of N.
Opening merge requests as early as possible tells other developers about your changes sooner. During development, other developers can then resolve most conflicts themselves.
- Release branches
Create a new branch for every release rather than releasing the main branch. Suppose you need to ship version 2.1. First create release branch 2.1 from the main branch, test on 2.1, and merge defects back to the main branch. Once it passes acceptance, tag the 2.1 branch as 2.1.0 and release it.
After the release, if tag 2.1.0 has a defect, fix it on branch 2.1, merge the fix back to the main branch, tag 2.1.1, and ship again.
The advantage of release branches is that released versions are traceable, and developers can fix a release and keep shipping. On the other side, a release branch does not hold up new feature work and is not disturbed by trunk integration.
Testing determines the pace of agile development.
Scrum Iterations
Scrum is a framework for developing and sustaining complex products, an incremental and iterative development process. The whole development effort is divided into Sprints, each one to two weeks.
Every Sprint should include at least one complete release that delivers the expected functionality.
In concrete terms, the steps are:
- Hold a meeting each iteration to define scope and goals
- Show progress in real time on a board
- Hold a daily standup to surface difficulties and ask for help