Prefer Broad Design Skills over Platform Knowledge
Building a team is always a tricky task since it is pretty unlikely to find people who would fit all the criteria of the ideal candidate. Trade-offs are inevitable and, in this context, it is crucial to determine priorities. Broad skills, in terms of software design but not only, this is what really matters for Martin Fowler.
He asserts in his latest article, that if he had to choose between someone who knows very well the platform used but has limited knowledge about design and someone else who has broad design skills but knows nothing about the specific technology used on the project, he would choose the latter. He argues, indeed, that even though design skills are not fully portable from one technology to another and cannot be replicated blindly, great part of them can carry over not only among similar technologies but also from curly-brace languages to Ruby, for example.
According to Fowler, someone with broad design skills would rapidly deliver equal value on a different platform and be "more productive than the competing platform expert" lacking design skills:
A platform specialist also has to learn broad design skills if he's going to produce maintainable code. Here it's important to remember that not just is it usually harder to learn design than platforms, it's also less certain. Given a motivated broad-designer, I can be pretty sure she'll pick up a platform in time. But there's no guarantee the other way around. Some people are good at learning details of a platform, but never figure out how to write clear code.
This also applies to non technical fields. Someone who does not know the specific business domain, can bring interesting insights from other domains and rapidly gain the necessary understanding by collaboration with domain experts and communication with clients.
Hence, according to Martin Fowler, having broad skills is really instrumental for building quality software and delivering value on a project in spite of initial lack of experience in a specific domain or on a specific technology.
There is, however, a certain number of conditions that need to be fulfilled for the programmer with broad skills to gain necessary experience and to become effective quickly enough. First of all, it is necessary to have on the team a domain and/or a platform expert who can pass over his experience. Obviously enough, the motivation of the developer and his ability to learn fast and to interact with other team members are also critical skills.
What is your opinion about these considerations? What guides your hiring choices?
The most common occurance I've seen however, is C++ devs porting their design skills to Java or .NET. If there's one leading cause on these platforms of project failures, thats the one.
Note: I know many C++ devs who switched platform successfuly. I just know way more that did not.
Re: Have both
If you can´t have both
Re: If you can´t have both