Working remotely with 150+ people
medium.com
medium.com
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.
To me it totally makes sense. Instead of the inevitable interdependency that arises through the component model, I can see that if teams were building features on their own than it could be completed at their leisure (in the budget & time affordable) without the multi-directional multi-disciplinary communication shitshow.
I wonder if there is an official name for this feature teams model or more guide on how to implement it.
"Scaling with Feature vs. Component Teams" by Ken Rubin: http://www.innolution.com/resources/presentations/svaln-2015...
At GitLab we're trying to see if we can do component teams with handoffs (UX => front end => back end). This is hard and we might have to reconsider. I've detailed the reasons in https://about.gitlab.com/handbook/leadership/#no-matrix-orga...
A "no-matrix" structure might work in a small organization which has basically only a single product. In that case it's actually possible for a single competent boss to understand the customer, product, employees, and technology well enough to make good decisions.
In a large software system you can't expect any individual to be as effective working in any area of the system. So you're winning on the blocking front but you're losing on the productivity front as people ramp in on different pieces and you're also potentially losing a sense of ownership from the developers and instead giving them a sense they're cogs in a machine...
To me a better compromise is to ensure you have enough of a backlog that you can always pick something that is the right combination of expertise/interest/lock-free at any given time. If you plan properly and you have sized your teams properly things should move along better than trying to get everyone to work everywhere on some random feature. That's not to say you can't occasionally do that if something important comes along but to me feature teams in large scale software is to be avoided. [EDIT: realizing this is maybe too strong of a statement, a team can definitely work across multiple pieces and will ideally implement complete features, but those features need to be a match to the capabilities of the team as opposed to just looking a "feature team" as some sort of unit of production for any random feature]
There's another part to this which is that it can be difficult to see the inter-dependencies between features. So modelling your software development as a bunch of teams that can just pull the next feature from the queue and work on it may actually not solve the locking problem at all but create more subtle dependencies and less efficiency.
For large complex software systems every team member can't be an expert on everything. That's why within the overall program you set up separate small agile feature teams composed of team members who each bring some specialized skills and experience. Plus you should also layer on a matrix of component stewards who help maintain technical integrity for individual components. For a detailed explanation of how that works please see Ken Rubin's presentation "Scaling with Feature vs. Component Teams". http://www.innolution.com/resources/presentations/svaln-2015...
No one ever claimed that a feature team organization is a silver bullet. But if implemented right it will usually deliver at least a minor boost.
In my view optimizing productivity isn't necessarily mutually exclusive with other things you're trying to achieve. If productivity is very low then most other measures will tend to fall too though that may lag. The problem is that productivity tends to have poor visibility and is difficult to measure.
What I object to with all my heart is the "feature team" as the assembly line model of software "features". I.e. the software factory where features come in one end, get assigned to a random team, and product gets delivered on the other end. This model results in low quality, expensive, bloatware at best. It may or may not at any given time make some money. It's also not the model used, AFAIK, in most successful software companies.
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.
We have a Hangout open all day in the office, displayed on a 60" TV. Anyone that's working remote can jump in whenever and it's somewhat like they're in the office. Audio is my only complaint. Sometimes it is difficult to be heard
[0]: https://chromebusinessdevices.withgoogle.com/products/1677/h...
Do you know what the Google monthly fees are? Is the bandwidth consumed a concern?
I've heard a couple other stories like ours. One I remember specifically was a company with a 50/50 mix, they did ALL meetings from their own desks on a hangout so that everyone had the same presence, the remote people didn't feel left out, because everyone has to fight for the same one audio track.
As for bandwidth, it hasn't been anything that we've been troubled by. Been using it for nearly 2 years now. The client on the remote machines has some hiccups from time to time and is somewhat of a resource hog. But if you keep it in the background it isn't too bad.
Our time zone difference isn't as extreme as a 10 hour difference. We have offices -1 and +1 from our current time zone so it makes it easier.
A talk I attended earlier this year had a similar setup to yours and what they did was record all meetings and had a culture of always doing the meeting regardless of wether people could join. Then if you missed the time you chimed in later after you watched the video. Decisions were handled in a similar async fashion.
There are plenty of easy browser-based video chat applications using WebRTC like https://appear.in/. You can send people URLs to your video room and there's no software to install.
Somewhat similar to: http://asyncmanifesto.org/
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.
In general I think remote teams benefit a lot from a central person who has final say and had the ego to push things through. Somebody like Linus for Linux. You can't have people like you see in a lot of companies that need endless meetings to make decisions.
I worked in a few remote teams and most had bad leadership.
No process or it changed every month or it wasn't really used by anyone etc.
No single source of truth. Some people write in slack, some in quip, some per mail, some in trello, some in github...
I think people are trying to run remote teams like "local" ones and can't understand that they are different.
"People have to sit in one room to be more productive" - "we need water cooler talk to get the word around" - blablabla
They just want to be "managers" in title, but not do the work...
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.
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.
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
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 never really got along with people that I was "forced" to be together with. School, University, Work. I mean, people liked to work with me and I'm mostly really polite and inclusive and all. But I didn't find many people I considered interesting at these places.
I got all my friends from meetups, online communities, parties, etc.
Every time I noticed such things going on at a company, I jumped ship.
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.
On a side note, I'm also tangentially interested to see how VR can affect the remote workspace. I've used Bigscreen Beta (shared multiplayer lounge with virtual screens) with the Vive to work on a mutual side project with some friends and being able to see each other's screens by turning your head rather than by sharing with some program has also made the experience feel closer to in person work.
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.
What does this single source of truth look like? A google docs spec?
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.
Async is everything else: email, IM, leaving voicemail, blog posts, git comments, tickets, bug reports...
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.