Thursday, February 25, 2010

Software Developer KPIs

Software developer KPIs need to be aligned with business objectives else they can be counter-productive. It is a challenge to develop KPIs for development teams and even harder to come up with KPIs for individual developers.

The purpose of governance in general, policy, objectives and KPIs, is to encourage desirable behaviour. KPIs, together with opportunities for formal and informal reward and recognition, will tend to reinforce the behaviours being measured, whether directly or indirectly.

KPIs should be used to guide professional development opportunities for individuals, not to punish them. For example, gaps in competency can be used to identify training opportunities.

We can come up with a number of metrics which gives us several candidates for KPIs:
  1. count lines of code written (kloc) – blunt measure of productivity
  2. reduction in kloc due to refactoring – fewer lines of code reduces support costs
  3. responsive to customers – meeting or exceeding SLAs
  4. the team meeting deadlines – improves predictability; opportunity to earn "early achievement bonuses"
  5. individual meets commitments – measure of professionalism; positive attitude
  6. count number of open, in-progress, resolved and closed issues
  7. leadership and initiative – difficult to measure but extremely valuable traits
  8. unit testing code – reduces number of defects
  9. integrating components, i.e. units of code – continuous integration identifies defects early
  10. conducting code inspections – reduces number of defects
  11. count number of defects found in code inspections – trend analysis
  12. stability of code base – fewer changes in libraries means fewer changes elsewhere and reflects increasing code maturity
  13. participating in design reviews – improves quality of code; measure of professionalism
  14. documenting software design and rationale, eg. notes in file or UML – improves knowledge capture; measure of professionalism
  15. applying design principles and patterns – improves quality of design and code
  16. capturing SMART requirements – reduces number of defects due to missing and misunderstood requirements
  17. writing test cases – verifies functionality, improves quality of code and reduces number of defects

References

Michael Bragen and Paul Michaels, Benchmarking software development projects: Three key KPIs, http://www.computerworlduk.com/toolbox/software–quality–testing/quality-assurance/opinion/index.cfm?articleid=1830 (Sept 2009).

Roger N. Dunn, KPIs for Agile Teams, http://www.agilejournal.com/content/view/786/33/ (Sept 2009).

Mike Mannion and Barry Keepence, SMART requirements, ACM SIGSOFT Software Engineering Notes, http://portal.acm.org/citation.cfm?id=224157 (Sept 2009).

Brett Miller, Key Performance Indicators of Application Developers, http://cspreston.wordpress.com/2009/06/16/application-development-performance-indicators/ (Sept 2009).

Karl E. Wiegers, Software Requirements, Second Edition, Microsoft Press; 2 Sub edition (March 2003).

Stephen Withers, Are key performance indicators a true measure?, http://www.builderau.com.au/strategy/businessmanagement/soa/Are-key-performance-indicators-a-true-measure-/0,339028271,339282324,00.htm (Sept 2009).