Intelligence and hiring practices

October 18th, 2009

I found a weekly in my mother-in-law’s flat today, with a relatively long article on intelligence (good), and why having an IQ of 180 didn’t necessarily mean you were able to get a good job (presumably bad, depending on your definition of “good”).

I started interviewing potential developers for positions around six years ago. Since then, I have seen a lot of resumes, and I have talked with a lot of people. The reason why I am writing this is that a friend of mine, who is a top-notch developer without any managerial experience told me he envied me because I have an insight into how an interview works from the employer side. Most people tend to get this wrong, so I will try to explain how my head is bolted together when interviewing. Hopefully, other people will think the same way.

Norwegian schools and intelligence

The backbone of the article I referred to seemed to be an assumption that very smart people get bored in the norwegian school system, and that Mensa is a kind of support group for the poor people who are cursed with an above average intelligence. There were quotes along these lines, at least, but I will try not to tar all members of Mensa with the same brush. The idea was that school work was so ridiculously easy that being interested in it was a bit beneath these people.

When I was at university, we had to jump through a number of hoops in order to graduate. Some of these hoops were knowledge-based (I remember a course called MA-105 with fondness). These courses were designed to be harder than adequate, prompting most students to have some thoughts about whether they wanted to go through with their studies, or to find something else to spend their time on.

The other kind of test put into the coursework was a test of willpower. Many students spent a lot of time finishing their M.Sc. thesis. Part of the reason was that the earlier grade of Cand. Real. was twice as long, and faculty had not completely caught up with this fact. Another reason was that students were mostly left to their own devices. Finishing the thesis was a different kind of filter. If you hired one of these people, you knew that you were getting a reasonably smart person with a will towards doing something.

Keeping students around indefinitely is a costly proposition, so these studies have now been restructured to provide much more guidance, forcing the students through the system faster. The downside is that candidates have not been sieved the same way as they were before. Employers have had to compensate for this.

This is why I think there is a broken premise in the article I read. The article is based on the premise that extremely intelligent people can do whatever they want. This is garbage. Intelligence is only one part of the equation. There are persons out there who are both highly intelligent and simultaneously too lazy to work at something for a significant amount of time. I don’t believe there is any connection between these two personality traits.

What does this mean for my interview?

There are literally thousands of pages out there explaining how to put a sensible CV together. The goal of these pages is to get you to an interview. From there on out, you are on your own. What happens in the interview is mostly a private affair.

Putting a good CV together is a very, very important task. It is not common for senior developers to read through 250 CVs. The contents of the CV is the first toll gate that gets you closer to an interview. If an employer gets 250 CVs, only three or four people get an interview. The other 245 people are – hopefully – not right for the job.

Sometimes, the sieving process means your CV will not get read. A local employer is known to have divided a bunch of CVs in two, binning one half while saying that he didn’t need unlucky employees. In other words, not getting an interview does not mean you are unsuitable. You may just be unlucky.

There are ways to grab attention. A girl who was applying for a position five years back tried to bribe her way into an interview by offering a hot balloon ride. It was all done with humour, and I still remember the CV to this day since she managed to tickle my interest. This is a bit dangerous since it depends on the interviewer sharing the same kind of humour as the candidate. Oh, and by the way, she didn’t get an interview, and I didn’t get a balloon ride, but it was a very close call.

Another guy in the same bunch of CVs was not that lucky. I was given a 5 cm wad of CVs. About 25% of that thickness turned out to be one CV. This bloke had added copies of everything – even a copy of his boy scout knots award. I also remember this CV for much the same reason – it gave me a laugh, even if it was more of an exasperated one.

The final CV I want to mention is the electrician with a six week course in building PCs who applied for a senior developer position. Take care to understand what the position is, and don’t apply if you are clearly not eligible. You will be seen as a time waster.

I will look at your positions, I will look at the technologies you claim to know. I will have a look at your cover letter – if you say you are interested in switching pastures, I may still have room for you. The ones I think best match the skill set I need, who will be willing to work for the money I have, and who seems to fit socially with the team I want to build will get the interview. It is that simple, and that hard. Prospective employees usually have no idea how I want my team to be built.

There are other ways to get my attention. If you know someone I trust, you should get them to give you an introduction. If the introduction is good and I have good experiences with referrals from this person, you will almost certainly get an interview.

So, let us say you have been able to get an interview. Now what?

Time for the interview

