<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevOps on Andrew Khoury</title><link>https://www.drewkhoury.com/tags/devops/</link><description>Recent content in DevOps on Andrew Khoury</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Copyright © 2021, Andrew Khoury; all rights reserved.</copyright><lastBuildDate>Thu, 11 Nov 2021 19:22:11 +0000</lastBuildDate><atom:link href="https://www.drewkhoury.com/tags/devops/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>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>Creating a Vision</title><link>https://www.drewkhoury.com/post/creating-a-vision-d004aaad2938/</link><pubDate>Sat, 04 Apr 2020 19:10:37 +0000</pubDate><guid>https://www.drewkhoury.com/post/creating-a-vision-d004aaad2938/</guid><description>
&lt;p>Creating a vision isn’t always an easy thing — but it can be rewarding to see one grow.&lt;/p>
&lt;p>Disclaimer: &lt;em>There’s no “perfect” vision, and there isn’t a perfect method to share that vision with a team.&lt;/em>&lt;/p>
&lt;p>A technique I picked up from my good friend &lt;a href="https://www.linkedin.com/in/rboumechrek/">Ralph Bou Mechrek&lt;/a> is to always be running experiments (in this context, an experiment is simply the testing of a theory in a real-life scenario). I can tell you from first hand experience it’s the fastest way to get feedback!&lt;/p>
&lt;p>So with all that out of the way I want to share with you the experiment of running a vision workshop with your team…&lt;/p>
&lt;h3 id="a-wild-visionappears">A Wild Vision Appears&lt;/h3>
&lt;p>A vision can help guide your team’s decision making and help them hone in on what matters. Once you have a shared understanding of your vision you can more easily create roadmap and plan within your teams. Your vision should also motivate your team and provide clarity and focus while describing the future/target state. For this reason, explaining the “why” behind your vision is crucial.&lt;/p>
&lt;p>If you already have a strong vision you‘re going to have plans you want to share with your team. As a technical leader in consulting I draw from my previous experience and deep understanding of the power of Business Value to form a strong vision I can share with my team.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*MRuE9VDFG53FYCoXs8FXWg.png" alt="">&lt;/p>
&lt;p>It can take weeks, or months to formulate a vision and in this time you might be talking to likeminded people, exploring what matters most, where to focus efforts, what problem you’re trying to solve (and why). Usually you end up with one or more diagrams to help explain your vision — or something you can draw on a whiteboard.&lt;/p>
&lt;p>The other thing you’ll need is passion. You need to believe in your vision before you can share it with others.&lt;/p>
&lt;blockquote>
&lt;p>At the end of the day, you’re telling a story and you’re asking others to join you on a journey.&lt;/p>
&lt;/blockquote>
&lt;h3 id="workshop-part-1seeding-avision">Workshop Part 1 — Seeding a Vision&lt;/h3>
&lt;p>So let’s assume you have a vision and you’re ready to share it with your team. The first part of your workshop should focus on sharing your vision with the team and gauging their response/interest while answering their questions.&lt;/p>
&lt;p>Here are the sorts of things you might include in your diagrams, whiteboard or your passionate speech to the team:&lt;/p>
&lt;ul>
&lt;li>What will the organization/team look like in 6 months&lt;/li>
&lt;li>Teams and streams of work (What they’ll do, Success when…)&lt;/li>
&lt;li>How teams will work together&lt;/li>
&lt;li>What it looks like when we’re done (artifacts, technicals, logical diagrams)&lt;/li>
&lt;li>What else is important? (Training, Metrics, Comms back to the business)&lt;/li>
&lt;/ul>
&lt;p>The key here is to keep things high-level while leaving the slide-ware at home. After sharing what you have your team should be able to articulate which parts resonate with them, and where they have questions, concerns or just other ideas!&lt;/p>
&lt;p>Depending on how familiar your team is with the vision and how involved they’ve been thus fair — there may be lots of “why” questions. &lt;em>Why is this vision necessary? Why is there a big focus on X? Why are teams changing?&lt;/em> It’s important to make sure the “why” has been effectively communicated, and that you’ve explored this with the team.&lt;/p>
&lt;p>Assuming things have gone well, and it sounds like the team is on-board (think lots of head nodding and hearing the same things from multiple people) we can move onto the playback.&lt;/p>
&lt;p>&lt;strong>Tip 1:&lt;/strong> If your team isn’t on-board or there’s more confusion than there is support, now’s the perfect time to either continue that conversation and take notes of the feedback — or break so that the team has time to consume the information and re-group with more of a plan. Don’t be disheartened at this stage — you’ve just got some honest feedback and that’s great!&lt;/p>
&lt;p>&lt;strong>Tip 2:&lt;/strong> If you haven’t got any feedback or engagement from your team at this stage (silent room, or one word responses) either your vision isn’t very exciting, you caught them at the end of a long day, or your team isn’t ready to contribute to your vision. It’s important to make sure you team understands what you expect from them at the start of the workshop to avoid this situation. Again if you need to regroup — now is a good time.&lt;/p>
&lt;h3 id="part-2visionplayback">Part 2 — Vision Playback&lt;/h3>
&lt;p>Okay so let’s assume you’ve shared your vision. You have an energized team that are engaged and contributing to the discussion. What’s next?&lt;/p>
&lt;p>Here’s where the fun happens. What we want to do next is have each team member “play back” the vision in their own words. It’s critical that this part happens so each person in the team demonstrates buy-in, so that they have a voice, and so that you (as a leader) can understand where each of your team members is at in terms of how much they believe-in and buy-into the shared vision.&lt;/p>
&lt;p>One simple way to do this playback is by way of a group role play session. Have one person in the group stand up facing the rest of the team (they’re going to play themselves).&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Tip:&lt;/strong> For your first person pick someone who gets the vision and is confident — to show the rest of the team that this is a safe-place and this exercise is more fun than it is scary&lt;/p>
&lt;/blockquote>
&lt;p>Now have someone else in the group ask them a question (as if they’re the someone outside the group that’s just heard about this new “initiative”). Let’s work through an example.&lt;/p>
&lt;p>Drew: &lt;Stands up>&lt;/p>
&lt;p>Ralph: (playing the role of outsider)&lt;/p>
&lt;ul>
&lt;li>Hi I heard you’re part of this new initiative, can you tell me more?&lt;/li>
&lt;li>I heard you don’t like puns, is that true? (in-joke / icebreaker question)&lt;/li>
&lt;li>What is your role in all of this?&lt;/li>
&lt;li>What’s the most important part of the initiative to you?&lt;/li>
&lt;li>What will we have at the end of it?&lt;/li>
&lt;li>How will this change our company?&lt;/li>
&lt;li>Will my team have to use it? What if we don’t want to?&lt;/li>
&lt;li>I’ve heard your using k8s — isn’t that more trouble than it’s worth?&lt;/li>
&lt;li>What makes you think your group will succeed where others have failed?&lt;/li>
&lt;li>Will it be hard for me to use your new product?&lt;/li>
&lt;li>What do I do if I want to join your initiative?&lt;/li>
&lt;li>I heard this won’t last very long as nobody wants it?&lt;/li>
&lt;/ul>
&lt;p>Those were just sample questions, the key here is to prepare the team for the sorts of questions others might ask, or the questions they may be asking each other. During this session you’re not focusing on right vs wrong questions but you might want to comment on what you observed after each person is done (in particular something you’d like to praise or see more of). Did one of their answers teach us something new? Are we seeing a theme with the answers? Are there some gaps in our vision?&lt;/p>
&lt;p>If you heard some things have could have been answered better — consider holding onto that feedback to see how the next person tackles it. If you hear something that’s way off base you might want to suggest a different response they could have used to set expectations with the team (ie focus less on the negative and make sure you’re providing a solution/alternative response they could use).&lt;/p>
&lt;p>&lt;strong>Tip:&lt;/strong> Try not to prepare the questions ahead of time, you should be able to seed the whole activity with just two confident team members who are already bought-in. Let your team have a bit of fun with it by encouraging a few jokes. This should lead to a more natural conversation which will help your team think on their feet.&lt;/p>
&lt;h3 id="wrap-upa-vision-isborn">Wrap Up — A Vision is Born&lt;/h3>
&lt;p>There are a few key things that go into forming a high-performing team — and sharing your vision is one of them!&lt;/p>
&lt;p>Once your team has a shared vision or goals you’ll notice all sorts of wonderful things:&lt;/p>
&lt;ul>
&lt;li>People are happier&lt;/li>
&lt;li>Planning work is easier&lt;/li>
&lt;li>Your team communicate with each more&lt;/li>
&lt;li>The messaging outside of your initiative is more cohesive&lt;/li>
&lt;li>You’ll create a buzz around your initiative — and others will want to join&lt;/li>
&lt;/ul>
&lt;p>Oh and I guess I forgot to mention…&lt;/p>
&lt;blockquote>
&lt;p>You’ll have a much better chance of achieving your goals and making your vision a reality.&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/creating-a-vision-d004aaad2938">Creating a Vision&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>Driving change and building a high-performance DevOps culture</title><link>https://www.drewkhoury.com/post/driving-change-and-building-a-high-performance-devops-culture-d2e3cf0cccc0/</link><pubDate>Wed, 22 Jan 2020 18:31:01 +0000</pubDate><guid>https://www.drewkhoury.com/post/driving-change-and-building-a-high-performance-devops-culture-d2e3cf0cccc0/</guid><description>
&lt;p>I had the pleasure of listening to Mark Schwartz live at ReInvent 2019 and I was amazed by his wealth of knowledge and insights when it comes to organizational transformation.&lt;/p>
&lt;p>His presentation was &lt;strong>Driving change and building a high-performance DevOps culture&lt;/strong> and it caught my interest!&lt;/p>
&lt;p>&lt;strong>Mark Schwartz:&lt;/strong> Enterprise Strategist, Amazon Web Services.&lt;/p>
&lt;p>If you’re not sure who Mark is, you may have heard of some of his books:&lt;/p>
&lt;ul>
&lt;li>The Art of Business Value&lt;/li>
&lt;li>A Seat at the Table: (&lt;em>IT Leadership in the Age of Agility)&lt;/em>&lt;/li>
&lt;li>War and Peace and IT: (&lt;em>Business Leadership, Technology, and Success in the Digital Age)&lt;/em>&lt;/li>
&lt;/ul>
&lt;p>If you haven’t heard of these books, you now have a new reading list :)&lt;/p>
&lt;h3 id="what-i-learnt-mynotes">What I learnt (My Notes)&lt;/h3>
&lt;ul>
&lt;li>Communication between leaders, middle management (“frozen middle”) and builders&lt;/li>
&lt;li>What is the job of QA?&lt;/li>
&lt;li>How to do skunk works projects (experiment at fast pace with low risk)&lt;/li>
&lt;li>What decisions makers want&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*8Yh_uNdqpeN1eZi43tZdzA.jpeg" alt="">&lt;/p>
&lt;ul>
&lt;li>How to sell &amp;amp; what execs want&lt;/li>
&lt;li>Making better use of data&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*omJHzlEwbaQDCKHoJyIedw.jpeg" alt="">&lt;/p>
&lt;h3 id="driving-change-and-building-a-high-performance-devops-culturedop207">Driving change and building a high-performance DevOps culture (DOP207)&lt;/h3>
&lt;p>You can watch the same presentation I saw live — &lt;a href="https://youtu.be/o9XgEpOj3f0">https://youtu.be/o9XgEpOj3f0&lt;/a>.&lt;/p>
&lt;p>Below is an overview of the slides/content from Mark’s presentation.&lt;/p>
&lt;blockquote>
&lt;p>Transformational change can be driven from anywhere in an organization.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>What’s essential are passion, commitment, vision, and a willingness to take on challenges.&lt;/p>
&lt;/blockquote>
&lt;p>You can categorize transformation in three ways, each with their own pros and cons:&lt;/p>
&lt;ul>
&lt;li>Top-down&lt;/li>
&lt;li>Middle&lt;/li>
&lt;li>Bottom-up&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Leading from the top down&lt;/strong>&lt;/p>
&lt;p>Set a strong vision and goals aligned to it&lt;br>
Remove impediments&lt;br>
Change incentives&lt;br>
Connect and coordinate&lt;br>
Mange relationships up and across&lt;br>
Assume all risk&lt;/p>
&lt;p>&lt;strong>Mitigating the problem of distance&lt;/strong>&lt;/p>
&lt;p>Set up feedback loops&lt;br>
Walk around&lt;br>
Encourage fast escalation … nuclear option&lt;br>
Manage through Big Hairy Audacious Goals&lt;/p>
&lt;p>&lt;strong>Leading from the middle&lt;/strong>&lt;/p>
&lt;p>Do what is possible within scope of influence&lt;br>
Free up resource from prototyping/POCs/reference architectures&lt;br>
Create a skunkworks (don’t be sneaky)&lt;br>
Get small wins constantly&lt;br>
Forge alliances&lt;br>
Sell up and across&lt;/p>
&lt;p>&lt;strong>Leading from the bottom up&lt;/strong>&lt;/p>
&lt;p>Go ahead and make changes&lt;br>
Start small and work incrementally&lt;br>
Use changes to improve your own productivity&lt;br>
Create concrete benefits (e.g., reduce deployment errors)&lt;br>
Lower risk my banking it clear you are invested in POCs&lt;br>
Find collaborators, and share good practices&lt;/p>
&lt;p>&lt;strong>How to sell&lt;/strong>&lt;/p>
&lt;p>Know what you’re asking for&lt;br>
Frame your idea in terms of how they will lead to successes&lt;br>
Provide actual evidence (like a POC)&lt;br>
Mitigate risk for the “buyer”&lt;br>
Think carefully about the language you use&lt;/p>
&lt;p>&lt;strong>What do executives want?&lt;/strong>&lt;/p>
&lt;p>They do not care about sprints, backlogs, microservices, technical debt, or even the cloud.&lt;/p>
&lt;p>They do care about revenues, costs, risks, competitive positioning.&lt;/p>
&lt;p>Today’s big concerns:&lt;/p>
&lt;ul>
&lt;li>Have a growth story (revenue)&lt;/li>
&lt;li>Be future-ready to avoid disruption&lt;/li>
&lt;li>Mange today’s risks (compliance, security, etc)&lt;/li>
&lt;li>Unlock the value in their databases&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Wrap Up&lt;/strong>&lt;/p>
&lt;p>You can transform and you can do it today — stop making excuses. Change can be driven from anywhere in your organization. &lt;em>It always involves influencing other people.&lt;/em>&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="file:///Users/drew/repos/drewkhoury-website/medium/posts/2020-01-22_Driving-change-and-building-a-high-performance-DevOps-culture-d2e3cf0cccc0.html">Driving change and building a high-performance DevOps culture&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>Optimizing for DX — The Developer Experience</title><link>https://www.drewkhoury.com/post/optimizing-for-dx-the-developer-experience-f37fe168642d/</link><pubDate>Sun, 19 Jan 2020 19:18:39 +0000</pubDate><guid>https://www.drewkhoury.com/post/optimizing-for-dx-the-developer-experience-f37fe168642d/</guid><description>
&lt;p>One thing I’m very much obssessed with is something I’m calling the Developer Experience (DX). I’m literally on a global &amp;amp; lifelong mission to optimize DX.&lt;/p>
&lt;p>&lt;em>Hint: Once you’re sold on the benefits of a great DX you can skip ahead to the “3 Steps for success” section&lt;/em>.&lt;/p>
&lt;p>&lt;strong>What is DX and why should you care?&lt;/strong>&lt;/p>
&lt;p>If you’re part of a team/organization that does development then you’re likely going to run into one or more of the following:&lt;/p>
&lt;ul>
&lt;li>Having to keep README’s up to date&lt;/li>
&lt;li>Building &amp;amp; testing your code&lt;/li>
&lt;li>Bringing new people onto the team &amp;amp; showing them how your code works&lt;/li>
&lt;li>Building pipelines &amp;amp; debugging them when they don’t behave&lt;/li>
&lt;li>Fixing your dev environment when it breaks&lt;/li>
&lt;li>Supporting that one person who wants to use &amp;lt;insert whatever OS the rest of the team isn’t using&amp;gt;&lt;/li>
&lt;li>Starting new projects and re-doing the basic building blocks to get started&lt;/li>
&lt;li>Trying to support 10 teams all working on their own software but all needing to be able to work closely together (and not re-invent the wheel)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>My perfect world!&lt;/strong>&lt;/p>
&lt;p>In a perfect world the mundane parts of development would be simple:&lt;/p>
&lt;ul>
&lt;li>Creating a new project should be fast (I shouldn’t worry about any of the ‘boilerplate’ steps that would be the same between projects)&lt;/li>
&lt;li>&lt;em>As a consumer of code:&lt;/em> I shouldn’t have to worry about how code is built, tested &amp;amp; deployed&lt;/li>
&lt;li>&lt;em>As a developer of code:&lt;/em> I should be able to easily update how my code is built, tested &amp;amp; deployed without affecting other developers or build servers wanting to consume my code&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>If I have to talk to a developer, install some special software dependencies, read a confluence page or README.md, figure out how to get things working on my OS or spend more than 5 minutes getting your software built or a new project setup then you’ve failed to streamline the DX.&lt;/p>
&lt;/blockquote>
&lt;h3 id="3-steps-forsuccess">3 Steps for success&lt;/h3>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*o548VIWo3J7WLwRLwkumOw.jpeg" alt="">&lt;/p>
&lt;p>The’s a concept called 3 Musketeers which is really just an agreed pattern for standardization when building software. It’s most common form uses Make as a standard interface to Compose &amp;amp; Docker Containers but you can adapt the concept to suit your needs.&lt;/p>
&lt;p>&lt;a href="https://3musketeers.io/" title="https://3musketeers.io/">&lt;strong>3 Musketeers&lt;/strong>&lt;br>
_Test, build, and deploy your apps from anywhere, the same way. Get Started → Run the same commands no matter where you…_3musketeers.io&lt;/a>&lt;a href="https://3musketeers.io/">&lt;/a>&lt;/p>
&lt;p>The net result is a consistent experience that works the same on Windows, Mac &amp;amp; Linux. It’s portable across development machines, build servers and provides consistency that scales from 1 team to 100 teams.&lt;/p>
&lt;p>If you’re already using containers in your build server steps or as part of your development then you’re one step closer to a utopia of standardization!&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*l3oNIw1tkOSwS6IQOHK46g.jpeg" alt="">&lt;/p>
&lt;p>Containers, and the 3 Musketeers concept can be applied any time you need to simplify a process or some instructions. You can consider it “self-documenting”. A good way to check if you’re giving the best DX is to look at what you need to put in your README to explain your process.&lt;/p>
&lt;p>&lt;strong>No Musketeers&lt;/strong>&lt;/p>
&lt;p>Just &lt;figure it out>…&lt;/p>
&lt;blockquote>
&lt;p>Install node version 4 but definitely not version 3, and I have no idea about version 5. I’ve you’re on Windows then I can’t help you at all. There are also a few dependencies that you’ll need but I can’t remember what they were. The following 12 page document is incomplete and you’re about to waste half a day that you’ll never get back.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>1 Musketeer — Docker&lt;/strong>&lt;/p>
&lt;p>Just run the following docker command:&lt;/p>
&lt;blockquote>
&lt;p>docker run --rm -v foo:bar -v foo:bar -e FOO=BAR container bash -c ’echo hello world’&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>2 Musketeers — Docker &amp;amp; Docker Compose&lt;/strong>&lt;/p>
&lt;p>Just run the following compose command:&lt;/p>
&lt;blockquote>
&lt;p>docker-compose run --rm alpine echo ‘foo’&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>3 Musketeers — Docker, Docker Compose &amp;amp; Make&lt;/strong>&lt;/p>
&lt;p>Just run the following make command:&lt;/p>
&lt;blockquote>
&lt;p>make echo&lt;/p>
&lt;/blockquote>
&lt;p>And it’s as simple as that. Developers typically implement steps like “make build test validate deploy” but you can be as creative as you like and write the steps that make sense for you!&lt;/p>
&lt;h3 id="supercharge-your-development">Supercharge your development&lt;/h3>
&lt;p>Using an agreed pattern like 3 Musketeers is a great way to standardize among your teams. As the number of teams you have in your organization grows so too will the benefits. Humans (and those robot automation scripts) will be able to consume your repos more easily and that’s a great thing.&lt;/p>
&lt;blockquote>
&lt;p>But why stop there?&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>What if we could template what a good project looks like and deliver that to development teams in a self-documenting and self-updating fashion?&lt;/strong>&lt;/p>
&lt;p>The most basic implementation of this would be writing a “hello world” application and asking your development copy/paste the code when starting new projects.&lt;/p>
&lt;p>But there’s a tool called &lt;a href="https://yeoman.io/">https://yeoman.io/&lt;/a> and it provides scaffolding for modern web apps. It’s another simple yet impressive concept executed well. What it provides is a templating mechanism with a really slick user-input feature and enough glue in-between to great that amazing DX we’re all chasing.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*AIrnL4EBoI-duVrvk6MwAQ.jpeg" alt="">&lt;/p>
&lt;p>With yeoman development teams can setup and maintain examples of good software delivery with teams benefiting from the learnings of others. You can create a generator for just about anything, so the only thing left is your imagination!&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*Hn7NJOWEPOC43mPSg6nn8A.png" alt="">&lt;/p>
&lt;p>Yeoman has it’s own generator to help you create your first generator (how meta, right?). The only thing missing for me was a reliable docker container to do some development in. I created a repo with a yeoman development container to make life easier. Hopefully you find it useful and make some steps to improve your own DX!&lt;/p>
&lt;p>&lt;a href="https://github.com/drewkhoury/devyo" title="https://github.com/drewkhoury/devyo">&lt;strong>drewkhoury/devyo&lt;/strong>&lt;br>
_yeoman container - for local development of yeoman generators - drewkhoury/devyo_github.com&lt;/a>&lt;a href="https://github.com/drewkhoury/devyo">&lt;/a>&lt;/p>
&lt;h3 id="want-more">Want more?&lt;/h3>
&lt;p>Presentation (PDF): &lt;a href="https://drewkhoury.files.wordpress.com/2020/04/optimizing-for-dx-in-a-cloud-native-world.pdf" title="Optimizing for DX in a Cloud Native world">Optimizing for DX in a Cloud Native world&lt;/a>&lt;br>
Presentation (Video): &lt;a href="https://www.youtube.com/watch?v=ZYlbNnaoseI">https://www.youtube.com/watch?v=ZYlbNnaoseI&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/optimizing-for-dx-the-developer-experience-f37fe168642d">Optimizing for DX — The Developer Experience&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>Teaching DevOps in one afternoon</title><link>https://www.drewkhoury.com/post/teaching-devops-in-one-afternoon-e85f02ef036b/</link><pubDate>Sun, 05 Jan 2020 18:09:37 +0000</pubDate><guid>https://www.drewkhoury.com/post/teaching-devops-in-one-afternoon-e85f02ef036b/</guid><description>
&lt;p>A non-technical friend of mine approached me wanting to know everything they could about DevOps. He asked if he could have a few hours of my to pick my brain and ask me some questions. If only he know how much joy that brings me.&lt;/p>
&lt;p>So we used &lt;a href="https://medium.com/faun/one-devops-please-part-1-df7a2787fde8">One DevOps Please&lt;/a> as our springboard for the conversation. It worked well enough and we got to spider out into other conversations where he had questions. There were many times I had to pause and say “that’s a conversation for another day” so I wanted to capture some of those topics that we didn’t get to delve into. I figured it would be about the same effort to turn it into a blog post and share it with the world.&lt;/p>
&lt;h3 id="existing-blogs">Existing Blogs&lt;/h3>
&lt;p>It’s no surprise that I already have a lot of blog posts within this theme. Feel free to explore those, or skip ahead to the new stuff!&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.drewkhoury.com/post/new-to-devops-start-here-bee6c54ae2e4/">What is DevOps&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.drewkhoury.com/post/automating-google-app-engine-9599b51f0974/">Build your first Python App using Google App Engine&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.drewkhoury.com/post/learning-ansible-the-quick-way-b2e162680fcd/">Learn Ansible&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.drewkhoury.com/post/things-i-learnt-working-for-an-i-t-consultancy-402bba580361/">Things I learned working for IT Consulting companies&lt;/a> (as it relates to DevOps, Agile, Cloud and team building)&lt;/li>
&lt;li>&lt;a href="https://www.drewkhoury.com/post/a-comprehensive-guide-to-being-agile-a9563c8c9968/">The best guide for Agile that you'll ever find&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.drewkhoury.com/post/the-cost-of-failure-is-education-5efd9f1a1bd0/">Talking about building a Learning culture&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="umbrella-themes">Umbrella Themes&lt;/h3>
&lt;p>For this post I’d like to break down “DevOps” into three main themes. I believe that the “people” side of things greatly influences how we do the technical parts so in some ways it’s one of the most difficult and most import parts to get right.&lt;/p>
&lt;p>&lt;strong>People, Culture &amp;amp; Ways of Working&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Continuously improve (Growth mindset)&lt;/li>
&lt;li>Encourage innovation&lt;/li>
&lt;li>Foster collaboration&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Measurable&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Measuring everything&lt;/li>
&lt;li>Make decisions based on data&lt;/li>
&lt;li>Make data easily available&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Continuous Delivery&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Higher quality software through repeatable, predictable delivery&lt;/li>
&lt;li>Reduction of defects&lt;/li>
&lt;li>Reduce cycle time of ideation (I have an idea) to production (released in prod)&lt;/li>
&lt;/ul>
&lt;h3 id="people">People&lt;/h3>
&lt;p>Customer Focused — app teams or cross-functional teams with your org may be your customer.&lt;/p>
&lt;p>How is your organization structured? &lt;a href="https://web.devopstopologies.com/">https://web.devopstopologies.com/&lt;/a>&lt;/p>
&lt;p>Agile — no need to be overly prescriptive. Understand where “Agile” came from and what they indended to do with it: &lt;a href="https://agilemanifesto.org/principles.html">https://agilemanifesto.org/principles.html&lt;/a>&lt;/p>
&lt;p>Extreme Programming: &lt;a href="https://www.agilealliance.org/glossary/xp/">https://www.agilealliance.org/glossary/xp/&lt;/a>&lt;/p>
&lt;ul>
&lt;li>The Planning Game&lt;/li>
&lt;li>Small Releases&lt;/li>
&lt;li>Metaphor&lt;/li>
&lt;li>Simple Design&lt;/li>
&lt;li>Testing&lt;/li>
&lt;li>Refactoring&lt;/li>
&lt;li>Pair Programming&lt;/li>
&lt;li>Collective Ownership&lt;/li>
&lt;li>Continuous Integration&lt;/li>
&lt;li>40-hour week&lt;/li>
&lt;li>On-site Customer&lt;/li>
&lt;li>Coding Standard&lt;/li>
&lt;li>Sit Together&lt;/li>
&lt;li>Whole Team&lt;/li>
&lt;li>Informative Workspace&lt;/li>
&lt;li>Energized Work&lt;/li>
&lt;li>Pair Programming&lt;/li>
&lt;li>Stories&lt;/li>
&lt;li>Weekly Cycle&lt;/li>
&lt;li>Quarterly Cycle&lt;/li>
&lt;li>Slack&lt;/li>
&lt;li>Ten-Minute Build&lt;/li>
&lt;li>Continuous Integration&lt;/li>
&lt;li>Test-First Programming&lt;/li>
&lt;li>Incremental Design&lt;/li>
&lt;/ul>
&lt;h3 id="measure-everything">Measure Everything&lt;/h3>
&lt;p>Let’s say it together “measure everything”.&lt;/p>
&lt;p>In particular having metrics that are focused on Business Value Drivers are key.&lt;/p>
&lt;p>Metrics should be captured and key metrics displayed on dashboards &amp;amp; TVs so they’re easily accessible.&lt;/p>
&lt;p>Teams should produce APIs to be consumed internally — &lt;a href="https://cachethq.io/">https://cachethq.io/&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://landing.google.com/sre/">Site Reliability Engineering&lt;/a>.&lt;/p>
&lt;p>Particularly for large organizations it can help to understand where each teams is at on their journey. Usually I’ll see teams try and go through some sort of journey of maturity in “DevOps”, “Cloud”, “Agile” or just “Good Software Development Practices”.&lt;/p>
&lt;p>Maturity Assessments:&lt;/p>
&lt;ul>
&lt;li>Agile&lt;/li>
&lt;li>CI/CD&lt;/li>
&lt;li>12 Factor — &lt;a href="https://12factor.net/">https://12factor.net/&lt;/a>&lt;/li>
&lt;li>Data&lt;/li>
&lt;li>6R’s Application Treatment Plan — &lt;a href="https://aws.amazon.com/blogs/enterprise-strategy/6-strategies-for-migrating-applications-to-the-cloud/">https://aws.amazon.com/blogs/enterprise-strategy/6-strategies-for-migrating-applications-to-the-cloud/&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="continuous-delivery">Continuous Delivery&lt;/h3>
&lt;p>This is really the art of getting code from laptop to production, and yes it can be part art, part science and a little bit of magic sometimes.&lt;/p>
&lt;p>&lt;a href="https://continuousdelivery.com/">https://continuousdelivery.com/&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Low risk releases&lt;/strong>. &lt;a href="https://martinfowler.com/bliki/BlueGreenDeployment.html">blue-green deployments&lt;/a>&lt;/li>
&lt;li>&lt;strong>Faster time to market&lt;/strong> automate the build and deployment, environment provisioning, and regression testing processes&lt;/li>
&lt;li>&lt;strong>Higher quality&lt;/strong> automated tools that discover regressions within minutes&lt;/li>
&lt;li>&lt;strong>Lower costs&lt;/strong> investing in build, test, deployment and environment automation, we substantially reduce the cost of making and delivering incremental changes to software by eliminating many of the fixed costs associated with the release process&lt;/li>
&lt;li>&lt;strong>Better products&lt;/strong> work in small batches. This means we can get feedback from users throughout the delivery lifecycle based on working software&lt;/li>
&lt;li>&lt;a href="https://www.infoq.com/presentations/controlled-experiments/">A/B testing&lt;/a> &amp;amp; &lt;a href="https://www.thoughtworks.com/insights/articles/how-implement-hypothesis-driven-development">hypothesis-driven approach to product development&lt;/a>&lt;/li>
&lt;li>&lt;strong>Happier teams&lt;/strong> continuous delivery makes releases less painful and reduces team burnout&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://continuousdelivery.com/implementing/patterns/">https://continuousdelivery.com/implementing/patterns/&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Only build packages once&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Deploy the same way to every environment&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Smoke test your deployments&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Keep your environments similar&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Trunk Based Development&lt;/strong>&lt;/p>
&lt;p>A branching model to aspire to (or at least understand and learn from): &lt;a href="https://trunkbaseddevelopment.com/5-min-overview/">https://trunkbaseddevelopment.com/&lt;/a>&lt;/p>
&lt;ul>
&lt;li>short iterations&lt;/li>
&lt;li>less than few day story size&lt;/li>
&lt;li>short build times&lt;/li>
&lt;li>feature flags&lt;/li>
&lt;li>humans and CI use same scripts&lt;/li>
&lt;li>Compile &amp;gt; Unit Test &amp;gt; Integration &amp;gt; Functional&lt;/li>
&lt;li>Quick build notifications&lt;/li>
&lt;li>Shift Left — Undesirable to find out about breakages AFTER the commit&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Containers&lt;/strong>&lt;/p>
&lt;p>Containers are an amazing innovation that have many every day uses. They can be used locally, in your build servers, for development and production deployments. You can also use them to test new services and keep your laptop free of clutter!&lt;/p>
&lt;p>How to build, test and deploy modern code in a repeatable fashion: &lt;a href="https://3musketeers.io/">https://3musketeers.io/&lt;/a>&lt;/p>
&lt;p>Containers 101…&lt;/p>
&lt;p>&lt;a href="https://en.m.wikipedia.org/wiki/Kubernetes">https://en.m.wikipedia.org/wiki/Kubernetes&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://en.m.wikipedia.org/wiki/Docker_%28software%29">https://en.m.wikipedia.org/wiki/Docker_(software)&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/">https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://danlebrero.com/2018/07/09/kubernetes-explained-in-pictures-the-theme-park-analogy/">https://danlebrero.com/2018/07/09/kubernetes-explained-in-pictures-the-theme-park-analogy/&lt;/a>&lt;/p>
&lt;p>&lt;strong>(Don’t) Build it yourself&lt;/strong>&lt;/p>
&lt;p>The phrase “undifferentiated heavy lifting”: &lt;a href="https://aws.amazon.com/blogs/aws/we_build_muck_s/">https://aws.amazon.com/blogs/aws/we_build_muck_s/&lt;/a>&lt;/p>
&lt;p>When it comes to investing time you should consider the implications of “building and managing infrastrcuture yourself” vs “letting specalisits do the heavy lifting”. This might mean different things for different people, but here are some examples:&lt;/p>
&lt;ul>
&lt;li>Configuring AWS Accounts &amp;amp; setting up guardrails: &lt;a href="https://aws.amazon.com/controltower/features/">https://aws.amazon.com/controltower/features/&lt;/a>&lt;/li>
&lt;li>The quickest and best way (imo) to run k8s: &lt;a href="https://cloud.google.com/kubernetes-engine/">https://cloud.google.com/kubernetes-engine/&lt;/a>&lt;/li>
&lt;li>Do you even need a k8s cluster? Sometimes you just need someone to host your app for you: &lt;a href="https://cloud.google.com/appengine/">https://cloud.google.com/appengine/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>And that’s (a little more than) one afternoon teaching DevOps.&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/teaching-devops-in-one-afternoon-e85f02ef036b">Teaching DevOps in one afternoon&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>New to DevOps? Start here.</title><link>https://www.drewkhoury.com/post/new-to-devops-start-here-bee6c54ae2e4/</link><pubDate>Mon, 18 Nov 2019 13:51:01 +0000</pubDate><guid>https://www.drewkhoury.com/post/new-to-devops-start-here-bee6c54ae2e4/</guid><description>
&lt;p>Some time after I got my first job “in DevOps” (I was one of those shiny new DevOps Engineers and really excited about the role) I distinctly remember a frank conversation with the Head of Delivery…&lt;/p>
&lt;blockquote>
&lt;p>I turned to him and said “You know DevOps isn’t real, right?” to which he replied “I know” (we were talking about job titles) and in that moment I knew we’d get along just fine.&lt;/p>
&lt;/blockquote>
&lt;p>We went on to have an interesting discussion about what DevOps meant to each of us. He explained that our clients, and the industry were looking for “DevOps Engineers” and the term was more a marketing term (it was much easier than the more accurate title combo I was thinking of for my role “CICD Build Automation Engineer / Cloud Engineer / Agile Champion / Infrastructure Developer / SRE / Application Integration Engineer / DevOps Evangelist / Automation Architect / Security Engineer / Ninja”).&lt;/p>
&lt;p>Any developer who works in a team that practices DevOps is a “DevOps” engineer. DevOps isn’t a position, but instead a philosophy that must be adopted by the whole organisation in order to solve problems together.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*QjLl4C-V5VuvRtja" alt="">&lt;/p>
&lt;p>Today we have DevSecOps, and all sort of buzz words to describe different ways of thinking of DevOps. In reality DevOps is rooted in the continuous improvement of the development lifecycle and that’s why it’s so important to understand the &lt;em>dev&lt;/em> component.&lt;/p>
&lt;blockquote>
&lt;p>DevOps (a &lt;a href="https://en.wikipedia.org/wiki/Clipped_compound">clipped compound&lt;/a> of “development” and “operations”) is a software development &lt;a href="https://en.wikipedia.org/wiki/Methodology">methodology&lt;/a> that combines &lt;a href="https://en.wikipedia.org/wiki/Software_development">software development&lt;/a> ( &lt;em>Dev&lt;/em>) with &lt;a href="https://en.wikipedia.org/wiki/Information_technology_operations">information technology operations&lt;/a> ( &lt;em>Ops&lt;/em>). The goal of DevOps is to shorten the &lt;a href="https://en.wikipedia.org/wiki/Systems_development_life_cycle">systems development life cycle&lt;/a> while delivering features, fixes, and updates frequently in close alignment with business objectives. &lt;a href="https://en.wikipedia.org/wiki/DevOps#cite_note-1">[1]&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;h3 id="devops-resources">DevOps Resources&lt;/h3>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*eN0rLZMxP4krQVYv" alt="">&lt;/p>
&lt;p>There are so many DevOps resources for those getting started, and I like to keep an up to date starter guide here: &lt;a href="https://github.com/drewkhoury/devops-101">https://github.com/drewkhoury/devops-101&lt;/a>&lt;/p>
&lt;p>While everyone has their own definition and way of thinking of DevOps I’ve includes a few of my favourites:&lt;/p>
&lt;h3 id="definitions">Definitions&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/DevOps">DevOps defined by wikipedia&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://aws.amazon.com/devops/what-is-devops/">DevOps defined by AWS&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.atlassian.com/devops">DevOps defined by Atlassian&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://www.scaledagileframework.com/devops/">DevOps defined by SAFe&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="frameworks">Frameworks&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="http://www.devopsbookmarks.com/">DevOps Bookmarks&lt;/a> — There are new awesome tools and frameworks being released everyday. This is an open and transparent attempt at aggregating all those.&lt;/li>
&lt;/ul>
&lt;h3 id="lists">Lists&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/AcalephStorage/awesome-devops">AcalephStorage :: Awesome DevOps&lt;/a> — A curated list of resources for Devops&lt;/li>
&lt;li>&lt;a href="https://github.com/joubertredrat/awesome-devops">joubertredrat :: Awesome DevOps&lt;/a> — This is the awesome list with all open source and free applications that you can use in your management.&lt;/li>
&lt;li>&lt;a href="https://github.com/kahun/awesome-sysadmin">Awesome SysAdmin&lt;/a> — A curated list of amazingly awesome open source sysadmin resources inspired by Awesome PHP.&lt;/li>
&lt;/ul>
&lt;h3 id="misc">Misc&lt;/h3>
&lt;ul>
&lt;li>Google’s SRE books: &lt;a href="https://landing.google.com/sre/books/">https://landing.google.com/sre/books/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/omidfi/how-to-annoy-a-web-developer/blob/master/README.md">How to annoy a web developer&lt;/a> — A list of tips on How to annoy web developers, hopefully for knowing and avoiding them.&lt;/li>
&lt;li>&lt;a href="http://web.devopstopologies.com/">DevOps Types and Anti-Types&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.atlassian.com/blog/devops/how-to-choose-devops-tools">Atlassian Toolchain&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/showcases/devops-tools">GitHub DevOps Tools Showcase&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://nvie.com/posts/a-successful-git-branching-model/">gitflow&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://devopschecklist.com/">DevOps Checklist&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://medium.com/devopslinks/the-15-point-devops-check-list-8cd2afb4a448">15 Point Checklist&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://hackernoon.com/the-must-know-checklist-for-devops-system-reliability-engineers-f74c1cbf259d">The Must Know Checklist For DevOps &amp;amp; Site Reliability Engineers&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://xebialabs.com/periodic-table-of-devops-tools/">xebialabs periodic-table-of-devops-tools&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://xebialabs.com/solutions/devops/">xebialabs — release and deployment pipeline&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://blog.ycombinator.com/why-the-best-give-away/">Why the Best Companies and Developers Give Away Almost Everything They Do&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://12factor.net/">The twelve-factor App&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Originally posted on:&lt;/em> &lt;a href="https://www.linkedin.com/pulse/new-devops-start-here-andrew-khoury/">&lt;em>https://www.linkedin.com/pulse/new-devops-start-here-andrew-khoury/&lt;/em>&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/new-to-devops-start-here-bee6c54ae2e4">New to DevOps? Start here.&lt;/a> and LinkedIn as &lt;a href="https://www.linkedin.com/pulse/new-devops-start-here-andrew-khoury/">New to DevOps? Start here.&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><item><title>Automating Google App Engine</title><link>https://www.drewkhoury.com/post/automating-google-app-engine-9599b51f0974/</link><pubDate>Mon, 14 Oct 2019 13:46:01 +0000</pubDate><guid>https://www.drewkhoury.com/post/automating-google-app-engine-9599b51f0974/</guid><description>
&lt;p>Google App Engine is &lt;a href="https://www.linkedin.com/pulse/how-do-devops-10-minutes-less-andrew-khoury/">a pretty amazing service&lt;/a>. You write code, and Google will make sure it runs, and scales well. This service was &lt;strong>available way back in 2008&lt;/strong>, well before everyone was getting excited over lambdas and serverless.&lt;/p>
&lt;p>In my opinion, AppEngine is one of the most underrated services I’ve seen. It’s beautifully simple, and it has planet-level scaling (Google words). You don’t have to configure load balancers, tweak an OS or install/configure a Runtime. The focus is on optimizing for the developer experience, and having your spend more time writing code.&lt;/p>
&lt;p>Even though Google makes it easy to get started with App Engine I wanted to reduce the steps even further. I’ve created a GAE demo that offers a local development and deployment environment via docker containers and simple to use commands.&lt;/p>
&lt;h3 id="google-app-enginedemo">Google App Engine Demo&lt;/h3>
&lt;p>&lt;strong>Local Development&lt;/strong>&lt;/p>
&lt;p>Creating a local development environment can be done with one command:&lt;/p>
&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="ln">1&lt;/span>~/code/gae-demo $ docker-compose up local
&lt;/code>&lt;/pre>&lt;/div>&lt;p>This is what the console output should look like:&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*3xPuZNa4CdEUxIPqDdYnGw.png" alt="">&lt;/p>
&lt;p>This is what the app looks running on your machine:&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*nWX-jfZeUS7f4ctvgo2HZw.png" alt="">&lt;/p>
&lt;p>The demo app comes with instructions and sample code that adds entries to a local datastore.&lt;/p>
&lt;p>One of the amazing features of Google App Engine is the local admin environment that offers similar functionality to the online admin console from Google. The demo comes with everything pre-configured and ready to use.&lt;/p>
&lt;p>&lt;em>Local Datastore Viewer:&lt;/em>&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*Hah8fDHL9W5LbpzgUG9MFw.png" alt="">&lt;/p>
&lt;p>&lt;em>Interactive Console:&lt;/em>&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*Xd7M9eglzNFVjtEDQSN1IA.png" alt="">&lt;/p>
&lt;p>Not bad for one line of code!&lt;/p>
&lt;p>&lt;strong>Deploying&lt;/strong>&lt;/p>
&lt;p>Google has a wonderful feature called “ &lt;a href="https://cloud.google.com/resource-manager/docs/creating-managing-projects">Projects&lt;/a>” that allow you to group related resources to make them easier to manage. When you run the `new-deploy` command the demo will create a new project and related application, then deploy it for you.&lt;/p>
&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="ln">1&lt;/span>~/code/gae-demo $ docker-compose up new-deploy
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Deploying updates to your application is quick and easy too. First specify your project id from the previous step, then run &lt;code>re-deploy&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="ln">1&lt;/span>~/code/gae-demo $ export CLOUDSDK\_CORE\_PROJECT=devops-demo-xxx ~/code/gae-demo $ docker-compose up re-deploy
&lt;/code>&lt;/pre>&lt;/div>&lt;p>That’s it, why are you still here? You could be spending this time deploying your new application.&lt;/p>
&lt;p>You can find the full demo and instructions here: &lt;a href="https://github.com/drewkhoury/gae-demo">https://github.com/drewkhoury/gae-demo&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/automating-google-app-engine-9599b51f0974">Automating Google App Engine&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>Learning Ansible — The quick way</title><link>https://www.drewkhoury.com/post/learning-ansible-the-quick-way-b2e162680fcd/</link><pubDate>Thu, 10 Oct 2019 13:46:02 +0000</pubDate><guid>https://www.drewkhoury.com/post/learning-ansible-the-quick-way-b2e162680fcd/</guid><description>
&lt;p>Are you strapped for time but wanting to learn Ansible? I’ve got your back! I’ve been using Ansible for several years now, and was first introduced to it as a replacement to Puppet. It didn’t take me long to learn, but it what really amazed me what how much more it could do!&lt;/p>
&lt;p>I’ve used Ansible to generate Cloudformation templates, perform Websphere deployments, collect information on multiple hosts and do simple configuration management for hosts as well as testing software.&lt;/p>
&lt;p>Some of my favourite things about Ansible are how easy it is to get started, the ability to set and override variables in multiple locations, templating, looping and the simple use of tags to target subsets of tasks.&lt;/p>
&lt;p>Looping, templates and variables in Ansible:&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*ad4dWK0Rgn9zcmSS" alt="">&lt;/p>
&lt;p>Ansible does a great job of system level tasks that you’d normally perform in the shell or by scripts (think file manipulation, installing software, restarting services) but it can also communicate with multiple hosts, and has modules for Cloud providers too. It’s simplicity is where it really shines.&lt;/p>
&lt;p>Head over to &lt;a href="https://docs.google.com/presentation/d/1jIsDHf-5M1w_KWAyU_R5Uv-iHwvRntUb4cC3yBW3_ME/">https://docs.google.com/presentation/d/1jIsDHf-5M1w_KWAyU_R5Uv-iHwvRntUb4cC3yBW3_ME/&lt;/a> to learn more about some of my favourite Ansible constructs and how you can use and how you can use Ansible to automate some of your daily tasks.&lt;/p>
&lt;h3 id="ansible-links">Ansible Links&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="http://docs.ansible.com/ansible/latest/index.html">http://docs.ansible.com/ansible/latest/index.html&lt;/a> — Ansible Documentation&lt;/li>
&lt;li>&lt;a href="http://docs.ansible.com/ansible/latest/modules_by_category.html">http://docs.ansible.com/ansible/latest/modules_by_category.html&lt;/a> — Module categories&lt;/li>
&lt;li>&lt;a href="http://docs.ansible.com/ansible/latest/list_of_all_modules.html">http://docs.ansible.com/ansible/latest/list_of_all_modules.html&lt;/a> — All Ansible Modules&lt;/li>
&lt;li>&lt;a href="http://docs.ansible.com/ansible/latest/YAMLSyntax.html">http://docs.ansible.com/ansible/latest/YAMLSyntax.html&lt;/a> — YAML Syntax … read this a few times, it’ll come in handy&lt;/li>
&lt;li>&lt;a href="http://docs.ansible.com/ansible/latest/playbooks.html">http://docs.ansible.com/ansible/latest/playbooks.html&lt;/a> — Ansible Playbooks&lt;/li>
&lt;li>&lt;a href="https://zaiste.net/posts/ansible_101/">https://zaiste.net/posts/ansible_101/&lt;/a> — A nice 5 minute hands-on intro to Ansible&lt;/li>
&lt;li>&lt;a href="https://gist.github.com/andreicristianpetcu/b892338de279af9dac067891579cad7d">https://gist.github.com/andreicristianpetcu/b892338de279af9dac067891579cad7d&lt;/a> — Ansible cheatsheet, a great reference point for just about any bit of Ansible code you’d need to write&lt;/li>
&lt;li>&lt;a href="https://www.ansible.com/blog/ansible-best-practices-essentials">https://www.ansible.com/blog/ansible-best-practices-essentials&lt;/a> — Best practices&lt;/li>
&lt;li>&lt;a href="https://serversforhackers.com/c/an-ansible2-tutorial">https://serversforhackers.com/c/an-ansible2-tutorial&lt;/a> — Detailed Ansible tutorial with explaination and code.&lt;/li>
&lt;li>&lt;a href="https://gist.github.com/phred/2897937">https://gist.github.com/phred/2897937&lt;/a> — pedantically commented playbook&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Originally posted on&lt;/em> &lt;a href="https://www.linkedin.com/pulse/learning-ansible-quick-way-andrew-khoury/">&lt;em>https://www.linkedin.com/pulse/learning-ansible-quick-way-andrew-khoury/&lt;/em>&lt;/a>&lt;/p>
&lt;p>Bonus Points:&lt;/p>
&lt;blockquote>
&lt;p>If you liked learning about Ansible I have a git repo full of DevOpsy learnings &lt;a href="https://github.com/drewkhoury/devops-101">https://github.com/drewkhoury/devops-101&lt;/a>&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/learning-ansible-the-quick-way-b2e162680fcd">Learning Ansible — The quick way&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>DevOps in 10 minutes with Google App Engine</title><link>https://www.drewkhoury.com/post/devops-in-10-minutes-with-google-app-engine-d98638bd0699/</link><pubDate>Wed, 09 Oct 2019 13:16:01 +0000</pubDate><guid>https://www.drewkhoury.com/post/devops-in-10-minutes-with-google-app-engine-d98638bd0699/</guid><description>
&lt;p>Okay, now that I have your attention let’s talk about Google App Engine for a minute and how you can achieve your DevOps dreams with a fully managed serverless application platform.&lt;/p>
&lt;h3 id="app-enginehistory">App Engine history&lt;/h3>
&lt;p>&lt;a href="https://cloud.google.com/appengine/">App Engine&lt;/a> launched 10 years ago as a tool to run web applications on Google infrastructure. App Engine only supported Python at the time, but the service offered dynamic webserving, persistent storage (Datastore), and APIs for authenticating users and sending email.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*dn60QDAaQTjBob9I" alt="">&lt;/p>
&lt;p>Fast forward to 2019 and the App Engine offering has matured. The standard environment is optimised for rapid scaling (sudden and extreme spikes of traffic) or apps intended to run for free or at very low cost.&lt;/p>
&lt;ul>
&lt;li>Python 2.7, Python 3.7&lt;/li>
&lt;li>Java 8&lt;/li>
&lt;li>Node.js 8, and Node.js 10 (beta)&lt;/li>
&lt;li>PHP 5.5, and PHP 7.2 (beta)&lt;/li>
&lt;li>Go 1.9, and Go 1.11 (beta)&lt;/li>
&lt;/ul>
&lt;p>If you need something else, the flexible environment offers Python, Java, Node.js, Go, Ruby, PHP, or .NET, or any other software that you can run in a container.&lt;/p>
&lt;p>But it’s more than just a code runtime engine. Google markets App Engine as having zero-config deployments and zero server management, allowing you to focus on writing code (that sounds like my kind of DevOps). App Engine offers Monitoring, Logging &amp;amp; Diagnostics, Traffic Splitting and Application Versioning (those features you normally hear about when talking about “DevOps” or CI/CD).&lt;/p>
&lt;h3 id="getting-started-with-appengine">Getting started with App Engine&lt;/h3>
&lt;p>Assuming you already have a Google Cloud account, creating a deploying your first App Engine App consists three easy steps:&lt;/p>
&lt;ul>
&lt;li>Create a Project to store all your related resources&lt;/li>
&lt;li>Create an App&lt;/li>
&lt;li>Deploy your App&lt;/li>
&lt;/ul>
&lt;p>gcloud projects create project-demo-xxx \&lt;br>
&lt;em>--name=&amp;quot;project demo xxx&amp;quot; --labels=type=test&lt;/em>&lt;/p>
&lt;p>gcloud app create &lt;em>--region=australia-southeast1 \&lt;/em>&lt;br>
&lt;em>--project project-demo-xxx&lt;/em>&lt;/p>
&lt;p>gcloud app deploy &lt;em>--project project-demo-xxx&lt;/em>&lt;/p>
&lt;p>Normally, navigating a new Cloud vendor, a new product, and new concepts and troubleshooting demo code can be time consuming and error prone. I know, I’ve gone through this process myself.&lt;/p>
&lt;p>If you’re interested in giving App Engine a go (and I encourage you to do so, because it’s a fantastic example of what an integrated serverless platform should look like) you can head over to &lt;a href="https://github.com/drewkhoury/gae-demo">https://github.com/drewkhoury/gae-demo&lt;/a> and try it yourself. I’ve streamlined the whole process to try and get you up and running as quickly as possible:&lt;/p>
&lt;ul>
&lt;li>How to authenticate with Google via the command-line&lt;/li>
&lt;li>Taking advantage of the local environment Google provides (dev_appserver.py)&lt;/li>
&lt;li>Sample Python App that’s optimised for App Engine&lt;/li>
&lt;li>Docker containers / Docker compose for consistency (local development and deployment)&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*XL_nBGQDjt7SSZuK" alt="">&lt;/p>
&lt;p>Let me know what you think of Google App Engine after you give it a go!&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on:&lt;/p>
&lt;ul>
&lt;li>medium as &lt;a href="https://medium.com/@drew.khoury/devops-in-10-minutes-with-google-app-engine-d98638bd0699">DevOps in 10 minutes with Google App Engine&lt;/a>&lt;/li>
&lt;li>and LinkedIn as &lt;a href="https://www.linkedin.com/pulse/how-do-devops-10-minutes-less-andrew-khoury/">DevOps in 10 minutes with Google App Engine&lt;/a>&lt;/li>
&lt;/ul>
&lt;/div></description></item><item><title>Things I learnt working for an I.T Consultancy</title><link>https://www.drewkhoury.com/post/things-i-learnt-working-for-an-i-t-consultancy-402bba580361/</link><pubDate>Sun, 06 Oct 2019 21:05:20 +0000</pubDate><guid>https://www.drewkhoury.com/post/things-i-learnt-working-for-an-i-t-consultancy-402bba580361/</guid><description>
&lt;p>&lt;em>This was an old blog post draft that I planned on cleaning up. In the end I decided to post it as the raw stream of thoughts that it is. Each one of these thoughts could be its own blog post.&lt;/em>&lt;/p>
&lt;p>&lt;strong>Things I learnt working for an I.T consultancy, doing the DevOps, building all the platforms, leading teams, and annoying a bunch of people along the way.&lt;/strong>&lt;/p>
&lt;p>aka&lt;/p>
&lt;p>&lt;strong>Ramblings from a “DevOps Engineer”.&lt;/strong>&lt;/p>
&lt;p>Resource Augmentation vs Outcome based work (the ongoing struggle of chasing high-value outcomes for clients).&lt;/p>
&lt;p>The art of getting people to realize stuff (you might know what the “right” answer is for a given technology choice or next step for a project, but how do you bring people along for the journey and give them a chance to input their own ideas).&lt;/p>
&lt;p>Hiring, promotions and bonus/incentives.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>360 feedback&lt;/strong> — getting honest feedback, and getting it much more often that every 12 months&lt;/li>
&lt;li>&lt;strong>how your bonus is allocated&lt;/strong> — and why the worst time to talk about your bonus is when it’s being handed out&lt;/li>
&lt;li>&lt;strong>Why/Why/How you should negotiate $&lt;/strong> — know your value, understand the ‘buckets’ of money in companies and the incentives from the companies perspective. Most important understand what your drivers are and what will make you happy. Is is just money, or do you have other wants?&lt;/li>
&lt;/ul>
&lt;p>Early in my career I used to think that process was the key, and I overlooked people and my teams.&lt;/p>
&lt;p>&lt;strong>Agile gone bad.&lt;/strong> How some so amazing has been weaponized over and over. There are literally hundreds of examples of this e.g: “Let’s start reporting on story points per person so we can compare individual performance”.&lt;/p>
&lt;p>&lt;strong>What’s wrong with LinkedIn&lt;/strong>, and (some) recruiters. And why my inbox looks like a dating app (with message after message of poorly thought out copy/paste solicitations).&lt;/p>
&lt;ul>
&lt;li>Incentive to send messages (to meet quotas)&lt;/li>
&lt;li>Incentive to get you to leave your job&lt;/li>
&lt;/ul>
&lt;p>How you should fill a role:&lt;/p>
&lt;ul>
&lt;li>Ask them what they need done, use that to drive requirements for a role&lt;/li>
&lt;li>e.g fix our pipelines, scale our app, reduce bugs in our app (by half, e.g from 50 to 25)&lt;/li>
&lt;li>write an advanced thank-you letter to give to applicants/new starters so they have a clear goal of what to strive for&lt;/li>
&lt;li>Let people pick their team members&lt;/li>
&lt;/ul>
&lt;p>How do you mange your projects? (hint: It doesn’t matter what software you do/don’t use — it’s more about how you manage blockers and how focused the team can be). Physical wall vs Virtual (JIRA board), this choice will be specific to the team and it’s needs. You may need to compromise on level of detail — that’s okay.&lt;/p>
&lt;p>AWS. Their approach to development teams. Get on-board for building APIs so other teams in Amazon can consume them, and how it launched them into the biggest Cloud provider today.&lt;/p>
&lt;p>&lt;strong>Trust the people you hire.&lt;/strong> If you’re hiring people you don’t trust you’re doing it wrong.&lt;/p>
&lt;p>One thread on LinkedIn from a hiring manger had the attitude “I’ll pay you 50% market rate until I trust you”. I really hope they were trolling.&lt;/p>
&lt;p>As Steve Jobs said: Hire smart people to tell you what to do.&lt;/p>
&lt;p>Train/Grow people. Don’t be worried about “What happens if we train them and they leave?” … be worried about “What happens if we &lt;strong>don’t train&lt;/strong> them and they stay”.&lt;/p>
&lt;p>Remote work. Pros/Cons.&lt;/p>
&lt;p>Pair programming optional, Reviewing code mandatory.&lt;/p>
&lt;p>Platforms. “Built it and they will come” is some of the biggest wastage in I.T departments that I’ve seen.&lt;/p>
&lt;p>Documentation, too often it’s seen as not important but just like testing it should be part of the work you do not an “I’ll do it later” type thing.&lt;/p>
&lt;p>Start thinking of your internal teams as customers (see AWS note about APIs).&lt;/p>
&lt;p>Track/share Metrics. Make decisions through data.&lt;/p>
&lt;p>Vision is important, have one, or follow someone who does.&lt;/p>
&lt;p>Being talented isn’t always a good thing…&lt;/p>
&lt;ul>
&lt;li>e.g being right and proving someone wrong in a group setting&lt;/li>
&lt;li>intimidating someone by showing off how smart you are to them&lt;/li>
&lt;li>challenging tech leads, delivery leads, sec, ops in a way that gets them off-side&lt;/li>
&lt;/ul>
&lt;p>DevOps teams &amp;amp; how they’re AntiPaterns. &lt;a href="https://web.devopstopologies.com/">https://web.devopstopologies.com/&lt;/a>&lt;/p>
&lt;p>The power struggle between Ops Sec and the rest of the company.&lt;/p>
&lt;p>Some people don’t want change.&lt;/p>
&lt;p>There’s no one magic solution, or one magical person that can drive transformational change. Support is needed from the top, but also needed at all levels (It’s great to have support from the c-level, but if ops/sec blocks things you’re not going to have a good time).&lt;/p>
&lt;p>Technology is actually pretty easy to work with, people are more complicated. If you manage teams meet with them regularly, care about them, and get out of that office when you have your catch-up. I had most amazing Delivery Manager who would catchup with every single team in our company every two weeks. He’d ask about what’s good/bad/blockers and what and what he could do help me. He also asked how I was feeling and if I was challenged. Mostly he actually cared about me and my life because each conversation felt like one with a good friend — and years later we still keep in touch.&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/things-i-learnt-working-for-an-i-t-consultancy-402bba580361?source=friends_link&amp;amp;sk=7abe092462910885e17c301e3617e76b">Things I learnt working for an I.T Consultancy&lt;/a>.&lt;/p>
&lt;/div></description></item></channel></rss>