onsdag 26 november 2008

Churn in the backlog - what to put in the backlog

From a thread in [leanagilescrum]:

Everything that you KNOW (or are reasonably certain of) about the future can be in the backlog. It gets to be waste when you put in the backlog stuff that has a high likelihood of changing. So the trick is to put in all of those things in the future that are going to happen – trade show, product launch, etc. And put in what you know for sure about what the software will have to do by those deadlines. What I’m proposing that you avoid wishful thinking and guessing in the backlog – only put in what is reasonably unlikely to change.

If you measure the churn (change to backlog items from the time they are entered until the product goes into production), I would say that 10—15% churn is not a problem. But 50-200% churn means someone is wasting a lot of time putting stuff in the backlog that is going to change – they do not have much of a sense of what is certain and what is not. High churn is often a sign the backlog is used to try to deter change and insulate the organization from uncertainty, rather than creating a process that is good at responding to events as they unfold and allowing the organization to deal with uncertainly.

I suggest that you draw the line on putting items in the backlog at the point where you have a reasonable degree of certainty that backlog items won’t change and will get done. You can draw this line for the number of items in the backlog and also for the detail of each item in the backlog. To do this, you measure backlog churn plus the percent of items that are unlikely to get done. If this number is over 20% - 25%, then your process is creating too many backlog items and/or too much detail too soon.

Mary Poppendieck

www.poppendieck.com

Author of: Lean Software Development & Implementing Lean Software Development

tisdag 25 november 2008

Test Driven chapter 1

Går igenom grunderna i TDD. Några intressanta saker:

"Only ever write code to fix a failing test"
Motivering
- Late defects are expensive
- Quality, (good design, no duplication, etc)
- Specification is time consuming, get old fast - TDD delivers
- Test first --> Design "inner API"

Test-->Code-->Refactor

Without refactor we have well tested BAD code.
You cannot get the architecture right on the first try
The human brain can fit 5-7 concepts simultaneosly in working memory

Refactoring preserves behaviour
Regression is existing, once-working functionality getting broken
Tests are an integral part of requirements and specification
Tests as specification
- A LOT faster feedback through automatino
- More reliable test exedcution
- One less translation step

Tools
xUnit
Fit and Fitnesse
Continuous integration - http://www.martinfowler.com/articles/continuousIntegration.html
Lint - www.splint.org
PMD - pmd.sf.net
code coverage - http://www.javaranch.com/newsletter/200401/IntroToCodeCoverage.html

Questions
How do you know it's the right test and not an unnecessary one?
Are there a paper on stated fact that Evolutionary design is less expensive than trying to get the final design on paper in the beginning?
How do ATDD trace onto TDD?
Difference btw user stories vs use cases?

The Test Driven Database

Ett "webinar" som hölls av Max Guernsey

Poängen var hur man ska lyckas automattesta databasen pss som unit-tester. Svaret var "we need to shift our values to include repeatable database construction". Han gick igenom en testtyp som jag inte hört talas om förut "transition test" som gick ut på att man hade en databasebuilder som utökade databasen.
Exempel: först kanske den skapade en table. Nästa transition bröt den isär tabellen i två med en relation emellan, all data i databasen finns kvar men förändras. Vid release kör man alla transitions sedan senaste release och voila!

Poängen är alltså att man alltid kan köra automatiska tester av (och mot) databasen och man att de stämmer eftersom databasen skapats automatiskt.

Han nämnde också ett tool "Data constructor" som om jag fattat rätt ska vara gratis, jag har dock inte testat ännu...

Statement: Repeatable, testable, tested database builder is neccessary for lean.