<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>The Ops Community ⚙️: Drew Khoury</title>
    <description>The latest articles on The Ops Community ⚙️ by Drew Khoury (@drewkhoury).</description>
    <link>https://community.ops.io/drewkhoury</link>
    <image>
      <url>https://community.ops.io/images/gUQeUcxgax772ogzjzeg_4YmzjIxYNGRwVMRMk3mtc8/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL3Vz/ZXIvcHJvZmlsZV9p/bWFnZS81OS84N2Nh/Y2I2NC01NDlmLTQ1/NmEtOWVjNy1hZTNl/OTE4MTZhYWUuanBl/Zw</url>
      <title>The Ops Community ⚙️: Drew Khoury</title>
      <link>https://community.ops.io/drewkhoury</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://community.ops.io/feed/drewkhoury"/>
    <language>en</language>
    <item>
      <title>Optimizing for a Cloud-native Developer Experience</title>
      <dc:creator>Drew Khoury</dc:creator>
      <pubDate>Wed, 25 May 2022 19:01:17 +0000</pubDate>
      <link>https://community.ops.io/drewkhoury/optimizing-for-a-cloud-native-developer-experience-ako</link>
      <guid>https://community.ops.io/drewkhoury/optimizing-for-a-cloud-native-developer-experience-ako</guid>
      <description>&lt;p&gt;Chris and Drew share their combined knowledge around developer experience, why (micro) feedback loops matter a whole lot, and present a live demo of a Cloud Native application working locally - complete with unit tests, end-to-end tests and smoke tests.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Originally presented by Chris and Drew &lt;a href="https://www.meetup.com/AWSMeetupGroup/events/284359969/"&gt;Optimizing for Developer Experience in a Cloud Native World&lt;/a&gt; - AWS Meetup Group&lt;/li&gt;
&lt;li&gt;Concepts based on the work from Tim Cochran via Martin Fowler &lt;a href="https://martinfowler.com/articles/developer-effectiveness.html"&gt;Maximizing Developer Effectiveness&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://miro.com/app/board/uXjVOR9lSQM=/"&gt;Cloud Native DX&lt;/a&gt; miro board for presentation content&lt;/li&gt;
&lt;li&gt;Following the &lt;a href="https://www.drewkhoury.com/post/gsd/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2/"&gt;3 Musketeers&lt;/a&gt; pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This talk is packed with real patterns used by Chris and Drew working with teams to help them increase their effectiveness. The demo was designed so you can follow along on your own workstation - and be up and running within minutes without the need to install and configure the underlying tech (Node, AWS SAM, Python, Playwright, etc).&lt;/p&gt;

&lt;p&gt;Meetup Video: &lt;a href="https://www.youtube.com/watch?v=6MP1u7O_3bY"&gt;https://www.youtube.com/watch?v=6MP1u7O_3bY&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Micro feedback loops
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"From what I have observed, you have to nail the basics, the things that developers do 10, 100 or 200 times a day. I call them micro-feedback loops. This could be running a unit test while fixing a bug. It could be seeing a code change reflected in your local environment or development environments." - Tim Cochran&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="/images/drew-and-chris-white.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/drew-and-chris-white.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Demo Repo: &lt;a href="https://github.com/chrishart0/gsd-aws-cdk-serverless-example"&gt;GSD-AWS-CDK-Serverless-Example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;docker-compose&lt;/code&gt; and &lt;code&gt;docker&lt;/code&gt; installed you should be able to have a local env running in a few minutes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone git@github.com:chrishart0/gsd-aws-cdk-serverless-example.git &amp;amp;&amp;amp; cd gsd-aws-cdk-serverless-example
make install &amp;amp;&amp;amp; make run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hint: If you run &lt;code&gt;make&lt;/code&gt; after cloning the repo, it will show you the help menu and let you know what commands to run to build, test and deploy the application.&lt;/p&gt;

&lt;p&gt;Micro feedback loops demonstrated in this repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unit tests (front-end, back-end, infra)&lt;/li&gt;
&lt;li&gt;Local environment - available in the browser&lt;/li&gt;
&lt;li&gt;End-to-end tests&lt;/li&gt;
&lt;li&gt;Direct deployment to AWS from your workstation&lt;/li&gt;
&lt;li&gt;CI/CD runs the same as local, with additional security checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/8Bl0cIKfktRWKZr1RpyB5zVhhJpVJLAzJY7LsJulnP4/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL2Nocmlz/aGFydDAvZ3NkLWF3/cy1jZGstc2VydmVy/bGVzcy1leGFtcGxl/L2Jsb2IvbWFzdGVy/L2luZnJhc3RydWN0/dXJlL0luZnJhLURp/YWdyYW0uZHJhd2lv/LnBuZz9yYXc9dHJ1/ZQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/8Bl0cIKfktRWKZr1RpyB5zVhhJpVJLAzJY7LsJulnP4/w:880/mb:500000/ar:1/aHR0cHM6Ly9naXRo/dWIuY29tL2Nocmlz/aGFydDAvZ3NkLWF3/cy1jZGstc2VydmVy/bGVzcy1leGFtcGxl/L2Jsb2IvbWFzdGVy/L2luZnJhc3RydWN0/dXJlL0luZnJhLURp/YWdyYW0uZHJhd2lv/LnBuZz9yYXc9dHJ1/ZQ" alt="" width="610" height="743"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Giving us your feedback (loop)
&lt;/h1&gt;

