When we talk about Agile or Lean development, many people may first think of specific practices such as daily stand-ups, using a Kanban board, or weekly iterations. However, these are not necessarily the prerequisites or the entirety of Agile development. The essence of Agile lies in the mindset of continuous iteration.
Continuous iteration
Continuous iteration is the key to Agile development. The essence of iteration stems from an understanding and acceptance of human limitations. We all have our limits, but at the same time, we also have unlimited potential. In Agile development, we are not trying to design a perfect product. Instead, we understand and accept that we may make mistakes and use this as a starting point to continuously correct, optimize, and improve.
Taking error handling as an example. When errors occur within the team, we should not evade responsibility. Instead, we should actively look for the cause of the problem and prevent similar errors from recurring through process improvement. This kind of improvement is self-initiated by the team, rather than imposed. This spirit of self-improvement can maximally stimulate the initiative of team members and push the team towards more efficient goals.
To illustrate this idea, drawing might be a good metaphor. Our first version of the product is like a sketch of a painting. Afterward, we gradually add lines, colors, and details to the sketch to eventually obtain a complete painting. This process is like our continuous iteration and optimization of the product. Each improvement is built on the basis of the previous version, and each version of the product is an independently running complete version.
Source: https://jpattonassociates.com/dont_know_what_i_want/
Practices
In practical operations, different Agile teams may have different practices. For example, some teams might use Test-Driven Development (TDD), while others might opt for Peer Review (PR). These are all possible and are manifestations of Agile. Because no matter what approach is taken, it is all to establish a feedback loop as soon as possible to improve development efficiency and product quality.
Just as when we conduct TDD, we first write tests, then implement the features, and finally refactor. The purpose of testing is to provide feedback so that we know whether the implementation is correct.
Moreover, Continuous Integration is also a feedback mechanism. It can tell us whether the code can compile successfully, whether it can correctly integrate with other modules, and whether our code can form a runnable software. The tests running under the continuous integration environment can help us detect and fix errors as early as possible.
Summary
In summary, the core of iterative development is: first, being able to deliver a small but complete feature end-to-end; second, providing a feedback mechanism to guide the next step of incremental work; and finally, having an open mindset to learn, adjust in a timely manner based on feedback. In this process, we both accept the reality that mistakes may occur and strive to correct these mistakes to make the product better and better. Only in this way can we truly understand and implement Agile development.