After spending almost 15 years on software projects as a remote developer, I think it is about time to share some of my experiences. I worked on projects in various domains or industries like oil and gas, HPC (high performance computing), real estate, medical, agriculture, simulation platform, seismic monitoring, real-time decision platform and others. I collaborated with other developers located on various continents, in many different time zones and of 10s of different nationalities.
Companies use to hire remote contractors or freelancers for various reasons. Some hire them in order to optimize development costs, as remote developers may be cheaper. Others use to hire them because it may be easier to find the ones to know some specific technology than having to train a local employee. It is also easier to “hire” a contractor for a short amount of time or on some sort of part-time basis than an employee. Whatever the reason behind hiring a remote freelancer may be, it seems like the number of companies choosing to do this increases every year. I will probably write another blog post at some point about the advantages and benefits or remote development for both the contractor and the company.
During all these years I have learned that there is one specific requirement such as a remotely developed projects to grow as expected and that is the proper communication. Nowadays, there are so many ways to communicate:
- Voice and video – Google Hangouts, Skype, others… Ten years ago, we used to do scrum meetings over the phone, which is way better than no communication at all.
- Screen sharing tools – there are so many nowadays, we used to use gotomeeting in the old days.
- Email – there is no need to describe the benefits of email, however, ideas that are exchanged this way last a lot more than the ones exchanged over the above ways. Answering emails sooner rather than later saves time. Delays are higher in multiple time zones environments.
- Text messaging tools like Google Hangouts, Slack or similar help in exchanging some quick messages.
- Shared documents can help in various design stages. Google Docs is a good example, but there are so many other tools these days.
- Issue tracking tools – it is important writing any ideas, requirements, bugs,… using such a tool (like JIRA or the issue tracker in github for instance). The assignee may have questions, so it is even more important answering them.
- Distributed version control systems – Every commit should have an appropriate message. It communicates what the change includes to everyone willing to read that.
- The comments in code are also helpful for anyone reading it.
It is of course important to have the appropriate technical knowledge in order to be able to work on a specific project, but I think communication between the team members is a key requirement. Communicating by video, audio, text messages using technology is usually challenging, but a good rule is not to forget that at the other end of the communication chain is a real person listening or reading, so always being polite is an important requirement.