I’m a Product Manager here at GitLab, primarily contributing to the Plan stage
of the DevOps lifecycle. I joined in November 2016 and I’ve witnessed incredible
growth in GitLab the product as well as GitLab the team. Many
new hires have asked me during coffee chats
about GitLab culture and remote work in particular, since we're an all-remote
company. My view has evolved over this time and I wanted to share specifically why I think
remote is not a challenge to overcome, but actually a competitive advantage, at least for GitLab.
A remote journey
When I joined GitLab, I thought remote was a challenge to overcome or at least
to manage. It was a risk to be mitigated. For example, I really wanted daily standup
meetings with the engineering team I was working with. Silicon Valley-style tech
companies and product management books tell us that frequent, synchronous, face-to-face
communication is necessary for building successful products efficiently and to win
in the marketplace. To my dismay at the time, we never had in-sync standups (and
my team today still doesn’t have them). But curiously, we nonetheless had immense
collaboration and continued to ship product at a high velocity. Something really
weird and unexpected was going on.
Later on, as I started getting comfortable doing product the GitLab way,
I started to think that remote wasn’t really a risk, but that there were just a
few negatives, and that the overall effect was net positive. See the advantages and disadvantages of remote.
Today, I realize that even a positive-negative accounting of remote is insufficient
to articulate what remote means at GitLab. I think that remote
(along with a few other key crucial GitLab ingredients) gives us a differentiated
and competitive advantage, in particular allowing us to innovate at a rapid pace
that is truly unique. Here's why:
There are a several crucial and interdependent GitLab ingredients that make remote
truly work in our favor:
Remote implies geographic diversity (since we hire all over the world),
and because most folks work during the day, that further implies time zone diversity.
Consequently, we prefer Async communication (primarily with text) as we scale our organization in
space-time. Async demands everything be written down and that it be clear and concise.
You can’t afford a prolonged back-and-forth conversation because every round-trip
transaction is possibly 24 hours in the worst case. In particular, we prefer text
because the internet and modern apps (for example GitLab issues) has allowed text
to be easily organizable, searchable, and even hyperlinked. Text is easy to parse
and thus consume. It is a highly efficient form of communication, especially for
The async communication we reference is also digital, making it infinitely
scalable. Unlike the printed page in a physical office, anybody should
be able to access a digital message. So, rather than re-erecting the walls and silos
that plague traditional organizations and inevitably block collaboration, we
make communications and work transparent by default.
Adding a layer of permissions is necessary sometimes, and in those cases it becomes an overhead cost to manage
and use (for example fixing a security bug.) The transmitter of communications
needs to figure out who should receive, and set the appropriate permissions. The
receiver themself needs additional work to access the content. It’s more pain. It
adds up. So we try to avoid it when we can.
Because you know everything you write down will potentially be viewed by anyone – inside or even outside the company – simply telling the truth is the optimal and most efficient strategy
Transparency also makes it really easy to tell the truth, and disincentivizes dishonesty.
Telling the truth is simply the right thing to do, but it’s also a great strategy
to grow a long-term sustainable business. In particular, because you know everything
you write down will potentially be viewed by anyone in the company or even outside
the company, simply telling the truth is the optimal and most efficient strategy
and you will thus adopt it with little friction. You don’t have to make up slightly
different versions for different stakeholders. You don’t have to keep track of all
these versions. And you only need a single artifact to document that one source
of truth, which will never be out of sync, because there’s only one! For
us, that single source of truth is typically the description in an issue.
Everyone can contribute
With a single source of truth that is consumable by anybody, it allows everyone to contribute.
Everyone has information parity. And so anyone is welcome to contribute. In fact,
remember I mentioned above that the transmitter of information typically has an intended receiver
in mind? In this case, oftentimes somebody who they didn’t expect can even participate
and add value. This isn’t possible if there’s no transparency because artificial
barriers pre-close the opportunities of potential collaboration. Also, everyone
can contribute means future folks can participate too. You may start a conversation
on an idea that turns out to be suboptimal in the current circumstances. But it
might end up being just a timing issue. And so posterity might be able to recover
the old idea and ship a feature later on, taking advantage of all the discussions
that were had and made available publicly.
Everyone can contribute also means that the diversity of ideas skyrockets. And so
at GitLab, people often cross departments and offer some of the best ideas to solve
big challenging problems. But we still have directly responsible individuals
to make decisions in order to avoid analysis paralysis.
Finally, how can all this communication and collaboration truly function if the
mechanisms are so transactional, distributed, and unstructured? It works because
it forces us to be iterative. Most people think they understand iteration (myself
included) before joining GitLab. But I’ve discovered over and over again that new
folks are surprised that this concept is taken to an extreme. Product
and code are shipped in the absolute smallest piece possible in an effort to get
feedback and momentum. Implementing programs and processes at GitLab means breaking
off the smallest chunk and then putting it into action right away. We still make
big, bold plans and big bets on the future. But we don’t obsess over extended analysis.
Instead we find the smallest thing that we can do now and we do it. We believe that
waiting until tomorrow is an opportunity cost. Doing something small today is low
risk and results in immediate feedback. We have a bias for action.
We believe that waiting until tomorrow is an opportunity cost. Doing something small today is low
risk and results in immediate feedback.
And so if all our communication and collaboration is focused on small iterations,
the scope of a typical problem is small and manageable. And it turns out (unsurprisingly)
more people are willing to participate in a small problem if it literally takes
them a few moments to voluntarily glance at an issue description, instead of being
forced to attend a two-hour slide presentation explaining a big problem.
And since the problem is made transparent by default, the pool of contributors is
very high, as mentioned earlier. Personally, I am actively involved
in at least 20 to 30 parallel problem conversations on a daily basis. It is impossible
for anyone to achieve that level of productivity if all to those conversations required
dedicated, ongoing, synchronous meetings. This results in an incredible rate of collaboration
for myself. Multiply that by all team members at GitLab, and then also all GitLab
community members further still, and you can see now why GitLab’s pace of innovation
is ridiculously high.
Remote is not a challenge for GitLab to overcome. It’s a clear business advantage.
The picture I’ve painted here is one of constant messaging and wild ideas. And
that’s intentional because it’s true. New folks joining GitLab often are inundated
by the number of discussions they find themselves involved in after several weeks
in. This is indeed an ongoing risk for GitLab especially as we scale and the level
of ideation grows exponentially in relation to headcount (since communication links
grow exponentially as nodes in a people network grow). I’ve observed that GitLab
team members usually figure out a way to cope soon enough, and typically become
more selective in their communications over time. I think this is a good general
strategy overall, because good ideas tend to get more attention, and we essentially
rely on the wisdom of the crowds to surface them. Of course we still have well-defined
roles and responsibilities that serve as guardrails too, that allow subject matter
experts and directly responsible individuals to strategically guide our innovation
in the right general direction.
How are you making remote work work? Let us know in the comments or tweet us @gitlab.