The Richmond Software Craftsman Group had our monthly meeting last night and we discussed developer productivity. Lines of Code (LOC) was suggested as the common measure of productivity. I think everyone quickly agreed that LOC produced was not really a good measure of effeciency. You'll quickly end up with bloated code because the measurement says that it is preferred.
Measuring team performance seems to be easier than individual productivity and I think this is what should be measured:
1) On Time
2) On Budget
3) Product Does what was expected (This would include a measure of defects for quality).
4) Client satisfaction with what was delivered.
- On Time: Did the team estimate the project well. Steve McConnell has a great book on software estimation and a lot of it boils down to "engineers are overly optimistic even when they think they're not."
- On Budget: Almost a directly correlation to time but if you use double to resources planned to hit a target your budget it blown. Budget should be a function of work estimates and timeline.
- Product does what was expected: Did you deliver everything that you said you would? Do the features do what they are expected to do. If features are buggy they do not do what was expected. I'm thinking this is kind of like acceptable failure rate in manufacturing. NASA will pay big bucks to have a very low bug rate but Joe's flower mart down the street might accept a higher bug rate in exchange for a much lower budget. Developers should set an expected defect rate that isn't zero because it's not realistic.
- Client satisfaction: This measures a couple of things. Did you accurately capture requirements from the customer? Did you communicate what you are going to build effectively so that client expectations are set correctly? Does the client understand the expected bug rate in the finished product and how it will affect timeline and price?
I think that inside a team it can be much more difficult to measure productivity because each team member influences the others. If a hole punch machine in the factory is misaligned the rubber gasket machine may produce defective parts. The gasket machine had garbage in so it gave garbage out. One programmer building a crucial module can delay other programmers making it very difficult to measure the individual productivity. Network effects can influence the team in positive and negative ways.