Working asynchronously
blog.remote.com
blog.remote.com
When it works, it's a great experience. However, async communication isn't appropriate for every situation, as the article admits. Some times, the most efficient way forward is to schedule a call where all parties can work out the solution in 15 minutes of real-time conversation rather than 3 days of back-and-forth e-mails. If the team is willing to fall back to synchronous comms when necessary, then defaulting to async communication for the other 95% of communication can work.
In my experience, the biggest pitfall is when developers try to force 100% asynchronous communication at all costs, no matter how slow and inefficient it becomes for everyone else. All team members must be willing to recognize when synchronous communication is necessary and carve out 15 minutes to an hour a couple times a week for those important, synchronous conversations.
Efficient communication is everyone's responsibility, and asynchronous communication is only a win if it doesn't create unnecessary extra work for everyone else.
Everyone's time is a valuable resource. It's quick and easy to demand synced communication, but that depletes the time people can dedicate to longer tasks that should not be interrupted.
Now take the team's collective time. That's the commons, and poor work discipline drains that shared resource. It takes discipline to write procedures, policies, boring documentation, or to make sure that the authoritative source of truth for your project still reflects reality.
Those 3 days of back and forth emails, or the 15 minute working session, may need to exist for some situations. However I've found that people can work to reduce those 3 days to several hours as long as the answers to some questions are available in up to date documentation.
I have a couple of team members right now who don't want to write certain documentation, or don't feel they need to edit existing documentation to improve its legibility. The most often heard excuse has been "it only takes me 15 minutes on a call to do the task". Which may seem fine from that perspective. That person doesn't realize that they've spent multiple days worth of hours spending 15 minutes on something when if they had spent 2 hours writing the documentation, they'd be saving precious time and priceless context switching.
(I'm a new team lead. I'm enjoying it greatly, and find these sorts of inefficiencies both fascinating and revolting)
The text is pulled verbatim from the camel book[1].
I somehow assume that "everyone" has used or had access to a well thumbed copy of the camel book, but realize that it's a product of place and time
[1] Programming Perl https://g.co/kgs/ZnNHTJ
Hubris implies excessive pride and ambition; pride that is oversized when compared to your ability. It has a negative connotation.
I've always been amused by the concept of "excessive hubris"
I always hated "15 minutes of real-time conversation", not because of being an introvert or anything, but because it's fuzzy, nobody remembers what it was exactly said, and usually ends up with people wasting each others time (like Diltert-style meetings).
I'd much rather people knew how to communicate effectively on chat.
But people don't, so you get messages like:
"The service is broken!"
"[panicked] What do you mean? Is it down?"
"It doesn't show anything"
[still panicked] Really? Let me see... Hmm, I see it working properly, loaded the first page and everything. What do you see?"
"I don't see anything"
"[???] On the first page? On some specific panel? Have you entered something?"
"Entered? I clicked and got nothing"
... and after 20 more minutes you realize they are on the third tab of a particular page, which nobody ever uses, have entered some search term people seldom enter, and got no results there, and everything else is working fine...
I'd say the solution is to attack those problems directly.
There are some things that just work poorly asynchronously. I find heavy-duty explanations of something, where you need the highly-interactive back-and-forth is necessary, and honestly, even just trying to type something is wasting minutes vs. saying it, is a common use case for me. Getting 4 half-distracted managers who are lobbing emails at each other into a quick conference to resolve the matter is sometimes a really good idea, too, because the "lobbing emails at each other" is a political minefield. A lot of potential for hurt feelings and miscommunication that can be avoided just getting everyone in live voice chat, with their full attention, for even just 5 minutes sometimes.
I probably do more cross-team stuff than the average dev, but in anything beyond a trivially-sized organization, managers are doing it all the time.
Truly asynchronous communication would force them to put their whole thought down on paper at once and perhaps organize it better, or at least allow you to skim. But then of course, async is poor for time sensitive issues anyway.
> But people don't, so you get messages like:
So what you're saying is that you don't actually mind the 15 minutes of real-time chat, what you mind is that some people don't know how to effectively communicate.
Although it's almost worse when they send along a JPEG screenshot that has been downsampled >50%, so all the details are too blurred to make out.
It's especially frustrating when you're dealing with timezone shifts that make the average time to get a round-trip email reply from the other person take a dozen hours or more
1. A concise, realistic agenda is distributed to all attendees beforehand, and actually followed 2. A single person takes concise notes, with a heavy focus on action items and official decisions; the notes are distributed promptly at the end of the meeting (or better yet, real-time via a shared document) 3. Each action item is given a single assignee and realistic deadline
Your chat example seems like it could be solved with a 5-minute screenshare.
She once thought she had "lost" her entire spreadsheet because she scrolled too far down to a blank section of the spreadsheet.
[says they're typing, work on something while I wait]
[6 minute pause]
"Are you there?"
"Yes"
"I'm getting an error when using [tool]"
"What's the error?"
[2 vague barely related lines in a long error message or traceback]
"Could you show me the full error message and the command you tried to run, please?"
By the time the full troubleshooting process is over (which usually amounts to "follow the instructions in the error message"), I've lost track of whatever I was doing and wasted who knows how much time.
Is the conversation ambiguous and is there a high likelihood that you will be misunderstood?
An obvious tell for this is when you go back-and-forth over Slack/chat for a few minutes and people still feel like they are on another page.
I strongly recommend checking out media richness theory. It presents a helpful way to think about what communication medium is most appropriate for a given scenario.
In my experience, the biggest pitfall is when non-developers try to force 100% synchronous communication at all costs.
I always had the experience that there is a struggle to get people to accept async work because everyone thinks it's normal to call everyone all the time.
Some peole need three calls until they understand what I'm telling them.
For others it's three slack messages a week and we are all good.
I don't think 100% async is the way, but I think it's easier to end up with too much sync than with too much async.
It would be interesting to analyse such situations further, and maybe there are actually ways to resolve it in a more productive and efficient way which does not require real-time conversation.
Have you tried reading the documentation the average engineer makes? It's like a freshman essay -- lacking in cohesion, vision, context. It's usually completely unstandardized across teams.
And 9 times out of 10 the most fundamental questions aren't answered by the documentation e.g. "Why don't we just use existing tool X to solve this problem?"
Communication is hard. Engineers use buzzwords. Product uses buzzwords. Companies use buzzwords. Combine all these and you get a soup of overloaded terms e.g. "service," "connect," "access," "resource," "platform" that have a wide range of potential meanings.
Have you tried reading the meeting agenda and minutes the average engineering manager makes? It's like a freshman essay -- lacking in cohesion, vision, context. It's usually completely unstandardized across teams.
And 9 times out of 10 the most fundamental questions aren't answered in the meetings e.g. "Why don't we just use existing tool X to solve this problem?"
I pushed my team hard to get some discipline around meeting agendas. It lasted for a week or two. I threatened to stop attending meetings otherwise. My Director told me to knock it off. So, the signal is clear, right? We're all just fucking around and playing pretend at being professionals.
Communication is always a challenge and no big or small company has fully cracked it for sure. Average engineers - whatever that means - need training and meaningful tutoring. The team should aim at becoming better, not settle for whatever they have at the moment.
A great meeting is when the right number of people discuss an ambiguous problem that requires a fast feedback loop (body language, tone, etc) in order to achieve the desired meeting outcome.
I'd also argue that poor documentation is a result of lack of structure (something asynchronous communication can provide much better vs. synchronous comm)
Yes. Don't hire the average engineer.
If a manager says "remember to do some meetings" at the start of the year then never follows up on ensuring those meetings are actually effective, those meetings might be a waste of time. If they say "remember to do some documentation" at the start of the year and never follows up the documentation will be a waste of time.
If managers are spending more time making meetings a big priority, maybe it's because unlike documentation they get to feel like a real leader because they are running effective meetings. Maybe managers just like meetings more than documentation. Maybe it's higher value to the organisation as a whole, but I doubt it.
Even if there is no team, you don't want to self-interrupt your own work. Well, we know that hence we invest in internet blockers etc.
However, if you are interrupted, it is best if you recover quickly. That is to say, if you can set up your own work so that it is planned in bite size components, and you know exactly where to pick up, you are better off.
This is like making an outline, and keeping track of where you are in the outline, except at the level of detail you need (say 5 min increments). Or perhaps you have a short hand of tracking where you are during an interruption.
So, if someone says excuse me, you take 12 seconds to quickly note what you were about to do, and if you are about to self interrupt, you do something similar.
I store all my org files in git repositories and sync them across devices, allowing me to work on multiple devices and worry less about losing a particular device.
I do this basically any time I feel like my short-term memory is overwhelmed with facts, and as a result the notebook has effectively become NVRAM for my brain.
"Hold on a sec, I just wanna write down what I was doing so I don't lose my place."
If you want to add more, after writing it down, you can follow up with, "sorry to keep you waiting, but when I get interrupted I often forget some useful details about what I was working on, and I want to get that down before it leaves my head".
(The "when I get interrupted" is a bit of a cheeky way to point out "you are imposing on me, so the least you can do is allow me this".)
Items don't have to be tasks. They can be ideas or general notes.
The "today" section is a bulleted list of the things I think I'm working on today. I add to it through the day as I get shoulder-tapped, or as I realize another important sub-task.
As I finish tasks, or at the end of the day, I move them up into the "history" section under the current date. Thursday: A, B, C
This is basically all of the "head state" in the infamous cartoon of how you ruin engineers lives by interrupting them. I feel that it allows me to be interrupted without losing import state, and it's also a ready-made "scrum status" of what I did yesterday, and an augment to my memory when someone asks me "did you change X?" for some micro-task that was too small to ticket.
I feel this has helped me be a more effective developer, in spite of my decaying memory, than I was when I tried to keep everything in my head. :)
Example contents: https://imgur.com/a/VI64Jx6
It makes me less likely to leave the repo with some staged changes, some unstagrd changes, and no idea what I was doing when I come back to it - but even if that does happen it makes it easier to work out.
My life satisfaction and work productivity increased significantly when I stopped working from home and began working 8-5 at an office. There were so many things I took for granted:
- Face-to-face interaction with co-workers.
- Casual conversations to break up the day.
- The rhythm of a commute.
- Not struggling to find a spot in a crowded coffee shop.
- The productivity boost of working alongside other people who are working.
- The consistency and routine of normal working hours.
- The ability to pair program, in person.
- The ability to be productive with my team even if the internet is slow (or out completely).
I worked from home for six years, and I don't think I'd ever go back. I'm not saying remote doesn't have its place, but I've found that I greatly prefer working in-person with other people.> An even, swift and nimble pipeline produces exactly the right quantity of output for its requirements, and all its stages are balanced in terms of efficiency and speed. Resulting in no waste of time or resources.
Aside from containing neither a subject nor a verb, this last sentence is an impossible claim. Anyone who intends to hold the author to the quality of their reasoning would stop reading there. Only people who can say “upward revenue stream dynamics” with a straight face will read on.
A single logical sentence has more value than a page full of poorly written false claims and regurgitated platitudes.
I now commute to an office where we all work asynchronously but are expected to appear to work synchronously, as is traditionally expected. It is less enjoyable, frequently subject to context switches (you need to synchronize with the dominant worker) and certainly no more productive -- although that's hard to tell since everything is secret and need-to-know.
I would say working asynchronously is better for intellectual workers. Most intellectual work places that claim to working syncronously are either working under an illusion or under a bad manager with a "my synchrony" attitude.
It isn't. You've got to have a great marketing team, too. Remember when UPS tried to make "Brown" synonymous with UPS? Having the domain name isn't a prerequisite for that kind of effort.
Do you feel the same about testingjavascript.com? It's just a lucky domain or they spent a lot of cash on it. Relax.
As for testingjavascript.com, it isn't comparable. It's two words and a lot more specific than "remote".
This halves the number of timeslots that are available to have time stolen from you, but allows us to get the empathy and quick resolution that real-time communication enables.
https://www.gayleallen.net/cm-127-steven-rogelberg-on-making...
I've worked in low latency environments, but I prefer high throughput. The latter is more conducive to flow state. It also means people aren't relying on my consistency, where some days my brain turns on & some days it doesn't
If that person were in the same office, it'd be much easier to browbeat him into compliance and teach/mentor him. But he was halfway across the globe, so we suffered through it for ~6 months and then let him go, further reinforcing his belief he was being personally attacked. Not a good parting of ways.
Their "async planning" bit doesn't mention context switching though, which is an important omission.
The thing I agree with, yes being distracted takes time, focus and productivity. I'm all for being more into more deep work etc. Also the part of people need to be proactive rings true of course. But I fail to see how something that evident really needs a graph.
But the issue I take with articles like this is that they think of humans as robots. That walk in, or sit in front of their computer at 9, type for 8 and then go home/stop working.
But let's be honest here, If you can keep highly focused for more than 4 hours a day you are a superhuman. I know keeping this in mind doesn't take anything away from the article. Yes we should focus more on Async productivity, but work our work is definitely not single threaded. We are humans, If I hear my teammate 2 desks over signing for the 3rd time I can do 2 things. Ignore it, not getting out of my flow. Or stand up, talk to him/her and see whats up. Maybe it's only a complain about Entity Framework migrations being a b or perhaps just tired, and gets annoying by small things because something happened last night and its time to vent a bit.
recently I've started listening to this podcast https://hurryslowly.co/ . Although I do not identify with everything discussed, I do think there is source of truth in a few episodes. It just makes me consider, are we optimizing the right things first?
I really wonder, if all this no meetings, no distractions is really the key to making us more effective at our jobs. You can't really measure it, does the hour in a meeting really makes you an hour less productive? Is it more like 15 min? Or did the distraction actually helped instead of bashing your head against the wall for over on hour trying to figure out the solution?
I wonder the same about all those gosu vim/emacs users, it sure looks fancy dancing with your fingers doing edits. But where does the real work happen? Is is the amount of lines written or the amount of quality information processed in my mind about the solution I'm looking for?
In the end..
- Be human - Try to have clear borders about distractions in your team - Turn all slack notifications off - Don't have meetings that could have been an email. - Don't send emails about stuff that could have been a meeting
I'm really curious about working in a distributed team though, sadly I didn't really had the chance yet. I think working remote has it own con's and pro's.
I do applause the auther for thinking about this, I think reflecting on how to work better is always a good idea. But It could also easily be a recipe for a burnout.
It isn't perfect but we try to show how the meetings split apart your day and your capacity to do deep work.
A "short-ish" article written in an afternoon has no hopes of being a tablet of truth, just some anecdotal examples and ideas I've experienced over the years.
I fundamentally agree with the "Be human..." part, that's all you need if common sense is common around your workplace. Unfortunately it often isn't and you need to offset the unbalance to find equilibrium.
Looks like it's time to go job-hunting again, but I hate job interviews. Dammit.
Much better than a timed coding challenge in my book. It's only bad when the problem isn't you know, a toy. Sometimes you have to reply with your consulting rate.
Do you prefer those?
I was told it is not valuable by the new management.
Sometimes, they will take advantage of you, even if just through ignorance.
I hate interviewing too, but don't let that stop you! Learning to be great at things we avoid/dislike improves us as human beings. It is important to be happy with the work we do.