Hacker News new | ask | show | jobs
by jillesvangurp 2437 days ago
An important point about asynchronous vs. synchronous is that it's not just about the communication but about the work processeses. What enables people to work more effectively is removing synchronization bottlenecks in processes. Any kind of synchronization point causes people to do silly things like wait for that to happen, delay activities until after they've happened, or try to organize meetings around these points. The more synchronization points you have, the slower things get. Usually we call this bureaucracy.

Any kind of meeting is a synchronization bottleneck. People synchronize their workday around these. Workdays and office hours are synchronization points as well. They create bottlenecks in our traffic system even where literally everybody is trying to get to work at the same time just so they can be at a standup meeting.

Treat it as a technical problem and get rid of unnecessary blocking activities and things run smoother. It's true for software, it's true for logistics, and it is true for work processes. The same principles apply and you can use similar design patterns (queues, events, etc.). A side effect of non blocking processes is that people can work more effectively without waiting for people to talk to them or meetings to happen. It enables remote work but is just as effective when used on site.

Git was invented to support asynchronous development where independent groups of developers work on their own branches and exchange patches or pull requests when they want to synchronize. Works great for OSS but it is now also common in non remote software teams. Create a ticket, assign it, create a branch for it, do some work, create a pr, pr gets reviewed, ci builds trigger and if you figured out deployment automation, ultimately the change goes to production as well. It's all orchestrated via events that trigger somebody or something to pick up the work for the next thing. It's great. It replaced a work process where people were bottle-necked on central version repositories that required a lot of ceremony around branching and merging because it was so tedious; which in turn made commits a big deal and necessitated commit freezes and lots of communication overhead, meetings, and delays. Git got rid of most of that.