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.
I'm going in the opposite direction, and I suspect there's no turning back. I'm facing the half-life of my technical knowledge quite frequently, but it's being balanced by the excitement of providing a working example of an alterative business model. Of course, it's all hard and mastering any of it, technical or otherwise, is something to be proud of.
Posted by: Steve Hayes | September 09, 2009 at 08:01 PM
Michael, it was nice to see you briefly in the passageway and wave hello. I wish I had had the chance to chat with you at length. Those hallway conversations always were the best part of OOPSLA & Agile.
The first transition coaching I did resulted in what I call "going native" where the powers-that-be encouraged me to focus on the technical. I was all too willing, even though my Spidey Sense was telling me that this would just propagate the team's status quo. Since then, I've really had to repress my technical talents, and any desire to rescue the project through "elegant test-driven emergent design." (It is something I'll encourage from the team, but it will fail if they don't feel they have the space to refactor, write tests, or pair-program when appropriate.)
Sometimes it does seem impossible to bring joy back to a team. But when we can align intrinsic motivators (creative work, new skills, pride in craftsmanship, etc.) with the production of quality, valuable software, the rewards--for the team, the organization, and for me--are far more potent.
You and I have been on oddly similar paths for many years. (Maybe I'm stalking you...? Nah!) When I teach courses on TDD and get to the section on legacy code, I talk about how you were often brought in to help a team "go Agile" but were then faced with a gazillion lines of spaghetti C++. (Somehow I lived a charmed life, and worked on many greenfield XP projects.) Then I quip, "but Feathers got a book deal!" ;-) Yep, Harrison Ford will always be known first as Han Solo, and you may always be the Master of Legacy Code.
You have a pleasant and gentle demeanor, Michael. I'd guess that most teams respond positively to that, and quite a few managers try to take advantage of it to keep their own agenda alive. I've had to learn to risk the whole contract, and my reputation, to say, "You know, what you think is slowing the team down is really not your first constraint. Here, I carry this mirror..." or something hopefully a little more diplomatic. ;-)
I guess what I'm trying (badly) to say, Michael, is: I hope the community isn't going to lose a great coach. We have to take project work occasionally to keep those technical skills sharp, and to "eat our own process dog-food" so to speak, but you have much more to give the software development industry as a whole, by demonstrating that a geek can also speak authoritatively about process improvement and organizational transformation.
These days, I tend to lead with that "face" (and it's become a real face, because I love to help people), and let my technical skills be a delightful surprise for my clients to discover later, when I roll up my sleeves and hammer out some elegant test-driven emergent design alongside one of their developers!
So, stay in the game. (Otherwise, whose career will I try to mimic?)
There's more to this conversation (particularly triggered when you said "it is all connected"), but my "rambling" alarm just went off in my head.
Posted by: Rob Myers | September 09, 2009 at 09:25 PM
Thank you. I don't know if you meant this to happen, but this post was very moving.
I kind-of went through an opposite shift: Up until a few years ago I believed that software development problems can be solved by better structure of the code, distribution of responsibilities across classes, occasional use of patterns, etc.
Then I changed my perspective. I know think that the process is a much more dominant factor. Baby steps, TDD, etc. will improve the quality of the program much more than any code-level thing.
I guess my next shift (no doubts, it will come) will take me back to Tech. land.
-Itay
http://javadots.blogspot.com
Posted by: Itay Maman | September 10, 2009 at 06:43 AM
Michael -
Thank you for this (com)passionate post. It echoes my own walk and I had the opportunity to lead one team to agile when I was a VP and then build another from scratch as an entrepreneur. My programming career started in 1971 as a freshman in high school. I had my first programming job in 1973 and I couldn't believe people would pay me to do this thing I loved to do (I felt a bit guilty because I thought work was not supposed to be enjoyed that much.) I then became more of a professional programmer after getting a couple of degrees from a good university. That's when I began to question my career choice. Overtime was a "silent requirement" to keeping your spot on the team. Talking to customers was forbidden (at one place I worked the salespeople were fined $50 each time they were caught talking to a programmer!) Each of us became towers of knowledge which was supposedly efficient and meant we had job security. What is usually meant was missed vacations and family events because you couldn't scale "you" except be working overtime.
I am thrilled to say I've come out the other side for 10 years running. The joy is back! I don't code anymore but I am sitting in the same room (no walls, cubes or offices for anyone --- even the CEO), so I get to see the joy every day. 40 hour work weeks and never a weekend. Vacation requests are always honored. We meet our deadlines because if we need more done we can add more people -- its the hidden secret to pairing, coding standards, unit testing and code stewardship. Its amazing to me how few "agile teams" actually use ANY of those practices and they still call themselves agile! Its not perfect, but its a team and its a team that takes responsibility for itself! You can't imagine what its like to be a CEO of such a place. I hope you get a chance to visit sometime.
Posted by: Richard Sheridan (Twitter Menloprez) | September 10, 2009 at 07:06 PM
"So, I've moved almost completely back into tech"
Welcome Home!
Posted by: Ravi Mohan | September 20, 2009 at 08:42 AM
A beautiful post, Michael.
For me, it's about People, Process, and Tools -- in that order.
You seem to have all three mastered. No matter your type of participation in a gig and your personal feelings of "success," I am sure you always have a positive impact on everyone you touch.
Posted by: JonKernPA | February 06, 2010 at 07:08 AM
that's very nice article I have read.
thanks so much.
Posted by: iPhone contacts backup | February 09, 2012 at 11:36 PM