top | item 13326689

Working remotely with 150+ people

130 points| mdeira | 9 years ago |medium.com | reply

61 comments

order
[+] DoofusOfDeath|9 years ago|reply
After completing my CS master's degree, I was hired by my advisor as a full-time software developer. My job was to coordinate the efforts of the students contributing to his main project, keeping everything moving forward.

For that job, I found that keeping things asynch was crucial. But so was keeping things lock-free.

My basic premise was to never assume that any grad student would get any particular task done. So I tried to create an environment where any time they had a useful contribution, it could be merged into the main code base. But to never put one student at the mercy of another.

I think that worked pretty well.

[+] huherto|9 years ago|reply
Generalizing this idea. Interdependences are big source of problems and delays in projects. Many people don't realize it, but you have to actively work on eliminating them. You see it in the form people waiting for other people. Every team should be organized in a way that they can we do their work without waiting for other teams.
[+] Inthenameofmine|9 years ago|reply
That sounds very interesting. Could you go into more depth what techniques you exactly used?
[+] vas123|9 years ago|reply
sounds a bit like functional programming and minimizing side effects
[+] codingvelocity|9 years ago|reply
While i'm not 100% remote (i'm part of a small regional office that has a massive head office in another part of the country, but I can work from home). Something i've found incredibly important is jumping on video chat. There's something about seeing someone in a video while you talk to them that reminds you "hey i'm working with other humans, i should respond with a level of empathy i'd expect in return"
[+] dhd415|9 years ago|reply
Beyond that, I'd say the ease with which a video chat can be initiated is important so that the annoyance of starting one does not become an impediment to using them when they are appropriate. My team uses Sococo which, while not without its problems, does allow for one-click video chats and screen sharing with 1 or more co-workers. It's really nice to have the option to jump into a 5-minute video chat/screen share with the click of a button to work through something that would otherwise be a 25-minute chat conversation.
[+] exDM69|9 years ago|reply
Are these individual or group chats? What kind of solution do you have?

I work in a small office of a big company and have a 10 hour timezone difference to my most important co-workers. We chat on the phone but I don't really enjoy it. I'm not sure video chat would help, but I might be willing to try.

But it would be slightly inconvenient because of the timezones. We might have 10-20 people from 5-10 locations around the world. This means that many participants call in from home before work in the morning or after work at night.

That said, I'm quite happy working remotely mostly from home.

I feel that travelling occasionally and meeting the people in person (and having lunch, dinner, beers together) makes it much easier to work together. There's no substitute for human contact.

[+] maxxxxx|9 years ago|reply
It's a nice list but could be a little more specific.

I have worked in purely remote teams and I found them to be highly functional. You need a certain type of self reliant people though and really strong leadership. Somebody has to make and have the power to enforce certain decisions that affect everybody.

[+] jobvandervoort|9 years ago|reply
I strongly agree about requiring self-reliant people. I actually wrote about this shortly after posting this on medium [0], but the TL;DR is that you (as manager) should make it extremely clear what is expected of everyone and that people should be very self-sufficient / independent.

[0]: https://about.gitlab.com/2017/01/03/set-expectations/

[+] joeguilmette|9 years ago|reply
Can you describe in more detail what really strong leadership looks like in a remote work environment?
[+] tcrews|9 years ago|reply
I've been working remotely for 2 years now and my team has people from all over the world. People mostly talk on IRC but not a lot (about important stuff) and there is a HUGE number of periodic meetings. I can't stand them. What's worse, every time things start to appear to be going off track, the initial reaction is to always set up a new periodic meeting about topic X... this is supposed to bring people together but useful interaction never happens on meetings (too many people trying to save face). It's horrible.

When talking to external partners, our management brags about having a remote team with people from all over the world, but I don't think they understand how to make this work.

Sometimes I feel we should all be in a single office because of this, but then I remember other companies have figured this out so I don't have to feel bad about wanting to work remotely.

[+] jobvandervoort|9 years ago|reply
Periodic meetings mean the end to remote work. Avoid them whenever possible.

I try to be proactive about cancelling the periodic meetings that we do have, whenever there's nothing to talk about.

Traditional meeting strategies also work well: never start a meeting without an agenda, set a short and fixed time slot for it and always end when the time is over.

