Today was a fantastic day at Agile 2005. So much happened that I know I won't be able to write about it all.
Let's see... I started out chairing the morning experience report session. I've said it before and I'll say it again: we have a fantastic experience report track this year. We received nearly 100 submissions and we were only able to accept about 20 of them. That gave us a very high quality set of papers covering a wide range of subjects.
During the session I chaired today, we had six reports presented. Roy Morien talked about agile database development. Salim Nair and Prasad Ramnath talked about applying agile methods to a large legacy codebase. John Major talked about delivering APIs in an agile context. Arlo Belshee talked about experiments in pair programming; Moses Hohman talked about estimating; and Marilyn Lamoreux talked about team reflections.
All of these sessions were very good and covered interesting topics. The two that made the biggest impression on me were Salim and Prasad's "legacy codebase" report and Arlo's "Promiscuous Pairing" talk.
I liked Salim and Prasad's talk because it focused very specifically on a tough problem: making changes to a large (1.5 million LOC) legacy codebase. Michael Feathers has a good book about working with legacy code--and in fact, Salim and Prasad's company actually hired Michael to help out. The nice thing about this experience, though, is it discussed a specific case.
Their codebase was so big and hard to test that they ended unable to add tests to any of the legacy code. Instead, as they added functionality, they implemented it in a parallel codebase that had the ability to call the legacy code, and which the legacy code could call. Then they would implement the new feature with proper TDD and add the proper hooks into the legacy codebase. They had a nice picture of this which will hopefully end up in a publically-available paper.
Over time, as the parallel codebase becomes more and more full-features, they hope to start removing code from the original codebase. But for now, the two live side by side. There's no attempt to refactor existing code. They summarized it like this:
Start refactoring bottom-up, followed by periodic top-down review to unify the architecture.
Replace "refactoring" with "TDD" and you have great advice for any codebase.
Yikes, I've only talked about one 30 minute experience report. I can see that I'm going to have to leave a lot out today.
Okay, so my other favorite experience report today was Arlo's about Promiscuous Pairing. Arlo has a ton of energy and it was a fun talk. I have a feeling that you need to see this one to get the most of out of it. Grab Arlo and make him give the talk for you. Arlo, if you're reading this, you should give that talk at XPDX.
Anyway, the bottom line is that Arlo had a team where they tried a whole bunch of different approaches to pair programming. The found that the most productive approach was to have pairs switch every 90 minutes on a team of six people and every two hours on a team of 10. By "switch," he meant for one person--the one who'd been on it longest--to rotate off onto another task.
Arlo had some interesting conjectures about why this was true. The main reason was that it encouraged "beginner's mind," a state of mind in which you learn most quickly. Other reasons including applying all of the team's talents to problems and "technique telepathy" in which skills and techniques are very quickly transferred from one person to the entire team.
This isn't something to try on every team, but it was an absolutely fascinating report. If you can get a chance to see Arlo deliver it in person, take advantage.
After lunch, I attended Zhon Johansen's workshop about pitfalls of working with customers. The workshop format was very interesting: he had a "Who's Line Is It Anyway?"-style segment in the middle in a selection of attendees ad-libbed a story about a development project with all of the worst customer interaction pitfalls. I was too busy concentrating on my next line to really hear the story but it sounded pretty awful. :) I had a lot of fun with that. Thanks, Zhon.
This conference has a really vibrant Open Space track. For the second half of the afternoon, I participated in a few of those. One was about project management on agile projects (I say, "agile projects just let you focus on real management--the people stuff--and stop worrying about administrivia like MS Project") and one was about what it takes to adopt agile.
The second open space was particularly good. It was a small group session that was composed primarily of people who had a lot of experience in helping organizations adopt agile methods. We came up with an absolutely fantastic list of things that an organization needs to think about when adopting agile methods. It included a lot of things that people forget about, like "get people's agreement and buy-in." Obvious, I know, but you'd be surprised at how many times just today I've heard people say stuff like, "How can I make 'them' (customers, management) work with my agile team?" I don't know... how about including them in the "us" decision to be agile in the first place??
We'll be posting more about this soon. We've decided to create a website and everything. Watch this space... I just registered the domain name. I won't say what it is, 'cause there's no site there yet, but it has to do with adopting agile. Now, what domain name could I have picked? Hmm...
Dinner with Diana Larsen, Esther Derby, Dale Emery, three people I have a huge amount of respect for. Fun times. Followed by an entertaining gathering of the XP mailing list folks. Hey, if any of you are reading this, could you let the list know that I'm posting these blog entries? I think they might be interested and I can't send email from my hotel room. :(
All in all a fantastic day. The conference's already been worth the price of admission and it's only half over.