Norwegians are usually an informal lot. I usually wear a sweater, t-shirt and jeans to work. I may wear a suit if I feel like it, but I usually don’t. It would not be playing the part of techie hereabouts. I want you as a candidate to dress much the same as I do, but a little neater. Business casual is good. A three-piece suit will earn you a couple of questions to try to figure out what is happening. Turning up smelling of sweat, and possibly stale beer, is a surefire way of losing the interview on the spot. Talks with employees about the need for personal hygiene are not experiences I cherish.

When the time comes to meet, we will probably meet on neutral ground, which means the reception or somewhere like it. I will offer you coffee, water or something else, and try to put you at your ease. If you are very nervous, skip the coffee and take water instead. When you are in the meeting, try not to use your mug or glass of water as a lifeline. Many people – myself included – grab onto something for comfort when they are under pressure. That is all fine, but you may be holding onto the cup when you should have been pulling out some paper to draw something for me.

Most people are very, very nervous. There is no need to be. My job is not to kill or maim. My job is to find out if we should work together. I really won’t bite. So try to relax, yeah?

There are two ways we might start. If nobody has done it before, I will present the company and what it does. If someone else has already done that, I will pare it down, and just describe myself and what I do.

I think there are two ways the remainder of the interview can work out. If you are talking to a senior techie who has lost his touch, and is willing to do full-time administration, you will probably breeze through the interview. I would ask myself if I really wanted to work for an architect like that.

The why…

Now, here is a dirty little secret: I don’t care if you know the contract of the equals method in the java Object class. I may ask, but the contract is not the endgame. You can look the contract up if you need it. My goal is to get you talking about contracts, equality, possibly cross-references to Haskell, ruminations on how hard it is to implement equals, why you are fed up with ORM, have I tried the new eclipse plugin that does this, that or the other, …

The details are not interesting. When I ask someone why they prefer to develop on Ubuntu, I don’t care about their reasons. I care about the reasoning that lead them to the decision. A developer who says he prefers jetty over tomcat probably has some reason for it – even if the reason only is that he has never seen a reason to fix something that works, and haven’t been able to prioritize toying with other containers. I want you to show me that you are not just parroting what other people are doing, but that you understand the reasons behind what you do.

The how…

I will probably also ask quite intricate questions about stuff you say you are proficient with. Sadly, the term “expert” is very variable. “Expert” from one CV means beginner-level, while another CV might hide world-class knowledge. I have had people claiming to know unix well not be able to tell me what services were running on one of my boxes. I need to know this stuff in order to map your skill set against my expectations, but it doesn’t mean much either way. Competent people are able to pick up technology fast. I will need to know if you need teaching.

I will also try to figure out how you learn. Do you read books? Blogs? Go to conferences? Do you participate in something that gives you knowledge? What do you do on your time off? For norwegians – are you comfortable reading english books? Speaking english? How about italian?

… and how it all works together

There is still a relatively large amount of developers out there who do code-and-fix. I need to know how structured and disciplined you are. I will try to draw you out on this, and you should let me. Most of the people I interview have absolutely no idea how their code production process works. How do you handle bugs? Have you got any personal little quality improvement procedurettes you use? How many years were your projects meant to live?

All of this goes towards giving me an idea of how structured you are. I think this is much more important than knowing technologies. I can teach technologies, but how do you teach being structured? How do you make a kid tidy his room? And do I want to teach a 30 year old developer how to write tidy code? Probably not.

After a slightly extended hour or so, I will probably start winding down. I will progressively give you a looser and looser rein in case there is something you want to tell me – stuff you know, and which I haven’t been able to drag out of you.

Don’t lie by omission

A while ago, I was in an interview with a bloke that waited until this last moment to tell me he had already signed a contract with a different company. He couldn’t get out of this contract. I cannot for the life of me understand why he didn’t call me before the interview to tell me this. His CV was good, and he would probably have gotten an interview when his contract ran out after a couple of months. He left me doubting whether I can trust him. Don’t do that. It can’t help your chances. Be honest.

– oh, and if you are looking for a job in the Oslo area as a senior java developer, my company is hiring right now.

TDD and trivialized neural networks

October 7th, 2009

Neural networks

I just read an article by uncle Bob, and I am left with a feeling that I have been around this loop before. Let me clarify.

Kent Beck’s TDD book espouses writing tests that test the actual cases you want to work. You then write just enough code to make the test run – YAGNI, right?

