Specialist vs Generalist Developers
2009-01-26 16:36:59
People sometimes ask me what makes a good job description. My answer is simple. Not too specific, not overly broad.
I often see adverts worded somewhat similar to the following:
PHP Developer Wanted Must have 8 year experience in PHP, Java, C, ASP, MySQL and AJAX. Must also have Masters degree and have 5 years work history.
Put simply, its not going to happen.
While yes, there may be people out there with the whole skill set you are looking for, its a very wide requirement list and some of the technologies are opposite each other on the skills scales.
Let me show you.
- If you know PHP, its a good bet you are a web developer.
- If you know PHP, its a good bet you also are familiar with HTML and CSS.
- If you know HTML, its a reasonable bet you know at least some Javascript.
- If you use PHP, its a reasonable bet you use a version of the LAMP stack (MySQL, Apache and Linux)
- If you know C (or C++), its a good bet you deal with lower level code (Libraries, kernel modules, applications etc)
- If you know ASP (or other .NET technologies) its a very good bet that you develop on Windows and deploy on Windows based technology.
There isn't much overlap in these areas, LAMP stack developers rarely develop on or for a Windows platform, ASP developers rarely develop on or for a Linux (or other Open Source) platform. So just by looking at two opposing technologies you are already restricting your potential employees to just a handful.
This is fine if you are willing to pay for that expertise, but its a rare company that will be willing to pay what is required to get good developers with this range of skills. Generally, you will end up with a few people that either lie on their applications to make themselves fit the description or know all the technologies but without any real depth to any of them. We frequently see these types of 'out of their depth' developers in some of the community help channels we frequent.
So whats the answer to this conundrum?
Look for the core skillset for the job. If the core tasks are to manage a PHP website, then look for that as a core skill. Even if they will be occasionally required to change something in ASP, don't ask for it. Its far better to outsource the occassional task that is outside your expertise than to compromise on the right candidate due to overly specific job requirements.
The second thing to look out for is flexibility. The best problem solvers enjoy learning. Look for someone that has that core skillset but is also able to learn new technologies. They are adaptable and able to change.
One last thing is that the best developers can output 3 or more times the output of moderate developers. They enjoy programming and will even do their own projects outside of work.
How do you identify these people?
Ask to see what they do outside of work. If its a personal project it probably wont look pretty but it will solve a problem, scratch that annoying itch they had at the time.
It might not even be in software development, it might be another technical subject that is more 'creative'. Woodwork for example.
For example, One personal itch of mine was not being able to get barcodes for my friends book publishing company without paying stupid amounts for them. This Quick and Dirty Barcode Generator is not pretty, but it solves the problem I had at the time. (It generates valid 13 digit ISBN and EAN numbers (since ISBN is a subset of EAN with the 978 prefix)).
