Measuring software development performance is a difficult matter. Since emerging of the discipline, numerous attempts of measuring the programmers' efficiency where made. How successful they are? Well, definitely there is no "silver bullet", no method that works for all. Some of them works more or less Ok within the boundaries they were designed for.
This article is an attempt to create a method for comparing two hiring strategies: hiring junior developers and helping them grow vs hiring experienced developers. I've read recently an opinions on this so it is an interesting thing to do. In this article I briefly sketch the framework for quantitate comparison of these strategies. (BTW, if you disagree with some numbers or approaches chosen, you are more than welcome to suggest alternatives).
Expert developer and junior, what is the difference? There is a point that becoming proficient in a particular field requires about 10000 hours. 8 hours a day, 5 days a week, consider holidays - it is about 5 years. So the distance between an absolute beginner and an expert is 5 years.
However, expert in what? Consider employing a software developer full-time on some project. Let's say it is a taxi service or apartment renting. It is non-interruptive for all these 5 years. At the end of these years the one become expert in development and problem domain. What is the ratio? Well, considering that we are talking about the software development, let's say that 20/80. 20% of gained experience contributes into knowledge of problem domain, 80% contributes into software development skills. But software development is also not an atomic entity. There are programming, management, soft skills (like working in a team), and knowing of a particular technology. These five skills (problem domain and four software development skills) make a skillset proficiency in which makes an expert in a particular job.
From learning something new we know that at initial progress is very fast. How exactly fast? Let's use 20/80 rule again and set that learning 80% of a skill takes 20% time and learning another 20% takes 80% of these "magical" 5 years.
However, 100% of one developer with 5 years of experience can be lower or greater than 100% of another developer. There is a point that difference in performance could be up to 10x. But let's leave it for now and assume that what company hires developers whose 100% are close to average.
Now, to the main part. What means to be an expert? Among many things it means that an expert does less mistakes or makes wrong decisions less often, than a newbie. I do not know where to get an estimation for that so I dare to use my own experience here. Let's say that one wrong decision in the code costs £50 every week until it gets fixed. And it takes 3 months from introduction to fix. Let's say that junior developer with one year of experience makes one error per week and expert makes an error every second month. You may disagree with these numbers, of course. I'm going to have them as model parameters, so you can put whatever your experience tells you later on.
What also should be taken into account is how much the developers get paid. Currently the salary of the junior Java developer in London is about £50K and principal's is about £100K.
First, the Developer machine. The requirements for it are:
- it has five skills: domain, technology, programming, teamwork, methodology.
- the performance is calculated as summary of the skills
- the skill starts from 0, reaches 80% in one year and reaches 100% after 5 years
- there are 5 experience levels: beginner, junior, middle, senior, principal.
- error rate is a function of total experience, f(80%) = every week , f(100%) = every second month.
Second, the Debugger:
- per each developer working on new functionality it fixes the bug every three months.
And the last one it the Accountant:
- pays the developers
- counts the financial effect of the bugs
And the results:
- Total cost of a team of 4 juniors for 5 years £6,073,079 with 557 errors.
- Total cost of a team of 4 principals for 5 years £4,594,277 with 299 errors.