<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Good Software Delivery on Andrew Khoury</title><link>https://www.drewkhoury.com/categories/gsd/</link><description>Recent content in Good Software Delivery on Andrew Khoury</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Copyright © 2021, Andrew Khoury; all rights reserved.</copyright><lastBuildDate>Sat, 23 Nov 2019 20:09:40 +0000</lastBuildDate><atom:link href="https://www.drewkhoury.com/categories/gsd/index.xml" rel="self" type="application/rss+xml"/><item><title>How to implement Good Software Delivery in 30 seconds</title><link>https://www.drewkhoury.com/post/gsd/how-to-implement-good-software-delivery-in-30-seconds-72d13ad4a296/</link><pubDate>Thu, 11 Nov 2021 19:22:11 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/how-to-implement-good-software-delivery-in-30-seconds-72d13ad4a296/</guid><description>
&lt;p>Good Software Delivery (GSD) is the term we use for the set of practices that help deliver, well, &lt;em>good&lt;/em> software. There’s a focus on short feedback loops, a consistent developer experience, with more time spent delivering and less time spent on chores like workstation setup and debug.&lt;/p>
&lt;p>For context, I’ve previously written the following blogs that explain a lot of the “why” you’d want to implement the app I’m about to demo:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://medium.com/@drew.khoury/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570">GSD&lt;/a> &amp;amp; &lt;a href="https://medium.com/@drew.khoury/good-software-delivery-trust-and-verify-ced74fa04b39">Trust and Verify&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://medium.com/@drew.khoury/optimizing-for-dx-the-developer-experience-f37fe168642d">Developer Experience&lt;/a> &amp;amp; &lt;a href="https://medium.com/@drew.khoury/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2">3 Musketeers&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="assumptions">Assumptions&lt;/h3>
&lt;p>Before we dive in I want to share my assumptions and expectations. This blog/demo is &lt;strong>aimed at developers&lt;/strong>, who are also familiar with pipelines, local development environments, and tools like docker.&lt;/p>
&lt;p>While you can clone the repo and run the commands quickly (even with zero knowledge or experience in the underlying Golang app), it will take you longer than 30 seconds to read this blog, and even longer to look through the repo’s &lt;a href="https://github.com/contino/gsd-hello-world/blob/master/README.md">README.md&lt;/a> and code in the repo to see what’s happening when you type each command. I’ve tried to add as much detail and context for those that’d like to deep dive, both in this blog and in the repo itself.&lt;/p>
&lt;p>The purpose isn’t to copy and paste what you see here into production, but I do hope I’m able to demonstrate some ways of setting up your repo and local development environment in a way that could save you and your team time for your next product!&lt;/p>
&lt;h3 id="what-well-do-in-thisdemo">What we’ll do in this demo&lt;/h3>
&lt;p>In this post, I wanted to share a hands-on implementation of some of these concepts that you can try for yourself. We’ll be using a hello-world app written in Golang, and by the end of the demo I’m hoping:&lt;/p>
&lt;ul>
&lt;li>You’ll see how wrapping our pipeline in 3 Musketeers can greatly reduce the amount of toil spent getting a new project started (thus the 30 seconds claim for this simple app)&lt;/li>
&lt;li>You’ll see that you can adapt the concepts in this demo to just about any app (Java, .Net etc) — More complex apps may take longer to compile, but no extra effort should be required in terms of desktop setup (toil)&lt;/li>
&lt;li>You’ll be able to extend the logic for other pipeline tasks like testing or security&lt;/li>
&lt;/ul>
&lt;p>If this demo takes you longer than 30 seconds to run this demo, I suspect:&lt;/p>
&lt;ul>
&lt;li>We need to get you a better Internet connection (most of the 30 seconds for me is spent downloading the initial Golang image on an empty docker cache)&lt;/li>
&lt;li>We need to help you with the base requirements that this blog assumes you already have (&lt;code>make&lt;/code>,&lt;code>docker&lt;/code>and &lt;code>docker-compose&lt;/code>)&lt;/li>
&lt;/ul>
&lt;p>In any case, &lt;a href="https://www.linkedin.com/in/drewkhoury/">reach out&lt;/a> on LinkedIn if you have suggestions to improve this demo, or set up a &lt;a href="https://calendly.com/drew-khoury">virtual meeting with me&lt;/a> if you’d like a 1:1 workshop/chat!&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*Yh9siTLfQhrFtMsQoo-OHw.gif" alt="">&lt;/p>
&lt;h3 id="the-demo-build-and-run-a-go-app-in-30seconds">The demo (build and run a Go app in 30 seconds)&lt;/h3>
&lt;blockquote>
&lt;p>&lt;em>At a minimum, you’ll need&lt;/em> &lt;code>_make_&lt;/code>&lt;em>,&lt;/em> &lt;code>_docker_&lt;/code> &lt;em>and&lt;/em> &lt;code>_docker-compose_&lt;/code> &lt;em>on your workstation. See&lt;/em> &lt;a href="https://github.com/contino/gsd-hello-world#requirements">&lt;em>requirements&lt;/em>&lt;/a> &lt;em>for more info or continue on if you’ve already got these.&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;p>Not sure about running this demo on your computer? Never fear! You can use this online environment from the safety of your browser: &lt;a href="https://www.katacoda.com/drewkhoury/courses/good-software-delivery/hello-world-golang">GSD HelloWorld katacoda&lt;/a> (repo will already be cloned in this environment, with required software ready to go)&lt;/p>
&lt;script src="//katacoda.com/embed.js">&lt;/script>
&lt;div id="katacoda-scenario-1"
data-katacoda-id="drewkhoury/courses/good-software-delivery/hello-world-golang"
data-katacoda-color="004d7f"
style="height: 850px; padding-top: 0px;">&lt;/div>
&lt;p>You can see all of my Katacoda courses at &lt;a href="https://www.katacoda.com/drewkhoury/">https://www.katacoda.com/drewkhoury/&lt;/a>.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Clone the repo:&lt;/strong> Start by cloning the &lt;a href="https://github.com/contino/gsd-hello-world">GSD HelloWorld&lt;/a> repo:&lt;/li>
&lt;/ol>
&lt;p>&lt;code>git clone git@github.com:contino/gsd-hello-world.git &amp;amp;&amp;amp; cd gsd-hello-world&lt;/code>&lt;/p>
&lt;p>&lt;strong>2. Build the app:&lt;/strong> Once you have the codebase, build the app using:&lt;/p>
&lt;p>&lt;code>make build&lt;/code>&lt;/p>
&lt;p>This step will create a build artifact (in our case, a docker image) by doing the following:&lt;/p>
&lt;ul>
&lt;li>downloads the appropriate docker image onto your workstation&lt;/li>
&lt;li>copies the source for our app into the image&lt;/li>
&lt;li>builds the application in the image&lt;/li>
&lt;li>configures the port/cmd to be used at runtime&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*UdL5jdUgFWi7fn2UzbUhIQ.png" alt="">&lt;/p>
&lt;p>&lt;strong>3. Run the app:&lt;/strong> Now that you have your build artifact handy, you can run the application locally with:&lt;/p>
&lt;p>&lt;code>make run&lt;/code>&lt;/p>
&lt;p>This step will run/deploy the artifact on your workstation by doing the following:&lt;/p>
&lt;ul>
&lt;li>uses docker to create a container based on the image from the &lt;code>build&lt;/code> step&lt;/li>
&lt;li>exposes port 8080 locally&lt;/li>
&lt;li>the docker image runs the cmd &lt;code>./main&lt;/code> which starts the application for us&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/1200/1*aJcA5Mkd3nh8EFJJ2ZjMNw.png" alt="">&lt;/p>
&lt;p>That’s it, you’re running the GSD HelloWorld application written in Golang and containerized so that it can quickly be deployed in Docker.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/1200/1*9ePbn1rS0h-RprW2M7s-Og.png" alt="">&lt;/p>
&lt;p>&lt;strong>Bonus:&lt;/strong> You can run &lt;code>make test&lt;/code> to execute the test suite (note this may legitimately fail if it doesn’t meet the testing threshold), and&lt;code>make down&lt;/code> to clean up once you’re done.&lt;/p>
&lt;p>The beauty of this model is in its simplicity. We’re using &lt;code>make&lt;/code> as the interface and we’re running all the tasks in containers to ensure consistency. It’s easy enough to peak under the hood to see what either of those tools is doing, and this runs just as easily on your workstation as it does on your CI tool of choice.&lt;/p>
&lt;h3 id="digging-into-thecode">Digging into the code&lt;/h3>
&lt;p>To keep this section brief I’m going to assume some prior knowledge around development, docker, and make.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*-WosNzXumx9wbyGbgpcIlA.png" alt="">&lt;/p>
&lt;blockquote>
&lt;p>What if I want to make my own changes or do something similar in my own repo?&lt;/p>
&lt;/blockquote>
&lt;p>For the curious: Checkout the &lt;code>Makefile&lt;/code>, &lt;code>docker-compose.yml&lt;/code> and &lt;code>Dockerfile&lt;/code> in the repo. These drive our pipeline and app build etc, and while they abstract the complexity away from day-to-day usage, they’re intended to be developer-friendly in terms of understanding exactly what each step is doing.&lt;/p>
&lt;p>&lt;strong>Building the app:&lt;/strong> For example &lt;code>make build&lt;/code> is what builds our application, and in the &lt;code>Makefile&lt;/code> you’ll see it does the following:&lt;/p>
&lt;p>&lt;code>docker build -t ${FULL_TAG} .&lt;/code>&lt;/p>
&lt;p>&lt;strong>Replacing the app:&lt;/strong> If you wanted to replace our Golang application with your own Java application, you’d drop in your own &lt;code>Dockerfile&lt;/code> , replace the &lt;code>/src&lt;/code>, and leave everything else as-is. The beauty is that any developer using the repo still runs &lt;code>make build&lt;/code> and they don’t need to worry about Go vs Java dependencies (or in theory even know that you completely rewrote the application) — it just works™.&lt;/p>
&lt;blockquote>
&lt;p>Note: This repo is a testing ground for GSD practices — simple but powerful ways to supercharge your development.&lt;/p>
&lt;/blockquote>
&lt;p>If you’d like to see what else you can do, have a look at the rest of the &lt;a href="https://github.com/contino/gsd-hello-world">https://github.com/contino/gsd-hello-world&lt;/a> — we have plenty for you to explore.&lt;/p>
&lt;ul>
&lt;li>&lt;code>build&lt;/code>, &lt;code>test&lt;/code> and &lt;code>run&lt;/code> actions are driven by a simple &lt;code>Makefile&lt;/code> — with underlying execution via docker containers&lt;/li>
&lt;li>Build badge in &lt;a href="https://github.com/contino/gsd-hello-world/blob/master/README.md">README.md&lt;/a>&lt;/li>
&lt;li>Repo Visualization in &lt;a href="https://github.com/contino/gsd-hello-world/blob/master/README.md">README.md&lt;/a>&lt;/li>
&lt;li>Sonar quality, reliability, and security badges in &lt;a href="https://github.com/contino/gsd-hello-world/blob/master/README.md">README.md&lt;/a>&lt;/li>
&lt;li>Golang security in-pipeline&lt;/li>
&lt;li>Local tests via &lt;code>make test&lt;/code>&lt;/li>
&lt;li>Artifact storage via Github Packages&lt;/li>
&lt;li>Github Actions&lt;/li>
&lt;li>Deployment to k8s in GCP&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Further reading:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://medium.com/@drew.khoury/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570">GSD&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://medium.com/@drew.khoury/good-software-delivery-trust-and-verify-ced74fa04b39">Trust and Verify&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://medium.com/@drew.khoury/optimizing-for-dx-the-developer-experience-f37fe168642d">Developer Experience&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://medium.com/@drew.khoury/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2">3 Musketeers&lt;/a> and &lt;a href="https://3musketeers.io/">https://3musketeers.io/&lt;/a>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>May your software be good, and your delivery be continuous — drew&lt;/p>
&lt;/blockquote>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/how-to-implement-good-software-delivery-in-30-seconds-72d13ad4a296?source=friends_link&amp;amp;sk=bd2774e9b1cd9f5a4a293aa290cb657e">How to implement Good Software Delivery in 30 seconds&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>3 Musketeers for an epic Developer Experience</title><link>https://www.drewkhoury.com/post/gsd/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2/</link><pubDate>Sat, 28 Aug 2021 14:18:09 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2/</guid><description>
&lt;p>We all want to reduce toil and improve the developer experience (when starting new applications or joining the team). Developers have had to invest significant time in creating production-ready pipelines when building new products and configuring their workstations when joining teams. Their workstations may not run all the same tests as their pipeline and thus they’re left with &lt;a href="https://www.linkedin.com/feed/hashtag/?keywords=slowfeedback&amp;amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A6835918781475246080">#slowfeedback&lt;/a> and an inconsistent experience.&lt;/p>
&lt;p>The larger the organization (ie Enterprise with 10’s-100’s of teams and applications) the worse the problem gets.&lt;/p>
&lt;p>GSD is built on the principle of reusability through a pattern called &lt;a href="https://3musketeers.io/">3 Musketeers&lt;/a> (test, build, and deploy your apps from anywhere, the same way). It gives consistency, control, and confidence to development teams.&lt;/p>
&lt;p>Docker is a key part of this pattern, but the use of &lt;code>docker&lt;/code>, &lt;code>docker-compose&lt;/code> and &lt;code>make&lt;/code> together really unlock the powers of consistency, control and confidence in your application build, test and deploy steps. The &lt;a href="https://3musketeers.io/docs/">3musketeers Docs&lt;/a> have some great examples of these patterns.&lt;/p>
&lt;p>Here's what the most simple usage looks like:&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*O8UwDvze7KXEDKLKgqevcw.jpeg" alt="">&lt;/p>
&lt;p>While the pattern itself is simple, the power (and benefit) comes from the widespread usage across your organization. Here’s what usage might look like:&lt;/p>
&lt;ul>
&lt;li>Agree on a standard interface for all pipeline actions (much like API’s have an agreed interface, all pipelines in the org use the same interface, ie `make build`, `make test`, `make deploy`)&lt;/li>
&lt;li>Keep the interface simple (avoid custom pipeline logic, one simple Makefile calls Compose, the container handles all the logic)&lt;/li>
&lt;li>Create docker containers for each pipeline step, make them stateless, reuse them where it makes sense&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*hdKr28atovmEGFkBRaOIXA.jpeg" alt="">&lt;/p>
&lt;p>&lt;strong>Wins:&lt;/strong> Modern pipelines already support running steps in docker containers. This pattern extends portability across almost any pipeline tool or development workstation and runs the same way in every single environment. Pipeline steps can be tested independently and reused. This pattern makes it easy to go one step further and generate pipelines on-demand based on boilerplate starter templates. Oh yeah, and &lt;a href="https://www.linkedin.com/feed/hashtag/?keywords=fastfeedback&amp;amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A6835918781475246080">#fastfeedback&lt;/a> (we’re talking pre-commit).&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2">3 Musketeers for an epic Developer Experience&lt;/a>.&lt;/p>
&lt;/div>
&lt;p>_&lt;/p></description></item><item><title>Good Software Delivery — Trust and Verify</title><link>https://www.drewkhoury.com/post/gsd/good-software-delivery-trust-and-verify-ced74fa04b39/</link><pubDate>Tue, 24 Aug 2021 13:23:48 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/good-software-delivery-trust-and-verify-ced74fa04b39/</guid><description>
&lt;p>I’ve decided this week is Good Software Delivery week! #goodsoftwaredelivery&lt;/p>
&lt;p>The concept of GSD is something I’ve implemented for clients in one form or another over the years, and you might have done something similar without knowing it.&lt;/p>
&lt;p>I remember one particular collaboration with a small but amazing team. We helped implement a particular flavor of GSD and unlocked value for the business.&lt;/p>
&lt;p>In this diagram, we’re showing that the “path to production” can be codified. By making the process transparent and available to developers, we can show them “what good looks like” on day one.&lt;/p>
&lt;p>The last thing you want as a developer is to find yet another requirement before you can push to production, so using the “&lt;strong>Trust and Verify&lt;/strong>” model helps development move fast. This pattern also removes any manual surprises when trying to deploy to production, thus getting software in the hands of your users quicker!&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*hN2CBgBbRI5Z-yOdc5ZSWA.jpeg" alt="">&lt;/p>
&lt;p>The “Trust and Verify” Pipeline Pattern is part of a wider effort of &lt;a href="https://medium.com/@drew.khoury/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570">Transformation through Good Software Delivery&lt;/a>.&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/good-software-delivery-trust-and-verify-ced74fa04b39">Good Software Delivery — Trust and Verify&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>How Cloud Transformation at Scale can enable Good Software Delivery</title><link>https://www.drewkhoury.com/post/gsd/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570/</link><pubDate>Wed, 04 Aug 2021 22:50:33 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570/</guid><description>
&lt;p>&lt;strong>Why should you transform?&lt;/strong>&lt;/p>
&lt;p>Each person, team and organization is going to be on their own journey to cloud, writing good software and attempting to delight customers, or increase profitability. Finding your why can take some time and deep thinking (and deserves a whole blog to itself).&lt;/p>
&lt;p>For now here are some common why’s for transformation and good software delivery that might also apply to you:&lt;/p>
&lt;ul>
&lt;li>To enable product (development) teams to ship software with less dependencies on other teams/humans&lt;/li>
&lt;li>To speed up delivery&lt;/li>
&lt;li>Allow the business to scale products quickly&lt;/li>
&lt;li>To build new products quickly&lt;/li>
&lt;li>To support the business in getting fast feedback through frequent delivery&lt;/li>
&lt;li>To achieve consistency in infrastructure and software deployment, so we can reduce the risk of issues due to manual changes&lt;/li>
&lt;li>To reduce the manual but repeatable steps close to production (security and compliance checks) that often slow down or delay releases&lt;/li>
&lt;/ul>
&lt;h3 id="a-picture">A picture&lt;/h3>
&lt;p>If a picture tells a thousands words, then I present to you Cloud Transformation at Scale:&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*obz2kdYqD143JskvbI63qA@2x.jpeg" alt="">&lt;/p>
&lt;h3 id="cloud-landingzone">Cloud Landing Zone&lt;/h3>
&lt;p>&lt;strong>In purple&lt;/strong> we have the “Cloud Landing Zone” which is the starting point for key cross-cutting concerns that span the entire organization:&lt;/p>
&lt;ul>
&lt;li>Automated Account-Provisioning for shared Cloud Accounts&lt;/li>
&lt;li>Account Guardrails&lt;/li>
&lt;li>Security &amp;amp; Logging Accounts (SIEM &amp;amp; IAM)&lt;/li>
&lt;li>Networking Foundations&lt;/li>
&lt;li>Shared-Services Account&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*EJiHVj3rI6G7yBcJ2ciaTg.png" alt="">&lt;/p>
&lt;p>This is the foundation of most modernization efforts that depend on the Cloud. Automation of Accounts &amp;amp; Infrastructure unlocks the ability to “move fast” in a way that traditional on-prem data center or operation teams aren’t able to match.&lt;/p>
&lt;p>Most organization on their cloud journey are building or buying some variation of this or started off with some manual steps and a few scripts, and are maturing their operations to look at lot like this as they scale.&lt;/p>
&lt;h3 id="services-for-developers">Services for Developers&lt;/h3>
&lt;p>&lt;strong>In red&lt;/strong> we have the next set of shared services focused on supporting product (and thus development) teams. This includes:&lt;/p>
&lt;ul>
&lt;li>Automated Infrastructure-Provisioning for Shared Services (think shared k8s clusters)&lt;/li>
&lt;li>Common Shared Services (build agents, artifact storage etc)&lt;/li>
&lt;li>&lt;strong>Self-Service&lt;/strong> Cloud Accounts for Product teams (self-service being the key)&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*Hihqnj23GgtE4K7FVNynRA.png" alt="">&lt;/p>
&lt;p>It’s important that developers can manage their own accounts via a self-service mechanism (if you’re an organization with more than 10 developers). This means automated pipelines for infrastructure and account provisioning that have a well thought out developer-experience that make it easy for them to manage their own accounts, securely (ie with Account Guardrails built into the pipelines and Cloud Accounts), and sans human intervention.&lt;/p>
&lt;h3 id="product-teamstrust-andverify">Product Teams — Trust and Verify&lt;/h3>
&lt;p>&lt;strong>In blue&lt;/strong> we have application and app-related infrastructure pipeline(s). Each commit should result in a single artifact built and tested then promoted into production if it passes the automated tests.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*EqfvF7VaSp6iHE-MT4FeMw.png" alt="">&lt;/p>
&lt;p>Developers should have access to reference pipelines that show exactly how to pass all the organizational, security and compliance requirements (which should all be automated within the pipeline). It should be easy to start a new project that can quickly pass through the pipeline into production.&lt;/p>
&lt;p>Developers should have the freedom (&lt;strong>and trust&lt;/strong>) to do whatever they need to do before they reach production. They should have access to every automated security and compliance check that will be run in production so they can quickly assess how ready they are for production &lt;strong>on the very first commit&lt;/strong>.&lt;/p>
&lt;p>The organization should automatically verify every production deployment with the same rules they supplied the developers on day-one, commit-one. No surprises, no extra work to do on production-day.&lt;/p>
&lt;p>This seems like a simple concept, and the name I give it is “&lt;strong>Good Software Delivery&lt;/strong>” because it’s simply how we all should be delivering the software we want to ship.&lt;/p>
&lt;p>&lt;strong>So how does one transform?&lt;/strong> In practice it’s a journey that individuals, teams and organizations need to be prepared to go down. And that’s a completely different rabbit hole I welcome you to explore: &lt;a href="https://faun.pub/one-devops-please-part-1-df7a2787fde8">https://faun.pub/one-devops-please-part-1-df7a2787fde8&lt;/a>&lt;/p>
&lt;p>&lt;strong>Appendix&lt;/strong>&lt;/p>
&lt;p>We could go deeper into each area, but here’s a quick teaser that goes into more detail, in particular for the blue Product Team’s Pipeline(s):&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*v4L4-9CU-9yLSsTZ8Dm1eA@2x.jpeg" alt="">&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570">How Cloud Transformation at Scale can enable Good Software Delivery&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>From DevOps to Good Software Delivery</title><link>https://www.drewkhoury.com/post/gsd/2020-07-21_from-devops-to-good-software-delivery/</link><pubDate>Tue, 21 Jul 2020 19:18:39 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/2020-07-21_from-devops-to-good-software-delivery/</guid><description>
&lt;p>Andrew Khoury &amp;amp; &lt;a href="https://www.linkedin.com/in/rboumechrek/">Ralph Bou Mechrek&lt;/a>: Principal DevOps Engineers @ Contino.&lt;/p>
&lt;h2 id="putting-the-good-in-good-software-delivery">Putting the Good in Good Software Delivery&lt;/h2>
&lt;p>With so much progress in &amp;quot;Agile, DevOps and Automation&amp;quot; writing Good Software in 2020 should be easy - so why are so many companies still struggling? Somewhere along the line we got lost, and never really appreciated the power of understanding business value, value streams and continuous improvement to unlock the true potential of development teams.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/devops-good-software-delivery-2.jpg" alt="">
&lt;img src="https://www.drewkhoury.com/images/devops-good-software-delivery-3.jpg" alt="">
&lt;img src="https://www.drewkhoury.com/images/devops-good-software-delivery-4.jpg" alt="">&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Event on Meetup as &lt;a href="https://www.meetup.com/DevOps-NYC/events/271229083/">From DevOps to Good Software Delivery&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>Why Business Value eats DevOps for breakfast</title><link>https://www.drewkhoury.com/post/gsd/why-business-value-eats-devops-for-breakfast-c1697b59dbbf/</link><pubDate>Sat, 11 Jan 2020 22:18:26 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/why-business-value-eats-devops-for-breakfast-c1697b59dbbf/</guid><description>
&lt;p>It’s 2020 and my new years resolution is to keep a list of words that deserve to be on the naughty list:&lt;/p>
&lt;ul>
&lt;li>DevOps&lt;/li>
&lt;li>Agile&lt;/li>
&lt;li>Requirements&lt;/li>
&lt;/ul>
&lt;p>It’s not that these words are inherently bad — but my industry has twisted, abused and polluted them leaving behind a trail of over-engineered solutions and misguided teams.&lt;/p>
&lt;p>&lt;em>For an in-depth look at “how to do the DevOps” see my post&lt;/em> &lt;a href="https://medium.com/faun/one-devops-please-part-2-57aff9ad8595?source=friends_link&amp;amp;sk=724a4277919230f685431bf589a475d1">&lt;em>One DevOps Please&lt;/em>&lt;/a> &lt;em>which talks about how to do transformation and discusses the unicorns that are “DevOps teams”.&lt;/em>&lt;/p>
&lt;h3 id="first-a-little-warmup">First, a little warm up…&lt;/h3>
&lt;p>I’d like to interrupt this blog to do a warm up exercise. Sorry-not-sorry for anyone I’m about to offend.&lt;/p>
&lt;p>&lt;em>Repeat after me:&lt;/em>&lt;/p>
&lt;blockquote>
&lt;p>I am not a DevOps Engineer&lt;/p>
&lt;/blockquote>
&lt;p>&lt;em>Let’s try another one:&lt;/em>&lt;/p>
&lt;blockquote>
&lt;p>I don’t belong to a DevOps team, because I only work with things that are real&lt;/p>
&lt;/blockquote>
&lt;p>One more:&lt;/p>
&lt;blockquote>
&lt;p>Doing standups every day at 9am doesn’t make me agile&lt;/p>
&lt;/blockquote>
&lt;p>You say these every day along with burpees, planking or whatever your daily routine is. I promise you they’re good for your health.&lt;/p>
&lt;h3 id="whyshould-icare">Why — should I care?&lt;/h3>
&lt;p>You might have heard the following:&lt;/p>
&lt;blockquote>
&lt;p>We’ve always done it this way&lt;/p>
&lt;/blockquote>
&lt;p>If “why” is the super hero of this story, then this phrase is the villain.&lt;/p>
&lt;p>Like many youngsters I spent most of my childhood asking “why”. Ironically I’m sure my parents asked themselves “why” they had to have one more kid as I pestered them with endless questions about science, the universe, or whatever else was on my mind.&lt;/p>
&lt;p>My questions didn’t stop at childhood. I’ve always had an obsessively curious mind and a determination to understand everything inside-out. I did it with helpdesk support, then when I stepped into development, and again when I learnt about cloud and automation.&lt;/p>
&lt;p>Helpdesk me:&lt;/p>
&lt;blockquote>
&lt;p>Why do clients always call with the same MSSQL replication errors&lt;/p>
&lt;/blockquote>
&lt;p>Developer me:&lt;/p>
&lt;blockquote>
&lt;p>Why does my code work differently in production&lt;/p>
&lt;/blockquote>
&lt;p>“DevOps” me:&lt;/p>
&lt;blockquote>
&lt;p>Why doesn’t this DevOps thing solve my client’s problems&lt;/p>
&lt;/blockquote>
&lt;p>An important part of what I do today is about helping foster the same kind of curiosity in others, and helping hone in the skills to make the best use of that curiousity.&lt;/p>
&lt;h3 id="examples-of-times-you-should-ask_why_">Examples of times you should ask — &lt;em>Why&lt;/em>&lt;/h3>
&lt;p>&lt;em>Hint: If you’re not sure — always ask why.&lt;/em>&lt;/p>
&lt;p>You’ve been invited to a meeting, with no description or context, and no idea what the outcome is.&lt;/p>
&lt;p>You’re creating a presentation as a team but you haven’t agreed on the audience, the intention or the outcome.&lt;/p>
&lt;p>You’ve been told to create a kubernetes cluster.&lt;/p>
&lt;p>You’ve been told stand-ups happen at 9am (and they happen to go for 45 minutes, nobody seems to have an understand of what to do for the rest of the day even after the meeting).&lt;/p>
&lt;p>You’ve been asked to join a new project, team or a recruiter has told you they think you’re “perfect for Job X”.&lt;/p>
&lt;p>Your company has decided they’re moving to the Cloud.&lt;/p>
&lt;h3 id="why-we-askwhy">Why we ask why&lt;/h3>
&lt;p>Okay so that heading was very meta. The intention isn’t to challenge or be confrontational. It’s not a power play or a fun party trick.&lt;/p>
&lt;blockquote>
&lt;p>Asking why is about having a shared understanding.&lt;/p>
&lt;/blockquote>
&lt;p>In each of the previous scenarios and indeed in many interactions there’s always an underlying intention. Sometimes it’s just about communicating with each other to gain that shared understanding.&lt;/p>
&lt;p>&lt;strong>Warning: Here be dragons.&lt;/strong> Sometimes (e.g when people aren’t sure why) asking them can lead to defensiveness and well, make them angry. Other’s don’t like being interrupted or challenged. Some people have values and principals that favor hierarchy over creativity and innovation. Asking why isn’t always a happy path to making friends.&lt;/p>
&lt;h3 id="what-does-all-this-have-to-do-with-businessvalue">What does all this have to do with Business Value?&lt;/h3>
&lt;p>Business Value should be well known and clearly articulated in every team of your organization. Everyone should know the why (and how what they’re doing ties back to a very specific business value). Your business should have a way to measure the business value (so you know when you’re done). Everyone should be contributing to the business value metrics, and collaborating to get it done together.&lt;/p>
&lt;p>Assuming you’ve done the hard work of figuring out what your business is trying to do (you understand the business value and have some metrics to measure against) the next part can be fun and rewarding!&lt;/p>
&lt;p>&lt;strong>&lt;em>Why haven’t you talked about DevOps yet?&lt;/em>&lt;/strong>&lt;/p>
&lt;p>Let’s assume (like many companies today) you “develop software as part of an effort to provide products &amp;amp; features, to give you a competitive advantage”.&lt;/p>
&lt;p>Where I think “DevOps” has failed us is the misconception that it’s “half dev” and “half ops” and that problem lies in the very core of DevOps — It’s name! But in reality without software there’s nothing for “Ops” to do.&lt;/p>
&lt;p>&lt;em>Customer&lt;/em> leads to &lt;em>Business Value&lt;/em> leads to &lt;em>Software.&lt;/em> How we build, test, deploy and operate our software is important but we can’t call it DevTestSecQADeployOps so let’s just call it &lt;strong>Good Software Delivery Practices&lt;/strong>.&lt;/p>
&lt;h3 id="good-software-delivery-practices">Good Software Delivery Practices&lt;/h3>
&lt;p>You’ll likely want to incorporate automation and optimizations that allow you to “produce working (aka releasable) software every sprint” and reduce manual steps in favor of automated ones where rework is likely to occur.&lt;/p>
&lt;p>You’ll want to “drive value through the system” and this usually translates into working on new products and features that benefit your customer (hopefully identified by your product team’s close relationship with it’s customers).&lt;/p>
&lt;p>Your product/development team might also decide to operate in some flavor of “you build it, you run it” team which encourages them to build good quality software with resilience and alerting that’s actually helpful.&lt;/p>
&lt;blockquote>
&lt;p>If I know I’m going to be woken up at 3am when things go wrong it’s going to fundamentally affect my choices when designing and operating my software (hint: for the better).&lt;/p>
&lt;/blockquote>
&lt;p>Ultimately when you combine “Business Value” with “Good Software Delivery Practices” every choice you make has clarity. You know “why” you’re doing something and you can trace it back to a specific metric that has a positive impact on your business (and by that I mean improving the lives of your customers in some way).&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*eGikwrKytR1AuiE_nz19Kw.png" alt="">&lt;/p>
&lt;p>So when you go to that next meeting, or pickup your next Jira ticket from the “todo” column ask yourself:&lt;/p>
&lt;blockquote>
&lt;p>Do I know why am I doing this?&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*8bie5-YuC3oCcFoo5m4P2w.jpeg" alt="">&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/why-business-value-eats-devops-for-breakfast-c1697b59dbbf">Business Value eats DevOps for breakfast&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>One DevOps Please — Part 2</title><link>https://www.drewkhoury.com/post/gsd/one-devops-please-part-2-57aff9ad8595/</link><pubDate>Sat, 23 Nov 2019 20:09:40 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/one-devops-please-part-2-57aff9ad8595/</guid><description>
&lt;p>&lt;a href="https://medium.com/faun/one-devops-please-part-1-df7a2787fde8?source=friends_link&amp;amp;sk=fbb7e1bad6473b46ba12820994d5e0a0">“One DevOps Please” — Part 1&lt;/a> recap:&lt;/p>
&lt;ul>
&lt;li>DevOps is part of a learning journey for people&lt;/li>
&lt;li>We can categorize how people learn in 4 Stages&lt;/li>
&lt;li>The hardest part of the learning process can be a willingness to learn&lt;/li>
&lt;li>Companies don’t transform just because we teach a handful of people in isolation (BottomUp)&lt;/li>
&lt;/ul>
&lt;h3 id="organizational-transformationthe-path-todevops">Organizational Transformation — The path to “DevOps”&lt;/h3>
&lt;p>DevOps is an overloaded term these days. A DevOps journey might touch on agile, lean, learning, metrics, business value, pipelines, CI/CD, shifting left, 12 factor apps, Cloud, serverless and kubernetes. It can be exhausting! Why is DevOps so vague and buzzwordy? Because DevOps covers the &lt;strong>people&lt;/strong>, process and technology aspects of modern software development. Let’s expand on our original definition from Part 1:&lt;/p>
&lt;blockquote>
&lt;p>“DevOps is a culture shift or a movement that encourages great communication and collaboration to foster &lt;strong>building better-quality software&lt;/strong> more &lt;strong>quickly&lt;/strong> with more &lt;strong>reliability&lt;/strong>.” — Mike Kavis&lt;/p>
&lt;/blockquote>
&lt;p>But what does transformation look like for an entire company? While teaching somebody how to master automated pipelines could take a few weeks or months, it could take years to see changes that span the entire company. This is because companies are made up of people — each with their own contribution to it’s culture.&lt;/p>
&lt;p>Let’s go on the same learning journey we did for people but through the lens of the entire company this time around. We’re going to leverage tried and trusted models from &lt;a href="https://web.devopstopologies.com/">https://web.devopstopologies.com/&lt;/a> to take you on this journey because they’re such a good representation of what we see in the real world.&lt;/p>
&lt;h4 id="stage-oneeverything-isokay">Stage One — Everything is okay&lt;/h4>
&lt;p>We start off much the same way we did with the people side of things. The company is operating in Silos like “Dev” and “Ops” and thinking:&lt;/p>
&lt;blockquote>
&lt;p>“Everything is fine the way it is”&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*0vBMPZZa2Su93GSr" alt="">&lt;/p>
&lt;h4 id="stage-twoautomate-all-thethings">Stage Two — Automate all the things&lt;/h4>
&lt;blockquote>
&lt;p>“Let’s do something and call it DevOps.”&lt;/p>
&lt;/blockquote>
&lt;p>In the next stage the organization recognizes they need to change so they “try to do DevOps”. This is where we typically see a few anti-patterns form as people try to find the sweet spot for their new team structures and ways of working — this is also more common than you might think. We often spend a lot of time with clients at this stage and it’s by far where the hardest work gets done.&lt;/p>
&lt;p>So let’s explore the swinging pendulum of DevOps Anti-Patterns and appreciate how easy it is to get things wrong — even with the best of intentions.&lt;/p>
&lt;p>&lt;strong>&lt;em>Anti-pattern 1 — The DevOps Silo:&lt;/em>&lt;/strong> This happens when you create a “DevOps” or “Platform” team that’s separate from your development teams or cross-functional teams. You’ll write some great automation scripts but transformation doesn’t happen here.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*CQ4GgVgmRX53CEle" alt="">&lt;/p>
&lt;p>&lt;strong>&lt;em>Anti-pattern 2 — NoOps:&lt;/em>&lt;/strong> While this doesn’t seem like a terrible idea at face value, downplaying the importance of operations within software development can lead to poor choices that wake you up at 3am.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*2yTARKX2CDq8iWiK" alt="">&lt;/p>
&lt;p>&lt;strong>&lt;em>Anti-pattern 3 — AllOps:&lt;/em>&lt;/strong> Isolating developers is not going to lead to better software delivery, and most definitely won’t lead to transformation in your organization (unless you really need to spend 80% of your time building that wondering k8s cluster).&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*eZvMAhupHNx6hp9Q" alt="">&lt;/p>
&lt;p>So at this point you’ve tried a few different changes and had varying success. Hopefully you’ve seen some improvements along the way and you’re ready to take your organization to the next stage.&lt;/p>
&lt;h4 id="stage-threetransformation">Stage Three — Transformation&lt;/h4>
&lt;p>Why don’t we try the “&lt;em>You build it, you run it&lt;/em>” model. Now we’re talking!&lt;/p>
&lt;p>&lt;em>Operations&lt;/em>: Responsible for providing and operating the platform&lt;/p>
&lt;p>&lt;em>Developers&lt;/em>: Responsible for operating their applications, which are built on top of the enterprise guard rails.&lt;/p>
&lt;p>This is where we usually start to see“shifting left” in terms of QA and Security — and that’s a win for everybody.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*d6wxLPtF1b5E2bWI" alt="">&lt;/p>
&lt;p>Here are some key indicators that your organization is maturing in it’s DevOps transformation journey:&lt;/p>
&lt;ul>
&lt;li>Improved collaboration across departments&lt;/li>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Value-stream_mapping">Value stream mapping&lt;/a> exercises are performed to drive process improvement&lt;/li>
&lt;li>A learning organization takes shape&lt;/li>
&lt;li>&lt;a href="https://landing.google.com/sre/sre-book/chapters/postmortem-culture/">Blameless post mortems&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://wa.aws.amazon.com/wat.concept.gameday.en.html">Gamedays&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Lean_software_development">Lean principles&lt;/a> are embraced — Eliminate waste, Amplify learning, Decide as late as possible, Deliver as fast as possible, Empower the team, Build integrity in, Optimize the whole&lt;/li>
&lt;/ul>
&lt;h4 id="stage-fourthe-pursuit-of-continuous-improvement">Stage Four — The pursuit of Continuous Improvement&lt;/h4>
&lt;p>Hopefully by now you’ve realized there’s no perfect Venn diagram to determine the success of your organization. There are however some key indicators you can look at for.&lt;/p>
&lt;p>Building on the success from true DevOps transformation in Stage Three you should now be capable of deploying multiple times a day with increased certainty and minimal risk. This means more automated tests and better quality code. Removing bottlenecks should second nature and everything should start shifting left.&lt;/p>
&lt;p>What we should see now are these new ways of thinking spreading throughout the entire organization, no longer a “DevOps” thing for the I.T department — continuous improvement is happening in all parts of the business. Instead of teams building up towers of influence to protect their corner of the organization people are working together toward a common goal.&lt;/p>
&lt;h3 id="the-recipe-for-successful-transformation">The recipe for successful transformation&lt;/h3>
&lt;p>So far we’ve focused on “how we learn” and touched on “DevOps” but we haven’t really gone into practical advice for how to transform a company. Offering up a personalized plan in a blog post would be foolish but I can definitly set you off on the right path. If you’re a leader trying to kick-start your own company transformation there are some lessons others have learned that will save you years of banging your head against the wall.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Top-Down is half the recipe&lt;/strong> — Your company needs to hear the right things from the leadership group, and people/teams/departments also need to be held accountable if they’re not supporting the target-state laid out in the vision by leadership group (actions always speak louder than words).&lt;/li>
&lt;li>You guessed it &lt;strong>Bottom-Up&lt;/strong> is the second half — Teams on the ground need to be bought-in on the vision and willing to execute. We’re talking about completely changing people’s working lives and the way they think. Start with teams most willing to change, prove what works in small but significant teams and products, and use them as a lighthouse for the rest of the teams.&lt;/li>
&lt;li>Find &lt;strong>change-agents/champions&lt;/strong> — These are people within your organization that are not only willing to change, they’re ready to shout it from the rooftops and inspire those around them.&lt;/li>
&lt;li>Don’t just hire contractors — &lt;strong>find genuine transformation partners&lt;/strong> and learn absolutely everything you can from them.&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Homework for transformation leaders:&lt;/em> Take a deep-dive into how &lt;a href="https://www.forbes.com/sites/stevedenning/2019/03/17/how-mapping-the-agile-transformation-journey-points-the-way-to-continuous-innovation/#7d8b44e44b24">Microsoft, GE and Amazon went on their own transformation journeys&lt;/a> (and explore what went well, and what they could have improved).&lt;/p>
&lt;p>&lt;strong>Transformation Partners&lt;/strong> needs it’s own section…&lt;/p>
&lt;p>I can come in and build you a shiny new k8s cluster, maybe I could take 4 of the brightest developers I know and churn out our own applications faster than most of your existing teams, or embed in your teams and give you a report showing how we increased development by 320%. But if everything goes back to how it was after I leave — you’ve made 0% progress towards transformation (also please stop building k8s clusters because it’s cool — focus on if each of your teams can succinctly explain who their customer is, how they obtain feedback in the shortest loop possible and what business value they’re delivering in each two-week period).&lt;/p>
&lt;p>So what does a transformation partner look like (and am I about to sell you my services?). The only two things I need to tell you about the company I work for is “we charge reassuringly high rates” and we “fall in love with our customer”.&lt;/p>
&lt;ul>
&lt;li>If you can hire the right people to inspire, lead and transform your organization &lt;strong>please do that&lt;/strong>. I assure you I’ll still find a way to put food on the table.&lt;/li>
&lt;li>If you want a power-boost, a consultancy that’s focused on transformation filled with people who’ve done it before should definitely be on your list — Pair them up with your change agents and the willing development teams in your organization, and watch your growth sky rocket (but &lt;strong>be prepared to do to work&lt;/strong>).&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Hiring a consultancy for transformation and asking them to do all the work is like hiring a personal trainer, making them do all of your situps, then wondering why they look great but you still haven’t ‘transformed” — Andrew Khoury&lt;/p>
&lt;/blockquote>
&lt;p>Not keen on a consultancy and feel like you’re company only needs a small nudge in the right direction? Sounds like you want to head-hunt a few key people (when you do that make sure they’re empowered to make the changes you want them to make) and have some key mentors by your side to bounce ideas off and keep you honest.&lt;/p>
&lt;h3 id="summary">Summary&lt;/h3>
&lt;p>Many organizations try to replicate the success of others “doing DevOps” by hiring DevOps consultants or building DevOps teams but they often miss the mark in doing so — the journey is more important than the destination. Let’s recap what we learnt on this journey together:&lt;/p>
&lt;p>&lt;strong>How people learn:&lt;/strong> We explored how people learn and why it’s important to take the time to bring them along the journey. Trust and empathy are key here.&lt;/p>
&lt;p>&lt;strong>Learning from your trusted partners:&lt;/strong> We touched on how valuable it is to have a trusted partner in your corner, with a focus on drawing from their experience and maximizing how much you learn from them. This allows for new ways of thinking to take hold in your organization which ignites the transformation process.&lt;/p>
&lt;p>&lt;strong>Organizational transformation:&lt;/strong> We broke down transformation into four key stages:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Everything is fine&lt;/strong> the way it is&lt;/li>
&lt;li>&lt;strong>Automation&lt;/strong> — but not much direction (this is the hardest stage and where we learn what doesn’t work)&lt;/li>
&lt;li>&lt;strong>Actual transformation&lt;/strong> (this is where the hard work pays off — We see Improved collaboration, Value stream mapping, a learning organization, Blameless post mortems, Gamedays, Lean principles)&lt;/li>
&lt;li>The pursuit of &lt;strong>Continuous Improvement&lt;/strong> (this is where we refine what’s already working)&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Approach transformation with a plan&lt;/strong> — That means Top-Down &amp;amp; Bottom-Up, identifying and empower your change-agents, holding people accountable for transformation and positive behaviors. Don’t forget to find those willing development teams who are ready to transform into cross-functional product teams with with a healthy obsession for their customers &amp;amp; continuous learning and improvement.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*dklQFriHqa2IfjWlUnFaXg.jpeg" alt="">&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/one-devops-please-part-2-57aff9ad8595">One DevOps Please — Part 2&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>One DevOps Please — Part 1</title><link>https://www.drewkhoury.com/post/gsd/one-devops-please-part-1/</link><pubDate>Wed, 16 Oct 2019 05:57:48 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/one-devops-please-part-1/</guid><description>
&lt;p>&lt;em>One DevOps Please — An Enterprise Journey to a DevOpsy-Cloud&lt;/em>&lt;/p>
&lt;blockquote>
&lt;p>“I’ll have one DevOps please.”&lt;/p>
&lt;/blockquote>
&lt;p>Over the last few years large organizations have been coming to consultants like myself to ask for help “Installing DevOps” into their organization. Some of them just want &lt;a href="https://kubernetes.io/">kubernetes&lt;/a> clusters, while others are talking about true transformation.&lt;/p>
&lt;p>In this two-part blog I want to take you on a DevOps transformation journey. I’m going to share with you my recipe for success and give you all the secrets to unlocking true business value through &lt;strong>people&lt;/strong> &lt;em>and&lt;/em> &lt;strong>organizational&lt;/strong> change with a culture of learning at their core.&lt;/p>
&lt;p>Because everyone’s definition of “DevOps” can be slightly different, I’m going to set the scene with a simple definition:&lt;/p>
&lt;blockquote>
&lt;p>“DevOps is really about eliminating (most) Technical, Process and Cultural barriers to between Idea and Execution — using Software.” — Kishore Jalleda&lt;/p>
&lt;/blockquote>
&lt;h3 id="my-devopsjourney">My DevOps Journey&lt;/h3>
&lt;p>Before we get stuck into how people and companies transform the way they work, let me start by sharing the journey I took to get here and how it’s shaped my ways of thinking.&lt;/p>
&lt;p>I started my career by &lt;em>learning&lt;/em>. I strived for technical excellence and perfection through delivery. I poured my heart and soul into my craft which started out as web development but quickly grew into cloud and automation.&lt;/p>
&lt;p>One thing I realized was that I loved teaching people new things. What took longer to learn was how impactful learning and transformation could be to both teams and companies.&lt;/p>
&lt;p>Nowadays my value comes from enabling my teams and coaching my clients. Our team’s success depends on my ability to foster the right skills, remove the noise/blockers and leveraging my previous experience to set us up for success.&lt;/p>
&lt;h3 id="how-peoplelearn">How People Learn&lt;/h3>
&lt;p>I mentioned earlier that some organizations want to “Install the DevOps”. Astute readers will know that DevOps isn’t a piece of software and so hiring consultants to “Do the DevOps for you” won’t give you long term results. The aim for your organization should be to empower your people by giving them opportunities to learn and grow (hint: that’s where the transformation happens).&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*9LZA6bL0bh4dXb2e" alt="">&lt;/p>
&lt;p>So how does learning happen? Can you just send your employees on DevOps training and have them come back 1 week later ready to tackle the world’s problems? Unfortunately it’s not that easy, and here’s why. Learning typically follows the following 4 stages:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Step 1:&lt;/strong> I don’t need to learn &lt;insert thing>. I’m fine just the way I am.&lt;/li>
&lt;li>&lt;strong>Step 2:&lt;/strong> I need to learn &lt;insert thing> — can you help me?&lt;/li>
&lt;li>&lt;strong>Step 3:&lt;/strong> I know a little about &lt;insert thing> now. I can start to contribute with some help and guidance, thanks!&lt;/li>
&lt;li>&lt;strong>Step 4:&lt;/strong> I know &lt;insert thing> now. I can contribute on my own, and I can teach others too now&lt;/li>
&lt;/ul>
&lt;p>This model is known as &lt;a href="https://en.wikipedia.org/wiki/Four_stages_of_competence">The Four Stages of Competence&lt;/a> and it’s a critical part of any “DevOps/Transformation” journey. If you don’t understand how to take people from step one to step two all your efforts will fall on deaf ears. There’s also something called the &lt;a href="https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect">Dunning Kruger effect&lt;/a> — a cognitive bias in which people mistakenly assess their cognitive ability as greater than it is. Psychology can really work against us!&lt;/p>
&lt;p>Now we know that unlocking the very best from your employees involves taking them on a learning journey, and unlocking the mind (steps 1–2).&lt;/p>
&lt;p>The exciting part of the journey (Steps 2–4) involves knowledge transfer, which I’ll touch on briefly. Something I’m really proud of about &lt;a href="https://www.contino.io/">Contino&lt;/a> is how we help people on their personal journey through the &lt;strong>dual-delivery model&lt;/strong>. This might sound fancy, but it’s just leveraging practical experience to pair-program with people. We also tend to spend plenty of time at the whiteboard teaching, but most importantly we establish trust and show empathy by working along side our clients and having shared goals.&lt;/p>
&lt;h3 id="getting-from-step-1-to-step2">Getting from Step 1 to Step 2&lt;/h3>
&lt;p>One of the hardest parts of transformation is getting past the very first step — so it deserves it’s own section.&lt;/p>
&lt;p>Getting people to recognize that they need to learn something is the first hurdle. Getting them to be vulnerable in the workplace and admit that they need help is often the second one.&lt;/p>
&lt;p>Getting individuals to open up and trust you can take time. My job as a consultant is to deliver, but also to fall in love with my customer. I’m not talking about butterflies in my stomach, I’m talking about caring about my team’s success and how happy they are each day. I’m lucky enough to love what I do and have the opportunity to work with teams I genuinely care about.&lt;/p>
&lt;p>But sometimes there are other factors at play and empathy alone isn’t enough. It helps to have a trusted partner along with your for the ride, and the key is to get the most value out of them by leveraging their skills and experience to maximize your learning. Let’s have a look at common pitfalls that may hamper learning with your consulting partner:&lt;/p>
&lt;ul>
&lt;li>Hiring a consultancy and having them do all the work (no learning)&lt;/li>
&lt;li>Hiring a consultancy and telling them what to do (staff augmentation)&lt;/li>
&lt;li>Your team is “too busy” or you aren’t able to grow/hire within your team (you can’t learn if you’re not present)&lt;/li>
&lt;/ul>
&lt;h3 id="person-vs-organizational-transformation">Person vs Organizational Transformation&lt;/h3>
&lt;blockquote>
&lt;p>So can we transform a company one person or team at a time?&lt;/p>
&lt;/blockquote>
&lt;p>Well, sort of. It’s often easy to find inspired people in an organization who can be your champions. Investing your own time in someone can be very rewarding and the results can be seen relatively quickly within your teams or sphere of influence. The other benefit is that investing in people (or your team) doesn’t usually require CEO sign-off.&lt;/p>
&lt;p>While helping people learn new skills and ways of thinking is a great starting point you won’t be able to achieve large scale transformation without a well thought-out (and properly executed) strategy for your organization. You’ll also need buy-in from your leadership.&lt;/p>
&lt;p>So how do we achieve organizational transformation, what does it look like and what are the pitfalls? Find out in &lt;a href="https://medium.com/faun/one-devops-please-part-2-57aff9ad8595">One DevOps Please — Part 2&lt;/a> where we’ll deep dive into what it looks like to transformation a company (ie Installing DevOps company-wide).&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/one-devops-please-part-1-df7a2787fde8">One DevOps Please — Part 1&lt;/a>.&lt;/p>
&lt;/div></description></item></channel></rss>