Tuesday, June 26, 2007

Root Cause: design smells

While auditing a software team, I ran into a maintenance project where the estimation of a modification had been underestimated. Looking into the details, the project manager stated that he underestimated the testing effort required. While testing they run into the typical case of "collateral damage" ... you change something here and it goes wrong elsewhere. Digging a bit deeper, showed that this was mainly caused by a software design where tightly coupling was key. "yes we know, as design is evolving, we need to refactor every few years ..."

Refactoring ... every few years ?!? ... How does this fit into one sentence? The weird thing was that even after pointing out the need for a more loosely coupled design and layered architecture, the team was still not convinced that they should focus on refactoring instead of modifying their estimation capabilities. When it came to refactoring, they did not really knew how to sell this to the customer ... make it part of your definition of "done" and just like continuous integration, do it on a daily/frequent basis that will lower the "pain".

Wednesday, June 20, 2007

Who am I to blow against the wind

In a recent discussion on the implementation of agile techniques, I ran into the aspect of "courage" - one of the cornerstones promoted by the eXtreme Programming evangelists. In most of the organizations I rolled out agile techniques so far, there was always some flavour of "courage" required to get things done. But I never really saw it as an explicit requirement. People needed to be convinced of Test First principles, refactoring versus big-design-up-front or pair-programming, but I never had to "stand up and fight" ... eventually these things "sell" themselves if you're willing to muddy your boots. But in a recent implementation, the need for "courage" became key. The tention fields that determined the projectcontext were so strong - we would typically call it a "political" heavy loaded project - that the "common sense" aspects typical for the agile toolbox came to a halt.
Convincing the project team to have the guts to deal with these tention fields instead of going for work arounds was a tough thing to do. Getting people out of their trenches and make them couragous enough to give up the "who am I to blow against the wind" mind-set ... as far as I know, there's no open source toolset yet that can help us on this.