Wednesday, November 14, 2007
Wheaties Syndrome
One may think that the unasked question is "Why would this be beneficial?" or "How does this solve our problem?", but I've started to hit on the big one being "Why did this work for them and how are we different?" This helps to highlight that tools are specific things...that the hammer won't get the brick secured to the other brick very well. Too often, as well, methodologies and tools are mashed-up, with one become tightly linked with the other. Agile needs Fitnesse or TDD, for example. (No! Automated testing allows for more complicated code to be developed and increases productivity. Any productivity gains Agile gets credited with is an industry glow effect from TDD)
I've found that the best way to minimize the flare-ups of Wheaties Syndrome is to ask for separation of tools and methodologies. Explain why this method would work for us with out the tool. Explain why this tool will work for us without the method. More often than not, it's the right tool used correctly that will provide the most benefit. Methodologies are the way that consultants and book writers latch onto the tool and try to steal the benefits (see also: Linux).
Sunday, October 28, 2007
Herds Graze
Which description most accurately describes a development team? Which one should?
Part of what seems to stall most teams and produce sub-standard product littered with bugs and inefficiencies seems to most often come from a company culture that defines the work to be done and the time frames the work is to be completed in outside of the development group. This produces a feeling of exclusion and leads to phrases like "They never let me clean up the code/re-factor/work on anything cool."
Agile takes some steps to help fix this but, as I've mentioned before, if the rest of the company doesn't buy into the process nothing will come of it. If you can get only one thing out of Agile, make sure it is the concept of estimating little bits of the work to be done. This one little thing can be the first stepping stone in getting your development department to start hunting prey efficiently.
Once you have estimating in your control, the next step is to define an anatomy of an estimate. I've worked to create a multi-part plan for each story card to be completed that included improving the app, giving the developer some buy-in and a sense of ownership. What comprises an estimate are:
- Building Tests (TDD)
- Coding Feature
- Increasing Test Coverage in area (NCover, NUnit)
- Fixing Bugs
- Re-factoring
- Buffer
- Round-Up
Each of these steps build on each other over time, and there is some limiting that must be put in, lest the entire application be in a constant state or re-factor. Simply put the total work or 3 -5 should not exceed the work in 1 and 2. This means on a first pass in an area, maybe only #3 will be done. Next passes may include #4, etc. The order is also important. An area should not be re-factored until it is close to bug free. Bugs should not be fixed unless there is adequate test coverage in the area to be fixed.
This begins to take some of the scope of work to be done away from Product Manamement and Business Analists and gives the individual developers some discretion in what they will be working on. They will no longer be eating what they come upon, but activly seeking prey.
Friday, October 26, 2007
Fitnesse Sux (but you knew that already)
Additionally, Fitnesse is seriously not ready to be a test platform for .NET...it is still primarily a Java thang for socialists (redundant?). And the TDD/Agile thing is still horribly unresolved for issues of working with code from a legacy system and with Product Managers used to old guard ways who refuse to actually write tests.
(We've found that even though Development is more that willing to go with Agile, trying to get any other department in the company to do their "Agile part" is like trying to get a dog to chase the LASER pointer: sure he sees it, but it doesn't look like any duck he's ever seen.)
So Developments issue has been: we've got a 500K+ line, multi-languange code base that hasn't been designed for Fitnesse fixtures, no one else in the company is willing or able to write tests in Fitnesse besides Development, and syncing code and tests in a Continuous Build environment is next to impossible and one of the most common source of failed builds.
So we've finally made the decision to ditch Fitnesse and move back to 100% NUnit tests. Orcas may change that with better integrated testing regimines, but that still doesn't provide any ticks in the plus column for Fitnesse.