1- < h1 > < a  id ="abstractions " > The "abstractions with infinite flexibility" fallacy </ a > </ h1 > 
1+ < h1 > < a  id ="choosing_responsibility " > Choosing a responsibility model </ a > </ h1 > 
22
33< p > Those looking to introduce platform engineering into existing DevOps teams face three common realities:</ p > 
44
@@ -46,7 +46,7 @@ <h1><a id="abstractions">The "abstractions with infinite flexibility" fallacy</a
4646
4747< p > 
4848    The only safe initial answer to this question is "No", with an aim to reach the point where the answer is "Yes, but...".
49-     You  will never have perfect knowledge of your customer's needs, but  a successful platform team can refine their
49+     While you  will never have perfect knowledge of your customer's needs, a successful platform team can refine their
5050    abstractions over time. But you do need to have some level of early success to earn the time required to refine
5151    your solutions.
5252</ p > 
@@ -55,43 +55,65 @@ <h1><a id="abstractions">The "abstractions with infinite flexibility" fallacy</a
5555    Anyone aiming to provide an opinionated solution faces this same dilemma, but the survivorship bias of every
5656    successful abstraction you see in daily life can make it seem like building abstractions is easy. However, new
5757    platform teams must assume building abstractions is, in fact, quite difficult, and therefor have a plan to support
58-     customers with unique needs or opinions of their own. This is the crux of the responsibility levels  presented in
58+     customers with unique needs or opinions of their own. This is the crux of the responsibilities  presented in
5959    the chapter "Platform Engineering Responsibility Models":
6060</ p > 
6161
6262< ul > 
6363    < li > 
64-         Centralized responsibility artifacts provide highly opinionated solutions exposing a relatively small number of
64+         Centralized responsibility (or "enforced consistency")  artifacts provide highly opinionated solutions exposing a relatively small number of
6565        options to customize the end result. These artifacts favor enforcing opinions over allowing flexibility. The
6666        success of the centralized responsibility model is highly dependent on how closely aligned your abstractions are
6767        to the needs of your customers.
6868    </ li > 
6969    < li > 
70-         Shared responsibility artifacts can be modified by customers, providing them with the ability to customize their
70+         Shared responsibility (or "eventual consistency")  artifacts can be modified by customers, providing them with the ability to customize their
7171        solution while still allowing the platform team to centrally distribute updates. These artifacts are the most
7272        flexible and provide a sliding scale between enforcing opinions and exposing flexibility (with the caveat that increased
7373        customization will typically decrease the ability to centrally distribute updates). The shared responsibility
7474        model assumes abstractions will be imperfect and emphasises a workflow that allows platform teams and their
7575        customers to jointly refine the solution over time.
7676    </ li > 
7777    < li > 
78-         Customer responsibility artifacts provide customers with a base template that they are expected to own and
78+         Customer responsibility (or "eventual inconsistency")  artifacts provide customers with a base template that they are expected to own and
7979        modify to suit their needs. While the templates can provide an initial set of opinions, they are
8080        expected to be heavily modified. The customer responsibility model assumes customers will keep what is useful
8181        and discard what is not.
8282    </ li > 
8383</ ul > 
8484
8585< p > 
86-     An anti-pattern to avoid when starting a new platform team is focusing to  heavily on the centralized responsibility model. This
86+     An anti-pattern to avoid when starting a new platform team is focusing too  heavily on the centralized responsibility model. This
8787    model requires that you build the most accurate abstractions, and starting a new platform team is the time when you
88-     have the least amount of information.
88+     have the least amount of information to do so .
8989</ p > 
9090
9191< p > 
92-     The shared responsibility model requires platform teams to build workflows that facilitate shared development of
93-     artifacts. While tools like Git provide a great foundation for these workflows, platform teams must still invest
94-     time in ensuring artifacts can be tracked and merged over time. The benefit of this model is that it provides a
95-     direct feedback loop between the platform team and your customers and accepts that the abstractions underpinning
96-     your IDPs artifacts will need to evolve over time.
97- </ p > 
92+     Instead, new platform teams should aim to initially offer artifacts under the shared responsibility or customer responsibility models.
93+     In the unlikely event that you managed to get your abstractions just right first time, there is little practical
94+     difference between the three responsibility models, as the resulting solutions will all remain mostly unchanged
95+     from the initial artifact generated by your IDP. However, in the more likely event that your abstractions require
96+     refinement, the shared responsibility model allows you to work with your customers to evolve your abstractions, and
97+     the customer responsibility model allows customers to make whatever changes they need.
98+ </ p > 
99+ 
100+ < div > < img  class ="icon " alt ="Anecdotes Icon " src ="images/anecdote.png "/> </ div > 
101+ 
102+ < p > < i > 
103+     I was part of a team that designed new steps in Octopus to deploy applications to Kubernetes and AWS ECS. One of the
104+     challenges in designing these steps was deciding how to support use cases we hadn't anticipated or might be introduced
105+     by the underlying platforms after our steps were released. After spending some time thinking about all the hooks or
106+     custom scripting we could expose in these steps, we decided that the best course of action was to offer both
107+     highly opinionated steps that supported most common use cases and generic steps that allowed the deployment of
108+     raw YAML for either Kubernetes resources or CloudFormation templates. Importantly, the opinionated steps offered a way
109+     to export the equivalent YAML that they would generate, giving customers a way to jump from the opinionated step
110+     (which aligns with the central responsibility model) to the generic step (which aligns with the customer
111+     responsibility model).
112+ </ i > </ p > 
113+ 
114+ < p > < i > 
115+     This kind of "break glass in emergency" process to move from one responsibility model to another meant we could
116+     offer a path for any customers blocked by a lack of functionality in the opinionated steps, with the understanding
117+     that customers had to take more responsibility for what was now considered bespoke YAML. This is a practical, and
118+     now battle tested, example of the responsibility models in action.
119+ </ i > </ p > 
0 commit comments