Async work

28 Apr 2021    1 min read.

In software development, synchronous processes are easy to reason about; they are sequential, more deterministic, and require less integration testing. But as computer power increases in the number of cores and software is used to solve complex problems with more data, it becomes not only wasteful but impossible to do everything sequentially and in sync. Although parallel computing is more challenging, the benefits in speed and productivity far outweigh the added costs of designing for parallel processing.

This notion parallels well with business operations. Many companies seem to be perpetually synchronizing, as evidenced by incessant meetings or practices like ensemble programming, but they miss a huge opportunity to do work in parallel. Structuring teams and work to remove interdependencies and the periodic integrations is a small price to pay for the productivity gains realized when each team and person (thread) could do as much work as possible on her own.

Just as most programmers had to learn new skills and gain experience to become good at parallel programming, asynchronous work environments require a new way of thinking and new skills.

First, you have to structure your teams and work in a way that allows more autonomy. In large organizations, you can structure teams to reflect the various business subdomains (bounded contexts). In smaller organizations, multiple teams working on one product and codebase can be effective, but you have to structure parallel work to reduce interdependencies. For example, you can prioritize two orthogonal features over features that require significant changes within the same parts of the code.

Second, and one of the most critical skills, is you have to learn to communicate well in long written form. You have to favor clear, concise, well-thought-out writing over short and ambiguous blurts prevalent in meetings and tools like Slack.

Synchronous work is expensive and inefficient. The move to working more asynchronously isn’t easy, just as it’s not always easy to parallelize a software process. But it’s well worth it, and the result will be a more resilient and effective organization.