I went to the Agile2009 conference this month, and enjoyed it a great deal. I have deep roots in that community.. people I've worked with.. people I've known on and off for close to 10 years. For me, it is a big "catch up" thing. I pick up things from the sessions but really it's all about the hallway conversations.. people I know and respect who are passionate about delivering software and making the workplace a better place.
I feel lucky that I stumbled upon all of this. In 1997, I went to the OOPSLA conference in Atlanta, and I was mesmerized by the technical sessions. I was equally mesmerized by the interactive sessions. In one, I overheard two people talking about how in their consulting job, they had to share a single desk in a half-cubicle, with one of them standing all the time while they were working on their system. They worked for a huge consulting company, a body shop essentially, and the ethic was "this is the job, your comfort isn't a concern, do the job."
That attitude always terrified me. I once read a book called 'The Soul of a New Machine' by Tracy Kidder. It's about a team of young hardware developers racing to build a new computer. It was 'Death March' before the term 'Death March' was popular. People pulling 18 hour days continually, to bring this thing to life. The fact is, I love development, and in my 20s, I pulled my all-nighters. It was intoxicating and fun but when it became expected, it wasn't any longer. For me, it couldn't be fun when every semblance of choice was gone.
At that OOPSLA, I was lucky enough to stumble into a room where Kent Beck and Ward Cunningham were doing a "birds of a feather" session on pair programming. I'd never heard of it before. Sure, I'd done it, but when I had I felt guilty. I felt that when I paired with someone I was wasting company time. Here were two guys who not only said this was okay and productive, they were also talking about selecting a good chair for programming. Selecting a chair! It's hard to convey now how much this impacted me. Here were people who were saying that you don't have to leave your self at the workplace door, that you can do a great job without shorting yourself and treating yourself like a work tool.
It's amazing how much things have changed since then. I think that Agile is part of it, but some of it is generational and some of it is economic. I think that the ethic of "it's the job no matter what" is a legitimate human reaction to fear of failure in a short term situation. You get people to set everything else aside and focus.. you take all of that wishy-washy human stuff and pull it off the table.. you get together and you climb over the ramparts, hand in hand, with your guns, and if you live, you slap each other on the backs and tell stories over the campfire - that's the life of the tactical hero. We know, though, that software development isn't a fight or a war. It's a long game, a game of care and consequences. Everything we do is sensitively dependent on people, how they feel, what they think is possible in a product. The game isn't getting through a project and delivering, it's making something very useful, something which fits the user's wants and needs and you win by cultivating startling insights along the way. That cultivation is the essence of culture, and culture is the essence of successful software delivery in both human and business terms.
Now, having said all of this, I feel myself pulling away from it. Not the truth of it, but the deeper involvement. It's been going on for the last couple of years. One obvious reason is that I'm called less for the "let's transition to Agile" work than the "oh, I've got a big messy pile of code" work. Life lesson: be careful what you are good at. The other reason is because I do feel a little out of my element when it comes to remaking a workplace, and let's face facts, that's exactly what transitioning to Agile is, really. We have the mechanical bits: let's all sit in an open workspace, let's get the customer/product owner involved. But there are also all of the situational bits, the interface of the team with the surrounding organization, the politics, the fear, meetings with people across an organization about how it all hangs together. I still love the one-on-one coaching and work with teams. Everyone has a different view, and what I do is flit from one person to another all day long and help reconcile views, help galvanize action. Don't get me wrong, it's fun, but it's also.. well.. there's no algorithm for cultural change. It's a dynamic system and, really, one of my weaknesses is that I like the rush of certainty. I want to abstract away from experience and find what works.
I once told a friend, in a kind of confessional way, that when I'm called in to do a transition, I don't really think about how to help people become more effective, I just walk in and ask myself "would I want to work here?" And, it's not the building, the project, etc. It's the feel. Are people engaged, joyful and proud or are they scared and disheartened? In one particularly odd gig, I worked with a few teams in a company which was going through some rough competitive pressure and some bad history. As my work with the teams wound down, the sponsor thanked me for all I'd done and and showed me the increase in the quality numbers.. and all that I could think of at that moment was that it wasn't successful by my terms, because I didn't impact the feel in the teams much. It wasn't what I thought it could be. It was at that moment that I noticed just how different my definition of success was, how most of it was in human terms. When it works, it's wonderful and rewarding, when it doesn't you're just left sad and wondering what else you could've done. In a perfect world, human happiness and organizational efficacy would walk hand in hand every single time, but there are times when they don't.
So, I've moved almost completely back into tech. I spend more time thinking about programming and design than just about anything else work-related recently. I'm looking for technical solutions and technical patterns. Again, I think it's hard to say how much of this is because of the legacy thing pulling me into the thick of tech and how much is really a matter of choice. I visit companies with cultures which are all over the map. Some places are wonderful, some are not so wonderful. I've seen company cultures get worse and I've seen them get better, and my focus on the team and its technical practices rather than the organization and its bigger issues gives me a bit of distance. There are people I know who are much more comfortable with that space.
As much as I love the people stuff, I love the programming, and the cool thing is that it is all connected. You always have impact. The guy who moves a table to be able to do his work is not a furniture mover by trade, but the table is moved. Saying "how do you feel about that code?" or "what do you think about how your meetings are run?" You never know where it leads.