Archive for August 2007
A few one-line descriptions of Agile practices, because I feel they get to the heart of each.
Iterative development with feature teams: a few developers complete the development cycle (refactor, code, integrate, build, and test), for each of a few features, in two weeks to two months.
Refactoring: instead of a static, outdated architecture, rework the codebase with each feature.
Test-driven development: write tests of functionality for user stories, then write code to pass these tests.
Pairing and collective ownership: two developers introduce fewer errors to review and test for, and many developers distribute knowledge of the code.
Frequent integration: merge and build new changes at least daily, test at least weekly.
Automated regression test: collect all test cases into push-button test suites, run shortly after each deliverable build.
I also found a passage on refactoring from an OOPSLA keynote by Christopher Alexander:
It turns out that these living structures can only be produced by an unfolding wholeness. That it, there is a condition in which you have space in a certain state. You operate on it through things that I have come to call “structure-preserving transformations,” maintaining the whole at each step, but gradually introducing differentiations one after the other. And if these transformations are truly structure-preserving and structure-enhancing, then you will come out at the end with living structure. Just think of an acorn becoming an oak. The end result is very different from the start point but happens in a smooth unfolding way in which each step clearly emanates from the previous one.
Alexander, C. 1999. The origins of pattern theory: The future of the theory, and the generation of a living world. IEEE Software 16, 5 (Sept/Oct), 71—82. http://doi.ieeecomputersociety.org/10.1109/52.795104