We, as developers always strive to create most efficient implementations in our applications. We want fastest algorithms, multithreading and… async. Some say “async all the things”. This makes processes non-blocking. When one task waits for another one to finish, it’s not blocking resources. Some time ago, I have noticed similar patterns in the real life.

Switching context

When you’re working on something, you keep the context of the task at hand in your head. You know what you want to do, you know all the variables, methods and classes. You know, what you should test. Now imagine I come to your desk and ask a question about something. You look at me and suddenly have to change context to the topic of my question. You answer it and then need to get into the code again. Switching context is expensive. It’s expensive in IT and it’s even more expensive in the real life. Sometimes you will need 15 minutes or more to get back ‘into the zone’. Especially if you don’t go back to work straight away, but check facebook or emails before.

Sometimes asking a question in person is needed - if there is some emergency. In most cases, though I could easily use some asynchronous communication like chat or email, which you would check when you’re done with your task.

You just need to think if the case in hand is important or urgent. If it’s urgent then you might not have time for a chat, but in reality, most of the things can wait.

Phones are the worse

Now let’s take a different scenario. You need to contact someone, let’s say a shop, and ask if the item you want to buy, let’s say some new, cool, headphones, is available on stock. You pick up your phone, find the number, call it. It’s busy. You hang up and call again. Busy. You check facebook, call again. Someone picks up and says he will redirect you to the headphones department. Busy again. Next time - success. You talk to the right guy, he answers your question. The task is completed. All of this took you 15 minutes. Just to get an answer for one simple question.

Now, imagine, instead of phoning the company. You send an email:

Hello, Could you check if the XYZ headphones are available in stock? Thanks, Michal

Writing such email takes 30 seconds. You won’t have the answer straight away, but the truth is, you probably don’t need it instantly. Think, how much time you can save like that.

Friends and family

The same rule applies to communicating with your family and friends. You want to ask me if I want to go to a concert? Send me a text - I will check what it is, check my calendar, talk to my wife and get back to you with an answer. If you call me instead, I will have to drop what I am currently doing and tell you I will get back to you later - when I check my calendar and talk to my wife.

Planning is an essence here

The solution is quite simple. You have to try not to wait until things are starting to block you. If you have a problem and can’t move forward or switch to another task, it means that you probably made a mistake in planning. You should try to organise your work in a way that you won’t be blocked by waiting for someone’s answer. You also have to value someone else’s time. If you do that, they will value yours too.

Do try this at home (or work)

Try this method for a week. Silence your phone at work, don’t look at the notifications coming. Focus on your work. You will check them when you take a break from the ‘real’ work. I am sure you will notice your productivity goes up. What are your methods of async communications? Do you think it makes sense? Or maybe you prefer to deal with things as fast as possible? Let me know in comments!