Then you write another test, and add some more code to make that run. Rinse and repeat.

I have seen this before. I have a background from electrical engineering, and this is the straightforward way of teaching a trivial neural network how to connect itself. The results may be totally inexplicable. One of the first examples was a team that tried to get an FPGA to implement a full-adder by iterative improvements.

They ended up with a chip that had loops in there, not obviously connected to anything else. If these loops were removed, the circuit stopped working. The bits that were connected to something did not look like a regular design, created by an engineer.

Similar studies have been done using analog electronics. The University of Oslo successfully synthesized an XOR gate using subthreshold logic in the early nineties.

In other words, we have been here before. We have ten years of knowledge beyond the simple approaches described in the early nineties. This is why I had a feeling of having been around this bend of road before.

Learning how to ride

I think TDD in its simplest form, which can be found in Kent Becks book, is a very good way of learning how to use TDD. The practice has been reduced to a simple set of rules which can be followed by anyone, and which will produce results which yield a working system, given enough time. It is a bit like learning to ride a bicycle. Anyone can, given enough invested time, learn how to do it, and the practice has been designed to give small and frequent improvements.

This does not mean that everyone must continue to use the same approach when they have learned to ride. I am sure the riders in the Tour de France have a totally different approach to riding a bicycle – an approach which gives them the ability to do stuff that seems inhuman to lesser beings. In order to do this, they are doing all kinds of weird stuff, like going on 200km long rides, getting hideously expensive bikes, and – sadly – abusing illegal substances.

I think TDD is the same way. What makes sense for a beginner does not necessarily make sense for experienced practitioners. And still I see people discuss how the One Right Way of doing TDD should be. I don’t think there is one.

Emergent evolution and productivity

There is a software developer somewhere writing the tests that drives by-the-book TDD. The tests, and the incremental improvements described in TDD, will give a system that evolves over time. A known problem with the kinds of evolution possible with these kinds of rules is that they seek out a stable solution – not the best stable solution, but a stable solution. For a system as a whole, this is not an issue. It is tough on the individual organism.

The problem with applying neural evolution to software development is that software development is both slow, and linear. By linear, I mean that a team usually only evolves one version of a system. Several companies may develop a handful of versions, but still a statistically insignificant portion of the possible number of solutions. It is also not nice being one of the organisms (companies) with a substandard solution – you are going to be in a world of hurt if a developer comes up with a different, and better, solution.

Hopefully, the developer knows a bit more about what is going to happen in the future than what the tests show. I feel he should also be part of the equation, possibly because I see myself as a software developer. I am hoping here that more knowledge put into the design process will give a better solution.

Sadly, there are some managerial thoughts going around our profession which toy with the idea that developers are replaceable cogs. If you can find a cheaper developer, go for it. The solution is going to become cheaper, right?

The problem with that is that some studies point to there being a factor ten difference in developer productivity. How interesting is it to save 50% of the money if the new developer only produces 10% of the value? You are going to need four more developers to keep the speed up, which is going to give you 2.5 times the effective cost.

Developer productivity should obviously be part of the equation. I feel quite strongly that the ten-fold increase in productivity that has been reported may have something to do with the knowledge sitting in the heads of developers, since there is a very hard limit to how fast it is possible to type. Therefore, applying strict YAGNI and pure-bred TDD may not make sense – if you have developers who give above average return for your money. And you do, right? Otherwise, why did you hire them?

Slack

How can you tell if your developers are of the few who should be given some slack?

First of all, this has absolutely nothing to do with age. I have people on my team with two years of experience who outperform people I know with ten years of experience. Getting hold of old developers will probably yield a bunch of administrators. Our profession seems to promote the best developers to managerial positions, with another sizeable chunk taking managerial positions by themselves. Alistair Cockburn said he does a “tech reset” every five years to keep his hand in. I am very glad one of the most prominent figures in the industry said that. All too few senior (as in grey hair, not skill) developers actually do this.

I have only found one way of being absolutely sure of who to cut some slack, and that is to actually do it. Let them decide how to go about things. Set reasonable expectations, and follow up after delivery on what happened. Make sure that you are talking to the person who has actually done the work – some developers are political animals, and will happily take credit for work done by others.

After six months or so, one or two of the developers in a team usually stand out as better-performing. You want more of the mojo these guys or girls have. These guys should be given time – not time off, but given time – to do what they do best, which is analyze, come up with improvements, understand the business and help the other developers become better developers.

