Robert Martin
Robert Martin
Safari: Agile Principles, Patterns, and Practices in C# takes off from your award-winning book on Agile development, Agile Software Development: Principles, Patterns, and Practices. What were the biggest challenges in adapting this material for C# programmers?
Robert: I suppose I should let Micah answer this question in detail, since he's the person who did most of that work. From my point of view the transition was very simple because the principles, patterns, and practices have little to do with the language and platform.
Of course that begs the question of why we bothered to do a book in C# in the first place. The answer to that is that there are a lot of readers who feel more comfortable looking at examples in languages they are actively using.
Micah: I agree. The adaptation was fairly simple. Although I'd have to say the hardest part was trying to get the code to look like .NET code. Most readers probably note that the code samples are lacking some idiosyncrasies of .NET that they are used to. .NET doesn't lend itself well to conveying the principals and patterns, so some of it's idiosyncrasies had to be sacrificed.
Safari: What distinguishes your book from the other Agile books out there? What were your goals in writing it?
Robert: The primary difference is that this book presents Agility as a synthesis of object-oriented design principles, design patterns, and Agile development practices. It is the only book I know of that ties these three things together and presents them as a cogent whole. In short, the book is an attempt to define the core of our craft.
Micah: Many Agile books speak from a high level without getting into the geeky details. This book is geared toward programmers. It portrays the whole Agile developer package. This book will expose readers to a wide breadth of programmer skills, from high level design to detailed coding practices.
Safari: How well does C# and the .NET platform fit into Agile development processes? Are there any features in C# that are uniquely suited to Agile development?
Micah: C# and .NET can fit very well in an Agile development environment. The language's object-oriented nature, and delegates in particular, offer plenty of opportunities to decouple code. This is critical for test driven development.
Also, the open source community has done a great job in building all the tools needed to enhance .NET Agility. There are, however, some aspects to watch out for - namely, Microsoft tools and other proprietary tools. Visual Source Safe, for example, is a huge hindrance to a team's Agility. Use SVN. In general, .NET teams should look to open source solutions first.
Robert: I agree that C# fits very nicely into Agile development. All the necessary tools are there.
Safari: You've packed an awful lot of information into Agile Principles, Patterns, and Practices in C#, including coverage of software principles like object oriented programming, design patterns, metrics, packaging, UML, and Agile programming practices. It must have been tough writing a book that covers all these topics. How did you decide what to include?
Robert: That's not the right question! The tough question was what to leave in! I threw nearly half the manuscript away once it was ready for publishing.
The book represents a culmination of years of effort and experience. I have been writing about the things in this book since 1993. So figuring out what to put in was no problem at all.
Micah: Uncle Bob deserves the credit for this one. He's amazing at solidifying ideas and putting them together in an organized fashion.
Safari: How have you found companies' response to Agile development concepts? Are they resistant to side-by-side programming as excessively expensive?
Robert: In general, acceptance of Agile is very high. Teams are using the principles, patterns, and practices of Agile development to very good effect. Some teams have reported 10X reduction in defects. Others have reported 50% increase in productivity. And morale tends to be high once Agile principles have been adopted.
Pair programming remains somewhat controversial, but has been pretty well accepted by most Agile teams. I would say that the more mature Agile teams pair more than half the time.
Safari: How large a group do you need to put Agile software solutions to work? What is the biggest/smallest size group it works for?
Robert: There does not appear to be a limit. Very small groups of two, or even one can use the principles, patterns, and practices to good effect. We have also seen very large companies, working on huge projects, make good use of them.
Safari: You've expanded on Martin Fowler's concept of "code smells" and written about higher level "design smells." What are design smells and why are they important?
Robert: Design smells are generic violations of good design. Things like "Unnecessary Duplication", "Opacity", and "Needless Complexity" are conditions of a design that all experienced designers know about and try to avoid. The principles, patterns, and practices described by the book are a way to avoid creating those smells, and to repair them when found.
Safari: Robert, you are one of the authors of the Manifesto for Agile Software Development. Tell us a little about that effort, do you believe it has significantly helped spread the word about Agile development practices?
Robert: Actually, I called that meeting, so of course I think the creation of the manifesto was a watershed event. Prior to that there were many different "lightweight" processes around. Scrum, XP, Xtal, FDD, etc. But there was no unifying principle guiding them all. When we all got together at Snowbird in February, 2001, and coined the term "Agile". It was the beginning of a much larger groundswell.
I think we hit a nerve in the industry. Kent struck that nerve with XP, and then concept of "Agile" kept that nerve humming, and helped it to gather momentum. The notion of Agility is inclusive. It covers programmers, managers, customers, analysts, and the whole repertoire of software development talent.

