One common things I've heard in the Plone community, is that people are always struggling to find developers. This is often seen as a real problem not only for the consulting companies but also for Plone itself. This problem is common to many development areas, but the unique nature of Plone means that it's situation is rather exacerbated.

For quite a while I've had an opinion that people often jump on the "we need more developers" mantra when they don't need to. The term developer does mean an awful lot of different things to different people. To me a developer is a skilled professional that can solve complicated technical problems by developing solution. Alright that's a broad definition, would just programmer be better?. In the past I've worked with many people I would call good or even bloody great developers (thinking specifically here of Mark Hammond and Sidnei da Silva). I've also worked with some bloody incompetent ones and fired them.

There's a few things that I think are true about good developers:

They are hard to find.

They are hard to keep.

They can be hard to manage.

They can be productive.

They can solve problems others can't.

Given that, I do try and approach the problem of finding more developers a different way. Instead by focusing on the developers you have got, more productive. A developer cannot hold a company to ransom and has to be reasonable, but likewise the company has to recognise that once you've got that person, hold onto them and keep them productive.

How can you make a developer more productive? Well first off I'm making an assumption that lots of people are cheaper than those good key developers we all need. If that is the case, the main way is push work off on to other people.

System administration is absolutely crucial. The other day one of my virtual machines stopped working whilst I was on a tight deadline. After looking in despair at that virtual machine, I wandered over to a sys. admin. and ten minutes later it was fixed. That saved me around 4-8 hours of work. Time and time again I've seen developers pulled into things I would classify as system administration.

One example is (from what I gather) at Google where allegedly there's a technical support centre's all throughout the office. Laptop's broken? Pop on over and we'll give you a new one. At ActiveState I remember that new servers were not a problem. The cost of a new server compared to the cost of a developer sitting and waiting for something to compile makes the decision clear, get the server.

Testing is a crucial part of the development cycle. Yet testing in small companies is often left to the developer or project manager. Testing is a discipline in it's own right and beyond unit tests can easily be pushed off on to testers.

User interface creation is an annoying one to me. Time and time again I've had designers plonk a few photoshop designs on me leaving me to figure how its possible to create those designs in HTML and CSS or whatever we are building it in. Or I've got to spend hours and hours creating forms or other things. Things that could be done by a quite junior developer who knows how to code HTML.

Specifications may or may not need a developer to write. Finding the right line between specifying too much and doing too little is something that I've been called on in the past. However, I still feel that 90% of the time, specifications I am given as a developer have just not faced a technical or critical eye. What if X isn't working what happens? What fields are you wanting on that page, how long are they, what are the validations. Simple things that are taught in most design courses.

The more of the specification work that can be done prior to a developer looking at and starting coding, simply eliminate more of the developers time and reduce the developer - project manager - client cycle. It still will happen, but it will happen less.

Administration is harder, but sometimes there's clear things that can be done by others, this one should be reasonably obvious.

Tools that they want to use. Everywhere I've worked has been really good on this, although I do think that many places need to focus more on training. If you are spending all this money and time on a developer and they want a Mac? Get them one. They want a big monitor? Come on how much do these things cost in the big picture.

This is all hard to measure of course, but I'm curious on other opinions. When people say they are short of Plone developers, who are they looking for gods like Martin Aspelli? If you were able to prise them away from their job, would you be able to keep them happy? Would they stay? Would it make sense to have them spend all their time reading crap specifications (if they get any), chasing stupid system administration problems or coding HTML? Or would you want them solving the hard problems?