I have been involved in setting up a team for the Collaborative Knowledge Foundation (Coko). We are about 12 all up now and spread around the globe. At our core we have :
Jure - Lead PubSweet Developer Slovenia
Richard - PubSweet Developer Kenya
Yannis - PubSweet Frontend Developer Athens
Christos - PubSweet Frontend Developer Athens
Charlie - INK Lead Developer New Zealand
Wendell - XSL pro East Coast USA
Julien - UX pro France
Henrik - Designer Netherlands
Juan - Sys Admin Nicaragua
and then we have myself, Kristen Ratan (co-Founder), and Alex (process manager) in San Francisco.
So...just looking at how development works...in the dev side of things we are pretty well distributed over the world and across a large variety of timezones, infact NZ, EU, USA is about as bad as it can get when setting up meetings at reasonable hours for all effected...so how do we manage to make this work?
Well, firstly we obviously rely on some remote tools. We all coalesce around Mattermost - an open source version of Slack (By the way, don't use Slack - https://clearchat.com/blog/forget-applevsfbi-slack-gmail-have-backdoors/). This is a good avenue for remote chatting. We use it for both chit chat, y'know, hanging out and taking bullshit, and also work. Work mostly gets done on side channels, I wrote something about it here - https://opensource.com/community/16/6/mattermost-shows-oss-has-be-better
Okok..so thats Mattermost. Its a good tool but if we were just a bunch of people scattered around the world with a chat channel then it probably wouldn't work very well in itself. So, I wanted to say something about creating space for people to operate and how remoteness can actually play into that rather nicely.
So, first of all, we are an organisation that likes people to like what they do. So we like to trust them and give them a bit of room to move. All people are creative and I believe all folks need challenges where they can exercise that creativity. Nothing new here - if you want to read more about this, with special reference to development teams, then read Peopleware (terrible title, great book - very old skool...you can stop reading when they talk about optimum cubicle layouts but the rest is awesome).
So, what I have found over the years is that responsible people work responsibly. So, I am assuming you work with some people like this :) Otherwise return to zero and start again....the thing about responsible people is that they like to get their head down into a flow and get on with it. They love hard problems and they love the trust given to them to solve these problems. But sure sure, this can happen in realspace in a shared office...but...can it? I think there is an argument to made here that remote teams enable a more optimal working environment for this kind of team.
In our case, for example, we actually only have two people in the same place (not counting San Francisco). They are Yannis and Christos. Very nice chaps if you ever happen to be fortunate enough to meet them. Yannis and Christos work on developing the front end components for the PubSweet publishing framework that Richard and Jure are building. We have an advantage here that we have carefully chosen to create a techncial architecture that supports the autonomous development of frontend components which is separate to the backend that they rely on (the backend is known as PubSweet or sometimes we refer it to PubSweet core or 'the backend'). Anyways...note to self, how you build what you build is a determining factor on how your team is structured and where they are...but...back to remoteness...when we develop frontend components for clients I go with Alex and/or Kristen to the clients locale and then work through their design in a Collaborative Design Session. We then write this up and meet with Julien, Yannis and Christos remotely with a online whiteboard tool (BigBlueButton). And we have another collaborative session where we nut out the details. This is all a little by-the-by but just to say that we can segment our work quite nicely and the communication that does take place remotely is either:
- bullshit and fun
- high value and short
these whiteboard sessions are type 2 from the above. We set 2 hours to have the complete design sorted. When that meeting is done everyone knows what they need to do. After that we leave Yannis and Christos to get on with it and let us know when they are done. Any miscellaneous stuff gets sorted out bit by bit between the people involved. If, for example, some more UX mocks are needed or some CSS detail then Yannis or Christos will ping Julien on mattermost and sort it out. No project management, no scheduled meetings. Short and sweet as per type (2).
At the same time Jure and Richard are sorting out the backend. They communicate amongst themselves and solve the complex problems that such an abstracted system requires. All over mattermost too. Of course there are various breakouts to realtime calls when required but its a minimum. Watching Jure and Richard tumble though difficult problems in mattermost is a sight to behold. Both firing off each other and throwing ideas back and forth.
My job is largely to give each of these folks room to move.
So what about when each team needs something from the other? Being right up on the coal face of the client needs I can see what things we need to address a little ahead of time and I call out to those effected and work out how we can sync the various threads. For example we need to integrate PubSweet with INK (more about this below) for importing Word docs into PubSweet as HTML. So, seeing this I talk to Jure mostly, and think through the issues. Jure interprets my partial developer, partial user, speak and thinks about it. He then discusses it with all those necessary and they work out the best approach. Then we work out when it all needs to happen by and the order of play. Everyone then orientates around that timeline and away we go...in otherwords...the parallel teams 'touch' only when necessary - when they need something from each other. Thats not to say we try and stop people from talking to each other :) Quite the opposite, we don't gate any communication at all and leave people to sort it out. What we don't do is build things before we need them or layer on complex management overhead. These are smart responsible people, let them work it out :)
the above image drawn with the fabulous MyPaint (open source) on a touchscreen Thinkpad running Ubuntu.
We are also achieving the same process with INK. Charlie is down in the Southern hemisphere tinkering away. Shes like a deep sea diver in ruby and coming up to explain to us surface dwellers whats going on down there. You saw whaat? ...an uncontrolled multi-threaded waaaaaat!?...oh good, you killed it Just-in-Time???...phew.....Charlie is building a system for managing file conversion pipelines but it is very abstracted. Essentially it is a job-agnostic queue manager. You can throw anything at it and it will do it. We are first using it for MS Word to HTML conversion. Wendell and Alex are working together to get the conversion process into shape. Wendell writing the code and Alex testing. Then we are making this into what we call a 'step' - essentially a plugin to INK. So Charlie can build the architecture for INK and then we need to make a light INK wrapper for the conversion scripts Wendell is making and then Alex can (not happening yet but soon) actually use INK to test the whole sheeeeebang. Cool. So, they can all operate pretty well remotely to each other building the same machine.
The cool thing about all this is that, sure sometimes details are hard to transmit, but mostly what happens is that people have most of the day, everyday, to work on what they need to work on. I think this is helped by being remote. We have to be efficient. We don't get in each others way. We have to get clear understandings fast. Remote comms aren't nice for long conversations. We need them short, sweet, and efficient. Then everyone can just get on with what they want to do most...solve interesting problems.
Im not going to say we are perfect. Im also not going to say this process is perfect. We see the issues. We plan to have at least one full in-person team meets every 0.8 years so everyone can hang out and fill up the camaraderie tank (important)...the last one was in Athens and it was a blast
...and I make sure I go and see everyone every few months to make sure we are all on the same page and feeling connected. This set up needs these additional things. But it works, and when I travel around to see everyone I see it working well and I see people preforming exceedingly well doing things they want to do.