This post aims to generalize the idea of a bottleneck. To see what a bottleneck is, imagine a wide hose that pumps out water with high pressure. But the nozzle of the hose is very narrow and therefor prevents a lot of water from coming out. This nozzle is a bottleneck. Increasing the pressure isn’t going give you more water. Instead you need to widen the nozzle. Alleviating bottlenecks (widening the nozzle) is a central concept when optimizing a system.
Many systems are layered. For example, consider a primary + replica interface in databases. The replicas store the data, and the Primary handles high level information about which replica stores which data. The interface between the two consists of a resource: network bandwidth. The bottleneck (the limiting factor keeping the Primary from retrieving data faster from the Replicas) is network bandwidth.
It is useful to look at the layers of systems as vertical abstractions. In the above example, Replicas are below (i.e. are controlled by) primaries. Being familiar with the layer above and below where you are working is useful for holistic system optimization. Because how can you build an effective lego piece if you don’t know what kind of grooves it needs on top and bottom to fit snug into place? Actual systems are more complex, and have tendrils that reach into the surrounding systems. Therefor more information than just the interface is needed.
Software engineers may say that this is incorrect. That a good interface decouples the two systems involved. Decoupling means that the two systems can be treated independently, as long as the conditions at the interface are held constant. While this is a useful aspiration for architecting interfaces, it does not hold when trying to alleviate bottlenecks. This is because bottlenecks are the interfaces, and are therefor not independent of the two systems involved. To go back to our example, water is first in the hose, then its spraying out onto the grass. The bottleneck is the space between these two states: the narrow nozzle.
The In & Out vectors
A vector is a quantity that has a direction as well as magnitude. For example, lets say point A and point B are 5 miles apart. Moving from point A to B requires going a magnitude of 5 miles. But if point A is directly south of point B, then moving from A to B also has a direction. Moving south 5 miles is a vector because it has both a magnitude and a direction.
Now consider two vectors pointing up, on either side of a system. These vectors symbolize the scope of the system. Now consider two systems, each with its own pair of vectors.
So there are three things to consider here: (1) the vertical vectors (one for each system), (2) the two systems (one layered above the other), and (3) the interface (bottleneck) between the two.
So from a qualitative sense, what is the direction of the vertical vectors for each system on either side of the bottleneck? For the lower system, the vectors seem to point inward, like a triangle with a slightly disconnected point at the top. This is only a generic geometric interpretation of the hose angling inwards, with the nozzle at the top of the triangle. For the upper system, the vectors seem to point outward, like an upside down triangle (again with the bottom tip slightly disconnected). And again, this is a generic interpretation of the water spraying from the nozzle. Therefor the direction of the vertical vectors for the two systems are inverses: the bottom level angles inwards, and the above angles outward.
What is a less abstract interpretation of this generic bottleneck?
When building something, the upper level refers to what is being built (the applicability of the architecture/product), and the lower level refers to how to build it (choosing an appropriate system to solve the problem). “What is being built” is driven from connecting valuable qualities with the demands of the larger ecosystem. “How to build it” is the inverse: managing trade-offs for using the resources of the lower ecosystem to help create a solution to the problem.
Where are the high-positive impact bottlenecks?
High-positive impact bottlenecks are those that yield the greatest expected benefit if alleviated. Such as malaria bed-net distribution, from GiveWell’s perspective. The Future For Humanity Institute has come up with a Fermi Estimation equation with the hopes of guiding impact evaluations across different causes. In essence, it is evaluating the benefit of alleviating a bottleneck, where the lower system is about finding an effective equation with respect to resource alignment, and the upper system is about optimizing the improvement of the world’s quality of life.