I’d like to recap why I’ve been discussing the nature of systems, isolation, and enterprise-level controls.
It’s because I want you to:
Go Fast, Safely
I hope you recognize that the systems we build and work within are much more than the sum of a set of Obvious parts. The parts interact and we need to be careful not to oversimplify problems by ignoring interdependencies and adaptations between components and people. Heck, we need to understand the kind of system we’re operating within in order to have much chance of making a good decision at all.
One of our decisions could be that we’re going to try and make a system less complex. A primary way to make a (sub-)system less complex is to isolate activities through thoughtful partitioning into isolated execution environments. There are many tools for isolation and we can choose the one appropriate for our needs.
We might isolate software development and production operation activities into separate AWS accounts. Docker images and containers are a good way to contain variation in delivery pipelines and isolate application processes deployed on the same host. As we partition activities, we may need to formalize the interfaces and data transmitted between applications or business units in order to (actually) gain independence.
We might constrain development team size to the number of people that can be fed by two pizzas to reduce communication overhead within a given team. These teams can then teams to communicate with each other via written designs, reviews with carefully considered feedback, and finally APIs to make decisions locally and also gain independence.
None of this is new, you can read my favorite version of this story in The Mythical Man Month, originally published in 1975.
Thoughtful isolation of activities is one of the primary ways we gain independence. Independence enables concurrency, c.f. Amdah’ls Law. Isolation also provides security and failure bulkheads that contain incidents to that context (aka bulkheads, 12th century ship-building technology) and protects the business units and processes operating alongside them.
As our teams, business units, and processes gain independence and improve failure containment, we:
- decrease pressure on bottlenecks
- deliver changes to customers quicker and in smaller batches
- reduce the number of incidents that cascade across services and teams
I wish you #NoDrama this weekend and Godspeed going fast, safely next week.
Receive #NoDrama articles in your inbox whenever they are published. Reply to Stephen and the QualiMente team when you want to dig deeper into a topic.