Monday, June 30, 2008

Severance pay part... damn, forget it!

"User Acceptance Testing (UAT) is a process to obtain confirmation by a Subject Matter Expert (SME), preferably the owner or client of the object under test, through trial or review, that the modification or addition meets mutually agreed-upon requirements" (quote from Wikipedia).

The point is: sometimes the SME is the only one who can actually validate a piece of software: this is particularly true when the domain is very complicated, as in the case of severance pay, and it is very difficult for the developer to distinguish "good" results from "bad" ones. Frameworks like Fit can help both the SME and the developers, but it is essential than the SME gives all her availability and willingness: no framework or process can substitute for domain knowledge.

If the SME denies her time it is impossibile for the developer to ensure that everything is working fine: it is not acceptable for a SME to say "value X must change from 4298.91 to 4523.62, you can figure out the rest ("the rest" being another 20 or 30 values intertwined in almost mysterious ways) as I have other things to do".

This obviously makes the customer unhappy, as she has to pay for a huge amount of time which is necessary to the team to "figure out the rest", where a tenth of the time would probabily more then enough to a SME. A good solution is a honest conversation with the customer, in which we can suggest different solutions - e.g. another SME with more time available for testing or a requalifying of the priorities of the current one.

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.

Wednesday, June 18, 2008

Firefox 3

Yesterday Mozilla released Firefox 3, and I obviously downloaded and installed it.

Now you can add a new bookmark with a single click, and the tagging feature is really cool, it adds another degree of freedom in the way you organize your bookmarks and let you get what you need in a single click. The smart location bars is quite interesting, as it adapts to user habits and preferences; there's also a "most visited" function, and a quite useful full page zoom. Moreover, it is easily customizable in many aspects.

One of the issues of the previous versions was, in my opinion, the large amount of memory required; Mozilla states that the new version uses a much smaller amount of RAM, but the blogger editor in a Firefox instance and Firefox home page on another one take almost 75MB, so at first sight it doesn't seem much of an improvement (IMHO).

For those who might be interested Mozilla promotes a third Firefox Day, an interactive session in which to learn the new features, know more about Mozilla support and discover how you can make the difference. Support Firefox day is Friday, June 20.

Thursday, June 12, 2008

IBM i5 exposed

Following the post on web services interoperability, we've now deployed in production our first web service based on a legacy software written in rpgle and resident on an IBM i5. I will review the principal passages of the procedure.

First, we used WDSC to generate a Java class which extends com.ibm.connector.as400.ProgramCallBean, which is basically a class that wraps a call to the rpgle program. The class comes with a .pcml file, which defines the name of the rpgle program and the parameters to be used, and a .config file, which describes the properties used to connect to the i5 system.

Then we created a new project on NetBeans IDE in which we imported everything; we created some domain classes, defined an interface for the new service, created a fake and a real implementation and kindly asked the IDE to generate a Web Service for us (yes, if you're wondering it was all test driven).

We deployed the application on an Apache Tomcat, created (always with NetBeans IDE) a client for the service and tested it. Everything worked all right.

To expose the service to our customers, we deployed the application in the DMZ and opened the correct ports on the firewall:
  • 449 for the port mapper
  • 8475 for remote command
  • 8476 for sign on
We kept all the other ports suggested by IBM closed as we don't need them open... yet.

Tuesday, June 10, 2008

Calvisano wins the title

Leonardo Ghiraldini led Calvisano to deservedly win the 2008 Super 10 championship: two tries for Calvisano and a correctly unawarded one for Treviso for a final 20-3. Tension aroused around the end of the match, when Louw charged Griffen after Mr. Damasco's whistle and set off a little scuffle, which ended up in the referee showing Louw a yellow card. At this point, Goosen insulted Mr. Damasco, which in turn expelled him, causing many supporters to throw their big cardboard hands, distributed by a sponsor before the beginning of the match, onto the field.

I don't mean to talk about the match, but I have some comments about the mentioned facts.

First of all, Goosen really deserved his expulsion, because shouting insults at the referee is something I'd rather leave to soccer players (to which I mean no offence): insulting referees (actually insulting anyone) is not in the spirit of rugby, and when it happens it must be severely punished. It's true that Louw got a pair of hard jabs by Griffen, but he knows why he took them: he did something he shouldn't and he paid the appropriate consequences.

To those who said Marcato should have played instead of Goosen, I would like to remind them of the 2007 final, in which the latter kicked Treviso to extra time and had his say in the victory, scoring 13 points out of 28. It's just a pity that this time his nervousness took over his concentration.

About the cardboard hands, thrown on the field to protest against the decisions of the referee: I think it was a very foul gesture, as it was very dangerous; I have seen more than a person hit by them; moreover, even if the refereeing was not so good, this decision was, as I said, correct.

That said, I want to pay my compliments to both the teams for being there; thanks to Francesco, I also had the pleasure to meet Anna, Enrico, Morena (I owe you one), Roberto and Tommaso (I wish you many years of good rugby).

See you next year!

Monday, June 9, 2008

Baseball and XP

I just read this great post which is, even if it is disguised, about customizing agile methods. I quite agree with it if the outcome of customizing is a failure, but I think that if you just adapt a method to your environment and it works, well, I'm not interested in being a "purist". I want to deliver value, and if we find a practice not to be useful we simply don't care about it.

Thursday, June 5, 2008

Cernusco Rugby 7's Tournament 2008: the results

As expected, also this year the tournament had a great success, featuring teams from everywhere. All infos and pictures on the official site of the tournament.

The winners on the field:The winners off the field: as they proudly show, the Ingolstadt Baboons (Germany) won the Cassie Pienaar Trohpy, awarded to the Best Drinking Team; they also provided everyone with a great fun, so it was great to meet them.


About the first picture: I somewhere read a note which ran something like "When I was a child I thought I had a very big family, as I had a countless number of uncles. Then I understood: my daddy played rugby".