Today’s article is the second in a series of articles about Agile Project Management. The first part was posted yesterday. This article will introduce some theoretical knowledge of the Agile development model and Agile Project Management.
a. Traditional Waterfall Development
From requirements to design, from design to coding, from coding to testing, from testing to submission, this process requires the best in every development stage. Especially in the early stage, the more perfect the design, the less cost loss after submission.
b. Iterative Development
It is not required to finish tasks perfectly at every stage. Team members know that there are still many shortcomings, but they do not improve it. Instead, they aim to build the main function first and complete an “imperfect product” in the shortest time and with the least loss until it is submitted. Based on customers’ and users’ feedback, they gradually improve the “imperfect product”.
c. Spiral Development
To a large extent, it is a risk-driven method system, because, before each stage and frequently occurring cycle, a risk assessment must be carried out first.
d. Agile Development
Compared with iterative development, both Agile development and iterative development emphasize software delivery in a shorter development cycle. However, Agile development may have a shorter cycle and more emphasis on high collaboration within the team. Agile methods are sometimes mistaken for unplanned and disciplined methods. In fact, it is more accurate to say that agile methods emphasize adaptability rather than predictability.
Agile Management Theory
a. The difference and combination of agile project management and other theories
The different development models of the software mentioned above, the agile method is most often compared with the waterfall model. The waterfall model is generally suitable for projects with fixed requirements and clear scope, but the actual projects are not so perfect. But Agile methods can better adapt to changing situations, and its core idea is “people-oriented, embrace change”.
When Agile is used in project management, it is different from traditional project management. It is not to evaluate and plan the whole project in detail at the beginning of the project, but to make a rough estimation and make a detailed plan within the version in a short period of weeks or months, which is more active than traditional project management.
In addition, Agile methods can actually be better combined with CMMI (Capability Maturity Model Integration). Agile is mainly to solve problems between people, while CMMI focuses on processes and it can solve most management problems, so as to better control project risks.
For the Agile management method mentioned above, our commonly used method is Scrum, but in practice, it will also be used in combination with XP. Compared with XP, Scrum only provides methodology, but XP also provides specific practical tools, such as test-driven development.
The core of Scrum development is incremental + iteration. Developers advocate incremental iterations in this process and respond quickly to user needs to improve customers’ delivery satisfaction. Our usual practice is to divide viable requirements into smaller ones. As an iterative cycle, the demand can allow changes before entering the iteration, and no changes are allowed during the iterative cycle. This can be used to make continuous improvements and iterate on new functions.
Several terms would be explained here. Each small iteration cycle is called Sprint. During the project process, the Product Backlog will be used to manage the requirements, which will be allocated to each sprint in the form of user stories to form a Sprint Backlog, and the tasks will be sorted according to the priority. After each sprint, the team is required to deliver product increments according to the iteration plan.
c. Application of Agile Methods
Testing is a critical part of the agile methodology. To ensure good test coverage so that problems can be highlighted early in development, agile teams often use the practices of test-driven development. With this approach, the team writes tests prior to developing the new code.
If the tests are working correctly, the initial code that is entered will fail the tests, since the required functionality has not yet been developed. The code will pass the test once it is written correctly.
Frequent, small releases to test environments are encouraged in agile management, both at the iteration level to demonstrate progress and increase visibility for the customer, and at the release, level to rapidly deploy working software to the target audience. Quality is maintained in these short delivery timeframes by rigorous testing and through practices like continuous integration, in which suites of tests are run as frequently as possible (see the description of continuous integration later in this section.)
Integration involves bringing the code together and making sure it all compiles and works together. This practice is critical because it brings problems to the surface before more code is built on top of faulty or incompatible designs.
Agile management employs continuous integration, which means every time a programmer checks in code to the code repository (typically several times a day), integration tests are run automatically. Such tests highlight broken builds or problems with integration so that the problems can be addressed immediately.
The daily scrum is a 15-minute timeboxed daily meeting. During this meeting, the development team synchronizes activities, communications, and raises issues. During daily scrum, each development team member provides answers to the following three questions about the work he or she is doing during the sprint:
- What has been achieved since the last meeting?
- Before the next meeting what will be done?
- What obstacles are in the way?
Refactoring is the process of improving the design of existing code without altering the external behavior or adding new functionality. By keeping the design efficient, changes and new functionality can easily be applied to the code. Refactoring focuses on removing duplicated code, lowering coupling (dependent connections between code modules), and increasing cohesion.
In agile management, production code is often written by two developers working as a pair to write and provide real-time reviews of the software as it emerges. This practice may seem inefficient, but it actually saves time because the pairs catch issues early and there is a benefit in having a larger knowledge base of two people. Working in pairs also helps spread knowledge about the system through the team.
In summary, this article introduces four common software development models, the basic theories of Agile Project Management and the application of six commonly used Agile methods.