For more than a year now, I have been working for //SEIBERT/MEDIA from home at a distance of about 250km. Can agile software development work like this? Can Scrum processes be maintained, despite the distance? Will I fall out of sync with the team?
Right now, I can say yes, it does work!
How it all began
At the end of March 2015, I moved from Wiesbaden back to the state of Swabia, after working as a student assistant at //SEIBERT/MEDIA from 2012. I am currently working as a developer in the Scrum team involved with our social intranet suite Linchpin for Confluence.
When it was clear that I had to move, we had long discussions about whether a distributed team could work, and how we could imagine it functioning. An AgileOrg session was the first stop to evaluate our options, and during this review, my colleagues agreed to run an experiment. After three months we wanted to reevaluate, and if the outcome was negative, our paths would unfortunately separate - luckily this did not happen.
Of course, I take part in all Scrum meetings - daily Scrum stand-ups, sprint planning, backlog refinement, reviews, and retrospectives are an integral part of development. This creates the first problem: A computer must be present at all meetings. Luckily, we have fixed webcams and large monitors in most meeting rooms, which makes this easier.
Video chat software solutions all have their weaknesses - we've tried a lot: join.me, Skype, TeamViewer, Hangouts and, of course, our in-house established Atlassian HipChat. After several attempts we settled on Hangouts and HipChat. We use HipChat extensively as a chat client and every employee is on this platform, but unfortunately, you can't speak to several people at the same time on video. Hangouts can do this, and so we are now "stuck" there.
There is not only a need for good software, but the right hardware is also required. Laptop cameras and microphones are designed for one user sitting directly in front of the monitor, which is why we use external webcams and a room microphone. In large meetings, the noise reduction is greatly appreciated.
How much information scattered around the office do you miss when you are no longer on site? Not only gossip, but also important information about tasks and intermediate results. Our team had to initiate a paradigm shift to record this information.
The first step was to convert the analog sticky-note board to a JIRA Scrum board so that the current status was visible to all of the developers, in the office and at a distance. All issues need to include sufficient information and all changes must be documented within the issues. Discussions have to be saved to a virtual ticket, to make results and outcomes clear to all. Larger conceptual questions are raised and discussed in Confluence. Our own space in HipChat is used for daily work, posting short comments and asking quick questions.
Aren't I missing something? The grapevine, of course! This isn't so easy to translate to a single software or process, but with our add-on Microblogging for Confluence, everyone can participate: Both important and trivial updates can be seen in the timeline. Of course, communication is not just one-way, so I need to remember to include the team and the rest of the company, be it in HipChat or the microblog.
Whether you are working remotely or on-site, you must maintain the quality of your code. Extreme programming techniques are an important step towards better software, and are an established part of Scrum teamwork. Developing remotely makes this more difficult: Pair programming is no longer as easy as walking over to a spare chair next to your colleague. A software tool can support this process (e.g. remotepairprogramming.com, xpairtise), but the technical aspect is only one part of the problem - you must always remember to use it.
Code management with Git is now standard, especially in distributed developer teams. To ensure the quality of code and to support knowledge transfer, we have been working with GitFlow and pull requests for some time. Again, we are using the Atlassian tool stack with Bitbucket (Stash) for our code management. Our branches are built and tested on the Bamboo build server (naturally, also Atlassian).
A well-organized IT department is a factor that should not be underestimated, since all systems should be secure, but accessible from anywhere. Both are guaranteed with our VPN.
Remote is not the same as in-person
In the long run, virtual communication by itself is not enough. You need to be present on site and talk with your colleagues in person. We have been meeting as a team on a regular basis every 4-6 weeks, where I spend one or two days in the office in Wiesbaden. On those days, I must take in an entire month's information, everything that I missed by not being there.
Steve McConnell said in his article on Travel Restrictions and Offshore Development: "The half-life of trust is about 6 weeks." And I can confirm that. This is the main reason why my visits to the company are so important: Trust can be renewed there. My colleagues from other departments (marketing and sales) do the same. Even my colleague in the USA regularly comes to Wiesbaden.
Remote work has many advantages, but it also has its disadvantages. I enjoy being able to stay home and can have a more flexible daily routine than would be possible in the office. On the other hand, I miss the personal contact with colleagues, and even short conversations over a cup of coffee fall by the wayside.
It doesn't matter to me as a developer, where I work - at the office, at home, or at the beach. However, this freedom requires a high degree of mutual trust and responsibility. Both sides must support and adjust to this form of work, and only then can it work.
Eight advantages of an enterprise group chat for distributed teams
The advantages of pair programming
99 Reasons for Scrum: How staff benefits from Scrum projects
99 Arguments for HipChat in Corporations