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.
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.
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"
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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".
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
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.
In our case, we make sure that single source of truth is either a GitLab issue, for anything related to implementation or the handbook on our website for organisational matters [0].
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...
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.
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.
[+] [-] DoofusOfDeath|9 years ago|reply
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
[+] [-] Inthenameofmine|9 years ago|reply
[+] [-] unknown|9 years ago|reply
[deleted]
[+] [-] vas123|9 years ago|reply
[+] [-] codingvelocity|9 years ago|reply
[+] [-] dhd415|9 years ago|reply
[+] [-] exDM69|9 years ago|reply
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.
[+] [-] jakozaur|9 years ago|reply
Somewhat similar to: http://asyncmanifesto.org/
[+] [-] maxxxxx|9 years ago|reply
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
[0]: https://about.gitlab.com/2017/01/03/set-expectations/
[+] [-] joeguilmette|9 years ago|reply
[+] [-] tcrews|9 years ago|reply
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
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
[+] [-] neebz|9 years ago|reply
[+] [-] jahaja|9 years ago|reply
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
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
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
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
[+] [-] jobvandervoort|9 years ago|reply
[0]: https://about.gitlab.com/handbook/
[+] [-] brilliantcode|9 years ago|reply
What does this single source of truth look like? A google docs spec?
[+] [-] dsr_|9 years ago|reply
Async is everything else: email, IM, leaving voicemail, blog posts, git comments, tickets, bug reports...
[+] [-] gedrap|9 years ago|reply
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
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.