There are number of methods for estimation of developers skills, my favourite being the developer competency matrix. This method is very good, and it prooved to be useful for general estimation of different skills, for example as a part of a general employment assesment.
But here it is relevant to estimate competency with relation to specific project, for example when choosing a right team members for a specific project, assuming we have a list of potential candidates to choose from. I would also like to automate this process, so the approach excludes the personal qualities for that reason – being not quantitative.
This is no easy task due to vast space of different skills one might have, so I shall restrict myself only to most common types of software development, which are web and app development for the most common platforms.
Additionally, most developers I work with are also involved in organizational activities, such as team management, customer relations, communication… I shall try to isolate these qualities out of this analysis and focus on pure technical skills.
We shall try to represent this software developer skill space with different dimensions:
- programming language
- tools and libraries
- application type
- experience (lenght)
- role (depth)
These dimensions are basically factors which are taken into account for the competency analysis. There may be other relevant dimensions added.
Programming language dimension is pretty obvious, it is a distinct list of items such as c, c++, java…
Tools and libraries dimension represents various IDE tools, compilers, editors, frameworks, and libraries which are used when developing software.
Platform dimension is representing the environment in which application is deployed, and encapsulates both hardware and software environment. It is also a distinct list of items, such as windows, linux, iphone, desktop, silverlight, flash…
Application type dimension represents the domain in which the software is being used, and it is also a distinct list of items such as “information system”, “online sales”, “banking”, “medical device”, “web portal”, “social network”…
Experience dimension represents simply the length of experience for particular development which has already happened in the past.
Role dimension represents level of the development activity and may contain items such as “apprentice developer”, “medior developer”, “senior developer”, “software architect”, “platform architect”…
With these dimensions one should be able to define a metrics system for measurement of general competencies, or a measurement system for a specific project.
Simplest thing to do is to represent the metrics as a linear combination of the dimensions, but there may be other useful methods as well.
For a specific project different weights are given to any value in each dimension. This way, basically, we define what are we looking for in a candidate. If we accept only Java developer for a position, we would give other programming languages a zero weight. If we need a candidate to be a senior, but also accept medior developer, we assign appropriate weights to these values.
Our candidates need to fill their values for every relevant dimension, or we extract that from the CV or an interview, giving us values we can work with.
Then, for each candidate we calculate the metrics, and choose the one with the highest score!
It would be interesting to create a web app which would allow online calculation of the competency based on a given criterion.
Not to be forgotten, there are other – more human factors which need to be considered. I shall reflect on that in a separate post.
References: Analysis of software developer’s competency – Choosing a right team member from our NCG partner Nenad Sabo at the Software thoughts blog.