The downside of this is what the rest of your developers will be getting up to. One or two of the rest of your team will have spent the slack you have cut them to implement their own quicksort libraries instead of providing business value, have actually been slacking around, or have created code that contains critical bugs. There is no way of finding the stars of the team without also finding these people.

I prefer actually finding these people rather than having them live as submarines in the team, only visible through their shoddy work bubbling up through the waters when a deadline looms. Knowledge is the first step towards actually doing something about the situation.

For a far more eloquent explanation of why developers need to have a bit of slack, I suggest “Slack” by Tom DeMarco. I actually had to replace this book a couple of years ago because one of my bosses hung onto it.

The burial of agile

September 25th, 2009

(Inspired by Alistair Cockburns presentation on “the death of agile”, his keynote at Agile 2009, available at http://www.infoq.com/presentations/cockburn-bury-not-praise-agile )

P.M.’s, agilists, programmers, lend me your ears;

I come to bury Agile, not to praise it.

The evil that methods do lives after them; the good is oft interred with their bones;

The noble Cockburn hath told you Agile was dated: If it were so, it was a grievous fault and grievously has Agile answered it.

Here come I to speak in Agile’s funeral. It was my friend, faithful and just to me — but Cockburn says Agile was dated and Cockburn is a knowledgeable man.

It hath brought many teams speed, whose savings did fill their coffers. Did this in Agile seem dated?

When teams were delayed, Agile gave control — seems made of sterner stuff. Yet Cockburn says it was dated, and Cockburn is a competent man.

I speak not to disprove what Cockburn spoke,

But here I am to speak what I do know. You all did love Agile once, not without cause.

What cause witholds you then, to mourn for it now?

Oh judgment! Thou art fled to brutish beasts and men have lost their reason.

Bear with me. My heart is in the coffin here with Agile and I must pause till it come back to me.

But yesterday the word of Agile might have stood against the world; now it lies there.

And none so poor to do it reverence.

Oh masters, if I were disposed to stir your hearts and minds to mutiny and rage, I should do Cockburn wrong, who, you all know, is a knowledgeable man.

I will not do him wrong; I rather choose to wrong the dead, to wrong myself and you, than I will wrong such a competent man.

Here is an opinion, in the Agile tradition — I thought it up myself, ’tis its legacy: Let but the people hear this legacy, which, pardon me, I do not mean to give, and they would go and kiss dead Agile’s wounds and dip their napkins in its sacred blood, yea, beg a hair from it for memory, and, dying, mention it within their wills, bequeathing it as a rich legacy unto their issue.

Have patience, gentle friends, I must not give it; it is not right you know how Agile served you. You are not wood, you are not stones, but men; and, being men, hearing this opinion of Agile, it will inflame you, it will make you mad! ‘Tis good you know not that you are its heirs, for if you should, oh, what would come of it!

Will you be patient? Will you stay awhile? I have overshot myself to tell you of it. I fear the highly competent man whose daggers have stabbed Agile, I do fear him!

Then make a ring about the corpse of Agile, and let me show you it that caused my thoughts. Shall I descend? And will you give me leave?

If you have tears, prepare to shed them now. You all do know these parts of Agile — I remember the first time I tried them out. ‘Twas on a summers evening, all alone, that day I finished a project in time.

Look — there is the standup meeting! See how the backlog has been broken! Through communication did we gain speed, and as your teams became self-managing, mark how the speedups followed it, as rushing out of doors, to be resolved if Cockburn so unkindly knocked or no.

Oh, disciples of agile, the naming of the parts was a necessary evil. The naming of parts created a bigger whole, losing us our way. Only through us did agile gain life and mortality.

For Cockburn, as you know, was an angel of agile — judge, oh you gods, how dearly he was loved. This was the most unkindest cut of all! For when even the angel took a stab, confusion, more strong than traitor’s arms, quite vanquished us, then burst our mighty hearts, and in our despair clouding our thoughts, even at the base of our professions grail, we raised poor agile to the lares, thus it fell.

Oh, what a fall was there, my compatriots! Then I and you and all of us fell down, while bloody confusion flourished over us!

Oh, now you weep, and I perceive you feel the pang of guilt — these are gracious drops. Kind souls, what weep you when you but behold our agile’s vesture removed? Look you here! Here the parts lie, for you to reuse.

Good friends, sweet friends, let me not stir you up to such a sudden flood of mutiny. They that have done this deed are honorable. What private thoughts they have, alas, I know not what made them do it. They are wise and honorable and will, no doubt, with reasons answer you.

I only speak right on; I tell you that which you yourselves do know; show you sweet agiles parts, poor dumb practices, and bid them speak for me…

Here is the worth, and under agile’s tradition. For all of us, experience to gather!

Moreover, we can change all its ways, its private arbors and well-tended practices — this is all left to you.

And to your teams forever, common knowledge, to gain wit, to constantly improve.

Here was a method. There will surely be another.

With apologies to both Alistair Cockburn and Shakespeare.

Mashups vs the hosting world

September 9th, 2009

Javazone is on – one of my local java conferences. Quite a good one, too. Couldn’t make it this year, though.

Presumably, there will be people talking about the latest way of aggregating bits into a bigger whole. It doesn’t matter what you call it – portlets, SOA, mashups. It is something every developer sees the value of and wants to do.

Then we want to get someone to host our applications. This is where twinkly-eyed developers meet a bit of an impasse.

Let us say an application wants to incorporate maps from google. This service is hidden beyond the hostname maps.google.com – but there is no way of knowing what this service resolves to in way of IP-addresses. Google has several data centres, and will presumably move their services around as they build more. Hosting people tend to like hiding our bits behind firewalls. Services migrating around is not compatible with any hosting products I have seen. There is an inherent flaw in the available hosting products – they tend to require a firm coupling to any external services that are used. Right now, that is not too much of a problem since few people successfully use cloud-type technologies. If clouds take off, this will become a major headache.

In extreme cases, even resolving hostnames to IP addresses is a problem. Old silo-type systems do not necessarily require access to DNS – they are self-contained. DNS is a somewhat fragile protocol opinion, so this might not be a totally silly idea. If is a bit too easy to steal domains or to poison DNS. Still, most mashup-like technologies tend to lean heavily on DNS to provide location information.

I think an improvement to DNS would be in order. I want something

  • I can control dynamically. I may want to switch traffic between locations very much faster than DNS allows. Some DNS resolver implementations do not even honor the time-to-live field.
  • is secure. Man-in-the-middle attacks and DNS poisoning should be impossible. It should be very easy to switch DNS server providers, but very hard for someone to steal my domains.
  • is context-sensitive. It makes absolutely no sense for someone in the US to use the same hosts as I do if someone has data centres in both Europe and the US.

Before this is sorted out, I am afraid I don’t have much hope for the kind of cloud computing I want to see. I am sure we will have lots of technologies claiming to be “cloud”, but they will still tie me to one hosting location too firmly for my liking. I have seen power outages and in extreme cases fires and flooding taking out whole locations, and these situations are never fun to get through. So far, my current project has seen two power outages, a major routing loop (hi, Sverre) and a catastrophic fire taking out our development systems. We always managed to get up and running again in less than a day due to very competent people and good backup routines, but significant loss of sleep was incurred along the way.

So – I want some really flexible solutions, thank you very much. And then I want hosting vendors to adopt these technologies. That is probably never going to happen, since this kind of technology would also open up competition between vendors in a completely new way. If you can switch away from a hosting location on very short notice because of a fire, you can probably also do it when some marketeer decides to up the price.

Still, it is a nice dream. It would make SOA, mashups or whatever this years’ buzzword is very much more achievable.

DCI – object orientation on steroids?

March 22nd, 2009

Trygve Reenskaug and Jim Coplien are at it again. They have produced an excellent article on a possible post-OO way of structuring information and behavior.

This is a problem that several people have sought to solve in the past. Aspects and Qi4j are some of the latest attempts.

I heartily recommend Trygve and Jims article. I think it describes the problem clearly, and it doesn’t hurt that they are thinking along the same lines I do, of course.

If you want to see these two guys live, they will be giving a presentation of this paper at the Roots conference. This is a shameless plug, though. One of my very able colleagues are on the organizing committee.

// Sensible comments

March 12th, 2009

It is fairly well known to most developers that comments should provide value. The following snippet has almost disappeared totally from the codebases I see.

public class Foo {
//Constructor
public Foo() {
//Add one to a
a++;
}
}

The next wave of problems is probably going to be comments elsewhere. Source code repositories like subversion allow comments to be entered during a checkin.

Do you use this feature? If you use it – do your comments provide value, or do they read “checkin”?

I sin against this myself from time to time. Don’t do as I do. I have found that it is very instructive to include my thoughts on what I am attempting to accomplish when I check in. If there is a JIRA (or Bugzilla, RT, Redmine – choose your own poison. Mine is JIRA) issue, I try to remember to enter the issue number.

Then again, people write documents. Most document templates I have used over the years have had a changelog table at the beginning of the document. An example of such a table can be found in my installation guide template. I have now seen some of you use this template, which is why I am writing this post.

The changelog table is there to help the operations team that install the software get a grip on which parts of the document have been updated between versions. If this table does not provide value, the installation document will not be read after the third release, and the installation will break. There will probably be one or more issues registered (“it doesn’t work”, which is an error report that has the same problem I am writing about here), people will get frustrated, and your project will grind to a halt.

Don’t enter comments along the lines of “updated for version 17″ in the description column of this table. Enter something useful. If you rewrote a section, say why and which section(s) was involved. If you have added a configuration parameter, say so, and give a reference to where in the document the parameter is described.

This allows installations to be performed incrementally, which in turn will save money, which in its turn will leave resources for more useful stuff to happen.

Comments can provide lots of value. Make sure you know how to use them wisely.

Web application security

February 25th, 2009

A couple of people on my team are heavily into security, and I have also been part of several security reviews in the past.

It is high time I had a look at OWASP, which is why I am going to my first ever OWASP meeting in 15 minutes.

For those of you who have not had a look already, OWASP is a community focused on improving application security. Nice project. These people have a comprehensive reference about all things security related.

There is a very real need for this kind of project. I am still seeing SQL injection problems caused by people assembling SQL by concatenating SQL and user-supplied data instead of using prepared statements. I would have hoped we were rid of this kind of problem years ago, but this is not the case.

So – if you haven’t already, have a look at OWASP. There surely is something to learn there for everyone.

Evangelists and developer groups

February 20th, 2009

I have been silent for a while. There are reasons for that. My two daytime jobs at Objectware take up a lot of time, and so does the family furniture store.

I had thought I would spend the winter writing code. Haven’t. Instead, I have been caught up in reading a number of books. For a change, they are nothing to do with Java. They are to do with teamwork.

I have decided most books about agile methodologies describe a fairytale world, where everyone agrees which methodology should be used. This is almost never the case. In the real world, people disagree.

An example: A while back, I got into a situation where someone wanted to build a wiki page, and we started discussing how the information should be organized. I have been doing document management systems for many years, so my first thought was to have a look at what librarians have been up to. There is a fairly substantial amount of work underlying the Dewey classification system. Recently (the last ten years, that is), people have come up with stuff like topic maps and ontologies. I have been discussing how Amazon and similar sites have taken ontology creation to a new level with a librarian in the family. Instead of some greybeard sitting in an attic somewhere designing an ontology, classifications are made on the spot by the users. If I read “The pragmatic programmer”, Amazon will offer me other books which have been looked at by other people who have looked at “The pragmatic programmer” on their site. This is my world model.

During the discussion about the organization of this wiki, one of the participants stopped the discussion short. “We will use ITIL”, he said. No discussion. Simple. We will use ITIL.

I find what happened in this discussion fascinating. I think this kind of argument is seen a lot in development teams. I am sure I have been guilty of doing it myself. I think this is part of any technology adoption cycle, especially the earlier parts where the evangelists appear.

Evangelist is such a good word for the position that is often taken by someone who wants to adopt a technology. Thou shalt not doubt. Sometimes, this is for the good – the spring framework has killed off EJBs, at least around here. Good riddance.

Other times, we get testing for the sake of writing tests, we get “SOA is the same as web services”, “agile means not writing documentation and standing up” and all sorts of other easy solutions which look good on paper. Buzzwords.

Next time this happens, try to ask “why”. I have great fun doing this – at least as long as I won’t get hurt by the project going bad. If you get a sensible answer that does not lead to a circular reference, walk away. You are probably more needed somewhere else. You clearly have a well-reasoned person on your hands, maybe lacking a bit in communication skills, but someone who has thought things through. Keep that guy happy. He is at least worth his weight in silver.

If you are strung up as a disbeliever, ridiculed, told about “best practices”, or get pitted against God (meaning a reference is given to someone outside the room), there may still be hope. Whoever is talking to you may want to try something out, or have good reasons he is not able to communicate. I have done this myself, sadly. If you are very good, you will be able to get this wish into the open so you can start mitigating risks. There is absolutely nothing wrong with trying something new. It is the only way to get better. The trick is finding the right time.

Then again, there are the pure, honest evangelists. Haven’t figured out what to do with them yet.

This is why I am reading books such as “communities of practice” right now. Someone has to have done this before. Hopefully, there is no need for me to reinvent the wheel. So – no development right now. Gotta get through a couple more books first.

Summary of open space “smidig 2008″ – agile vs ITIL

October 12th, 2008

I did a lightning talk this friday on the problems people are experiencing with agile projects when trying to hand them over to a hosting organization. I have been working with this topic several years, and there is a basic problem in that development organizations are measured on change rate, while hosting organizations are measured on stability. There is a basic contradiction in how management goes about rewarding different parts of their organizations. I still think there is quite a lot that can be done at the process manager level, and I also think this is the harder task to solve.

There was an open space discussion on the topic afterwards. I am summarizing the opinions put forth in that discussion here – and adding quite a bit of myself in the process, I am afraid. This is one of the many problems with rewriting a discussion into a blog post. Caveat lector.

These are the problems the people in the open space wanted to raise as candidates for attention:

  • The hosting organization needs to be involved early in an agile project. If we are agile, and want to try to communicate with our stakeholders (and the hosting organization is a major stakeholder in the success of a project – without running our code, our customer gets very little benefit), we actually need to have them present.
  • ITIL is a set of best practices, but there does not seem to be a great willingness to change how ITIL is applied in the real world. I have had several people outside the open space come up to me and complain about the paperwork that is ITIL. I have also seen this myself – parts of the ITIL crowd has the same problem some agilists are struggling with: “We are ITIL, therefore all we do is good”. Pointing at the good book (in this case, the ITIL book and processes) and stating how the world should be is closer to religion than engineering. “This is how we do it” is never a valid reasoning when your customers raise legitimate concerns they are having. Instead, the paperwork and/or the tooling in a hosting organization should be changed if that is necessary to improve matters.
  • Communication needs to happen. It is not enough to have a hosting resource in the project if parts of the organization places obstacles in the way of communication. There have been examples of project managers trying to apply a military chain of command to the flow of communication – a way of organizing communication that even the military has started to leave behind. What happens if a military chain of command is used is that the project manager becomes a bottleneck, slowing the whole project down.
  • The hosting resource should deliver whatever technical infrastructure is needed to get the system into production. He also has a “weak veto” on technologies that will not work in a production environment. This will allow the hosting resource to veto bad moves like building the application in the production environment. If the application cannot be built by the developers and handed over, there is something wrong with the tool chain.
  • More importantly, the hosting resource should work as a liaison with specialized technology providers inside his own organization. It is the hosting resource which needs to ensure that the load balancer technology can be used in the way planned (or, in extreme cases, dreamt up) by the developers.
  • It should be possible to install the application within the first month of development. This will move all the noise that happens in the chaotic last part of the project forward in the project, where it is still possible to make changes.
  • It is almost impossible to give any rules to how the workload should be split between the hosting organization and the development team. This depends on the expertise profile of the teams. Someone needs to be able to build a working tool chain for the developers, and someone needs to ensure that the application can be hosted without excessive costs. One person may be perfectly capable of fulfilling both roles, but such people are not common.

Some people reported that it was hard to get the three parts of an organization – the business owner, the hosting organization and the developers – to act towards a common goal.

One of the hosting people in the open space told stories of how some of their customers had ordered the development team not to bother making monitoring and hosting easy – the customer had paid the hosting people, and he expected them to work for the money. The project failed due to excessive hosting costs – the hosting provider had to pass on their elevated costs to the customer, or go out of business.

Other people in the open space told of hosting organizations where the project manager had told the customer straight out that the time of his technicians was too valuable to be wasted talking to the customer.

Next: What should change in the next project?

Read the rest of this entry »

Smidig 2008 talk, and installation guide template

October 9th, 2008

Tomorrow, I am to give a lightning talk on “Agile vs ITIL”. Since I don’t just want to complain about how evil the world is, I am putting up a suggestion for an installation template for server-side, java-based applications. I have been using this template a number of years with good results, but I am sure it can be improved – feel free to give your suggestions.

The template is itself licensed under a creative commons/attribution license, but feel free to create proprietary installation instructions using the template.

The templates, in pages, word and RTF format, can be found here. Enjoy.