You can also do code analysis: look at branching factors; code duplication; runtime performance; etc
This might be hard to implement in a company setting; but it may be easier to apply with contracting work.
You can also do code analysis: look at branching factors; code duplication; runtime performance; etc
This might be hard to implement in a company setting; but it may be easier to apply with contracting work.
This is basically a version of Campbell's law, from a 1976 paper by Donald T. Campbell: "The more any quantitative social indicator (or even some qualitative indicator) is used for social decision-making, the more subject it will be to corruption pressures and the more apt it will be to distort and corrupt the social processes it is intended to monitor."
Lines of code per unit time (LOC) is probably the most notorious, but there have been dozens of attempted improvements. Function point metrics were a late-'70s approach (also out of IBM) that tried to fix some of LOC's shortcomings as productivity metric, but turned out to be highly correlated to LOC and also problematic. There are dozens of books from the past 50 years with titles like "Applied Software Measurement" and "Measuring the Software Process", but they've become associated with bureaucratic bigcorp software engineering.
Incentives are powerful things.
It's easy to make unit tests pass. To defeat this kind of gaming, you'd need extensive code review of the unit tests. But that circles around to your point: when you look at code there's something that tells you whether it's good or bad. That algorithm can't be based on passing tests, because tests are code too and also need review.
If you had a team of completely selfless developers, you could probably have code-reviews and peer-reviews drive incentives. But as soon as the team suspects it's a zero-sum game and they're competing for a limited prize, they're going to stab each other in the backs, and your best developer will be the prime target. That'll make your best developer leave, and the next-best becomes the target, until all you're left with are lousy developers who are only good at office politics.
Dysfunction may arise when you are unable to measure all the relevant dimensions of the work being performed. People will often shift their effort to the dimensions that are being measured and ignore the remaining tasks, no matter how important they are. This results in less value being delivered compared to a scenario with no measurement based incentives.
The author mentions software development as an area that is specially prone to dysfunction.