Thursday, June 19, 2008

No bump, no set, a spike

Yesterday we ended our second iteration on a brand new project, in which we are trying new technologies and some adjustments to our process. We choose a story which touches almost every layer of the application and made an architectural spike: more a proof of facts than a real application, as we oversimplified domain objects and processes, but it gave us some good insights.

Unit testing is great (and TDD even more), as it forces you to carefully think of the design of your collaborations. And I'm not talking about "Design", rather I'm focusing on simple objects with clear behaviours. After all, tests are the first clients of the objects that make up our applications, and if they're difficult to test it means that they are also difficult to use. As we're totally on a green field, we agreed to not to write any line of code without having a corresponding test first, and it gave us great results. That was very difficult in some legacy applications, due to a very long list of factors (e.g. the persistence mechanism is embedded in every domain object and you can't test anything if you don't have the whole system up and running. Please don't ask, it's already frustrating enough).

Continuous integration is a huge boost for quality, much more than simple unit testing, as it has a broader impact and checks for defects against the work of all the team. Besides, no one wants to break a build and let everybody else know, so you also get improved committments for free. We also configured the PMD plugin for Hudson to report hints for cleaning and refactoring.

Paper cards for story and tasks helped us to easily visualize how the iteration proceeded; keeping the tasks small increased the effect of cards moving from the "open" column to the "closed" one.

We also tried a very simplified variation of CRC cards, based on outdated visiting cards; maybe I'll post something about it, sooner or later.

We tried some technologies that were unknown to some members of the team, but we faced the risk and resolved the problem pairing the untrained members with (more or less) expert ones, who enriched the sessions with many explanations about the basic concepts.

Due to several external incidents which required the help of the team, we didn't have enough time to deliver everything we had planned, but, as we previously agreed on which tasks were droppable, there were no problems in reaching the iteration goals nevertheless.

All the team is now looking forward to the next iteration, which is a very positive achievement.

No comments: