Posts‎ > ‎

Evaluating a programmer's efficiency with realistic programming tasks

posted Sep 22, 2015, 11:34 AM by Renato Athaydes   [ updated Sep 27, 2015, 1:34 PM ]
My wife is an operations management researcher and she is currently working on a thesis about the productivity of information workers at the individual level.

It is a difficult issue, of course, but that's why it merits being the subject of a PhD thesis, after all! One of the studies that will serve as a basis for her thesis is called IT-enabled Productivity and its aim is to find out "how information and communication technologies may be used in organizations to contribute to productivity gains".

Software developers fall under the category of information workers, and measuring the productivity of software developers is a notoriously difficult problem, even more so, I'd imagine, than for other information workers such as architects, journalists or sales representatives. The main reason for that is that to measure the productivity of a Software Developer, one would need to be able to accurately measure the output of the work of the developer over a certain period of time. That's really hard, if not impossible in most circumstances, because a developer does not necessarily produce only "working software" during any period of time, as a naive observer might assume.

He or she might work for weeks on refactoring a piece of code which causes trouble to the business (slow to evolve, hard to maintain) and its customers (bugs, unexpected behaviour, slowness), for example. Even though the outcome of such a task (better software with fewer bugs) may be highly valuable to the business in the long run, how would we measure his or her output and compare it against the output of another developer who has been working solely on a new feature (which in the eyes of some manager might look like a lot more valuable, at least in the short term)?

This is not to mention the "social output" of more experienced developers, who might spend most of their time guiding their colleagues, mentoring junior developers, or otherwise working on the really hard issues (whose solutions might involve adding, or sometimes even removing, just a few lines of code over several days).

We are well aware of all of these problems, and we do understand that in general, this is a far too hard problem to be addressed realistically in a single study. However, under certain controlled circumstances, it seems to us it should be possible to find out what factors affect a developer's ability to complete a programming task that is part of his/her daily job. If that's the case, then knowing what those factors are can be quite valuable, even if they do not tell the whole story regarding a developer's overall productivity. The value of knowing that is not in being able to rank or reward higher productivity (to do that we would want the whole story!) but in knowing how a manager or team lead can help each developer become more productive in certain tasks.

In line with that, we have developed a small study which asks participants to perform 3 different programming tasks after answering a questionnaire which helps us find out a little about their personalities, as that might affect how they react to different factors.

The programming tasks were designed to be at least somewhat realistic and their exact form varies between participants. Each task should take no longer than one hour to complete, presumably less for more highly skilled developers. As the goal is to measure productivity (ie. output over time), the faster a participant finishes each task, the better their performance... but that is obviously not the only metric used: each task has some objectively-measurable outcomes, all of them concerned with the actual "product", as opposed to, for example, code quality (simply because it would be hard to measure that objectively, and for such small tasks, that should not be a large consideration anyway) or other "unobservable" properties of the solution.

Please participate in our study by clicking here!

If you would like to participate (and you should if you want a free e-book as a prize!), please go to the website we have set up and check out the FAQ for the details.

As a programmer myself, I find the study tasks quite interesting and hope that others who enjoy coding, like me, will have fun doing them! If anything, you might learn a thing or two about JavaScript (good knowledge of the language is not required and all the basics necessary to complete each task is provided in a box called JavaScript Help) and existing online tools that might be helpful to you - we ask participants to not use any tool to perform the first assignment, but in the second and third assignments to use an online IDE to "simulate" how most real-world work is done.

Please let us know what you think on Reddit!

And thanks in advance to all of you who join us in trying to find out what actually makes programmers and other information workers perform better!