Habitually Successful Delivery
#devops We usually call it "continuous" but we really want is for deployment to be habitual and, more importantly, successful.
It's that time of the year, when resolutions promising grand changes in our lives are made - and more often than we'd like to admit, broken. Along with the resolutions comes advice on how to make them "stick." In other words, how to make them habitual.
Many folks still cite the old "21 days to form a habit" wisdom that has, in more recent research, been proven to be less than accurate. Turns out it takes longer than that for most people, with only a few actually able to form a habit that quickly. Unless it's something bad for us*. Then it seems to become a habit in under 2 days. Go figure.
One of the goals of devops is really to form good habits around deployment. Advice on forming good habits is still applicable, and whether we're talking about exercise or making your bed every day or provisioning the right services for every application, part of the recipe for success is repetition.
But not just any repetition. Repeating bad or broken processes will result in "bad' habits that we'll have to resolve to remedy in, oh, about a year - right after the calendar turns again.
Forming Good Habits using Context
So we need to make sure that the processes we're trying to make habitual are good ones; that they are not only repeatable, but successful. That means not only ensuring the deployment of an application, but the application services upon which that application depends to ensure its security, performance and reliability are able to meet end-user (and business) expectations. To get there, we need to apply what's called "context-dependent repetition":
"We know that habits are formed through a process called ‘context-dependent repetition’. For example, imagine that, each time you get home each evening, you eat a snack. When you first eat the snack upon getting home, a mental link is formed between the context (getting home) and your response to that context (eating a snack). Each time you subsequently snack in response to getting home, this link strengthens, to the point that getting home comes to prompt you to eat a snack automatically, without giving it much prior thought; a habit has formed." -- Busting the 21 days habit formation myth [emphasis added]
Most advice on forming good habits is about eating or exercising or other personal things. But we can - and should - apply this concept to devops. Context-dependent repetition forces us to examine not just what we're doing, but why it was triggered. When an application is thrown over the wall, it's not enough to say "oh look, there's an application, we should deploy service X" because service X may not be appropriate, or may need a specific configuration to match it to the application's requirements and needs.
For example, if the application is mobile only, you'll want to ensure the services provisioned to support it are enhancing its performance and availability by leveraging mobile-specific optimization and acceleration services. Conversely, if the application is a machine to machine (i.e. it's an API or used to integrate partners / distributors / suppliers) then you're going to want to identify the specific security services - including identity and access control - that need to be in place to ensure the integrity of transactions conducted via that application (or API), but you probably don't need image optimization or caching because, well, machines don't care all that much about images and most M2M traffic doesn't exchange images in the first place.
This is the part of devops that's harder than just writing scripts and automating provisioning of services. It's the part that requires a more intimate relationship with not just the applications but the consumers of those applications. It's understanding the application, not the application protocol. This is where fluency is required to be successful, where context is king and enables devops to not only consistently deploy applications and their requisite services, but to successfully deploy applications that meet (or exceed) the expectations of both consumers and the business.
Remember, it's easier to form a new habit than break an old one.
So don't get into the habit of just automatically provisioning the same old set of services for every application. Make provisioning context-dependent on the application and its consumers to ensure habitually successful deployments.
*That's a personal observation, by the way.