Are Two Heads Better Than One? on the Effectiveness of Pair Programming