January 10, 2006
Stubbornness
My first project for ThoughtWorks involved changing the project's process to use Extreme Programming. It was a long, difficult effort, but ultimately we succeeded. Afterward, I admit to being somewhat smug. I knew XP, this project proved it. Part of this smugness came from the fact that some of my teammates had come from earlier ThoughtWorks projects that had purported to use XP, but were (in my then mind) not practicing it correctly. Several of the practices introduced early into our project, were not much like XP as commonly discussed in the community (or practiced by me elsewhere), and did contribute to some early adoption issues we encountered. By shifting toward more typical XP descriptions of those practices, we got traction, and ultimately success.
Now I knew what XP was. So, on my next project, I introduced those same practices -- aiming for implementations similar to those that proved so successful on the previous project -- only to find that they were now completely wrong for the team and culture. I concluded that the problem was context-specific crud inadvertently left-over from the early version of those practices on the previous project. Removing this, (i.e. shifting even more toward what I now considered typical XP implementations of those practices) brought us better results, and ultimately success.
Now I knew what XP was. So, on my next project...
You see where this is going. It was three projects (four if you count the ideas that seeded the first), before I began to realize that you can't separate context from implementation of practices -- XP or otherwise. Each time I found certain principles carried over, but I also found that while there were simularities in implementation (to a greater or lesser degree) there was little (nothing really) that when cookie-cutter applied in the new situation netted the same results as on the previous project.
And this was for the marginally successful practices. It took me even longer realize that this mind-set was appropriate for the most successful practices as well. Just because something was a smashing success -- the break-out idea that got the team's velocity up, and led to smooth sailing the rest of the way -- didn't mean it was immune to this reexamination on the next project.
There's been several more projects since then, but I still struggle with this today. While rationally I feel that I would be willing to abandon or modify any practice (even the divine practice of TDD) if it wasn't helping us ship software, there are certain prejudices I bring into each new project, and an inevitable 'aha' moment when I realize how that prejudice is blinding me to what will help most. Mainly that moment just happens sooner (IOW, I am quicker to look to myself for the problem!).
I believe that this pattern applies to practices, values, and even principles: what works for us in the past, what we feel makes us successful, or even who we are is based somewhat on the accident of experience (or chance), and may prove disastrous when blindly followed in an inappropriate circumstance. Prejudicial thinking is difficult to notice in oneself. How much harder it is to detect when reinforced by culture, early experience, and prior positive outcomes.
These days, I believe the key difference between practice, value and principle (something much debated at one time in the XP community and elsewhere) is simply how likely we are to adjust them if things are going wrong for us (i.e. practices change a lot, principles rarely). But none should be immune from our consideration when our actions result in negative outcomes.
My advice (BTW my meta-advice is don't look for advice on starting projects, plan to work it out for yourself, you will anyway): Start each project with a blank process sheet. View the ideal process as a seamless flow of software from implementors to users. Find what's gumming up that flow, apply the contents of your experience toolbox (i.e. the processes, practices, values and principles you've collected to that point) to the rough spots until things run smooth. Never stop looking for new things to add to your toolbox. Always know what your goal is. Never stop learning. Never believe you've got it all figured out.
Most importantly: never be so stubborn about what you think you've learned about success, that you aren't willing to change.
Posted by wcaputo at January 10, 2006 06:01 PMExcellent points here Bill. Thanks for sharing your insights that stem from years of experience.
The fundamental principles of Agile don't change but practices must adapt. Keep your eye on the prize (adding value - getting software into production) and not on the practices.
Posted by: Tom at January 24, 2006 01:15 PMThanks for the kind words, Tom.
One thing I want to emphasize (not suggesting you disagree) is that I believe that principles do change -- albeit much more slowly (and with much greater cause and effect) than practices -- or even values.
In the larger sense (i.e. that described by Jared Diamond in Collapse), this change may take lifetimes or even generations. With regard to software development, it may be only after many bad projects or negative experiences.
This isn't necessarily bad. We all believe that all our principles are correct, but since people have different ones -- and people can (and do) change them -- that probably isn't the case.
What the Diamond quote (and the description of the medieval Greenland Norse colonies that it derives from) really did for me was to illuminate the idea that values and principles change much less frequently because they are much more deeply aligned with what we feel got us where we are today, and so we are consequently much less likely to examine these assumptions until they are very innappropriate (and damanging to our success).
The fact that the Greenland Norse colonies -- after many generations -- chose starvation and extinction rather than (among other choices) eat fish (a sentiment tied into their European identity that they either brought with them, or adopted very soon after arrival), is mute testament to how strongly people will hold on to inappropriate values, if those values are strongly aligned with their sense of self.
Now, I think software development principles are not necessarily so strongly entrenched -- but people are people, and this goes a long way in my mind to illustrate why people are stubborn about certain changes -- even when it may appear obvious to others how much they are simply hurting themselves by clinging to them.
Posted by: Bill at January 25, 2006 01:16 PMFree Features (January 25, 2006)
Asking about Trust (January 24, 2006)
The Steelers (January 23, 2006)
Bad Links (January 19, 2006)
Visual Studio Team System Jumpstart (January 18, 2006)
Aligining Value (January 17, 2006)
Lisp Again (January 16, 2006)
Getting It Right (January 13, 2006)
Efficiency vs Productivity (January 12, 2006)
(All Entries...)