[+] dhd415|9 years ago|reply
My team has a daily 15-minute scrum meeting that I haven't found overly burdensome. We're spread over a 4-hour time difference, so the time of day isn't really an imposition on anyone. It's also no big deal if someone misses from time to time but I've found it generally helpful for keeping up with what the team is doing.
[+] neebz|9 years ago|reply
We focussed a lot on async collaboration and unfortunately we get issues of team associations. You just miss out on any water cooler talk and struggle to build relationships with individual employees. This impacted our employee turnover massively even though we gave competitive salaries, flexible work hours and work-from-home.
[+] jahaja|9 years ago|reply
I'm curious about how much the need for social interaction through work differs between Europe and the US.

In Scandinavia I feel that there's a pretty distinct border between work and friends/social life. Socialising with colleagues is usually pretty superficial like afterwork and such.

Maybe this is the reason I find these "water-cooler moments" so vague and overrated. Personally I think I derive a good and rewarding working relationship by basically just working together, even if that would be mainly through text. I do however realise that there's a lot of people - in my current on-site job as well - that really avoids communicating through text if it's possible to talk face-to-face. I'd assume these persons would probably not enjoy working remotely.

I hope remote-only companies make sure that new hires actually can, and like to, communicate through text.

[+] jobvandervoort|9 years ago|reply
We do a few things to alleviate this, I'm not sure if they are enough for scale:

1. Daily call with everyone where we talk about our private lives for the most part (30m call, 28m private life talk: everyone has to tell something they did for fun last week)

2. Very active chat, with many non-work channels

3. A 'watercooler' hangout, where people join to just casually talk over video chat

[+] k__|9 years ago|reply
I have the feeling this water-cooler talk thing is mostly an issue if there is no focus or the management is bad.

If everything is fine, I don't talk much "privately" with people at work and some "more social" individuals talk about their private things, when "at the cooler".

If there are problems in management, we talk about these "at the cooler".

[+] andrey-p|9 years ago|reply
I'm working for a small (<50 employees) company, and I'm pretty lucky to have a management that cares about this.

Stuff we've got:

- weekly all hands meetings where people talk about what makes them excited - lots of non-work-related chat rooms - 2-3 meetup opportunities per year - culture of quick ad-hoc synchronous meetings

We also had a board game night via Tabletop Simulator (http://berserk-games.com/tabletop-simulator/)

It also helps massively if the company is remote-first. We've got a central office where several employees are based but you never feel like you're missing out if you're based elsewhere.

[+] dx034|9 years ago|reply
Any experience what single point of truth is useful with such a large group?
[+] brilliantcode|9 years ago|reply
I keep hearing the word async come in these remote working threads, what does that mean exactly in this context?

What does this single source of truth look like? A google docs spec?

[+] dsr_|9 years ago|reply
Synchronous methods of communication are phone calls, conference calls, in-person meetings, and anything else that requires that two or more people attend the same "event" at the same time.

Async is everything else: email, IM, leaving voicemail, blog posts, git comments, tickets, bug reports...

[+] gedrap|9 years ago|reply
Async means reducing likelihood that your work will be blocked by someone else (e.g. waiting for response from someone) as it might cause big issues when someone is 10 hours away. If you can't get any work done because you are waiting for someone who is sleeping, that's really bad.

Single source of truth can be google doc, wiki, github issues/wiki, whatever. As long as it's single. The problem is when critical information is scattered in slack history, github issues and PRs, wiki and some odd google doc. It makes it hard to find information and you will end up finding contradictory information. Lack of single source of truth or not updating one will reduce the async property of the whole operation, among other things.

[+] dozzie|9 years ago|reply
Synchronous communication happens when one participant says/sends something and then waits for the other participant to reply doing nothing else. Exactly the same as with synchronous function call: you order some operation and wait patiently for it to return the result.

Asynchronous communication is when one participant sends something and leaves things as that. For a reply, either another (asynchronous) message is sent, this time in the opposite order, or the sender checks if the reply arrived.

Real-time communication, like phone calls, video conferences, and various chats and communicators are synchronous by the very nature of the activity of conversation. Everything that you may postpone checking is asynchronous; e-mail, tickets/issues, and source code commits are like that.