Practical Remote Pair Programming : Best Practices, Tips, and Techniques for Collaborating Productively with Distributed Development Teams