&lt;p&gt;We'd love to hear what you think about these patterns, and get some feedback on your own developer experience using the demo repo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contact &lt;a href="https://arcadian.cloud/contact-me"&gt;Chris&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Contact &lt;a href="https://www.drewkhoury.com/drew/"&gt;Drew&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/chrishart0/gsd-aws-cdk-serverless-example/issues"&gt;Raise an issue&lt;/a&gt; in the repo&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>tutorials</category>
      <category>cloudops</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to implement Good Software Delivery in 30 seconds</title>
      <dc:creator>Drew Khoury</dc:creator>
      <pubDate>Wed, 25 May 2022 18:55:43 +0000</pubDate>
      <link>https://community.ops.io/drewkhoury/how-to-implement-good-software-delivery-in-30-seconds-5gbb</link>
      <guid>https://community.ops.io/drewkhoury/how-to-implement-good-software-delivery-in-30-seconds-5gbb</guid>
      <description>&lt;p&gt;Good Software Delivery (GSD) is the term we use for the set of practices that help deliver, well, &lt;em&gt;good&lt;/em&gt; 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&gt;

&lt;p&gt;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&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://medium.com/@drew.khoury/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570"&gt;GSD&lt;/a&gt; &amp;amp; &lt;a href="https://medium.com/@drew.khoury/good-software-delivery-trust-and-verify-ced74fa04b39"&gt;Trust and Verify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://medium.com/@drew.khoury/optimizing-for-dx-the-developer-experience-f37fe168642d"&gt;Developer Experience&lt;/a&gt; &amp;amp; &lt;a href="https://medium.com/@drew.khoury/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2"&gt;3 Musketeers&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Assumptions
&lt;/h3&gt;

&lt;p&gt;Before we dive in I want to share my assumptions and expectations. This blog/demo is &lt;strong&gt;aimed at developers&lt;/strong&gt;, who are also familiar with pipelines, local development environments, and tools like docker.&lt;/p&gt;

&lt;p&gt;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"&gt;README.md&lt;/a&gt; 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&gt;

&lt;p&gt;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&gt;

&lt;h3&gt;
  
  
  What we’ll do in this demo
&lt;/h3&gt;

&lt;p&gt;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&gt;

