Monthly Archives: August 2011

How do you measure programmer productivity?

How do you measure programmer productivity?

When the Lisa team was pushing to finalize their software in 1982, project managers started requiring programmers to submit weekly forms reporting on the number of lines of code they had written. Bill Atkinson thought that was silly. For the week in which he had rewritten QuickDraw’s region calculation routines to be six times faster and 2000 lines shorter, he put “-2000″ on the form. After a few more weeks the managers stopped asking him to fill out the form, and he gladly complied.

Source

Feedback Loops

I originally posted this on our development blog over at MSNBC.

Are you familiar with feedback loops? A feedback loop is a loop in which information encountered by the system is fed back into the system, and the system can then respond to it. You’ve probably seen a diagram similar to this:

 

Feedback loops are very important for a system since they allow the system to evolve and adapt to change. A great example of this seen in nature is the human body’s temperature regulation:

 

Without feedback, the body would have no way of making the minor adjustments it needs.

Feedback loops turn out to be extremely valuable in software development as well. Agile development practices all relate to the notion of a feedback loop:

  • Unit tests
  • Pair Programming
  • Sprints
  • Stand-up meetings
  • Code reviews

You may notice something about these practices; The feedback loops are very fast. Feedback loops that are slow are of little value, because by the time you respond to one set of feedback, the next may have already arrived, which would render your initial response meaningless.

In the example of body temperature regulation, it’d be pretty useless to have the body react with sweat hours after a temperature change occurs.

We want feedback loops to be as fast as possible so that we can find out whats working, whats not working, and what needs to change right now.

  1. Change something
  2. Find out how it went
  3. Learn from it and adjust
  4. Rinse and repeat

Automation is a great way to achieve our feedback loop goals in software development. In addition to the agile practices above, we can also try to implement the following whenever possible:

  • Continuous integration
  • Increasing the frequency at which code is released
  • Automated acceptance tests
  • Automated code analysis

A set of tight feedback loops like these can allow us to respond to change rapidly. Every time someone checks in code, the automation can tell us immediately whether we are in a healthy state, which will allow us to immediately correct any problems if they occur.