“Agile-ish”?
As I mention on the home page, I’m interested in an “agile-ish” team. I like the values espoused by the Agile movement, and I personally use some of the practices. However, I’m not totally sold on any of the formal Agile methodologies like XP or Scrum.
My Introduction to XP1
Ward Who?
In the summer of 2004, my friend Steve Jorgensen decided to do a simple weekend project with the goal of learning how to do XP. I had met Steve through the Portland Access User Group, where I’d developed enough respect for him that this seemed like a worthwhile way to spend some summer Saturdays.
That first week, he got Ward Cunningham to coach us. This was extremely impressive to me later, once I went home and Googled for Ward… and found out that not only does he have his own Wikipedia page, he invented the technology that made Wikipedia possible. At the time, though, I remember just thinking how nice this guy was that he wanted to come and help out some random geeks on a summer Saturday.
The project didn’t turn into much—it wasn’t supposed to—but what I took away from it was a copy of Kent Beck’s TDD By Example and a profound interest in TDD.
TDD (and dynamic typing) FTW
That same summer, I learned Python for fun. This inspired a highly successful strategy for my computer science homework: do the first version of the assignment in Python, evolving the design using TDD, then reimplement the working design in the language required by the instructor (this was usually C++ or Java). I timed these experiments; the second “reimplement in a statically typed language” stage took anywhere from 4 to 9 times longer than the first stage!
College Class
Two years later, I took an XP class at Portland State University taught by Jim Shore and Andrew Black. This class was completely insane; I nearly dropped it after the first lab day. I’m glad I stuck it out, though, because the experience of doing 75-minute iterations2 was highly educational. (Plus, I’d have missed Ward’s guest lecture, which was highly engaging.)
This class also introduced me to a really fun form of pair programming: ping-pong pairing (link 1, link 2). The thing I like about PPP is that it exploits your competitiveness and sense of humor to produce better code: with both partners showing off just how simple they can make their solutions, you often wind up with fewer moving parts.
What I’m Looking For
XP is interesting, but it’s not the right solution for everybody. Personally, I think TDD accounts for a lot of the value that developers derive from XP, and it doesn’t require customer buy-in.
I’ve had the unlovely experience of maintaining legacy Rails applications that were definitely not written test-first. Copy-paste coding abounded, and while I tried to retrofit some tests, they just didn’t quite work. I’m definitely looking for a more TATFT-friendly culture in my next job or project.
1 XP = Extreme Programming. Stupid name, excellent collection of professional practices.
2 Initially, the iterations were set for 90 minutes; however, this left no time for breaks, so we shortened them.