May 19, 2010

A Philosophy of Agile

Thomism, the philosophy of Thomas Aquinas, holds that all intellectual knowledge comes through the senses. (ST I.84.6) This opinion is in direct contradiction with Cartesianism, the philosophy of René Descartes, which doubts the validity of sensate-derived intellectual knowledge. The scientific method implicitly agrees with Aquinas because it too begins with using our senses in the form of observations. Scientists should derive hypotheses from observations, not metaphysical ideas existing purely in the mind. String theory, for example, appears to reconcile quantum mechanics and general relativity. It' s a beautiful idea, but the problem with the theory is that we haven't yet observed any strings. The Wikipedia article on string theory states, "string theory as a theory of everything has been criticized as unscientific because it is so difficult to test by experiments." Agile development methodologies work well because they generate intellectual knowledge through the senses early in the development process. Most folks simply call it "early feedback." This feedback grounds development teams in reality. Consider unit testing, daily stand-ups, continuous integration, and pair programming. All these techniques, commonly associated with Agile methodologies, generate early feedback. Waterfall methods generate feedback too, but they might generate feedback at a later stage than an Agile method. And the cost of finding and fixing a defect later rather than earlier dramatically increases. (Code Compete 2nd Edition, Steve McConnell, pp. 472-473) Development teams cannot say, "everything's fine," when CruiseControl indicates a failed build. Developers can't write a "quick hack" when a co-worker is looking over their shoulder or reviewing their code. This early feedback leads to earlier, less costly fixes.  End result: fewer late and over budget projects. When we look at the Agile Manifesto we see some of the core principles behind Agile's effectiveness: responding to change over following a plan, and focusing on individuals and interactions. You don't have to be a philosopher to realize that constant change is a reality for software projects, or that software is for and made by individual people. Early feedback helps individual developers respond effectively to change, which is the core reason agile methodologies tend to work.  And that's something we can observe with our senses.