Lessons learned about distributed pair programming: what are the knowledge needs to address?