Here at Smart Cloud we embrace remote work. We have developers in San Francisco, Germany, Slovakia, and Russia. Sometimes there is a 15 hours gap between us. In order to make it work and solve many other related issues we organize our work as follows:
- quick daily meetings
- skype calls on demand
- code reviews
- task management
- client communication
- daily reports
- retrospective meetings
Daily meetings are held either on Skype or via chat. The purpose of these quick daily meetings is to keep team on the same page. We discuss client's feedback and changing requirements, ongoing code questions and discussions, and any related organizational topics.
Sometimes it's easy to say than write down questions and thoughts we have. Furthermore it allows to share the screen if we want to work on something together.
All of us have worked independently before as sole developers on the project. We appreciate the freedom it gives us to develop and build software however we see fit but another pair of eyes looking at your code is always helpful.
This practice is very powerful. On one hand it allows us to be familiar with code written by other teammates. On the other hand it forces to write better code because you know that someone else is going to look at it so it should be very clear and understandable.
In our post we compare different tools for task management. Our choice is Trello. We picked it mostly because it's fast and flexible. Also we like the notion of trello boards representing real-life physical boards you can put stickers on.
To have all the conversations with the client in one place we use Basecamp. It's really handy to use Basecamp discussions to communicate about features, bugs, and other project related topics.
In order to make it transparent for the client what we are doing every day we post daily reports. Sounds official but in its essence it is a short post on Basecamp(or email) with several lines that outline what each of us have done today, going to do tomorrow, and if anything is blocking us.
It is useful if the client want to keep track of our progress or if we have an outside team helping us and we want to check in on the progress daily without doing tedious scheduling and timezone juggling to figure out when all of us can be on skype at the same time.
We use Slack for chatting. We create rooms per each project or topic. For example we have Rails room, iOS room and so on. Also it allows us to configure and get notifications from Github, Trello, Heroku.
To summarize a sprint we do 2-3 hour retrospective meeting. We write down what we have done, what we committed to, what went well and what went wrong during the sprint, what blocked us, etc.
We went through several iterations on our dev process and this is what worked best for us so far. But we never stop learning and changing how we approach work. We'll post our best practices again when we refine it and improve it even more.