&lt;ul&gt;
&lt;li&gt;  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&gt;
&lt;li&gt;  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&gt;
&lt;li&gt;  You’ll be able to extend the logic for other pipeline tasks like testing or security&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this demo takes you longer than 30 seconds to run this demo, I suspect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  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&gt;
&lt;li&gt;  We need to help you with the base requirements that this blog assumes you already have (&lt;code&gt;make&lt;/code&gt;,&lt;code&gt;docker&lt;/code&gt;and &lt;code&gt;docker-compose&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In any case, &lt;a href="https://www.linkedin.com/in/drewkhoury/"&gt;reach out&lt;/a&gt; on LinkedIn if you have suggestions to improve this demo, or set up a &lt;a href="https://calendly.com/drew-khoury"&gt;virtual meeting with me&lt;/a&gt; if you’d like a 1:1 workshop/chat!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/x_0BjekxGXQm6SW97aNWRmY8qHm-lXpXiWPFHbUktVs/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqWWg5c2lU/TGZRaHJGdE1zUW9v/LU9Idy5naWY" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/x_0BjekxGXQm6SW97aNWRmY8qHm-lXpXiWPFHbUktVs/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqWWg5c2lU/TGZRaHJGdE1zUW9v/LU9Idy5naWY" alt="" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The demo (build and run a Go app in 30 seconds)
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;At a minimum, you’ll need&lt;/em&gt; &lt;code&gt;_make_&lt;/code&gt;&lt;em&gt;,&lt;/em&gt; &lt;code&gt;_docker_&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; &lt;code&gt;_docker-compose_&lt;/code&gt; &lt;em&gt;on your workstation. See&lt;/em&gt; &lt;a href="https://github.com/contino/gsd-hello-world#requirements"&gt;&lt;em&gt;requirements&lt;/em&gt;&lt;/a&gt; &lt;em&gt;for more info or continue on if you’ve already got these.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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"&gt;GSD HelloWorld katacoda&lt;/a&gt; (repo will already be cloned in this environment, with required software ready to go)&lt;/p&gt;

&lt;p&gt;You can see all of my Katacoda courses at &lt;a href="https://www.katacoda.com/drewkhoury/"&gt;https://www.katacoda.com/drewkhoury/&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Clone the repo:&lt;/strong&gt; Start by cloning the &lt;a href="https://github.com/contino/gsd-hello-world"&gt;GSD HelloWorld&lt;/a&gt; repo:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;git clone git@github.com:contino/gsd-hello-world.git &amp;amp;&amp;amp; cd gsd-hello-world&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Build the app:&lt;/strong&gt; Once you have the codebase, build the app using:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;make build&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This step will create a build artifact (in our case, a docker image) by doing the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  downloads the appropriate docker image onto your workstation&lt;/li&gt;
&lt;li&gt;  copies the source for our app into the image&lt;/li&gt;
&lt;li&gt;  builds the application in the image&lt;/li&gt;
&lt;li&gt;  configures the port/cmd to be used at runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/o5QJ9u9xP_n9nnPNRD7BiJ3cHrewTj7CrpxBdGvHmxs/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqVWRMNWpk/VWdGV2k3Zm4yVXpi/VWhJUS5wbmc" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/o5QJ9u9xP_n9nnPNRD7BiJ3cHrewTj7CrpxBdGvHmxs/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqVWRMNWpk/VWdGV2k3Zm4yVXpi/VWhJUS5wbmc" alt="" width="800" height="793"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Run the app:&lt;/strong&gt; Now that you have your build artifact handy, you can run the application locally with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;make run&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This step will run/deploy the artifact on your workstation by doing the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  uses docker to create a container based on the image from the &lt;code&gt;build&lt;/code&gt; step&lt;/li&gt;
&lt;li&gt;  exposes port 8080 locally&lt;/li&gt;
&lt;li&gt;  the docker image runs the cmd &lt;code&gt;./main&lt;/code&gt; which starts the application for us&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/w2kkQFjfGcvYAX8tTrfMuwytfaDmne9_TP09BeQyKHE/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/MTIwMC8xKmFKY0E1/TWtkM25oOEVGSkoy/WmpNTncucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/w2kkQFjfGcvYAX8tTrfMuwytfaDmne9_TP09BeQyKHE/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/MTIwMC8xKmFKY0E1/TWtkM25oOEVGSkoy/WmpNTncucG5n" alt="" width="880" height="95"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/T9_LOu4M54NNvAZdgOIFSWKYickfyzskieMQcyH4u9s/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/MTIwMC8xKjllUGJu/MXJTMGgtUnByVzJN/N3MtT2cucG5n" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/T9_LOu4M54NNvAZdgOIFSWKYickfyzskieMQcyH4u9s/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/MTIwMC8xKjllUGJu/MXJTMGgtUnByVzJN/N3MtT2cucG5n" alt="" width="686" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus:&lt;/strong&gt; You can run &lt;code&gt;make test&lt;/code&gt; to execute the test suite (note this may legitimately fail if it doesn’t meet the testing threshold), and&lt;code&gt;make down&lt;/code&gt; to clean up once you’re done.&lt;/p&gt;

&lt;p&gt;The beauty of this model is in its simplicity. We’re using &lt;code&gt;make&lt;/code&gt; 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&gt;

&lt;h3&gt;
  
  
  Digging into the code
&lt;/h3&gt;

&lt;p&gt;To keep this section brief I’m going to assume some prior knowledge around development, docker, and make.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/LU_FAAJyRsjnRozgYcCHkZT0dAFj2GlzvtIdoQnZjow/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqLVdvc056/WHVteDl3YnlHYmdw/Y0lsQS5wbmc" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/LU_FAAJyRsjnRozgYcCHkZT0dAFj2GlzvtIdoQnZjow/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqLVdvc056/WHVteDl3YnlHYmdw/Y0lsQS5wbmc" alt="" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if I want to make my own changes or do something similar in my own repo?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For the curious: Checkout the &lt;code&gt;Makefile&lt;/code&gt;, &lt;code&gt;docker-compose.yml&lt;/code&gt; and &lt;code&gt;Dockerfile&lt;/code&gt; 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&gt;

&lt;p&gt;&lt;strong&gt;Building the app:&lt;/strong&gt; For example &lt;code&gt;make build&lt;/code&gt; is what builds our application, and in the &lt;code&gt;Makefile&lt;/code&gt; you’ll see it does the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker build -t ${FULL_TAG} .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Replacing the app:&lt;/strong&gt; If you wanted to replace our Golang application with your own Java application, you’d drop in your own &lt;code&gt;Dockerfile&lt;/code&gt; , replace the &lt;code&gt;/src&lt;/code&gt;, and leave everything else as-is. The beauty is that any developer using the repo still runs &lt;code&gt;make build&lt;/code&gt; 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&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: This repo is a testing ground for GSD practices — simple but powerful ways to supercharge your development.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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"&gt;https://github.com/contino/gsd-hello-world&lt;/a&gt; — we have plenty for you to explore.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt; and &lt;code&gt;run&lt;/code&gt; actions are driven by a simple &lt;code&gt;Makefile&lt;/code&gt; — with underlying execution via docker containers&lt;/li&gt;
&lt;li&gt;  Build badge in &lt;a href="https://github.com/contino/gsd-hello-world/blob/master/README.md"&gt;README.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Repo Visualization in &lt;a href="https://github.com/contino/gsd-hello-world/blob/master/README.md"&gt;README.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Sonar quality, reliability, and security badges in &lt;a href="https://github.com/contino/gsd-hello-world/blob/master/README.md"&gt;README.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Golang security in-pipeline&lt;/li&gt;
&lt;li&gt;  Local tests via &lt;code&gt;make test&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Artifact storage via Github Packages&lt;/li&gt;
&lt;li&gt;  Github Actions&lt;/li&gt;
&lt;li&gt;  Deployment to k8s in GCP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Further reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://medium.com/@drew.khoury/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570"&gt;GSD&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://medium.com/@drew.khoury/good-software-delivery-trust-and-verify-ced74fa04b39"&gt;Trust and Verify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://medium.com/@drew.khoury/optimizing-for-dx-the-developer-experience-f37fe168642d"&gt;Developer Experience&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://medium.com/@drew.khoury/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2"&gt;3 Musketeers&lt;/a&gt; and &lt;a href="https://3musketeers.io/"&gt;https://3musketeers.io/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;May your software be good, and your delivery be continuous — drew&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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"&gt;How to implement Good Software Delivery in 30 seconds&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>docker</category>
    </item>
    <item>
      <title>AWS 2021 Highlights</title>
      <dc:creator>Drew Khoury</dc:creator>
      <pubDate>Wed, 25 May 2022 18:53:28 +0000</pubDate>
      <link>https://community.ops.io/drewkhoury/aws-2021-highlights-2ped</link>
      <guid>https://community.ops.io/drewkhoury/aws-2021-highlights-2ped</guid>
      <description>&lt;p&gt;AWS updates their services so quickly they literally have thousands of updates each year (1,284 the last time I checked): &lt;a href="https://aws.amazon.com/about-aws/whats-new/2021/"&gt;https://aws.amazon.com/about-aws/whats-new/2021/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This blog will highlight some of my favorite AWS updates for 2021.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Network Firewall
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/network-firewall/"&gt;https://aws.amazon.com/network-firewall/&lt;/a&gt; — A managed service by AWS that allows fine-grained control over network traffic.&lt;/p&gt;

&lt;p&gt;Before Network Firewall was available, customers were left to manage their own squid proxy or similar service if they wanted fine-grained control over their traffic in the Cloud (like many Enterprise customers do). This meant ensuring their service met security and compliance requirements, traffic and scaling demands, and uptime SLA’s, all while adding to the burden for operational teams. Some routed traffic back to on-premise solutions, but this wasn’t always a viable solution for all customers.&lt;/p&gt;

&lt;p&gt;AWS Network Firewall became available in Sydney back in January: &lt;a href="https://aws.amazon.com/about-aws/whats-new/2021/01/aws-network-firewall-is-now-available-in-the-asia-pacific-sydney-region/"&gt;https://aws.amazon.com/about-aws/whats-new/2021/01/aws-network-firewall-is-now-available-in-the-asia-pacific-sydney-region/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It received a few updates and deployments to other regions. In April, they rolled out to 10 more regions. By June, it was available as part of AWS GovCloud (US), and by the end of July, it was &lt;strong&gt;PCI DSS Compliant&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon EBS io2 Block Express Volumes
&lt;/h3&gt;

&lt;p&gt;If you have the need for speed (that is, I/O speed), then this is the update for you. In July, AWS launched a special kind of volume that is perfect for I/O intensive operations. This isn’t intended for your typical web server with a few hundred concurrent connections, but plenty of Enterprise clients may find themselves needing a little bit of extra grunt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2021/07/aws-announces-general-availability-amazon-ebs-block-express-volumes/"&gt;https://aws.amazon.com/about-aws/whats-new/2021/07/aws-announces-general-availability-amazon-ebs-block-express-volumes/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  up to 4x higher throughput, IOPS, and capacity than io2 volumes&lt;/li&gt;
&lt;li&gt;  designed to deliver sub-millisecond latency&lt;/li&gt;
&lt;li&gt;  99.999% durability&lt;/li&gt;
&lt;li&gt;  Supports Multi-Attach and Elastic Volumes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Customers can now provision a single io2 volume with up to &lt;strong&gt;256,000 IOPS&lt;/strong&gt;, 4000 MB/s of throughput, and a storage capacity of 64 TiB.&lt;/p&gt;

&lt;h3&gt;
  
  
  PrivateLink for Amazon S3
&lt;/h3&gt;

&lt;p&gt;As of February, Amazon S3 supported AWS PrivateLink, providing direct access to S3 via a private endpoint within your virtual private network.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2021/02/amazon-s3-now-supports-aws-privatelink/"&gt;https://aws.amazon.com/about-aws/whats-new/2021/02/amazon-s3-now-supports-aws-privatelink/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Simplify your network architecture by connecting to S3 from on-premises&lt;/li&gt;
&lt;li&gt;  In AWS, use private IP addresses in your Virtual Private Cloud (VPC) to connect to S3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This eliminates the need to use public IPs, configure firewall rules, or configure an Internet Gateway to connect to S3.&lt;/p&gt;

&lt;p&gt;As of July, AWS also lowered the data processing cost for PrivateLink (phew): &lt;a href="https://aws.amazon.com/about-aws/whats-new/2021/07/aws-lowers-data-processing-charges-aws-privatelink/"&gt;https://aws.amazon.com/about-aws/whats-new/2021/07/aws-lowers-data-processing-charges-aws-privatelink/&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;Each of these updates has been something I’ve personally been waiting for or had to work around in the past. They also represent a nice cross-section of services that you’re likely to encounter if you dive deep enough into AWS.&lt;/p&gt;

&lt;p&gt;AWS continues to roll out updates across its services which reduces the effort required to enter the Cloud. They continue to deliver services that cater to the speed and scale we could only have dreamt of 15 years ago (oh and &lt;a href="https://aws.amazon.com/blogs/aws/happy-15th-birthday-amazon-ec2/"&gt;Happy Birthday AWS/EC2&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/aws-2021-highlights-b16b6c59b4fe"&gt;AWS 2021 Highlights&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>aws</category>
    </item>
    <item>
      <title>3 Musketeers for an epic Developer Experience</title>
      <dc:creator>Drew Khoury</dc:creator>
      <pubDate>Wed, 25 May 2022 18:39:02 +0000</pubDate>
      <link>https://community.ops.io/drewkhoury/3-musketeers-for-an-epic-developer-experience-1bcg</link>
      <guid>https://community.ops.io/drewkhoury/3-musketeers-for-an-epic-developer-experience-1bcg</guid>
      <description>&lt;p&gt;We all want to reduce toil and improve the developer experience (when starting new applications or joining the team). Developers have had to invest significant time in creating production-ready pipelines when building new products and configuring their workstations when joining teams. Their workstations may not run all the same tests as their pipeline and thus they’re left with &lt;a href="https://www.linkedin.com/feed/hashtag/?keywords=slowfeedback&amp;amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A6835918781475246080"&gt;#slowfeedback&lt;/a&gt; and an inconsistent experience.&lt;/p&gt;

&lt;p&gt;The larger the organization (ie Enterprise with 10’s-100’s of teams and applications) the worse the problem gets.&lt;/p&gt;

&lt;p&gt;GSD is built on the principle of reusability through a pattern called &lt;a href="https://3musketeers.io/"&gt;3 Musketeers&lt;/a&gt; (test, build, and deploy your apps from anywhere, the same way). It gives consistency, control, and confidence to development teams.&lt;/p&gt;

&lt;p&gt;Docker is a key part of this pattern, but the use of &lt;code&gt;docker&lt;/code&gt;, &lt;code&gt;docker-compose&lt;/code&gt; and &lt;code&gt;make&lt;/code&gt; together really unlock the powers of consistency, control and confidence in your application build, test and deploy steps. The &lt;a href="https://3musketeers.io/docs/"&gt;3musketeers Docs&lt;/a&gt; have some great examples of these patterns.&lt;/p&gt;

&lt;p&gt;Here's what the most simple usage looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/nBZwPRfnfF3A0p1ot0_GO7mkm6pHCIB1WJN4AJJWO-M/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqTzhVd0R2/emU3S1hFREtMS2dx/ZXZjdy5qcGVn" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/nBZwPRfnfF3A0p1ot0_GO7mkm6pHCIB1WJN4AJJWO-M/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqTzhVd0R2/emU3S1hFREtMS2dx/ZXZjdy5qcGVn" alt="" width="800" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While the pattern itself is simple, the power (and benefit) comes from the widespread usage across your organization. Here’s what usage might look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Agree on a standard interface for all pipeline actions (much like API’s have an agreed interface, all pipelines in the org use the same interface, ie &lt;code&gt;make build\&lt;/code&gt;, &lt;code&gt;make test\&lt;/code&gt;, &lt;code&gt;make deploy\&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;  Keep the interface simple (avoid custom pipeline logic, one simple Makefile calls Compose, the container handles all the logic)&lt;/li&gt;
&lt;li&gt;  Create docker containers for each pipeline step, make them stateless, reuse them where it makes sense&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/7vJp_D_QmTjz5dkVObydn8NFanJQ2Cz5XqXR4ThlEYI/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqaGRLcjI4/YXRvdm1FR0ZrQlJh/T0lYQS5qcGVn" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/7vJp_D_QmTjz5dkVObydn8NFanJQ2Cz5XqXR4ThlEYI/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzEqaGRLcjI4/YXRvdm1FR0ZrQlJh/T0lYQS5qcGVn" alt="" width="800" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wins:&lt;/strong&gt; Modern pipelines already support running steps in docker containers. This pattern extends portability across almost any pipeline tool or development workstation and runs the same way in every single environment. Pipeline steps can be tested independently and reused. This pattern makes it easy to go one step further and generate pipelines on-demand based on boilerplate starter templates. Oh yeah, and &lt;a href="https://www.linkedin.com/feed/hashtag/?keywords=fastfeedback&amp;amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A6835918781475246080"&gt;#fastfeedback&lt;/a&gt; (we’re talking pre-commit).&lt;/p&gt;

&lt;p&gt;Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2"&gt;3 Musketeers for an epic Developer Experience&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>cicd</category>
      <category>developerexperince</category>
      <category>fastfeedback</category>
    </item>
    <item>
      <title>Teaching DevOps in one afternoon</title>
      <dc:creator>Drew Khoury</dc:creator>
      <pubDate>Wed, 25 May 2022 18:36:03 +0000</pubDate>
      <link>https://community.ops.io/drewkhoury/teaching-devops-in-one-afternoon-335a</link>
      <guid>https://community.ops.io/drewkhoury/teaching-devops-in-one-afternoon-335a</guid>
      <description>&lt;p&gt;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&gt;

&lt;p&gt;So we used &lt;a href="https://medium.com/faun/one-devops-please-part-1-df7a2787fde8"&gt;One DevOps Please&lt;/a&gt; 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&gt;

&lt;h3&gt;
  
  
  Existing Blogs
&lt;/h3&gt;

&lt;p&gt;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&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.ops.io/post/new-to-devops-start-here-bee6c54ae2e4/"&gt;What is DevOps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.ops.io/post/automating-google-app-engine-9599b51f0974/"&gt;Build your first Python App using Google App Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.ops.io/post/learning-ansible-the-quick-way-b2e162680fcd/"&gt;Learn Ansible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://community.ops.io/post/things-i-learnt-working-for-an-i-t-consultancy-402bba580361/"&gt;Things I learned working for IT Consulting companies&lt;/a&gt; (as it relates to DevOps, Agile, Cloud and team building)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.ops.io/post/a-comprehensive-guide-to-being-agile-a9563c8c9968/"&gt;The best guide for Agile that you'll ever find&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.ops.io/post/the-cost-of-failure-is-education-5efd9f1a1bd0/"&gt;Talking about building a Learning culture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Umbrella Themes
&lt;/h3&gt;

&lt;p&gt;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&gt;

&lt;p&gt;&lt;strong&gt;People, Culture &amp;amp; Ways of Working&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Continuously improve (Growth mindset)&lt;/li&gt;
&lt;li&gt;  Encourage innovation&lt;/li&gt;
&lt;li&gt;  Foster collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Measurable&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Measuring everything&lt;/li&gt;
&lt;li&gt;  Make decisions based on data&lt;/li&gt;
&lt;li&gt;  Make data easily available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Continuous Delivery&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Higher quality software through repeatable, predictable delivery&lt;/li&gt;
&lt;li&gt;  Reduction of defects&lt;/li&gt;
&lt;li&gt;  Reduce cycle time of ideation (I have an idea) to production (released in prod)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  People
&lt;/h3&gt;

&lt;p&gt;Customer Focused — app teams or cross-functional teams with your org may be your customer.&lt;/p&gt;

&lt;p&gt;How is your organization structured? &lt;a href="https://web.devopstopologies.com/"&gt;https://web.devopstopologies.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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"&gt;https://agilemanifesto.org/principles.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Extreme Programming: &lt;a href="https://www.agilealliance.org/glossary/xp/"&gt;https://www.agilealliance.org/glossary/xp/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The Planning Game&lt;/li&gt;
&lt;li&gt;  Small Releases&lt;/li&gt;
&lt;li&gt;  Metaphor&lt;/li&gt;
&lt;li&gt;  Simple Design&lt;/li&gt;
&lt;li&gt;  Testing&lt;/li&gt;
&lt;li&gt;  Refactoring&lt;/li&gt;
&lt;li&gt;  Pair Programming&lt;/li&gt;
&lt;li&gt;  Collective Ownership&lt;/li&gt;
&lt;li&gt;  Continuous Integration&lt;/li&gt;
&lt;li&gt;  40-hour week&lt;/li&gt;
&lt;li&gt;  On-site Customer&lt;/li&gt;
&lt;li&gt;  Coding Standard&lt;/li&gt;
&lt;li&gt;  Sit Together&lt;/li&gt;
&lt;li&gt;  Whole Team&lt;/li&gt;
&lt;li&gt;  Informative Workspace&lt;/li&gt;
&lt;li&gt;  Energized Work&lt;/li&gt;
&lt;li&gt;  Pair Programming&lt;/li&gt;
&lt;li&gt;  Stories&lt;/li&gt;
&lt;li&gt;  Weekly Cycle&lt;/li&gt;
&lt;li&gt;  Quarterly Cycle&lt;/li&gt;
&lt;li&gt;  Slack&lt;/li&gt;
&lt;li&gt;  Ten-Minute Build&lt;/li&gt;
&lt;li&gt;  Continuous Integration&lt;/li&gt;
&lt;li&gt;  Test-First Programming&lt;/li&gt;
&lt;li&gt;  Incremental Design&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Measure Everything
&lt;/h3&gt;

&lt;p&gt;Let’s say it together “measure everything”.&lt;/p&gt;

&lt;p&gt;In particular having metrics that are focused on Business Value Drivers are key.&lt;/p&gt;

&lt;p&gt;Metrics should be captured and key metrics displayed on dashboards &amp;amp; TVs so they’re easily accessible.&lt;/p&gt;

&lt;p&gt;Teams should produce APIs to be consumed internally — &lt;a href="https://cachethq.io/"&gt;https://cachethq.io/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://landing.google.com/sre/"&gt;Site Reliability Engineering&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;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&gt;

&lt;p&gt;Maturity Assessments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Agile&lt;/li&gt;
&lt;li&gt;  CI/CD&lt;/li&gt;
&lt;li&gt;  12 Factor — &lt;a href="https://12factor.net/"&gt;https://12factor.net/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  Data&lt;/li&gt;
&lt;li&gt;  6R’s Application Treatment Plan — &lt;a href="https://aws.amazon.com/blogs/enterprise-strategy/6-strategies-for-migrating-applications-to-the-cloud/"&gt;https://aws.amazon.com/blogs/enterprise-strategy/6-strategies-for-migrating-applications-to-the-cloud/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Continuous Delivery
&lt;/h3&gt;

&lt;p&gt;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&gt;

&lt;p&gt;&lt;a href="https://continuousdelivery.com/"&gt;https://continuousdelivery.com/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Low risk releases&lt;/strong&gt;. &lt;a href="https://martinfowler.com/bliki/BlueGreenDeployment.html"&gt;blue-green deployments&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Faster time to market&lt;/strong&gt; automate the build and deployment, environment provisioning, and regression testing processes&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Higher quality&lt;/strong&gt; automated tools that discover regressions within minutes&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Lower costs&lt;/strong&gt; 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&gt;
&lt;li&gt;  &lt;strong&gt;Better products&lt;/strong&gt; work in small batches. This means we can get feedback from users throughout the delivery lifecycle based on working software&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.infoq.com/presentations/controlled-experiments/"&gt;A/B testing&lt;/a&gt; &amp;amp; &lt;a href="https://www.thoughtworks.com/insights/articles/how-implement-hypothesis-driven-development"&gt;hypothesis-driven approach to product development&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Happier teams&lt;/strong&gt; continuous delivery makes releases less painful and reduces team burnout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://continuousdelivery.com/implementing/patterns/"&gt;https://continuousdelivery.com/implementing/patterns/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Only build packages once&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Deploy the same way to every environment&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Smoke test your deployments&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Keep your environments similar&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Trunk Based Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A branching model to aspire to (or at least understand and learn from): &lt;a href="https://trunkbaseddevelopment.com/5-min-overview/"&gt;https://trunkbaseddevelopment.com/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  short iterations&lt;/li&gt;
&lt;li&gt;  less than few day story size&lt;/li&gt;
&lt;li&gt;  short build times&lt;/li&gt;
&lt;li&gt;  feature flags&lt;/li&gt;
&lt;li&gt;  humans and CI use same scripts&lt;/li&gt;
&lt;li&gt;  Compile &amp;gt; Unit Test &amp;gt; Integration &amp;gt; Functional&lt;/li&gt;
&lt;li&gt;  Quick build notifications&lt;/li&gt;
&lt;li&gt;  Shift Left — Undesirable to find out about breakages AFTER the commit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Containers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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&gt;

&lt;p&gt;How to build, test and deploy modern code in a repeatable fashion: &lt;a href="https://3musketeers.io/"&gt;https://3musketeers.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Containers 101…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.m.wikipedia.org/wiki/Kubernetes"&gt;https://en.m.wikipedia.org/wiki/Kubernetes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.m.wikipedia.org/wiki/Docker_%28software%29"&gt;https://en.m.wikipedia.org/wiki/Docker_(software)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/"&gt;https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://danlebrero.com/2018/07/09/kubernetes-explained-in-pictures-the-theme-park-analogy/"&gt;https://danlebrero.com/2018/07/09/kubernetes-explained-in-pictures-the-theme-park-analogy/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(Don’t) Build it yourself&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The phrase “undifferentiated heavy lifting”: &lt;a href="https://aws.amazon.com/blogs/aws/we_build_muck_s/"&gt;https://aws.amazon.com/blogs/aws/we_build_muck_s/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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&gt;

&lt;ul&gt;
&lt;li&gt;  Configuring AWS Accounts &amp;amp; setting up guardrails: &lt;a href="https://aws.amazon.com/controltower/features/"&gt;https://aws.amazon.com/controltower/features/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  The quickest and best way (imo) to run k8s: &lt;a href="https://cloud.google.com/kubernetes-engine/"&gt;https://cloud.google.com/kubernetes-engine/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  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/"&gt;https://cloud.google.com/appengine/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that’s (a little more than) one afternoon teaching DevOps.&lt;/p&gt;

&lt;p&gt;Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/teaching-devops-in-one-afternoon-e85f02ef036b"&gt;Teaching DevOps in one afternoon&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>learning</category>
      <category>tutorials</category>
    </item>
    <item>
      <title>DevOps in 10 minutes with Google App Engine</title>
      <dc:creator>Drew Khoury</dc:creator>
      <pubDate>Wed, 25 May 2022 18:23:40 +0000</pubDate>
      <link>https://community.ops.io/drewkhoury/devops-in-10-minutes-with-google-app-engine-ai6</link>
      <guid>https://community.ops.io/drewkhoury/devops-in-10-minutes-with-google-app-engine-ai6</guid>
      <description>&lt;p&gt;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&gt;

&lt;h3&gt;
  
  
  App Engine history
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/appengine/"&gt;App Engine&lt;/a&gt; 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&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/V9f-N6tZd1yf89_eC1LBklfOmfkbK1HtyqJ8-qLk8q4/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzAqZG42MFFE/QWFRVGpCb2I5SQ" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/V9f-N6tZd1yf89_eC1LBklfOmfkbK1HtyqJ8-qLk8q4/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzAqZG42MFFE/QWFRVGpCb2I5SQ" alt="" width="200" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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&gt;

&lt;ul&gt;
&lt;li&gt;  Python 2.7, Python 3.7&lt;/li&gt;
&lt;li&gt;  Java 8&lt;/li&gt;
&lt;li&gt;  Node.js 8, and Node.js 10 (beta)&lt;/li&gt;
&lt;li&gt;  PHP 5.5, and PHP 7.2 (beta)&lt;/li&gt;
&lt;li&gt;  Go 1.9, and Go 1.11 (beta)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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&gt;

&lt;p&gt;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&gt;

&lt;h3&gt;
  
  
  Getting started with App Engine
&lt;/h3&gt;

&lt;p&gt;Assuming you already have a Google Cloud account, creating a deploying your first App Engine App consists three easy steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Create a Project to store all your related resources&lt;/li&gt;
&lt;li&gt;  Create an App&lt;/li&gt;
&lt;li&gt;  Deploy your App&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;gcloud projects create project-demo-xxx \&lt;br&gt;&lt;br&gt;
&lt;em&gt;--name="project demo xxx" --labels=type=test&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;gcloud app create &lt;em&gt;--region=australia-southeast1 \_&lt;br&gt;&lt;br&gt;
_--project project-demo-xxx&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;gcloud app deploy &lt;em&gt;--project project-demo-xxx&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;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&gt;

&lt;p&gt;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"&gt;https://github.com/drewkhoury/gae-demo&lt;/a&gt; and try it yourself. I’ve streamlined the whole process to try and get you up and running as quickly as possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  How to authenticate with Google via the command-line&lt;/li&gt;
&lt;li&gt;  Taking advantage of the local environment Google provides (dev_appserver.py)&lt;/li&gt;
&lt;li&gt;  Sample Python App that’s optimised for App Engine&lt;/li&gt;
&lt;li&gt;  Docker containers / Docker compose for consistency (local development and deployment)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/cABAqYY0ws9cvKwfco0UGrQDr4bTY-yHgRY9cSug5R4/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzAqWExfbkJH/UURqdDdTU1p1Sw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/cABAqYY0ws9cvKwfco0UGrQDr4bTY-yHgRY9cSug5R4/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzAqWExfbkJH/UURqdDdTU1p1Sw" alt="" width="500" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know what you think of Google App Engine after you give it a go!&lt;/p&gt;

&lt;p&gt;Also posted on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;medium as &lt;a href="https://medium.com/@drew.khoury/devops-in-10-minutes-with-google-app-engine-d98638bd0699"&gt;DevOps in 10 minutes with Google App Engine&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;and LinkedIn as &lt;a href="https://www.linkedin.com/pulse/how-do-devops-10-minutes-less-andrew-khoury/"&gt;DevOps in 10 minutes with Google App Engine&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>appengine</category>
      <category>gcp</category>
    </item>
    <item>
      <title>The cost of failure is education</title>
      <dc:creator>Drew Khoury</dc:creator>
      <pubDate>Wed, 25 May 2022 18:22:12 +0000</pubDate>
      <link>https://community.ops.io/drewkhoury/the-cost-of-failure-is-education-3p95</link>
      <guid>https://community.ops.io/drewkhoury/the-cost-of-failure-is-education-3p95</guid>
      <description>&lt;p&gt;If you’ve ever been responsible for software running in production, you should already be well aware of failure. But it’s not only traditional “operations” roles that are affected by failure.&lt;/p&gt;

&lt;p&gt;Consider some of the changes we’ve seen in IT in the last decade:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;2003: SRE -&lt;/strong&gt; Site Reliability Engineer, a discipline created at Google that incorporates aspects of software engineering and applies them to IT operations problems.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;2006: AWS EC2 -&lt;/strong&gt; The birth of the cloud “Amazon Elastic Compute Cloud (EC2)” which made Infrastructure-as-a-Service available to developers around the globe via APIs. It paved the way for CloudNative, Serverless, PaaS and the hundreds of services we have available to us today.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;2009: DevOps -&lt;/strong&gt; The combination of software development (Dev) with information technology operations (Ops)”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s clear there have been changes in the people and teams who need to be involved in running software for customers. At the same time there have been significant changes to how we build, test and deploy software.&lt;/p&gt;

&lt;p&gt;Culture is a common topic that comes up when we talk about things like DevOps, Lean Software Development, and SRE but what do we mean when we say culture? Do we just give developers pizza and beer until they produce good software and hope they don’t leave for another company offering gourmet pizza and craft beer?&lt;/p&gt;

&lt;h3&gt;
  
  
  Origins of lean in manufacturing
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/dKe1qzbVbrdmlw7Ty7nilXHPeyQkjbS3yZIq0NXUedY/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzAqTUY2VURO/UzQ1TWM2NldiNg" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/dKe1qzbVbrdmlw7Ty7nilXHPeyQkjbS3yZIq0NXUedY/w:880/mb:500000/ar:1/aHR0cHM6Ly9jZG4t/aW1hZ2VzLTEubWVk/aXVtLmNvbS9tYXgv/ODAwLzAqTUY2VURO/UzQ1TWM2NldiNg" alt="" width="300" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To understand the origins that paved the way for DevOps, SRE, and the “Culture/Transformation” we’re hearing so much about in IT we need to go back, back to 1990 and back to car manufacturing. Consider the following quote from &lt;a href="https://en.wikipedia.org/wiki/Lean_manufacturing"&gt;https://en.wikipedia.org/wiki/Lean_manufacturing&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lean manufacturing makes obvious what adds value, by reducing everything else (which is not adding value). This management philosophy is derived mostly from the Toyota Production System (TPS) and identified as “lean” only in the 1990s&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Steps to achieve lean systems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following steps should be implemented to create the ideal lean manufacturing system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Design a &lt;strong&gt;simple&lt;/strong&gt; manufacturing system&lt;/li&gt;
&lt;li&gt;  Recognise that there is &lt;strong&gt;always room for improvement&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Continuously improve&lt;/strong&gt; the lean manufacturing system design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sound familiar? These themes are present in Lean, Agile and DevOps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The andon cord — Game-changing rope&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Back in the early days of the Toyota Production System (TPS), Toyota implemented many unique tools and processes. The Andon Cord was born, and while it was just a rope it was the most powerful rope you’ve ever seen.&lt;/p&gt;

&lt;p&gt;Anyone had the right to pull the cord at any time and pulling it would instantly stop all work on the assembly line. The technology behind this wasn’t revolutionary, but the thinking, culture and trust behind this system is something we can learn from today. The “Safety Culture” around this process was reinforced when the team leader arrived at the workstation, thanking the team member who pulled the Cord.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The team member did not, and never would be, in a position of feeling fear or retribution for stopping the production line&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Toyota has so much to teach us about working together an respecting each other. Even if the team leader knew a better answer, Toyota principally felt that a solution from the team member was a better outcome.&lt;/p&gt;

&lt;h3&gt;
  
  
  Postmortums &amp;amp; lean software development
&lt;/h3&gt;

&lt;p&gt;Leaving cars behind and getting back to software, Mary and Tom Poppendeick’s work on Lean Software development in the early 2000s paved the way for the sort of thinking coming out of Google (SRE), and one great example of that is &lt;a href="https://landing.google.com/sre/sre-book/chapters/postmortem-culture/"&gt;postmortem culture&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Writing a postmortem is not punishment — it is a learning opportunity for the entire company.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As an IT professional with a decade of experience I’ve seen how the culture of the company can significantly impact how people, teams and the organisation grow and improve. The great opportunity that exists when failure happens is learning. The companies and teams that truely believe this are the ones that will continuously improve, both their software and their culture.&lt;/p&gt;




&lt;p&gt;Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/the-cost-of-failure-is-education-5efd9f1a1bd0"&gt;The cost of failure is education&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>postmortum</category>
      <category>sre</category>
      <category>leansoftware</category>
    </item>
  </channel>
</rss>
