In my first week at Zed it took until the third day for someone to hop on a video call with me. The second video call happened in the week after that. Since then — I’ve just completed four weeks — I’ve only had two other video calls, both of which were interview recordings.
And yet: I did talk to many people. Everybody on the team, in fact. On my first day, on my second day, and every day since then. Multiple times a day, often for hours. But these conversation didn’t happen on Zoom, or Google Meet — they took place in Zed itself.
Zed allows multiple people to work on the same project at the same time. You can see each others’ cursors, modify the same code at the same time, share your screens, and, yes, talk to each other. It’s how Zed engineers collaborate with each other: working on Zed, in Zed.
The technology behind this is very interesting (CRDTs, baby!), but what I keep thinking about for the past four weeks is how different, how game-changing?, this approach to collaboration is.
My current theory is that this is not due to the technology (although: fuck yes, CRDTs, baby!), or at least not mainly, but rather due to the culture surrounding it and how the technology is used to collaborate.
In my first week I asked three, four people for their top-3 recommendations for a newcomer. What showed up in every answer: pairing. “Pair, pair, pair”, someone said, “pairing is how knowledge is transferred here; it’s how people work. So if there’s one thing I’d recommend it’s to pair often, to ask people to pair and pull them in.”
That’s exactly what I did. Or rather: what happened to me.
On a typical day at Zed, you might reach out to someone on Slack with a question and they’d reply with “wanna pair on it?”, suggest a Zed channel, hop on the channel and then work with you for a couple hours.
Or while you’re hanging out with someone on a channel, someone else just joins, ding dong, says “morning!”, starts listening to what the two of you working on, then starts suggesting changes, proposing ideas, helping out. Sometimes a fourth person joins and says “Hey so-and-so, I’ve been meaning to talk to you about X, can we do that now?” and So-and-so says “Sure, let me just finish up here, then we can hop on a channel” and then they go in a different channel and it’s just two of you left and you continue working on whatever you were working on.
Crucially, I think, there are no calendar invites behind this, no elaborate scheduling. I’ve had — guessing here — three? four? pre-scheduled pairing sessions. Ad-hoc sessions? I’d say 25. In 20 working days.
Everything feels so light, so easy, so open when you don’t have to schedule collaboration in divisible-by-15-minutes chunks on calendars; when your afternoon isn’t shot-gunned by 3 different calls with 3 different people, with 30min breaks in-between; when you can spontaneously talk to someone, not knowing whether you’ll end the call in 5 or 55 or 105 minutes; when you’re not talking to someone for the remaining 8 minutes in the scheduled 30min call even though there’s nothing left to say.
With an empty calendar and people willing to hop on calls, with the barrier to collaboration so low, with no hair to get in place for a webcam, somehow anything feels possible. Instead of full of meetings, every day feels full of possibilities.
Of course, of course, you can do that with whatever technology want: Zoom doesn’t make you chit-chat until the full hour, Google Calendar doesn’t require an entry before you talk to someone. I mean, fuck, I guess you could even close Slack and call someone on their phone if you wanted to.
But at the same time we all know that technologies can nudge your culture in one direction.
And in a remote company, with people in multiple timezones, with Slack and Google and Zoom and GitHub and What-have-you, it’s very easy to get sucked in, sucked down by these tools and their defaults, and to drown in your calendar and it’s very easy to forget that you can — even virtually — just walk up to someone and ask them about something and walk away again, or walk to someone else, or stay a little while longer. And if you and your colleagues are living in different timezones there’s no way around at least acknowledging asynchronous working – it’s a necessity and can be nice – but we all also know that it can suck and working with someone on something for four hours, while talking to them and throwing ideas around and shooting the shit — that’s pretty great. And I guess what I’m telling you is that I’ve made it back up to the surface and the air smells great and you should come up here and try it: clear the calendar, walk up to someone’s virtual desk, say “wanna pair on that?”, pull up a chair and work together.
I have been working in teams where pairing was greatly encouraged as well. It might not have been as spontaneous as it is at Zed but still.
For me I found it to be extremely energy draining. Not because there were the wrong people or the tools we used were not good enough but just in general it is just energy draining to me...
Also from what I have heard it is usually claimed that the produced code has a greater quality due to the knowledge sharing while creating the code.
However I found the opposite to be true quite often: Nobody "owns" the produced code, not everyone involved understood all of it 100% especially when they were typing while someone else was giving the direction.
Moreover I found myself making shortcuts during the sessions (e.g. adding TODOs) in case something became "off topic" or some people were not too familiar with some part of it.
So I came to the conclusion that:
I want to pair if something needs to be explained or walked through by someone else and it would take way longer asynchronously.
But as soon as it becomes clear what a solution would look like then I would end the session and either me or one of the others would wrap it all up alone in a normal PR.
It sounds exciting as you describe it, but it didn't stop me from being worried that this sort of work setup comes with many interruptions, preventing people from really focusing on their work for extended periods of time. I wonder if people who worked on Zed with this approach for several months feel any irritation because of that. And if do feel some, how do they balance it out, like, how often do they mark themselves unavailable for pairing, and the such?
Also, the approach has the obvious but strong limitation that it only works when people are there at the same time. But of course, if the editor is on par with the alternative one would use, then one is not any _worse_ off with it for async collab, either.