Tuesday, June 26, 2007

Doing Agile in Italy

During the latest JAOO conference, Alistair Cockburn deliberately provoked the audience stating that "we can't do agile in Europe" and this was due to EU regulations for contracts, which have to be filled with the requirements of the software to be developed by a contractor. This was a serious issue also, because in this case the law (unconsciously, I suppose, unless there is a powerful waterfall lobby in Brussels) poses a serious constraint on the development process. A contractor has to face the fact that requirement discovery in an agile fashion might drive the development team out of the officially signed project goal, some might go for a more ambiguous contract (but the customer has to agree on that, and this is not a piece of cake, especially with new customers), some others might require more paper to change the project scope (but this doesn't agile), the latest option is to take the risk and be "paperless" for a while.

Setting up an Italian development team

In Italy we have also some peculiarities related to the job market, which have some interesting effects on the way software is developed. I remember an old yet interesting article by Steve McConnell, dwelling on the notion of "problem programmers" meaning programmers with a negative impact on productivity. In other words programmers which are normally unable to finish assigned tasks, who need external help to finish the tasks, whose tasks needs extra cleanup work afterwards or which are sucking time an productivity to other members of the team. Put in this way this sounds somewhat scary, but it's not infrequent to meet such a beast. McConnell has only one solution to the problem: get rid of the problem programmer as soon as you can, which goes to a small set of options:

  1. Resolve the causes for him/her being problematic
  2. Move him/her to another team (hoping that this is a variation on option 1)
  3. Fire him/her before the damage is too big

In Italy we can't fire. Job market regulations make firing an employee a very long nasty and complicated process, and 99% of the cases a non-viable option. I mean, in some places, you can't fire somebody even if you found him stealing (which puts the problem programmer in a much better light). The average Italian solution to the problem (there is always an Italian solution) is to go for temporary recruitment, hiring programmers from body rental companies, the third millennium version of mercenaries. Unfortunately this option has some drawbacks.

  1. In many cases you have less control on who you are hiring. Even if I've seen pretty bad recruitment strategies in many places, being the one to choose who you are going to work with it's still a recommendable option.
  2. You'll have less control on turnover issues: people might leave the company which hired them (and your project) for reasons which have nothing to do with you.
  3. You have less control on motivation, you can't do much to improve it (at least on the salary side, you can do a lot, and probably more effectively on other aspects), you can do a lot to destroy it (with bureaucracy, holidays management, etc.).
  4. Being hired by a third party is often a treat to motivation per se. One might ask "why doesn't this company want to actually hire me?" and feel they are just a replaceable part of the process, which helps them feel less guilty the day they'll decide to leave.
  5. Last, but not least, the control chain sucks money. So the sub-employee is also usually sub-paid compared to the official counterparts.

So you generally end up with external teams with potentially lower motivation, or internal teams with people which tend to "seat" on a safe job, without being challenged for a while, and that need "something to do". I don't really want to end up arguing on the ongoing political debate which is going on in Italy these days on the topic, and please don't derive conclusions on my political orientation from this article. If you have to achieve high productivity from a software development team the best way is hire the best people, and get rid of the problematic ones. In Italy is hard to do both, so the net result is that you have to squeeze the best out of the existing team, which is sometimes …challenging.



4 comments:

Hugo said...

I'm not aware of the employment laws in Italy, but we usually solve the "problem programmers" issue by:

- Careful selection. There are of course lots of papers describing different ways of achieving this. Still, i found this to be a really interesting approach to recruitment.

- Add a time clause to the contract where you can fire the employee without having to go through all the legal stuff. We usually use a 6 months period, what this means is that during those 6 months we can fire the employee without any legal trouble.

Of course this doesn't always work and some "problem programmer" still pass the net. But we found that we can reduce by a big margin the probability of having a "problem programmer" in our team.

Unknown said...

Hi, Hugo!

Thanks for the link about recruiting, interesting, and not so far away from my personal perpective on the topic. When I am involved in recruiting people for my employing company I think pretty in the same way (I am the three hour all-round interview type of guy).

Anyway, let me clarify my normal context: as a consultant, I normally join a team (ina customer company) whose dynamics are out of my scope, so a can't influence neither selection nor contracts. Most of the teams are anyway formed following the scheme I described. This happens both in software houses and in IT departments of large enterprises.

Temporary contracts are an available option, but only in certain specific situations, and (I have to admit I don't know why) it's seldom used in software projects (maybe because you're putting on the contract the expected delivery date, and this might lead you into trouble, if you're late... ).

When managing a team, the restult is that you can't leverage people selection that much (which is one of the top factors), and money is more powerful as a negative factor than as a positive one. Often, the best option left to improve team motivation is to give everybody an evident chance to learn someting new. This makes things a little more challenging and interesting.

Anonymous said...

Hi Alberto,
It's interesting that you put the question about recruitment in the context of Agile development.

In Ireland we have a seller's market for development skills - there are more places than people. This means that we have to bid for the best people available. Money, while important, is far from being the deciding factor. What attracts good developers is a good development environment and interesting work. Most developers are attracted to an Agile/Code-Centric development shop. And of course the better the group of developers you have, the easier it is to be code-centric.

In Italy it's a buyer's market so in theory it should be easier to find skilled developers. My guess is that it's also a more conservative and cautious labour market and therefore less mobile. Perhaps those who already have contract positions don't want to risk losing them (a lot of Italian developers that I have met work, or have worked, under these temporary contracts, renewed year after year).

All in all, the Italian software labour market seems badly distorted, which is a great shame considering the huge pool of talent that is clearly available there.

Hugo said...

My reply was more directed to the employer view of things.

As a team leader i also found myself having to deal with other companies programmers that are just plain incompetent or not motivated. As you, i found that for the not motivated folks providing something "cool" for them to work on or giving them a more active role on the project does the job. As for the incompetent ones, well, when i can't get rid of them i just assign the simplest tasks to them and double check everything they do.