Many design goals contribute to achieving the best possible availability because they help build a robust and reliable solution.

But even the best solutions require maintenance, which can lead to downtime.

The design techniques can increase availability. For example, passing synchronous service requests to asynchronous backend services makes the system’s externally provided services available even when backend subsystems are down for maintenance.