TITLE: An Agile Lesson from David Parnas AUTHOR: Eugene Wallingford DATE: December 07, 2004 3:57 PM DESC: Parnas may not be an agile developer, but we can learn something about teh value of agility from him. ----- BODY: Yesterday, someone reminded me of my friend Rich Pattis's Quotations for Learning Programming. I jumped, randomly as near as I can tell, to the Os and had not scanned too far down the page when I saw this quote:
As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications.

- D. Parnas

Of course, David Parnas is a famous computer scientist, well known for his work on modularity and software design. Many give him credit for best explaining encapsulation as a design technique. He is revered as an icon of traditional software engineering. Yet, when I read this quote, I could help but think, "Maybe Parnas is a closet agile developer." :-) Frequent readers may recall that I do this occasionally... See my discussion of Dijkstra as a test-driven developer. Whether Parnas is sympathetic to the methodological side of agile software development or not, this quote points out a truth of software development that is central to agile approaches: There is benefit in getting to working code sooner. The motive usually given for this is so that developers can learn about the problem and the domain from writing the code. But perhaps a secondary value is that it can begin to fail sooner -- but in the lab, under test-driven conditions, where developers can learn from those *failures* and begin to fix them sooner. I have to be careful not to misinterpret a person's position by projecting my own views onto a single quote taken out of context. For example, I can surely find a Parnas quote that could easily be interpreted as condemning agile software methodologies (in particular, I'm guessing, their emphasis on not doing big design up front). I don't worry about such contradictions; I prefer to use them as learning opportunities. When I see a quote like the one above, I like to take a moment to think... Under what conditions can this be right? When does it fail, or not hold? What can I learn from this idea that will make me a better programmer or developer? I don't think I'd ever consciously considered the idea that continuous feedback in XP might be consist of the same sort of failure that occurs when we deploy a live system. Parnas quote has me thinking about it now, and I think that I may learn something as a result. More subconsciously agile quotes? As I scanned Rich's list in my agile state of mind, a few others caught my eye... This quote isn't a statement about agile practice, or even more generally about pragmatic practice. It is a hallmark of the reflective professional. It's also a pretty good guide for living life. -----