
Background
It always helps to know the background of a word, and how it made it into a software design pattern. Like most of the patterns, the bulkhead design pattern is also inspired from other more established engineering disciplines.
The ship you see above, with vertical lines dividing it, those are called bulkheads. These are some of the reasons ships are built that way (from Wikipedia)…
- Increase the structural rigidity of the vessel
- Divide functional areas into rooms
- Create watertight compartments that can contain water in case of a hull breach or other leak.
- Some bulkheads and decks are fire-resistant to achieve compartmentalization, a passive fire protection measure
Usage in Software
I believe that background makes it easier to understand Bulkhead design pattern in software.
With modern microservices architecture many applications/services are broken into different domains. This makes adopting to this pattern easier. Look at the following example, how different instances of the same API are provisioned for different clients.
Failure in Client 1 instance has not affected the other clients.

Another example where different processes are consuming messages from different instances of queues. Failure in one is not cascading and bringing down the whole system

Some would say this makes more sense in multi-tenant applications, where a tenant is using dedicated services in isolation. The whole concept comes down to the basic principle of isolation for resiliency. How you isolate resources varies based on the domain.

