<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Thought leadership on Good Software Delivery, cloud and automation on Andrew Khoury</title><link>https://www.drewkhoury.com/</link><description>Recent content in Thought leadership on Good Software Delivery, cloud and automation on Andrew Khoury</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Copyright © 2021, Andrew Khoury; all rights reserved.</copyright><lastBuildDate>Fri, 01 Sep 2023 19:22:11 +0000</lastBuildDate><atom:link href="https://www.drewkhoury.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Tips for how to use 3 Musketeers to supercharge your Developer Experince</title><link>https://www.drewkhoury.com/post/2023-09-13_3-musketeers-docker-make-compose-tips/</link><pubDate>Fri, 01 Sep 2023 19:22:11 +0000</pubDate><guid>https://www.drewkhoury.com/post/2023-09-13_3-musketeers-docker-make-compose-tips/</guid><description>
&lt;p>&lt;a href="https://3musketeersdev.netlify.app/">3 Musketeers&lt;/a> is a pattern popularized by Frederic L where you can Test, build, and deploy your apps from anywhere, the same way.&lt;/p>
&lt;p>&lt;em>Note: Frederic's website was preivously available via 3musketeers.io but is now &lt;a href="https://3musketeersdev.netlify.app/">https://3musketeersdev.netlify.app/&lt;/a>&lt;/em>&lt;/p>
&lt;p>The key benifits include being able to have a mix of Linux, Mac, and Windows workstations. You also get consistency with pipeline/CI tools that also run the same steps in the same way.&lt;/p>
&lt;p>&lt;strong>More Info:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://3musketeersdev.netlify.app/guide/patterns.html">https://3musketeersdev.netlify.app/guide/patterns.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/liatrio/3musketeers">https://github.com/liatrio/3musketeers&lt;/a> (brief intro, and install guide)&lt;/li>
&lt;li>&lt;a href="https://github.com/drewkhoury/katacoda-scenarios-contino">https://github.com/drewkhoury/katacoda-scenarios-contino&lt;/a> - interactive lessons (before katacoda got taken down) - but you can look at the readme's for each lesson to see the steps&lt;/li>
&lt;li>&lt;a href="https://github.com/drewkhoury/minimum-viable-delivery/blob/main/cicd-spec.md#portability-directive-runtime-must-be-independent-of-pipelinebuilddeploy">https://github.com/drewkhoury/minimum-viable-delivery/blob/main/cicd-spec.md#portability-directive-runtime-must-be-independent-of-pipelinebuilddeploy&lt;/a> - CI/CD spec I wrote a while back to explain the philosophy/reason behind it&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Examples that also include docs in their READMEs:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/drewkhoury/gsd-hello-world">https://github.com/drewkhoury/gsd-hello-world&lt;/a> - demo (Golang) and docs (and link to detailed blog)&lt;/li>
&lt;li>&lt;a href="https://github.com/drewkhoury/3-musketeers-base">https://github.com/drewkhoury/3-musketeers-base&lt;/a> - setup, env, aws profile, python and docs&lt;/li>
&lt;li>&lt;a href="https://github.com/drewkhoury/static-site">https://github.com/drewkhoury/static-site&lt;/a> - Demo of a static site using AWS CDK with Python&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>More Examples:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/liatrio/3musketeers/tree/main/examples/cloud-in-a-box">https://github.com/liatrio/3musketeers/tree/main/examples/cloud-in-a-box&lt;/a> (LocalStack w/EKS cluster)&lt;/li>
&lt;li>&lt;a href="https://github.com/drewkhoury/pact-5-minute-getting-started-guide/blob/main/README-demo.md">https://github.com/drewkhoury/pact-5-minute-getting-started-guide/blob/main/README-demo.md&lt;/a> (PACT dockerized)&lt;/li>
&lt;li>&lt;a href="https://github.com/drewkhoury/cucumber-declarative-gherkin">https://github.com/drewkhoury/cucumber-declarative-gherkin&lt;/a> (shows chrome headless testing of apps, w/screenshots through selenium web driver, in containers - also happens to be a full BDD example with more than just some trivial tests)&lt;/li>
&lt;li>&lt;a href="https://github.com/drewkhoury/backstage-3m">https://github.com/drewkhoury/backstage-3m&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/drewkhoury/communities">https://github.com/drewkhoury/communities&lt;/a> - static site with hugo&lt;/li>
&lt;/ul>
&lt;h1 id="when-to-use-3-musketeers">When to use 3 musketeers&lt;/h1>
&lt;p>It's important to understand the goals of &lt;em>Consistancy, Control and Confidence&lt;/em> and the part each tool plays in the pattern.&lt;/p>
&lt;h2 id="cant-i-just-skip-this-and-use-my-tools-directly">Can't I just skip this and use my tools directly?&lt;/h2>
&lt;p>The benfitis of using these tools together might not be obvious if you've only worked in a single project, or in a small team or if you haven't seen a project grow in complexity over time.&lt;/p>
&lt;p>You might also be new to tools such as &lt;code>make&lt;/code>, &lt;code>compose&lt;/code> and &lt;code>docker&lt;/code> and as such the idea of introducing them into your pipeline might seem unessasary. This might be especially true if your team is working with legacy applications and you don't have any container presense in your organization or team.&lt;/p>
&lt;p>Only your organization and your team can decide if the goals of &lt;em>Consistancy, Control and Confidence&lt;/em> are worth the investment in pipeline standarization.&lt;/p>
&lt;p>These patterns and tools truely shine when:&lt;/p>
&lt;ul>
&lt;li>Developers start to seek &amp;quot;fast feedback&amp;quot; by &amp;quot;shifting left&amp;quot; - ie wanting to run some tests early (before they commit code)&lt;/li>
&lt;li>Working in larger teams&lt;/li>
&lt;li>With different underlying development machines - or with developers who install different versions of software (how much time did a new developer spend getting a working build env?)&lt;/li>
&lt;li>Across multiple teams in large oragnizations&lt;/li>
&lt;li>With CI/CD agents managed by other teams where changes to agents are not easy and you don't have permission/flexibility (did someone upgrade a build agent and break how java works for you? how would you know?)&lt;/li>
&lt;li>When having to share code between vendors&lt;/li>
&lt;li>The more complex the application gets, or as more changes are made to the application and it's build steps (having to refactor or share build steps either within your team or between teams)&lt;/li>
&lt;li>Testing your pipeline code (how many times have you done 20 check-ins of code just to test one bit of functionaility &amp;quot;on the build server&amp;quot;)&lt;/li>
&lt;/ul>
&lt;h1 id="the-3-tools">The 3 tools&lt;/h1>
&lt;p>As the name implies 3 musketeers is made up of 3 tools: &lt;a href="https://3musketeersdev.netlify.app/about/tools.html">https://3musketeersdev.netlify.app/about/tools.html&lt;/a>&lt;/p>
&lt;h2 id="docker">Docker&lt;/h2>
&lt;p>Docker is the &lt;strong>most important musketeer of the three&lt;/strong>.&lt;/p>
&lt;p>Many tasks such as testing, building, running, and deploying can all be done inside a lightweight Docker container.&lt;/p>
&lt;p>The &lt;strong>portability of Docker&lt;/strong> ensures you can &lt;strong>execute the same tasks, the same way, on different environments&lt;/strong> like MacOS, Linux, Windows, and CI/CD tools.&lt;/p>
&lt;p>Example: Docker can be invoked directly from &lt;code>make&lt;/code>, or can be invoked from a &lt;code>docker-compose&lt;/code> command in &lt;code>make&lt;/code>.&lt;/p>
&lt;h2 id="make">Make&lt;/h2>
&lt;p>Make is a cross-platform build tool to test and build software and it is used as an &lt;strong>interface between the CI/CD server and the application code&lt;/strong>.&lt;/p>
&lt;p>A single Makefile per application defines and encapsulates all the steps for testing, building, and deploying that application.&lt;/p>
&lt;p>Of course other tools like rake or ant can be used to achieve the same goal, but having Makefile pre-installed in many OS distributions makes it a convenient choice.&lt;/p>
&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="ln">1&lt;/span>&lt;span class="c1"># Makefile&lt;/span>
&lt;span class="ln">2&lt;/span>echo:
&lt;span class="ln">3&lt;/span> docker-compose run --rm alpine &lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;Hello, World!&amp;#39;&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="compose">Compose&lt;/h2>
&lt;p>Docker Compose, or simply Compose, manages Docker containers in a very neat way.&lt;/p>
&lt;p>It allows multiple Docker commands to be written as a single one, which &lt;strong>allows our Makefile to be a lot cleaner and easier to maintain&lt;/strong>.&lt;/p>
&lt;p>Testing also often involves &lt;strong>container dependencies&lt;/strong>, such as a database, which is an area where Compose really shines. No need to create the database container and link it to your application code container manually — Compose takes care of this for you.&lt;/p>
&lt;div class="highlight">&lt;pre class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="ln">1&lt;/span>&lt;span class="c1"># docker-compose.yml&lt;/span>
&lt;span class="ln">2&lt;/span>version: &lt;span class="s1">&amp;#39;3&amp;#39;&lt;/span>
&lt;span class="ln">3&lt;/span>services:
&lt;span class="ln">4&lt;/span> alpine:
&lt;span class="ln">5&lt;/span> image: alpine
&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="cant-i-choose-my-own-mukseteers">Can't I choose my own mukseteers?&lt;/h1>
&lt;p>Who says &lt;code>make&lt;/code>, &lt;code>compose&lt;/code>, &lt;code>docker&lt;/code> are the perfect combo?&lt;/p>
&lt;p>The key to &lt;em>Consistancy, Control and Confidence&lt;/em> is not &lt;strong>only&lt;/strong> in the specific combination of &lt;code>make&lt;/code>, &lt;code>compose&lt;/code>, &lt;code>docker&lt;/code> but actually the agreement of your team and your organization to use a standard that's easy for everyone to follow.&lt;/p>
&lt;p>Consider:&lt;/p>
&lt;ul>
&lt;li>Do most of your development teams have easy access to &lt;code>make&lt;/code>, &lt;code>compose&lt;/code>, &lt;code>docker&lt;/code> - or can you agree/reach a state where this is possible?&lt;/li>
&lt;li>Do you want to replace &lt;code>make&lt;/code> with something else? (zeus, python, shell) Sure thing, just agree as a team what would be more easily to install and maintain&lt;/li>
&lt;li>Do you want to start with &lt;code>Make&lt;/code> and &lt;code>Docker&lt;/code> and introduce &lt;code>Compose&lt;/code> only when the complexity demands it?&lt;/li>
&lt;/ul>
&lt;h1 id="q--a">Q &amp;amp; A&lt;/h1>
&lt;h2 id="are-there-pre-reqs-what-if-my-workload-or-app-isnt-docker-based">Are there pre-reqs? What if my workload or app isn't docker based?&lt;/h2>
&lt;p>This pattern doesn't operate at your workload or application/deployment architecture level, it's all about the CI steps (like build, test, publish, deploy etc).&lt;/p>
&lt;p>The workload could be anything, that scope is outside of the pattern. It could be the case that your workload is containerized but that's unrelated to the higher-level pattern and how the local/CI steps are run.&lt;/p>
&lt;p>You need to agree on having Make, Compose and Docker available on developer workstations, and for the CI tool.&lt;/p>
&lt;h2 id="make-is-difficult-to-use-and-hard-to-learn">Make is difficult to use, and hard to learn&lt;/h2>
&lt;p>&lt;code>make&lt;/code> is a powerful tool that can do a lot of things. However, the intent is to use &lt;code>make&lt;/code> as a simple interface between your build tool and your build steps.&lt;/p>
&lt;p>As you should only be using the most basic features of &lt;code>make&lt;/code> it shouldn't be difficult to implement. If you're having a lot of difficulties, consider if you're over complicating your task.&lt;/p>
&lt;p>Consider some real-life simple make files (easy to read, maintain and run):&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/drewkhoury/devyo/blob/master/makefile">https://github.com/drewkhoury/devyo/blob/master/makefile&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/drewkhoury/buildkite/blob/master/Makefile">https://github.com/drewkhoury/buildkite/blob/master/Makefile&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>You could consider using &lt;a href="https://3musketeersdev.netlify.app/guide/make.html#multiple-makefiles">multiple makefiles&lt;/a> or consider &lt;a href="https://3musketeersdev.netlify.app/guide/make.html#complex-targets">another language&lt;/a> if you have complex logic that demands it.&lt;/p>
&lt;h2 id="i-really-dont-want-to-use-docker-compose---im-not-even-deploying-anything--im-using-k8s">I really don't want to use docker compose - I'm not even deploying anything / I'm using k8s&lt;/h2>
&lt;p>Don't confuse using &lt;code>docker-compose&lt;/code> during your build/test steps with deploying your application in production. With 3musketers we're looking at the patterns we use to inteface with our build tool (like building and testing your application in your pipeline).&lt;/p>
&lt;p>People often use compose files (with 3musketeers) to avoid having long and messy make files.&lt;/p>
&lt;h2 id="to-compose-or-not-to-compose">To Compose or Not to Compose?&lt;/h2>
&lt;p>If your use of docker is simple for a particular task, feel free to skip the compose file.&lt;/p>
&lt;p>&lt;a href="https://3musketeersdev.netlify.app/guide/patterns.html#docker">https://3musketeersdev.netlify.app/guide/patterns.html#docker&lt;/a>&lt;/p>
&lt;p>Make calls directly Docker instead of Compose. Everything that is done with Compose can be done with Docker. Using Compose helps to keep the Makefile clean.&lt;/p>
&lt;p>When you have a multi-line docker invocation, or 5 lines of docker commands in a single task, consider if compose could simplify things for you.&lt;/p>
&lt;p>&lt;a href="https://3musketeersdev.netlify.app/guide/patterns.html#task-management-tool">https://3musketeersdev.netlify.app/guide/patterns.html#task-management-tool&lt;/a> shows an example of how to implement an &amp;quot;npm&amp;quot; command &amp;quot;cleanly&amp;quot;.&lt;/p>
&lt;p>Notice that the compose file does all the volume mounting, workdir (and would do all the env injection etc).&lt;/p>
&lt;p>Consider an even more complex senerio that invovled multiple services, logs, naming of containers, starting and stopping containers, cleanup when done.&lt;/p>
&lt;h2 id="how-will-i-manage-container-versionsinstances">How will I manage container versions/instances&lt;/h2>
&lt;p>Without container images in your CI pipeline you may have managed binaries and software through an artifact store like Artifactory. You would use a similar approach for containers too.&lt;/p>
&lt;p>Your organization will need to decide how teams can pull images (directly from the Internet, or through Artifactory as a proxy etc), and have a model for developers to be able to maintain and update docker images. Often docker images that need customization will need their own pipelines and independent lifecycle management (assuming you need to extend the features of a docker image maintained somewhere like Docker Hub).&lt;/p>
&lt;p>This concern also exists without the use of 3 Muskteers, if your organization uses docker images in anywhere in any capacity (ie for application deployment or in any other part of the organization). As long as docker images aren't banned in your organization, and you have any need to modify or update a docker image anywhere, you'll have to solve for this.&lt;/p>
&lt;h2 id="wont-i-have-to-do-more-scripting-to-do-things-like-export-the-results-of-scan-details-and-test-results-out-to-another-location">Won't I have to do more scripting to do things like export the results of scan details and test results out to another location?&lt;/h2>
&lt;p>Yes, there's an extra layer with docker that introduces volume mounts, a more careful look at permissions and ownership, and files need to be stored/saved outside the container run. That's an overhead and a bit of a learning journey which can be painful to begin with, especially without docker knowledge. Generally once you get those patterns working well, you have less issues moving forward (and you can repeat/share the patterns), and imprpoving your docker skills may be useful if you need them for your app development too.&lt;/p>
&lt;p>This question ends up being one about tradeoffs as you get more consistency and reuse across Linux/Mac/Windows and your CI tool, you make life easier if you ever move CI tools (think about moves to GitLab, Azure, GitHub etc), and setup is a breeze for new devs joining the company or the team.&lt;/p>
&lt;p>The key advice here is to use small containers that have a single binary and a single purpose, when they do an operation that produces an output it should be available via a volume mount that allows easy access either via your workstation or CI tool, after that it's functionally the same as having run it without docker.&lt;/p>
&lt;p>&lt;em>Alternative:&lt;/em> In theory you could cheat the pattern a little here by using native container image steps in a tool like GitLab/GitHub to reduce the work you need to do to mount files and export them, but it does make it less portable for local usage or if you ever move CI tools.&lt;/p>
&lt;p>&lt;em>Alternative:&lt;/em> If you were to not use containers at all you wouldn't be able to run everywhere as easily and as consistently, which would arguably shift some toil back to developers.&lt;/p>
&lt;h2 id="whos-responsibility-is-it">Who's responsibility is it?&lt;/h2>
&lt;p>3musketeers &lt;strong>will not&lt;/strong> stop you from writing bad pipelines or bad code.&lt;/p>
&lt;p>3musketeers &lt;strong>will not&lt;/strong> write your build steps for you.&lt;/p>
&lt;p>3musketeers &lt;strong>will not&lt;/strong> replace your build process or your build tool.&lt;/p>
&lt;p>3musketeers &lt;strong>will not&lt;/strong> deploy your application for you.&lt;/p>
&lt;p>3musketeers &lt;strong>will not&lt;/strong> store metadata or artifacts during your build process.&lt;/p>
&lt;p>For example, if your project, team or organization creates a docker container to provide some sort of functionality (e.g a sonar scanner image) this docker image should have it's own:&lt;/p>
&lt;ul>
&lt;li>documentation&lt;/li>
&lt;li>development lifecycle&lt;/li>
&lt;li>versioning / latest tags in git and in it's artifact store&lt;/li>
&lt;li>versions should be immutable - never override a version with new code&lt;/li>
&lt;li>if the container is run without the approriate environment variables, it should set sensible defaults where it can, and fail with explict error messages where it can't set a defaults&lt;/li>
&lt;li>requirements about connectitity should be well documented (and properly testing with proper errors when there's lack of connecivity)&lt;/li>
&lt;li>auth should be clearly documented and variablized&lt;/li>
&lt;li>if volume mounts are required and if files are outputted, this should be clearly articulated&lt;/li>
&lt;/ul>
&lt;p>Making changes:&lt;/p>
&lt;ul>
&lt;li>scripts/containers should allow you to override config files and/or supply additional config files or variables to override defaults (thus reducing the need to change the container/script itself each time)&lt;/li>
&lt;li>if your container is really a packaging mechinisum for a script consider how the script will be used and if it's better to be baked into the container (ie each change to the script should cause a new version of the container) or if you'd like users to maintain the script themselves and simply call the container with the script mounted into it&lt;/li>
&lt;/ul></description></item><item><title>Optimizing for a Cloud-native Developer Experience</title><link>https://www.drewkhoury.com/post/2022-03-23_optimizing-for-cloud-native-developer-experience/</link><pubDate>Wed, 23 Mar 2022 19:22:11 +0000</pubDate><guid>https://www.drewkhoury.com/post/2022-03-23_optimizing-for-cloud-native-developer-experience/</guid><description>
&lt;p>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>
&lt;ul>
&lt;li>Originally presented by Chris and Drew &lt;a href="https://www.meetup.com/AWSMeetupGroup/events/284359969/">Optimizing for Developer Experience in a Cloud Native World&lt;/a> - AWS Meetup Group&lt;/li>
&lt;li>Concepts based on the work from Tim Cochran via Martin Fowler &lt;a href="https://martinfowler.com/articles/developer-effectiveness.html">Maximizing Developer Effectiveness&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://miro.com/app/board/uXjVOR9lSQM=/">Cloud Native DX&lt;/a> miro board for presentation content&lt;/li>
&lt;li>Following the &lt;a href="https://www.drewkhoury.com/post/gsd/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2/">3 Musketeers&lt;/a> pattern&lt;/li>
&lt;/ul>
&lt;p>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>
&lt;div class="video embed-responsive embed-responsive-16by9">
&lt;iframe src="https://www.youtube.com/embed/6MP1u7O_3bY?enablejsapi=1" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;h2 id="micro-feedback-loops">Micro feedback loops&lt;/h2>
&lt;blockquote>
&lt;p>&amp;quot;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.&amp;quot; - Tim Cochran&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/drew-and-chris-white.png" alt="">&lt;/p>
&lt;h2 id="demo">Demo&lt;/h2>
&lt;p>Demo Repo: &lt;a href="https://github.com/chrishart0/gsd-aws-cdk-serverless-example">GSD-AWS-CDK-Serverless-Example&lt;/a>&lt;/p>
&lt;p>If you have &lt;code>make&lt;/code>, &lt;code>docker-compose&lt;/code> and &lt;code>docker&lt;/code> installed you should be able to have a local env running in a few minutes.&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>git clone git@github.com:chrishart0/gsd-aws-cdk-serverless-example.git &amp;amp;&amp;amp; cd gsd-aws-cdk-serverless-example
&lt;span class="ln">2&lt;/span>make install &amp;amp;&amp;amp; make run
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Hint: If you run &lt;code>make&lt;/code> 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>
&lt;p>Micro feedback loops demonstrated in this repo:&lt;/p>
&lt;ul>
&lt;li>Unit tests (front-end, back-end, infra)&lt;/li>
&lt;li>Local environment - available in the browser&lt;/li>
&lt;li>End-to-end tests&lt;/li>
&lt;li>Direct deployment to AWS from your workstation&lt;/li>
&lt;li>CI/CD runs the same as local, with additional security checks&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://github.com/chrishart0/gsd-aws-cdk-serverless-example/blob/master/infrastructure/Infra-Diagram.drawio.png?raw=true" alt="">&lt;/p>
&lt;h1 id="giving-us-your-feedback-loop">Giving us your feedback (loop)&lt;/h1>
&lt;p>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>
&lt;ul>
&lt;li>Contact &lt;a href="https://arcadian.cloud/contact-me">Chris&lt;/a>&lt;/li>
&lt;li>Contact &lt;a href="https://www.drewkhoury.com/drew/">Drew&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/chrishart0/gsd-aws-cdk-serverless-example/issues">Raise an issue&lt;/a> in the repo&lt;/li>
&lt;/ul></description></item><item><title>A Well Architected Landing Zone</title><link>https://www.drewkhoury.com/post/public/a-well-architected-landing-zone/</link><pubDate>Wed, 19 Jan 2022 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/a-well-architected-landing-zone/</guid><description>
&lt;div class="video embed-responsive embed-responsive-16by9">
&lt;iframe src="https://www.youtube.com/embed/aTTVbT6GTs4?enablejsapi=1" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;p>I cover the basics of what an AWS Landing Zone (LZ) is and why we need them.&lt;/p>
&lt;p>Topics include best practices around building your own LZ, including approaches for value-focused LZs.&lt;/p>
&lt;p>I also share my lessons learned after years of building LZ’s in AWS, and dive into Cloud Guard rails that set you up for success (Automation, Self-Service, BreakGlass and more).&lt;/p>
&lt;p>Event Info: &lt;a href="https://www.meetup.com/AWSMeetupGroup/events/282840684">https://www.meetup.com/AWSMeetupGroup/events/282840684&lt;/a>&lt;/p>
&lt;p>Presentation: &lt;a href="https://miro.com/app/board/uXjVObiSA18=/">https://miro.com/app/board/uXjVObiSA18=/&lt;/a> - Password: lzawsgood&lt;/p>
&lt;p>Links used in the presentation:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://medium.com/@bachlmayr/https-medium-com-friends-dont-let-friends-build-landing-zones-12f491e0388f">(2019) Friends Don’t Let Friends Build Landing Zones&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://aws.amazon.com/blogs/aws/new-aws-control-tower-account-factory-for-terraform/">(2019) New – AWS Control Tower Account Factory for Terraform&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://aws.amazon.com/blogs/mt/scale-multi-account-architecture-aws-network-firewall-and-aws-control-tower/">(2021) Securely scale multi-account architecture with AWS Network Firewall and AWS Control Tower&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.drewkhoury.com/post/gsd/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570/">(2021) How Cloud Transformation at Scale can enable Good Software Delivery&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Value Stream Map (VSM) Visualization</title><link>https://www.drewkhoury.com/post/2021-11-24_value-stream-map-visualization/</link><pubDate>Wed, 24 Nov 2021 19:22:11 +0000</pubDate><guid>https://www.drewkhoury.com/post/2021-11-24_value-stream-map-visualization/</guid><description>
&lt;p>This post is based on a repo I created to Visualize VSMs: &lt;a href="https://github.com/drewkhoury/vsm">https://github.com/drewkhoury/vsm&lt;/a>&lt;/p>
&lt;h2 id="how-traditional-value-streams-work">How traditional value streams work&lt;/h2>
&lt;p>&lt;a href="https://en.wikipedia.org/wiki/Value-stream_mapping">Value-stream mapping&lt;/a> on wikipedia.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/vsm/ValueStreamMapParts.png" alt="ValueStreamMap Parts">&lt;/p>
&lt;p>Each step is represented in a uniform fashion on the diagram. You can scan the diagram and find out that 6 days is the largest lead time, however this takes more effort to do the more steps we add. There's a high cognitive burden when trying to process numbers and find the largest one.&lt;/p>
&lt;p>This &lt;strong>isn't the only way&lt;/strong> we can represent the data, and our visulizations shouldn't stop here!&lt;/p>
&lt;p>What if we could &lt;strong>more easily&lt;/strong> visulaize the flow of work, and the biggest contraints in the system?&lt;/p>
&lt;h2 id="vsm-visualizer-the-perfect-companion-to-the-vsm">VSM Visualizer (The perfect companion to the VSM)&lt;/h2>
&lt;p>This script creates a &lt;strong>Value Stream Map Visualization&lt;/strong> in Miro, using Google Sheets as in input.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/vsm/vsm.gif" alt="vsm">&lt;/p>
&lt;p>It's a slightly different way to view the data that's captured in a VSM workshop that can compliment more traditional daigrams.&lt;/p>
&lt;h2 id="running-the-script">Running the script&lt;/h2>
&lt;p>The script connects to miro and sheets APIs, and expects some env vars and an authentication file &lt;code>credentials.json&lt;/code>.&lt;/p>
&lt;p>Once you have the &lt;a href="#authentication-and-setup">required auth/setup&lt;/a>, run the script with the following commands:&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>export MIRO_TOKEN=&amp;#39;XXX&amp;#39;
&lt;span class="ln">2&lt;/span>export MIRO_BOARD=&amp;#39;XXX&amp;#39;
&lt;span class="ln">3&lt;/span>
&lt;span class="ln">4&lt;/span>export SHEET_ID=&amp;#39;XXX&amp;#39; # or skip this to use the example sheet
&lt;span class="ln">5&lt;/span>
&lt;span class="ln">6&lt;/span>python3 ./vsm.py
&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a href="https://docs.google.com/spreadsheets/d/1uazcbZjvfpCHL2ZwPoVc0gWjK7R5pMO9D8cxkKQ40C0/">Example sheet&lt;/a> and miro board:
&lt;img src="https://www.drewkhoury.com/vsm/sheet-and-miro.png" alt="sheet and miro">&lt;/p>
&lt;h3 id="controlling-the-grid-optional-env-vars">Controlling the grid (optional env vars):&lt;/h3>
&lt;p>This part isn't required, but for those wanting more control on how the diagram looks, there are two env vars that you can use.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Env Var&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Info&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>GRID_X&lt;/code>&lt;/td>
&lt;td>largest value in sheet which is calulated and stored in &lt;code>D2&lt;/code>&lt;/td>
&lt;td>Specifies how large the grid should be along the X axis&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>GRID_Y&lt;/code>&lt;/td>
&lt;td>&lt;code>1&lt;/code>&lt;/td>
&lt;td>Specifies how large the grid should be along the Y axis&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="default-grid-one-row">Default grid (one row)&lt;/h4>
&lt;p>The default values result in a single row for each step, with each neatly fitting below the other and no wrapping or varied spaces between steps.&lt;/p>
&lt;p>It's easy to tell which steps are the longest, though for large numbers you'll have to zoom out to see the whole VSM.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/vsm/grid-single.png" alt="grids">&lt;/p>
&lt;h4 id="custom-grids">Custom grids&lt;/h4>
&lt;p>It's possible to specify any grid size (e.g 5x5, 2x12, 100x3), with grids repeating in the X axis as needed. This can be desirable to make use of vertical space when you steps have large numbers.&lt;/p>
&lt;p>Here's the same data, with &lt;code>GRID_X=5&lt;/code>,&lt;code>GRID_Y=5&lt;/code> (creating a 5x5 grid for each step, and for steps with more than 25, multiple grids along the x axis):
&lt;img src="https://www.drewkhoury.com/vsm/grids.png" alt="grids">&lt;/p>
&lt;p>The script ensure uniform spacing between steps based on the largest possible row size, in this case &lt;code>GRID_Y=5&lt;/code>. This means more space between steps that don't have large numbers.&lt;/p>
&lt;h2 id="authentication-and-setup">Authentication and Setup&lt;/h2>
&lt;p>You will need authentication for both miro and google sheets.&lt;/p>
&lt;p>&lt;strong>Miro&lt;/strong>&lt;/p>
&lt;p>Create miro token: &lt;a href="https://developers.miro.com/docs/getting-started">https://developers.miro.com/docs/getting-started&lt;/a>&lt;/p>
&lt;p>Create miro board (or use existing):&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> curl --request POST \
&lt;span class="ln">2&lt;/span> --url &amp;#39;https://api.miro.com/v1/boards?fields=foo&amp;#39; \
&lt;span class="ln">3&lt;/span> --header &amp;#39;Accept: application/json&amp;#39; \
&lt;span class="ln">4&lt;/span> --header &amp;#39;Authorization: Bearer XXX&amp;#39; \
&lt;span class="ln">5&lt;/span> --header &amp;#39;Content-Type: application/json&amp;#39; \
&lt;span class="ln">6&lt;/span> --data &amp;#39;
&lt;/code>&lt;/pre>&lt;/div>&lt;p>Env vars for the script:&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>export MIRO_TOKEN=&amp;#39;Bearer XXX&amp;#39;
&lt;span class="ln">2&lt;/span>export MIRO_BOARD=&amp;#39;XXX&amp;#39;
&lt;span class="ln">3&lt;/span>
&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Google Sheets&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://console.cloud.google.com/apis/dashboard">https://console.cloud.google.com/apis/dashboard&lt;/a>
enable apis and services &amp;gt; sheets&lt;/p>
&lt;p>&lt;a href="https://console.cloud.google.com/apis/credentials">https://console.cloud.google.com/apis/credentials&lt;/a>
oauth &amp;gt; desktop&lt;/p>
&lt;p>save as &lt;code>credentials.json&lt;/code>&lt;/p>
&lt;p>Env vars for the script:&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>export SHEET_ID=&amp;#39;XXX&amp;#39; # or skip to use the example sheet
&lt;/code>&lt;/pre>&lt;/div></description></item><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>Miro Masterclass</title><link>https://www.drewkhoury.com/post/public/miro-masterclass/</link><pubDate>Tue, 26 Oct 2021 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/miro-masterclass/</guid><description>
&lt;p>This webinar walks you through many different features in Miro using a Miro board you can follow along with.&lt;/p>
&lt;p>We cover use of post-its, locking items, frames and presentations, voting, timers, zoom levels, and even kanban boards!&lt;/p>
&lt;p>Watch the video on YouTube &lt;a href="https://www.youtube.com/watch?v=DTvyOeChr2k">Miro Masterclass&lt;/a> or play the video below:&lt;/p>
&lt;div class="video embed-responsive embed-responsive-16by9">
&lt;iframe src="https://www.youtube.com/embed/DTvyOeChr2k?enablejsapi=1" allowfullscreen>&lt;/iframe>
&lt;/div></description></item><item><title>The great tech debate</title><link>https://www.drewkhoury.com/post/public/great-tech-debate/</link><pubDate>Tue, 26 Oct 2021 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/great-tech-debate/</guid><description>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/tech-debate.jpg" alt="">&lt;/p>
&lt;p>On Tuesday October 26, Contino’s Melissa Aydin, Head of TalentOps and James Strong, Cloud Native Director, along with our two teams of tech experts presented The Great Tech Debate of 2021. Based on their industry experience and work with our clients, our teams debated between four major topics, with timed answers and a rebuttal at the end of each.&lt;/p>
&lt;div class="video embed-responsive embed-responsive-16by9">
&lt;iframe src="https://www.youtube.com/embed/H5C5uQF1JYE?enablejsapi=1" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;p>Topics included:&lt;/p>
&lt;ul>
&lt;li>How to go Serverless - what does your organization need to consider in terms of operations, security and deployment?&lt;/li>
&lt;li>What are the differences between IaC (Infrastructure as Code) or IaS (Infrastructure as Software)?&lt;/li>
&lt;li>How can development teams refactor their application successfully?&lt;/li>
&lt;li>What is cloud security, why is it important, and how does it work?&lt;/li>
&lt;/ul></description></item><item><title>Technical Principals at Contino</title><link>https://www.drewkhoury.com/post/public/technical-principals-at-contino/</link><pubDate>Wed, 15 Sep 2021 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/technical-principals-at-contino/</guid><description>
&lt;p>Join Greg and I as we run through what it’s like to be a Technical Principal at Contino.&lt;/p>
&lt;div class="video embed-responsive embed-responsive-16by9">
&lt;iframe src="https://www.youtube.com/embed/l0Kzcst1uH8?enablejsapi=1" allowfullscreen>&lt;/iframe>
&lt;/div></description></item><item><title>3 Musketeers for an epic Developer Experience</title><link>https://www.drewkhoury.com/post/gsd/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2/</link><pubDate>Sat, 28 Aug 2021 14:18:09 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2/</guid><description>
&lt;p>We all want to reduce toil and improve the developer experience (when starting new applications or joining the team). Developers have had to invest significant time in creating production-ready pipelines when building new products and configuring their workstations when joining teams. Their workstations may not run all the same tests as their pipeline and thus they’re left with &lt;a href="https://www.linkedin.com/feed/hashtag/?keywords=slowfeedback&amp;amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A6835918781475246080">#slowfeedback&lt;/a> and an inconsistent experience.&lt;/p>
&lt;p>The larger the organization (ie Enterprise with 10’s-100’s of teams and applications) the worse the problem gets.&lt;/p>
&lt;p>GSD is built on the principle of reusability through a pattern called &lt;a href="https://3musketeers.io/">3 Musketeers&lt;/a> (test, build, and deploy your apps from anywhere, the same way). It gives consistency, control, and confidence to development teams.&lt;/p>
&lt;p>Docker is a key part of this pattern, but the use of &lt;code>docker&lt;/code>, &lt;code>docker-compose&lt;/code> and &lt;code>make&lt;/code> together really unlock the powers of consistency, control and confidence in your application build, test and deploy steps. The &lt;a href="https://3musketeers.io/docs/">3musketeers Docs&lt;/a> have some great examples of these patterns.&lt;/p>
&lt;p>Here's what the most simple usage looks like:&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*O8UwDvze7KXEDKLKgqevcw.jpeg" alt="">&lt;/p>
&lt;p>While the pattern itself is simple, the power (and benefit) comes from the widespread usage across your organization. Here’s what usage might look like:&lt;/p>
&lt;ul>
&lt;li>Agree on a standard interface for all pipeline actions (much like API’s have an agreed interface, all pipelines in the org use the same interface, ie `make build`, `make test`, `make deploy`)&lt;/li>
&lt;li>Keep the interface simple (avoid custom pipeline logic, one simple Makefile calls Compose, the container handles all the logic)&lt;/li>
&lt;li>Create docker containers for each pipeline step, make them stateless, reuse them where it makes sense&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*hdKr28atovmEGFkBRaOIXA.jpeg" alt="">&lt;/p>
&lt;p>&lt;strong>Wins:&lt;/strong> Modern pipelines already support running steps in docker containers. This pattern extends portability across almost any pipeline tool or development workstation and runs the same way in every single environment. Pipeline steps can be tested independently and reused. This pattern makes it easy to go one step further and generate pipelines on-demand based on boilerplate starter templates. Oh yeah, and &lt;a href="https://www.linkedin.com/feed/hashtag/?keywords=fastfeedback&amp;amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A6835918781475246080">#fastfeedback&lt;/a> (we’re talking pre-commit).&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/3-musketeers-for-an-epic-developer-experience-8676ddaf33b2">3 Musketeers for an epic Developer Experience&lt;/a>.&lt;/p>
&lt;/div>
&lt;p>_&lt;/p></description></item><item><title>AWS 2021 Highlights</title><link>https://www.drewkhoury.com/post/aws-2021-highlights-b16b6c59b4fe/</link><pubDate>Fri, 27 Aug 2021 14:37:40 +0000</pubDate><guid>https://www.drewkhoury.com/post/aws-2021-highlights-b16b6c59b4fe/</guid><description>
&lt;p>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/">https://aws.amazon.com/about-aws/whats-new/2021/&lt;/a>&lt;/p>
&lt;p>This blog will highlight some of my favorite AWS updates for 2021.&lt;/p>
&lt;h3 id="aws-networkfirewall">AWS Network Firewall&lt;/h3>
&lt;p>&lt;a href="https://aws.amazon.com/network-firewall/">https://aws.amazon.com/network-firewall/&lt;/a> — A managed service by AWS that allows fine-grained control over network traffic.&lt;/p>
&lt;p>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>
&lt;p>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/">https://aws.amazon.com/about-aws/whats-new/2021/01/aws-network-firewall-is-now-available-in-the-asia-pacific-sydney-region/&lt;/a>&lt;/p>
&lt;p>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>PCI DSS Compliant&lt;/strong>.&lt;/p>
&lt;h3 id="amazon-ebs-io2-block-expressvolumes">Amazon EBS io2 Block Express Volumes&lt;/h3>
&lt;p>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>
&lt;p>&lt;a href="https://aws.amazon.com/about-aws/whats-new/2021/07/aws-announces-general-availability-amazon-ebs-block-express-volumes/">https://aws.amazon.com/about-aws/whats-new/2021/07/aws-announces-general-availability-amazon-ebs-block-express-volumes/&lt;/a>&lt;/p>
&lt;ul>
&lt;li>up to 4x higher throughput, IOPS, and capacity than io2 volumes&lt;/li>
&lt;li>designed to deliver sub-millisecond latency&lt;/li>
&lt;li>99.999% durability&lt;/li>
&lt;li>Supports Multi-Attach and Elastic Volumes&lt;/li>
&lt;/ul>
&lt;p>Customers can now provision a single io2 volume with up to &lt;strong>256,000 IOPS&lt;/strong>, 4000 MB/s of throughput, and a storage capacity of 64 TiB.&lt;/p>
&lt;h3 id="privatelink-for-amazons3">PrivateLink for Amazon S3&lt;/h3>
&lt;p>As of February, Amazon S3 supported AWS PrivateLink, providing direct access to S3 via a private endpoint within your virtual private network.&lt;/p>
&lt;p>&lt;a href="https://aws.amazon.com/about-aws/whats-new/2021/02/amazon-s3-now-supports-aws-privatelink/">https://aws.amazon.com/about-aws/whats-new/2021/02/amazon-s3-now-supports-aws-privatelink/&lt;/a>&lt;/p>
&lt;ul>
&lt;li>Simplify your network architecture by connecting to S3 from on-premises&lt;/li>
&lt;li>In AWS, use private IP addresses in your Virtual Private Cloud (VPC) to connect to S3&lt;/li>
&lt;/ul>
&lt;p>This eliminates the need to use public IPs, configure firewall rules, or configure an Internet Gateway to connect to S3.&lt;/p>
&lt;p>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/">https://aws.amazon.com/about-aws/whats-new/2021/07/aws-lowers-data-processing-charges-aws-privatelink/&lt;/a>.&lt;/p>
&lt;h3 id="summary">Summary&lt;/h3>
&lt;p>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>
&lt;p>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/">Happy Birthday AWS/EC2&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/aws-2021-highlights-b16b6c59b4fe">AWS 2021 Highlights&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>Good Software Delivery — Trust and Verify</title><link>https://www.drewkhoury.com/post/gsd/good-software-delivery-trust-and-verify-ced74fa04b39/</link><pubDate>Tue, 24 Aug 2021 13:23:48 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/good-software-delivery-trust-and-verify-ced74fa04b39/</guid><description>
&lt;p>I’ve decided this week is Good Software Delivery week! #goodsoftwaredelivery&lt;/p>
&lt;p>The concept of GSD is something I’ve implemented for clients in one form or another over the years, and you might have done something similar without knowing it.&lt;/p>
&lt;p>I remember one particular collaboration with a small but amazing team. We helped implement a particular flavor of GSD and unlocked value for the business.&lt;/p>
&lt;p>In this diagram, we’re showing that the “path to production” can be codified. By making the process transparent and available to developers, we can show them “what good looks like” on day one.&lt;/p>
&lt;p>The last thing you want as a developer is to find yet another requirement before you can push to production, so using the “&lt;strong>Trust and Verify&lt;/strong>” model helps development move fast. This pattern also removes any manual surprises when trying to deploy to production, thus getting software in the hands of your users quicker!&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*hN2CBgBbRI5Z-yOdc5ZSWA.jpeg" alt="">&lt;/p>
&lt;p>The “Trust and Verify” Pipeline Pattern is part of a wider effort of &lt;a href="https://medium.com/@drew.khoury/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570">Transformation through Good Software Delivery&lt;/a>.&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/good-software-delivery-trust-and-verify-ced74fa04b39">Good Software Delivery — Trust and Verify&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>How Cloud Transformation at Scale can enable Good Software Delivery</title><link>https://www.drewkhoury.com/post/gsd/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570/</link><pubDate>Wed, 04 Aug 2021 22:50:33 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570/</guid><description>
&lt;p>&lt;strong>Why should you transform?&lt;/strong>&lt;/p>
&lt;p>Each person, team and organization is going to be on their own journey to cloud, writing good software and attempting to delight customers, or increase profitability. Finding your why can take some time and deep thinking (and deserves a whole blog to itself).&lt;/p>
&lt;p>For now here are some common why’s for transformation and good software delivery that might also apply to you:&lt;/p>
&lt;ul>
&lt;li>To enable product (development) teams to ship software with less dependencies on other teams/humans&lt;/li>
&lt;li>To speed up delivery&lt;/li>
&lt;li>Allow the business to scale products quickly&lt;/li>
&lt;li>To build new products quickly&lt;/li>
&lt;li>To support the business in getting fast feedback through frequent delivery&lt;/li>
&lt;li>To achieve consistency in infrastructure and software deployment, so we can reduce the risk of issues due to manual changes&lt;/li>
&lt;li>To reduce the manual but repeatable steps close to production (security and compliance checks) that often slow down or delay releases&lt;/li>
&lt;/ul>
&lt;h3 id="a-picture">A picture&lt;/h3>
&lt;p>If a picture tells a thousands words, then I present to you Cloud Transformation at Scale:&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*obz2kdYqD143JskvbI63qA@2x.jpeg" alt="">&lt;/p>
&lt;h3 id="cloud-landingzone">Cloud Landing Zone&lt;/h3>
&lt;p>&lt;strong>In purple&lt;/strong> we have the “Cloud Landing Zone” which is the starting point for key cross-cutting concerns that span the entire organization:&lt;/p>
&lt;ul>
&lt;li>Automated Account-Provisioning for shared Cloud Accounts&lt;/li>
&lt;li>Account Guardrails&lt;/li>
&lt;li>Security &amp;amp; Logging Accounts (SIEM &amp;amp; IAM)&lt;/li>
&lt;li>Networking Foundations&lt;/li>
&lt;li>Shared-Services Account&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*EJiHVj3rI6G7yBcJ2ciaTg.png" alt="">&lt;/p>
&lt;p>This is the foundation of most modernization efforts that depend on the Cloud. Automation of Accounts &amp;amp; Infrastructure unlocks the ability to “move fast” in a way that traditional on-prem data center or operation teams aren’t able to match.&lt;/p>
&lt;p>Most organization on their cloud journey are building or buying some variation of this or started off with some manual steps and a few scripts, and are maturing their operations to look at lot like this as they scale.&lt;/p>
&lt;h3 id="services-for-developers">Services for Developers&lt;/h3>
&lt;p>&lt;strong>In red&lt;/strong> we have the next set of shared services focused on supporting product (and thus development) teams. This includes:&lt;/p>
&lt;ul>
&lt;li>Automated Infrastructure-Provisioning for Shared Services (think shared k8s clusters)&lt;/li>
&lt;li>Common Shared Services (build agents, artifact storage etc)&lt;/li>
&lt;li>&lt;strong>Self-Service&lt;/strong> Cloud Accounts for Product teams (self-service being the key)&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*Hihqnj23GgtE4K7FVNynRA.png" alt="">&lt;/p>
&lt;p>It’s important that developers can manage their own accounts via a self-service mechanism (if you’re an organization with more than 10 developers). This means automated pipelines for infrastructure and account provisioning that have a well thought out developer-experience that make it easy for them to manage their own accounts, securely (ie with Account Guardrails built into the pipelines and Cloud Accounts), and sans human intervention.&lt;/p>
&lt;h3 id="product-teamstrust-andverify">Product Teams — Trust and Verify&lt;/h3>
&lt;p>&lt;strong>In blue&lt;/strong> we have application and app-related infrastructure pipeline(s). Each commit should result in a single artifact built and tested then promoted into production if it passes the automated tests.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*EqfvF7VaSp6iHE-MT4FeMw.png" alt="">&lt;/p>
&lt;p>Developers should have access to reference pipelines that show exactly how to pass all the organizational, security and compliance requirements (which should all be automated within the pipeline). It should be easy to start a new project that can quickly pass through the pipeline into production.&lt;/p>
&lt;p>Developers should have the freedom (&lt;strong>and trust&lt;/strong>) to do whatever they need to do before they reach production. They should have access to every automated security and compliance check that will be run in production so they can quickly assess how ready they are for production &lt;strong>on the very first commit&lt;/strong>.&lt;/p>
&lt;p>The organization should automatically verify every production deployment with the same rules they supplied the developers on day-one, commit-one. No surprises, no extra work to do on production-day.&lt;/p>
&lt;p>This seems like a simple concept, and the name I give it is “&lt;strong>Good Software Delivery&lt;/strong>” because it’s simply how we all should be delivering the software we want to ship.&lt;/p>
&lt;p>&lt;strong>So how does one transform?&lt;/strong> In practice it’s a journey that individuals, teams and organizations need to be prepared to go down. And that’s a completely different rabbit hole I welcome you to explore: &lt;a href="https://faun.pub/one-devops-please-part-1-df7a2787fde8">https://faun.pub/one-devops-please-part-1-df7a2787fde8&lt;/a>&lt;/p>
&lt;p>&lt;strong>Appendix&lt;/strong>&lt;/p>
&lt;p>We could go deeper into each area, but here’s a quick teaser that goes into more detail, in particular for the blue Product Team’s Pipeline(s):&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*v4L4-9CU-9yLSsTZ8Dm1eA@2x.jpeg" alt="">&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Also posted on medium as &lt;a href="https://medium.com/@drew.khoury/how-cloud-transformation-at-scale-can-enable-good-software-delivery-4a6645d4c570">How Cloud Transformation at Scale can enable Good Software Delivery&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>The Manager README</title><link>https://www.drewkhoury.com/post/the-manager-readme-a7edc99d9bfe/</link><pubDate>Wed, 04 Aug 2021 21:38:30 +0000</pubDate><guid>https://www.drewkhoury.com/post/the-manager-readme-a7edc99d9bfe/</guid><description>
&lt;p>When I discovered that someone had developed a README for humans my geeky heart was overjoyed. A Manager Readme is your quick reference to working with your lead and it’s an amazing idea executed well.&lt;/p>
&lt;h3 id="whats-in-areadme">What’s in a README?&lt;/h3>
&lt;p>Let’s geek out on actual READMEs for a minute: &lt;a href="https://en.wikipedia.org/wiki/README">https://en.wikipedia.org/wiki/README&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>README&lt;/strong> &lt;a href="https://en.wikipedia.org/wiki/File_%28computing%29" title="File (computing)">file&lt;/a> contains information about other files in a &lt;a href="https://en.wikipedia.org/wiki/Directory_%28file_systems%29" title="Directory (file systems)">directory&lt;/a> or &lt;a href="https://en.wikipedia.org/wiki/Archive_%28computing%29" title="Archive (computing)">archive&lt;/a> of computer &lt;a href="https://en.wikipedia.org/wiki/Software" title="Software">software&lt;/a>. A form of &lt;a href="https://en.wikipedia.org/wiki/Software_documentation" title="Software documentation">documentation&lt;/a>, it is usually a simple &lt;a href="https://en.wikipedia.org/wiki/Plain_text" title="Plain text">plain text&lt;/a> file called &lt;code>READ.ME&lt;/code>, &lt;code>README.TXT&lt;/code>,&lt;a href="https://en.wikipedia.org/wiki/README#cite_note-ESR_1996_Dict-1">[1]&lt;/a> &lt;code>README.md&lt;/code> (for a text file using &lt;a href="https://en.wikipedia.org/wiki/Markdown" title="Markdown">markdown&lt;/a> markup), &lt;code>README.1ST&lt;/code> – or simply &lt;code>README&lt;/code>.&lt;/p>
&lt;/blockquote>
&lt;p>So just like developers write READMEs to help explain their code, you can write a Manager Readme as a source of truth in case you see something that surprises you when working with your lead.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*uUZClr5f3OdZ53m3" alt="">&lt;/p>
&lt;h3 id="andrew-khourysreadme">Andrew Khoury’s README&lt;/h3>
&lt;p>If you’d like to find out what it’s like to work with me you’ll find my README here: &lt;a href="https://managerreadme.com/readme/drewkhoury">https://managerreadme.com/readme/drewkhoury&lt;/a> — or checkout this snippet:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>I’m here to deliver exceptional engineering solutions, remove roadblocks, and shield the team&lt;/strong>&lt;/p>
&lt;p>At its core, I do three things for the team:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Deliver exceptional engineering solutions&lt;/strong> by writing code, pairing with great engineers, uplifting the skills of my team, and helping the team solve complex problems through my experience or facilitating technical workshops to solve problems together&lt;/li>
&lt;li>&lt;strong>Remove roadblocks&lt;/strong> stopping us getting things done&lt;/li>
&lt;li>&lt;strong>Shield the team&lt;/strong> from interruptions and distractions&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> &lt;em>I borrowed heavily from&lt;/em> &lt;a href="https://managerreadme.com/readme/auxesis">&lt;em>https://managerreadme.com/readme/auxesis&lt;/em>&lt;/a> &lt;em>(someone in the industry who I respect and admire) for my formatting an inspiration but made sure that each section fully represents me.&lt;/em>&lt;/p>
&lt;h3 id="contini-readmes">Contini READMEs&lt;/h3>
&lt;p>Great leaders are supported by — well, other great leaders!&lt;/p>
&lt;p>Every Contini (that’s what we call ourselves over a Contino) has their own unique style. Some of us have private READMEs while other bold leaders like myself have made our READMEs public for the world to see. Either way we’re all unique thought leaders in our own right and you can find out more about what it’s like to work with each of us by heading over to &lt;a href="https://managerreadme.com/company/contino">https://managerreadme.com/company/contino&lt;/a>.&lt;/p>
&lt;p>The great bit is, each person owns their own README, and by looking at the collection of people in an organization you can start to get a sense of what they stand for. Your Manager README stays with you wherever you go so it’s really a window into what working in your team would be like.&lt;/p>
&lt;h3 id="make-yourown">Make your own!&lt;/h3>
&lt;p>If you’re a leader or manager I encourage you to write your own README &lt;a href="https://managerreadme.com/">https://managerreadme.com/&lt;/a>&lt;/p>
&lt;p>Your own README is a great way to take some time out to consider what you value and how you support your team. It doesn’t have to perfect, it should evolve as you do and allow for continuous improvement, just like we do with software.&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/the-manager-readme-a7edc99d9bfe">The Manager README&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>From DevOps to Good Software Delivery</title><link>https://www.drewkhoury.com/post/gsd/2020-07-21_from-devops-to-good-software-delivery/</link><pubDate>Tue, 21 Jul 2020 19:18:39 +0000</pubDate><guid>https://www.drewkhoury.com/post/gsd/2020-07-21_from-devops-to-good-software-delivery/</guid><description>
&lt;p>Andrew Khoury &amp;amp; &lt;a href="https://www.linkedin.com/in/rboumechrek/">Ralph Bou Mechrek&lt;/a>: Principal DevOps Engineers @ Contino.&lt;/p>
&lt;h2 id="putting-the-good-in-good-software-delivery">Putting the Good in Good Software Delivery&lt;/h2>
&lt;p>With so much progress in &amp;quot;Agile, DevOps and Automation&amp;quot; writing Good Software in 2020 should be easy - so why are so many companies still struggling? Somewhere along the line we got lost, and never really appreciated the power of understanding business value, value streams and continuous improvement to unlock the true potential of development teams.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/devops-good-software-delivery-2.jpg" alt="">
&lt;img src="https://www.drewkhoury.com/images/devops-good-software-delivery-3.jpg" alt="">
&lt;img src="https://www.drewkhoury.com/images/devops-good-software-delivery-4.jpg" alt="">&lt;/p>
&lt;div class="notices info">
&lt;div class="label">Info&lt;/div>
&lt;p>Event on Meetup as &lt;a href="https://www.meetup.com/DevOps-NYC/events/271229083/">From DevOps to Good Software Delivery&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>From DevOps to Good Software Delivery</title><link>https://www.drewkhoury.com/post/public/from-devops-to-good-software-delivery/</link><pubDate>Wed, 01 Jul 2020 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/from-devops-to-good-software-delivery/</guid><description>
&lt;p>&lt;strong>Putting the Good in Good Software Delivery:&lt;/strong> With so much progress in &amp;quot;Agile, DevOps and Automation&amp;quot; writing Good Software in 2020 should be easy - so why are so many companies still struggling? Somewhere along the line we got lost, and never really appreciated the power of understanding business value, value streams and continuous improvement to unlock the true potential of development teams.&lt;/p>
&lt;p>&lt;a href="https://www.drewkhoury.com/post/2020-07-21_from-devops-to-good-software-delivery/">&lt;img src="https://www.drewkhoury.com/images/devops-good-software-delivery-1.jpg" alt="">&lt;/a>&lt;/p>
&lt;p>Speakers: Andrew Khoury &amp;amp; &lt;a href="https://www.linkedin.com/in/rboumechrek/">Ralph Bou Mechrek&lt;/a>: Principal DevOps Engineers @ Contino&lt;/p>
&lt;p>Read more about &lt;a href="https://www.drewkhoury.com/post/2020-07-21_from-devops-to-good-software-delivery/">DevOps to Good Software Delivery&lt;/a>.&lt;/p></description></item><item><title>Optimizing for Developer Experience in a Cloud Native World</title><link>https://www.drewkhoury.com/post/public/optimizing-developer-experience-cloud-native/</link><pubDate>Thu, 09 Apr 2020 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/optimizing-developer-experience-cloud-native/</guid><description>
&lt;p>Speaker at the meetup for &lt;a href="https://www.meetup.com/Kubernetes-and-Cloud-Native-Computing-Louisville/events/cdrwlrybcgbdb/">Kubernetes and Cloud Native Computing Louisville&lt;/a>.&lt;/p>
&lt;p>Join me on a journey of how we ended in a Cloud Native world, what the future holds for DevOps, and how to optimize the Developer Experience to take advantage of the best the cloud has to offer.&lt;/p>
&lt;div class="video embed-responsive embed-responsive-16by9">
&lt;iframe src="https://www.youtube.com/embed/ZYlbNnaoseI?enablejsapi=1" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;p>Presentation: &lt;a href="https://drive.google.com/file/d/18q2lNunZCdtmsnKJddqjfpame16hUwzz/">PDF&lt;/a> | &lt;a href="https://docs.google.com/presentation/d/18fFw5YCdLliRzkDJO_BGdRIkQJCduyFs8XOgUsu3ibI/">Google Slides&lt;/a>&lt;/p></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>Principals for (Technical) Principals</title><link>https://www.drewkhoury.com/post/principles-for-technical-principals-f61d7cfd5d2b/</link><pubDate>Sat, 04 Apr 2020 17:29:33 +0000</pubDate><guid>https://www.drewkhoury.com/post/principles-for-technical-principals-f61d7cfd5d2b/</guid><description>
&lt;blockquote>
&lt;p>Join me on an exploration of all things consulting &amp;amp; leadership and all the fun stuff in-between.&lt;/p>
&lt;/blockquote>
&lt;p>I have a love of technology, with a passion for optimizing both code &amp;amp; process. I also love to teach and for me that usually means pairing or getting in front of a whiteboard.&lt;/p>
&lt;p>I’m currently playing the role of Technical Principal Consultant. You might know this role by another name, or you may notice it’s similarity to other roles (&lt;em>Technical Principal, Account Principal, Technology Evangelist, Delivery Lead, Principal Consultant, Solutions Architect, Technical Team Lead, Agile Transformation Leader&lt;/em>).&lt;/p>
&lt;p>The reason why I say “playing the role” is because many technical or transformational leadership roles share the same DNA and have more cross-over that you might think.&lt;/p>
&lt;p>In this article we’re going to explore three things:&lt;/p>
&lt;ul>
&lt;li>What makes a successful consultant&lt;/li>
&lt;li>What’s important for a Technical Principal role?&lt;/li>
&lt;li>What’s important for other leadership roles?&lt;/li>
&lt;/ul>
&lt;h3 id="what-makes-a-successful-consultant">What makes a successful Consultant?&lt;/h3>
&lt;p>Often categorized as “soft-skills” there are some basic “consulting-101” things that you’ll need to be a successful consultant. As a consultant it is important to understand and harness these skills, and they’re particularly important in “Principal” or “Leadership” roles. The following isn’t meant to be an exhaustive list and people aren’t magically born with all these skills so it’s best to treat them as a guide for self-improvement.&lt;/p>
&lt;p>The attributes to look for in a Principal Consultant or Leader are:&lt;/p>
&lt;ul>
&lt;li>Influencing (conviction, empathy, able to rapidly build trust with their team and stakeholders)&lt;/li>
&lt;li>Awareness (situational awareness, reading a room, control)&lt;/li>
&lt;li>Collaboration (open, honest, respectful, servant leadership)&lt;/li>
&lt;/ul>
&lt;p>So what does a “successful consultant” look like? Are we expected to excel in all areas 100% of the time? As it turns out these skills can be complicated to test for (especially in 1 hr interviews) however they tend to be easily demonstrated when the rubber hits the road.&lt;/p>
&lt;p>Let’s visualize what we’re looking for:&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*VOfKnMwj-zdKM1U0UXz98A.jpeg" alt="">&lt;/p>
&lt;p>Now we have some favorable attributes that we’re looking for &amp;amp; our consultants know what they should do more of. Each of one of us in our own journey and the key is to identify areas for improvement and start to demonstrate progress there. Your company should support you in identifying areas to improve and provide mentorship as well as opportunities to grow and succeed.&lt;/p>
&lt;h3 id="technical-leadership">Technical Leadership&lt;/h3>
&lt;blockquote>
&lt;p>I’m a technical leader, can’t I just stick to the tech?&lt;/p>
&lt;/blockquote>
&lt;p>Should Technical Leaders just focus on technology? In my opinion the answer is no, and the key is in the word &lt;strong>leader&lt;/strong>. As technical leaders (and this is especially true for those of us in consulting) our job is so much more than “hands on keyboard”. So while you can code and you might get your hands dirty from time to time, your primary role should be to support your team in making the best decisions they can at the time and getting out of their way while they work their magic (and for anyone that’s tried to do that, it’s harder than it seems).&lt;/p>
&lt;p>Let’s have a look at what skills a Technical Principal might posses in addition to the above consulting skills that we expect every consultant to have.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*qjqWqpMIwP8_-9o35u6RDw@2x.jpeg" alt="">&lt;/p>
&lt;p>We’re typically going to expect higher competency in “Technical Team Leadership” and “Solution Design &amp;amp; Architecture” from someone in a Technical Principal role. Skills like “Strong Communication” and “Trusted Strategic Advisor” should also be demonstrated but it’s be okay for some people in this role to have some growth in that area.&lt;/p>
&lt;h3 id="pillars">Pillars&lt;/h3>
&lt;p>The pillars mentioned above are:&lt;/p>
&lt;p>&lt;strong>Strong Communicator&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Awareness &amp;amp; Influence&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Trusted Strategic Advisor&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Empathy, can relate tech back to business value, understands the “why” of whatever we’re choosing to do, pragmatic &amp;amp; flexible&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Technical Team Leadership&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Charisma, Experience in successful delivery&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Solution Design &amp;amp; Architecture&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Passionate about technology &amp;amp; knows what good looks like, can be hands on but sees their primary role as supporting their team who are the real “doers”&lt;/li>
&lt;/ul>
&lt;h3 id="other-leadership-roles">Other leadership roles&lt;/h3>
&lt;p>As we mentioned at the start there are many roles that share similar DNA and they usually have the words “Principal” or “Leader” in them.&lt;/p>
&lt;p>Let’s take a look at our Pillars for a Technical Principal and apply them to a different leadership role for comparison. We’ll pick an “Account Principal” which is a role you might see from a consultancy — someone who’s responsible for the &lt;strong>health of the account&lt;/strong>, successful delivery of outcomes, and has &lt;strong>accountability for the financials&lt;/strong> of an Account…&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*5AiFUtKi37sf5SyLLwiCMA@2x.jpeg" alt="">&lt;/p>
&lt;p>Here we’ve used the same pillars due to the cross-over between roles but we’ve changed the “pass mark” to favor strong communication and being a trusted strategic advisor. We’ve also lowered our expectations around technical leadership and solution architecture (they’re nice to have’s and you may possess those skills in this role but on larger accounts you’d expect to be able to pair with Technical Principals for those gaps).&lt;/p>
&lt;p>Account Principals are also more likely to be involved in the financial health of an account, client happiness and overall team health along with responsibility for the delivery outcomes. Smaller accounts may allow the flexibility to have one person play both roles but as accounts get larger focus becomes important and the need for specialized skills becomes important.&lt;/p>
&lt;p>The most successful accounts I’ve worked on have seen a strong partnership between these Technical and Account roles with less concern about who “should” be doing what and more focus on:&lt;/p>
&lt;ul>
&lt;li>How can we help each other&lt;/li>
&lt;li>How can we compliment our respective strengths/weaknesses&lt;/li>
&lt;li>How can we encourage personal growth within each other&lt;/li>
&lt;/ul>
&lt;h3 id="whats-the-takeaway">What’s the take away?&lt;/h3>
&lt;p>For niche consulting in particular, there exists a fundamental set of “soft-skills” that are critical to a team’s success.&lt;/p>
&lt;p>For anyone playing the role of “lead” or “principal” it’s important to bring these skills (and your experience) to the table as an asset that will help them through difficult situations, and as skills they can learn to improve themselves as individuals.&lt;/p>
&lt;p>It’s important to have a whole-team understanding of what we need (and don’t need) from each role, and uplift each other by leaning on each other’s strengths rather than aiming for individual success.&lt;/p>
&lt;blockquote>
&lt;p>So what’s the difference between roles like “Technical Principal” and other leadership roles?&lt;/p>
&lt;/blockquote>
&lt;p>…Hopefully you’ll now agree, not as much as you originally thought.&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/principles-for-technical-principals-f61d7cfd5d2b">Principles for (Technical) Principals&lt;/a> and on Contino as &lt;a href="https://www.contino.io/insights/technical-leader-principles">How to Be a Technical Leader: The Principles Behind Successful IT Consulting&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>The True Cost of Being Cloud-Agnostic</title><link>https://www.drewkhoury.com/post/the-true-cost-of-being-cloud-agnostic-9a52e9f052bd/</link><pubDate>Wed, 09 Oct 2019 01:41:01 +0000</pubDate><guid>https://www.drewkhoury.com/post/the-true-cost-of-being-cloud-agnostic-9a52e9f052bd/</guid><description>
&lt;p>Let’s talk about the real cost of cloud computing, and by that I don’t mean hourly pricing models, network charges, and licencing implications.&lt;/p>
&lt;p>I want to talk about opportunity cost, explore factors like speed to market, how effective our development teams can be, and the operational overheads involved in our technology choices.&lt;/p>
&lt;p>The famous Allan Denot once said…&lt;/p>
&lt;p>&lt;strong>&lt;em>“If you believe in the cloud, you can’t be agnostic.”&lt;/em>&lt;/strong>&lt;/p>
&lt;p>…and by famous I mean in DevOps/Sydney, and by once I mean January 2019.&lt;/p>
&lt;p>I believe in the cloud! When I make that statement, it doesn’t mean I promote “only using the services that are available in all clouds” or “building all of your own services from scratch so they work identically in each cloud”.&lt;/p>
&lt;p>I’m a firm believer in using the right tool for the right job, and the right cloud or clouds for your project, program or organisation. I’m a cloud believer and I don’t have a vested interest in any one cloud.&lt;/p>
&lt;p>There are many ways “the cloud” can make your life easier. If you’re looking for a simple way to store and retrieve files, and you’re okay with it taking a few seconds, not a few milliseconds, AWS S3 is a great option. AWS RDS is an ideal way to use the relational database that you know and love without having to be hands-on with installation, upgrades, and replication. Are you a Microsoft shop? It’s hard to pass up Azure for services like hosted Active Directory. Do you only care about writing code? Google App Engine is an amazing service for Planet-Scale web services with all of the infrastructure managed for you.&lt;/p>
&lt;p>But what about the other definition of being cloud-agnostic? What about the dream of many organisations that we keep hearing so much about in the industry…&lt;/p>
&lt;p>&lt;strong>&lt;em>Cloud-agnosticism is great!&lt;/em>&lt;/strong> &lt;em>No vendor lock-in, more customisation, but wait. Think of all those tightly integrated managed services you’re leaving behind.&lt;/em>&lt;/p>
&lt;p>If you read the article by by Maish Saidel-Keesing called “ &lt;a href="http://dzone.com/articles/cloud-agnostic-friend-or-foe">Cloud-Agnostic: Friend or Foe?&lt;/a>” this provides some great insights into this topic.&lt;/p>
&lt;p>Trying to be cloud-agnostic may lead you to “only use features that are available in all clouds”, which is the lowest common denominator, or “deploy in such a way that we can switch a given workload to any cloud in minutes depending on the hourly price of a given service”, which I’ve not yet seen an organisation achieve.&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*E--VPoWJ4aw4jeFy.png" alt="">&lt;/p>
&lt;p>The scary path I’ve seen too many organisations follow is the idea that we should build as much of the system as possible in-house to avoid any sort of lock-in.&lt;/p>
&lt;p>The avoidance of cloud vendor products or even third party SaaS products for fear of being locked-in has been a common theme with the organisations I’ve worked with. I’ve never found the right way to describe the flaw with this way of thinking until I came across the following article which compared cloud provider lock-in to databases:&lt;/p>
&lt;p>&lt;em>“If we choose to use Oracle as the database for a given application, we don’t usually also build the application on SQL Server to make sure we aren’t locked in to Oracle. We don’t do so simply because we believe that the costs of having two alternative databases for the same application will outweigh the benefits in risk management.”&lt;/em>&lt;/p>
&lt;p>“ &lt;a href="http://aws.amazon.com/blogs/enterprise-strategy/switching-costs-and-lock-in/">Switching Costs and Lock-In&lt;/a>” is a great AWS blog that explains the difference between switching-costs vs lock-in.&lt;/p>
&lt;h4 id="if-cloud-agnostic-is-the-wrong-strategy-what-is-the-rightone">If cloud-agnostic is the “wrong strategy”, what is the right one?&lt;/h4>
&lt;p>It would be foolish of me to prescribe a magic bullet for your cloud journey. Having a well thought out application migration strategy and a shared vision for the future of your application architecture should be a key part of your strategy. If I only had a few minutes to set you on the right path I’d ask you to consider the following:&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*ldEltqWG3YNfnY9G.png" alt="">&lt;/p>
&lt;p>Some of the most successful projects I’ve had the pleasure of being part of have taken advantage of the hard work of cloud or SaaS providers. They help organisations save time, and allow them to get things done right the first time.&lt;/p>
&lt;p>Cloud native, serverless and SaaS are some of the most powerful ways to add value to a DevOps/ cloud transformation, outside of the people-part of the transformation. Services like RDS, S3, Google App Engine, Buildkite, Github, and Slack are among my favourite technical accelerators to help drive success in organisations.&lt;/p>
&lt;h4 id="is-missed-opportunity-the-realcost">Is missed opportunity the real cost?&lt;/h4>
&lt;p>At this point you may still be asking yourself, what’s the true cost of being cloud-agnostic? Is it cheaper, or more expensive than the alternative? The cost I’m referring isn’t directly related to your profit and loss statement. In fact, the true cost of trying to be cloud-agnostic can be missed opportunity and revenue, stifling innovation, project delays, and missing out on a selection of some of the most useful services the cloud has to offer.&lt;/p>
&lt;p>So here I stand, a Cloud Believer using the “best of breed” way of thinking and continuous improvement to help you get the most out of the cloud. After all if you believe in the cloud, you can’t be agnostic.&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/the-true-cost-of-being-cloud-agnostic-9a52e9f052bd">The True Cost of Being Cloud-Agnostic&lt;/a> and Contino as &lt;a href="https://www.contino.io/insights/true-cost-being-cloud-agnostic">The True Cost of Being Cloud-Agnostic&lt;/a>.&lt;/p>
&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><item><title>Introducing the UOCT</title><link>https://www.drewkhoury.com/post/introducing-the-uoct-eaf0575d70af/</link><pubDate>Sat, 05 Oct 2019 17:28:17 +0000</pubDate><guid>https://www.drewkhoury.com/post/introducing-the-uoct-eaf0575d70af/</guid><description>
&lt;p>Here’s something you’ve never heard of before (because I just made it up). UOCT is pronounced “You-Oct” and it stands for &lt;strong>U&lt;/strong>nconference &lt;strong>O&lt;/strong>fficeHours &lt;strong>C&lt;/strong>ollaboration &lt;strong>T&lt;/strong>ime. But before we get into that I want to explain how we got here.&lt;/p>
&lt;h3 id="a-little-background">A little background&lt;/h3>
&lt;p>For a while now I’ve been struggling with how best to foster collaboration between many different teams who don’t generally communicate with each other a lot (but should). Meetings are the typical way this problem is solved in the corporate world, but meetings come with their own set of issues: Finding a time when each person is available, finding a room, setting the agenda, and interrupting people’s day — an especially troublesome thing for a developer who needs context and &lt;a href="https://en.wikipedia.org/wiki/Flow_%28psychology%29">flow&lt;/a> to do their job.&lt;/p>
&lt;p>Part of what I do nowadays is to enable my team to do great work. That translates into listening to them, helping solve people and/or code problems, remove blockers, and every now and getting my hands dirty on that keyboard again.&lt;/p>
&lt;p>But the other part of my job is harder to quantify. I go to meetings, drink a lot of coffee and spend more time on the phone talking to people than I ever wanted to. Luckily there’s a fancier way to explain that part of my job:&lt;/p>
&lt;blockquote>
&lt;p>I’m accountable for the engineering solutions that we’re delivering to our customers and I need to be a strategic thinker with the ability to link to business drivers, and outline the value that the solution gives to the business case.&lt;/p>
&lt;/blockquote>
&lt;p>So how does someone like me (who favors efficiency over bureaucracy) maximize their time. The answer is simple, I experiment.&lt;/p>
&lt;h3 id="experiment-954">Experiment 954&lt;/h3>
&lt;p>I’m not big on hierarchy, so there are three concepts I want to draw heavily from for this new experiment, hereby named UOCT.&lt;/p>
&lt;p>&lt;strong>Unconference&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>An unconference is a participant-driven meeting.&lt;br>
Typically at an unconference, the agenda is created by the attendees at the beginning of the meeting. Anyone who wants to initiate a discussion on a topic can claim a time and a space.&lt;/p>
&lt;/blockquote>
&lt;p>Rule #1: Whoever shows up are the right people&lt;br>
Rule #2: Whatever happens is fine&lt;br>
Rule #3: Whenever it starts is the right time&lt;br>
Rule #4: It is over when it’s over&lt;/p>
&lt;p>&lt;strong>OfficeHours&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>A pre-arranged time when a person whose occupation frequently takes them away from their office during working hours is available in their office to answer questions or provide assistance without the requirement for an appointment.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>Collaboration Time&lt;/strong>&lt;/p>
&lt;p>And I like doing things in three’s so let’s add in another important aspect (with a fun play on a great cartoon).&lt;/p>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/1*Oc_aaSw7IQbKKnxSZC2DTA.jpeg" alt="">&lt;/p>
&lt;h3 id="what-uoctis">What UOCT is&lt;/h3>
&lt;ul>
&lt;li>UOCT is a safe space where all ideas are welcome&lt;/li>
&lt;li>&lt;strong>Unconference&lt;/strong>: We’re self-organizing — For smaller gatherings we break out into groups as required, for larger ones we draw from unconference where participants choose which agenda items are the most popular and discuss those&lt;/li>
&lt;li>&lt;strong>Collaborate:&lt;/strong> (specific problem-sets) You can bring your laptop, make use of a whiteboard, talk, share and collaborate — You might want to use the time to talk about a difficult problem, and try to get help solving it&lt;/li>
&lt;li>&lt;strong>Collaborate:&lt;/strong> (bigger and more strategic problem-sets) Facilitate what we call the collective-knowledge-base (CKB) — This might be through the continued collaboration on an Org Structure, Strategic Plans for related teams, A High Level Architecture Diagram or Flow Diagram or Future State that can help “add the missing puzzle pieces” for teams&lt;/li>
&lt;li>&lt;strong>OfficeHours:&lt;/strong> Leaders are welcome — The informal nature of UOCT allows for an environment where you can ask the questions you’ve always wanted but were either to shy to do in a big meeting, or didn’t have the air time to do due to your leader/manager being “busy”. This aims to create a dialog that can spark a shared understanding of the future/strategic vision for your team/company&lt;/li>
&lt;/ul>
&lt;h3 id="what-uoct-isnot">What UOCT is not&lt;/h3>
&lt;p>We’re not going to be heavy on rules, but there are a few key things to cover.&lt;/p>
&lt;ul>
&lt;li>We’re not here to shoot down ideas or make people feel bad&lt;/li>
&lt;li>No one person ‘owns’ the UOCT ‘meeting’&lt;/li>
&lt;li>There’s not pre-defined agenda&lt;/li>
&lt;li>It’s not a project status update&lt;/li>
&lt;li>We don’t talk about risks or issues&lt;/li>
&lt;li>We’re not worried about prioritization&lt;/li>
&lt;li>We’re not concerned with due dates or timelines&lt;/li>
&lt;/ul>
&lt;h3 id="whats-it-goodfor">What’s it good for?&lt;/h3>
&lt;p>I’m hoping that by pre-allocating set times in my calendar (e.g 3pm–5pm once or twice a week) I can save myself and others from having to create multiple separate meetings over the course of the week.&lt;/p>
&lt;p>With this model I’m looking to reduce the time I spend checking who has free time in their calendar, and trying to find times when all participants are available. The idea is that we’ll all block out the same time-slots for these types of meetings to leave the other times free for work that requires &lt;a href="https://en.wikipedia.org/wiki/Flow_%28psychology%29">flow&lt;/a>.&lt;/p>
&lt;p>Consider that a 1hr meeting in the middle of the day can &lt;a href="http://www.paulgraham.com/makersschedule.html">set a developer back a whole day&lt;/a>. — This can help consolidate those distractions and allow for a few full or half days meeting-free! I hope this empowers developers to structure their days in a way that can optimize how effective they can be.&lt;/p>
&lt;p>I’m also hoping to have some inspiring conversations with people dropping in who I wouldn’t otherwise have interacted with that week— and gain a shared understanding that I wouldn’t otherwise have had.&lt;/p>
&lt;p>I hope I’ve inspired you to join me on a journey of every day optimization — stay tuned for an update in the near future.&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/introducing-the-uoct-eaf0575d70af">Introducing the UOCT&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>Application Modernization Workshops (Minneapolis, New York and Chicago)</title><link>https://www.drewkhoury.com/post/public/application-modernization-workshops/</link><pubDate>Mon, 23 Sep 2019 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/application-modernization-workshops/</guid><description>
&lt;p>I had the pleasure of working with my Contino team to run immersive Incremental Application Modernization Workshops. These hands-on training sessions help you understand the real business value of serverless.&lt;/p>
&lt;h2 id="application-modernization-workshop---minneapolis">Application Modernization Workshop - Minneapolis&lt;/h2>
&lt;p>Co-Speaker with James Strong for the &lt;a href="https://www.linkedin.com/posts/contino_serverless-activity-6601134848964997120-OJe0">Application Modernization&lt;/a> all-day workshop.&lt;/p>
&lt;p>A joint partnership with Contino &amp;amp; AWS - we ran an immersive Incremental Application Modernization workshop (with a focus on Business Value &amp;amp; Serverless technology) for around 100 people in Minneapolis in November.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/bio/appmod-1.jpg" alt="">
&lt;img src="https://www.drewkhoury.com/images/bio/appmod-2.jpg" alt="">
&lt;img src="https://www.drewkhoury.com/images/bio/appmod-3.jpg" alt="">
&lt;img src="https://www.drewkhoury.com/images/bio/appmod-4.jpg" alt="">&lt;/p>
&lt;h2 id="application-modernization-workshop---new-york-and-chicago">Application Modernization Workshop - New York and Chicago&lt;/h2>
&lt;p>Participated and helped facilitate the &lt;a href="https://www.contino.io/insights/incremental-application-modernization">Application Moderization&lt;/a> workshops in New York and Chicago (in partnership with Contino and AWS). As part of the Contino crew I helped behind the scenes, answering questions and assisted participants with the hands-on labs.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/bio/ryan-app-modernization.jpg" alt="">&lt;/p></description></item><item><title>A comprehensive guide to “Being Agile”</title><link>https://www.drewkhoury.com/post/a-comprehensive-guide-to-being-agile-a9563c8c9968/</link><pubDate>Sat, 24 Aug 2019 17:46:36 +0000</pubDate><guid>https://www.drewkhoury.com/post/a-comprehensive-guide-to-being-agile-a9563c8c9968/</guid><description>
&lt;p>We need to talk.&lt;/p>
&lt;p>Today I want to talk to you about Agile, and no I don’t mean Jira boards and sit-down-stand-ups. I want to look into why we do what we do.&lt;/p>
&lt;p>Actually, I wanted to write an article about effective communication and how we (as actual human beings) have significantly more meaningful interactions in person than we do over video chat, real-time messaging or email. Join me on a short detour.&lt;/p>
&lt;p>&lt;strong>How we communicate&lt;/strong>&lt;/p>
&lt;p>Try some of these (at your own peril) next time you’re talking to someone in person:&lt;/p>
&lt;ul>
&lt;li>Stare at them with eyes wide open while you’re in middle of a regular conversation&lt;/li>
&lt;li>Raise you eyebrows in shock as a response to something they’ve said — more fun if they haven’t said anything shocking&lt;/li>
&lt;li>Invade someone’s personal space by inching closer and closer to them&lt;/li>
&lt;/ul>
&lt;p>You’re likely to get a response, and that’s because human’s are complex — our message isn’t just the words we say it’s so much more and the following only scratch the surface:&lt;/p>
&lt;ul>
&lt;li>Facial expressions&lt;/li>
&lt;li>Body movement and posture&lt;/li>
&lt;li>Gestures&lt;/li>
&lt;li>Eye contact&lt;/li>
&lt;li>Touch&lt;/li>
&lt;li>Space&lt;/li>
&lt;li>Voice&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Something bigger than yourself&lt;/strong>&lt;/p>
&lt;p>I used to think all that mattered was code — as an individual contributor if I could just pop those headphones in and achieve flow I’d be able to develop the best solution possible, and life was good. But something happened — I was introduced to “DevOps” and something called “Agile” and I discovered the world of consulting.&lt;/p>
&lt;p>I had accidentally stepped into utopia — companies had identified some sort of issue or need and were calling out for help. They needed people who could code, who could deliver solutions in challenging environments and could help teams transform into better versions of themselves. Well if there was anything I loved more than code it was being in front of a group of people inspiring them and making their lives better one whiteboard or pair programing session at a time — and learning along the way.&lt;/p>
&lt;p>&lt;strong>Continuous Improvement&lt;/strong>&lt;/p>
&lt;p>I take the idea of continuously improving very seriously. I want to improve myself, my team, my consultancy and my clients. I also spend time on helping my friends and family grown and improve. I get an enormous amount of joy out of helping people.&lt;/p>
&lt;p>When trying to introduce the concepts in the Agile Manefesto many questions can arise, consider these:&lt;/p>
&lt;ul>
&lt;li>How often should we do sprints&lt;/li>
&lt;li>Being Agile means that we can add scope with no negative impacts, right?&lt;/li>
&lt;li>Do we need to do standups every day (and why do we need to standup?)&lt;/li>
&lt;li>We don’t think retros are valuable — they’re just another meeting&lt;/li>
&lt;li>Our scrum master told us we’re not allowed to &amp;gt;insert any prescriptive directive from on-high without a rationale attached&amp;lt;&lt;/li>
&lt;li>Do we have to do this meeting face to face — I’m busy — can I bring my laptop so I can work in this meeting?&lt;/li>
&lt;li>We need to write a detailed plan for the entire project ahead of time — then report on it weekly to our finance department, explaining each deviation to them — but you can do that Agile thing within you own team at the same time, right?&lt;/li>
&lt;/ul>
&lt;p>So here’s the thing — Your team gets to decide if they want to “practice agile” or not — and if so, how to do it. But if you are going to do it you (your team, and your company) should understand its origins and get ready for a ride of continuous learning and improvement.&lt;/p>
&lt;p>&lt;strong>How to do Agile right&lt;/strong>&lt;/p>
&lt;p>Here’s my crash course. Ask whatever question you like (like a magic 8 ball), then read the Agile Manifesto (I’ve included it below) for the answer, simple.&lt;/p>
&lt;p>Hint: If you’re looking for more guidance — ask someone who’s done it successfully. Experience beats theory.&lt;/p>
&lt;blockquote>
&lt;p>Wondering why you can’t lock yourself away and code the “perfect” solution on your own? Or why you need to meet with your team so much?&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>&lt;em>8-ball says:&lt;/em>&lt;/strong> &lt;em>The most efficient and effective method of &lt;br>
conveying information to and within a development &lt;br>
team is face-to-face conversation.&lt;/em>&lt;/p>
&lt;blockquote>
&lt;p>Not sure why this “retro” thing is happening every two weeks — and wondering if it’s really that important to do at all?&lt;/p>
&lt;/blockquote>
&lt;p>8-ball says: &lt;em>At regular intervals, the team reflects on how &lt;br>
to become more effective, then tunes and adjusts &lt;br>
its behavior accordingly.&lt;/em>&lt;/p>
&lt;p>We can use this method to unpack themes around business value, continuous delivery, environments at work that encourage growth and motivate teams. We explore what it means to produce high-quality working software in a metrics-driven fashion, but we’ll have to save those for another day.&lt;/p>
&lt;h3 id="everything-you-ever-need-to-know-aboutagile">Everything you ever need to know about Agile&lt;/h3>
&lt;p>&lt;a href="https://agilemanifesto.org/">https://agilemanifesto.org/&lt;/a>&lt;/p>
&lt;p>&lt;strong>What is Agile?&lt;/strong>&lt;/p>
&lt;p>A guide for better ways of developing software&lt;/p>
&lt;p>&lt;strong>I’ve only got 30 seconds — What do I need to know?&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Individuals and interactions over processes and tools&lt;/li>
&lt;li>Working software over comprehensive documentation&lt;/li>
&lt;li>Customer collaboration over contract negotiation&lt;/li>
&lt;li>Responding to change over following a plan&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>I need more please, how do I know if I’m doing it right?&lt;/strong>&lt;/p>
&lt;p>Our highest priority is to satisfy the customer&lt;br>
through early and continuous delivery&lt;br>
of valuable software.&lt;/p>
&lt;p>Welcome changing requirements, even late in &lt;br>
development. Agile processes harness change for &lt;br>
the customer’s competitive advantage.&lt;/p>
&lt;p>Deliver working software frequently, from a &lt;br>
couple of weeks to a couple of months, with a &lt;br>
preference to the shorter timescale.&lt;/p>
&lt;p>Business people and developers must work &lt;br>
together daily throughout the project.&lt;/p>
&lt;p>Build projects around motivated individuals. &lt;br>
Give them the environment and support they need, &lt;br>
and trust them to get the job done.&lt;/p>
&lt;p>The most efficient and effective method of &lt;br>
conveying information to and within a development &lt;br>
team is face-to-face conversation.&lt;/p>
&lt;p>Working software is the primary measure of progress.&lt;/p>
&lt;p>Agile processes promote sustainable development. &lt;br>
The sponsors, developers, and users should be able &lt;br>
to maintain a constant pace indefinitely.&lt;/p>
&lt;p>Continuous attention to technical excellence &lt;br>
and good design enhances agility.&lt;/p>
&lt;p>Simplicity — the art of maximizing the amount &lt;br>
of work not done — is essential.&lt;/p>
&lt;p>The best architectures, requirements, and designs &lt;br>
emerge from self-organizing teams.&lt;/p>
&lt;p>At regular intervals, the team reflects on how &lt;br>
to become more effective, then tunes and adjusts &lt;br>
its behavior accordingly.&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/a-comprehensive-guide-to-being-agile-a9563c8c9968">A comprehensive guide to “Being Agile”&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>The cost of failure is education</title><link>https://www.drewkhoury.com/post/the-cost-of-failure-is-education-5efd9f1a1bd0/</link><pubDate>Tue, 12 Feb 2019 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/the-cost-of-failure-is-education-5efd9f1a1bd0/</guid><description>
&lt;p>wow, so cool.&lt;/p>
&lt;p>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>
&lt;p>Consider some of the changes we’ve seen in IT in the last decade:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>2003: SRE -&lt;/strong> Site Reliability Engineer, a discipline created at Google that incorporates aspects of software engineering and applies them to IT operations problems.&lt;/li>
&lt;li>&lt;strong>2006: AWS EC2 -&lt;/strong> 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>
&lt;li>&lt;strong>2009: DevOps -&lt;/strong> The combination of software development (Dev) with information technology operations (Ops)”.&lt;/li>
&lt;/ul>
&lt;p>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>
&lt;p>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>
&lt;h3 id="origins-of-lean-in-manufacturing">Origins of lean in manufacturing&lt;/h3>
&lt;p>&lt;img src="https://cdn-images-1.medium.com/max/800/0*MF6UDNS45Mc66Wb6" alt="">&lt;/p>
&lt;p>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">https://en.wikipedia.org/wiki/Lean_manufacturing&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>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>
&lt;/blockquote>
&lt;p>&lt;strong>Steps to achieve lean systems&lt;/strong>&lt;/p>
&lt;p>The following steps should be implemented to create the ideal lean manufacturing system:&lt;/p>
&lt;ul>
&lt;li>Design a &lt;strong>simple&lt;/strong> manufacturing system&lt;/li>
&lt;li>Recognise that there is &lt;strong>always room for improvement&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Continuously improve&lt;/strong> the lean manufacturing system design&lt;/li>
&lt;/ul>
&lt;p>Sound familiar? These themes are present in Lean, Agile and DevOps.&lt;/p>
&lt;p>&lt;strong>The andon cord — Game-changing rope&lt;/strong>&lt;/p>
&lt;p>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>
&lt;p>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>
&lt;blockquote>
&lt;p>The team member did not, and never would be, in a position of feeling fear or retribution for stopping the production line&lt;/p>
&lt;/blockquote>
&lt;p>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>
&lt;h3 id="postmortums--lean-software-development">Postmortums &amp;amp; lean software development&lt;/h3>
&lt;p>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/">postmortem culture&lt;/a>.&lt;/p>
&lt;blockquote>
&lt;p>Writing a postmortem is not punishment — it is a learning opportunity for the entire company.&lt;/p>
&lt;/blockquote>
&lt;p>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>
&lt;hr>
&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/the-cost-of-failure-is-education-5efd9f1a1bd0">The cost of failure is education&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>Melbourne Docker Meeting - Docker Datacenter</title><link>https://www.drewkhoury.com/post/public/docker-datacenter/</link><pubDate>Fri, 01 Jan 2016 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/docker-datacenter/</guid><description>
&lt;p>&lt;a href="https://twitter.com/melbournedocker/status/765481518739304448">Melbourne Docker Meeting - Docker Datacenter&lt;/a> - @pabv @drewkhoury from @Odecee talking #dockerdatacenter @zendesk #melbournedocker #dockermeetup&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/docker-meetup.png" alt="">&lt;/p></description></item><item><title>DevOps - Australasian Architecture Network</title><link>https://www.drewkhoury.com/post/public/devops-australasian-architecture-network/</link><pubDate>Thu, 13 Aug 2015 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/devops-australasian-architecture-network/</guid><description>
&lt;p>&lt;a href="https://www.meetup.com/Architecting-for-Innovation/events/222289195">DevOps @ Australasian Architecture Network &amp;amp; Xpand&lt;/a>&lt;/p>
&lt;p>Having had fantastic success with a number of previous meet ups, Xpand and the Australasian Architecture Network are hosting a meet up to look into the DevOps field and what role it has to play in an organisation today. It would be fair to say this field has often been one with very vague definitions and this night will aim to bring all the information together and paint a clear picture for all in attendance.&lt;/p>
&lt;p>The meet up will feature a number of expert speakers giving their two cents on the field and should provide equal measures of insight and entertainment. As per any Xpand event, food and drinks will be provided for attendees (because we know what all work and no play does!).&lt;/p>
&lt;p>Sydney panel for the DevOps meetup:&lt;/p>
&lt;ul>
&lt;li>Yann Krätzschmann - Cloud Solutions Practice Lead - Bulletproof&lt;/li>
&lt;li>Cara Crawford - Development and Delivery Manager - AMP&lt;/li>
&lt;li>Aron Campbell - Manager IT Infrastructure Solutions &amp;amp; Devops -ING Direct&lt;/li>
&lt;li>Andrew Khoury - Senior DevOps Engineer - Odecee&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/australasian-architecture.png" alt="">&lt;/p></description></item><item><title>Introducing Puppet to the Enterprise</title><link>https://www.drewkhoury.com/post/public/introducing-puppet-to-the-enterprise/</link><pubDate>Sat, 01 Jun 2013 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/introducing-puppet-to-the-enterprise/</guid><description>
&lt;p>&lt;a href="https://www.linkedin.com/in/bryce-johnson-6a7a77/">Bryce Johnson&lt;/a> and Andrew talk about how to deliver puppet into the enterprise, starting with a low risk project (like a build CI environment) on open source.&lt;/p>
&lt;p>Expanding up the environment ranks, they show how to eventually expand into to Puppet Enterprise (citing case studies) as the customer has gained confidence and operational capability.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/drew-bryce-puppet.png" alt="">&lt;/p></description></item><item><title>Melbourne Developer Meetup (2013-2015)</title><link>https://www.drewkhoury.com/post/public/melbourne-developer-meetup/</link><pubDate>Tue, 01 Jan 2013 09:40:54 +0000</pubDate><guid>https://www.drewkhoury.com/post/public/melbourne-developer-meetup/</guid><description>
&lt;p>&lt;strong>Running, facilitating and speaking at Melbourne Developer Meetup (2013-2015)&lt;/strong>&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/melb-dev-meet/melb-dev-meetup-logo.jpg" alt=":left"> I had the opportunity to host my own meetup in Melbourne, Australia. I called it the Melbourne Developer Meetup and we hosted all kinds of developer related presentations.&lt;/p>
&lt;p>Melb Dev Meet now has a new life with Hamid as Melbourne Web Mob. You can find the Melbourne Developer Meetup / Melbourne Web Mob on &lt;a href="https://twitter.com/MelbDevMeet/">Twitter&lt;/a> and &lt;a href="https://www.meetup.com/melbourneWebMob/">Meetup.com&lt;/a>.&lt;/p>
&lt;p>Our little community was most active from 2013-2016, and below are the meetup highlights from 2013-2014.&lt;/p>
&lt;p>&lt;br />&lt;/p>
&lt;h2 id="melbourne-developer-meetup-archives-2014">Melbourne Developer Meetup Archives 2014&lt;/h2>
&lt;h3 id="one-meetup-xmas-party-to-rule-them-allhttpswwwmeetupcommelbournewebmobevents216519822">&lt;a href="https://www.meetup.com/melbourneWebMob/events/216519822/">One meetup (xmas party) to rule them all!&lt;/a>&lt;/h3>
&lt;p>Thursday, December 4, 2014&lt;/p>
&lt;p>We're joining forces with a number of meetups:&lt;/p>
&lt;ul>
&lt;li>Melbourne Developer Meetup [~30 Spots]&lt;/li>
&lt;li>Infrastructure Coders (&lt;a href="https://www.meetup.com/Infrastructure-Coders/">https://www.meetup.com/Infrastructure-Coders/&lt;/a>) [~40 Spots]&lt;/li>
&lt;li>Android Australia User Group Melbourne (&lt;a href="https://www.meetup.com/Android-Australia-User-Group-Melbourne/">https://www.meetup.com/Android-Australia-User-Group-Melbourne/&lt;/a>) [~40 Spots]&lt;/li>
&lt;li>Melbourne Tessel Enthusiasts (&lt;a href="https://www.meetup.com/Melbourne-Tessel-Enthusiasts/">https://www.meetup.com/Melbourne-Tessel-Enthusiasts/&lt;/a>) [~5 Spots]&lt;/li>
&lt;/ul>
&lt;p>There will be great prizes on offer. Food and drinks will be provided by our sponsor Odecee, who have also organised a great venue for us, with plenty of capacity for a large group and a Grand Prix training simulator for your entertainment!&lt;/p>
&lt;p>We'll be showcasing what each meetup is all about, with the chance to get to know a little more about your fellow meetup organisers and members. Most importantly we're wanting to wind down and reflect on a spectacular 12 Months with good (and a little geeky) company.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/melb-dev-meet/one-meetup-to-rule-them-all.png" alt="">&lt;/p>
&lt;h3 id="october-meetuphttpswwwmeetupcommelbournewebmobevents193378312">&lt;a href="https://www.meetup.com/melbourneWebMob/events/193378312/">October Meetup&lt;/a>&lt;/h3>
&lt;p>Thursday, October 30, 2014&lt;/p>
&lt;p>Talk 1: Tips &amp;amp; Tricks every developer needs to know.
Presented by: Andrew Khoury &amp;amp; Hamid Nazari.&lt;/p>
&lt;ul>
&lt;li>Everything from SSH foo to Sublime wizardry. These are the secrets learnt by developers and devops engineers in the trenches.&lt;/li>
&lt;/ul>
&lt;p>Talk 2: Google Dart, the new contender.
Presented by: Nigel Dunn.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/melb-dev-meet/oct-meetup.png" alt="">&lt;/p>
&lt;h3 id="its-all-about-the-hardwarehttpswwwmeetupcommelbournewebmobevents184998082">&lt;a href="https://www.meetup.com/melbourneWebMob/events/184998082/">It's all about the hardware!&lt;/a>&lt;/h3>
&lt;p>Thursday, March 27, 2014&lt;/p>
&lt;ul>
&lt;li>Dr Joshua Young - Developing a software and hardware product within a start-up (AUUG Motion Synth)&lt;/li>
&lt;li>Andrew Hageman – Hands-On with the Oculus Rift&lt;/li>
&lt;li>4x $100 AWS Vouchers to GIVE AWAY&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/melb-dev-meet/hardware.png" alt="">&lt;/p>
&lt;h3 id="welcoming-in-2014httpswwwmeetupcommelbournewebmobevents168386552">&lt;a href="https://www.meetup.com/melbourneWebMob/events/168386552/">Welcoming in 2014&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>“What we didn’t have to do by using AWS” - Bryce Johnson &amp;amp; Andrew Khoury&lt;/li>
&lt;li>“Building Realtime Apps with Firebase” - Nigel Dunn&lt;/li>
&lt;li>Hands on with Google Glasses&lt;/li>
&lt;li>The VoteSockets game is back&lt;/li>
&lt;li>AWS Credits (Not confirmed yet)&lt;/li>
&lt;li>Odecee have given us a $100 ThinkGeek Gift Certificate to give away&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/melb-dev-meet/welcoming-in-2014.png" alt="">&lt;/p>
&lt;h2 id="melbourne-developer-meetup-archives-2013">Melbourne Developer Meetup Archives 2013&lt;/h2>
&lt;h3 id="last-2013-meetuphttpswwwmeetupcommelbournewebmobevents138687472">&lt;a href="https://www.meetup.com/melbourneWebMob/events/138687472/">LAST 2013 MEETUP&lt;/a>&lt;/h3>
&lt;p>Thursday, November 28, 2013&lt;/p>
&lt;p>Katie Miller (OpenShift Developer Advocate at Red Hat)&lt;/p>
&lt;p>Get your PaaS into gear - This presentation will give an introduction to PaaS, where it fits into the cloud ecosystem and how it can make you a happier and more productive programmer. It will include a demonstration of how to get an app up and running in the cloud in a couple of minutes with Red Hat's open source PaaS, OpenShift.&lt;/p>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/melb-dev-meet/last-2013-meetup.png" alt="">&lt;/p>
&lt;h3 id="melb-dev-meet---host-test-printhttpswwwmeetupcommelbournewebmobevents138687382">&lt;a href="https://www.meetup.com/melbourneWebMob/events/138687382/">Melb Dev Meet - Host Test Print&lt;/a>&lt;/h3>
&lt;p>Thursday, October 31, 2013&lt;/p>
&lt;ul>
&lt;li>James Sinclair (Linode)&lt;/li>
&lt;li>Michael Lyons (Paychoice Payment Gateway) - Smoke Testing&lt;/li>
&lt;li>David Chanter - Connected Community HackerSpace&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/melb-dev-meet/host-test-print.png" alt="">&lt;/p>
&lt;h3 id="melb-dev-meet---one-step-furtherhttpswwwmeetupcommelbournewebmobevents130917582">&lt;a href="https://www.meetup.com/melbourneWebMob/events/130917582/">Melb Dev Meet - One Step Further&lt;/a>&lt;/h3>
&lt;p>Thursday, September 5, 2013&lt;/p>
&lt;ul>
&lt;li>BAS (Basarat Ali Syed), AngularJS + TypeScript workflow&lt;/li>
&lt;li>Riley (from Xero), a 5 minute introduction to Xero for Devs&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/melb-dev-meet/one-step-further.png" alt="">&lt;/p>
&lt;div class="video embed-responsive embed-responsive-16by9">
&lt;iframe src="https://www.youtube.com/embed/yBtgS1Uf1Ms?enablejsapi=1" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;p>&lt;a href="https://github.com/drewkhoury/votesockets">https://github.com/drewkhoury/votesockets&lt;/a>&lt;/p>
&lt;h3 id="melb-dev-meet---super-mega-awesomehttpswwwmeetupcommelbournewebmobevents119822202">&lt;a href="https://www.meetup.com/melbourneWebMob/events/119822202/">Melb Dev Meet - Super Mega Awesome&lt;/a>&lt;/h3>
&lt;p>Wednesday, July 17, 2013&lt;/p>
&lt;ul>
&lt;li>Making Learning More Fun - Chris Boesch&lt;/li>
&lt;li>Python's Salt &amp;amp; Server Automation - Nigel Dunn&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://www.drewkhoury.com/images/melb-dev-meet/super-mega-awesome.png" alt="">&lt;/p>
&lt;div class="video embed-responsive embed-responsive-16by9">
&lt;iframe src="https://www.youtube.com/embed/PG_aSPjOMfU?enablejsapi=1" allowfullscreen>&lt;/iframe>
&lt;/div></description></item></channel></rss>