<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dan Peach</title>
    <description>The latest articles on DEV Community by Dan Peach (@danielpeach).</description>
    <link>https://dev.to/danielpeach</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F827992%2Fe2ac7a74-91f2-4fc4-945a-061922118a1e.jpeg</url>
      <title>DEV Community: Dan Peach</title>
      <link>https://dev.to/danielpeach</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danielpeach"/>
    <language>en</language>
    <item>
      <title>Dogfooding At Armory</title>
      <dc:creator>Dan Peach</dc:creator>
      <pubDate>Mon, 18 Apr 2022 15:46:16 +0000</pubDate>
      <link>https://dev.to/armory/dogfooding-at-armory-8kk</link>
      <guid>https://dev.to/armory/dogfooding-at-armory-8kk</guid>
      <description>&lt;p&gt;We recently onboarded the main server component of our new software delivery platform — codenamed &lt;em&gt;Borealis&lt;/em&gt; — onto Borealis itself. I’m going to talk a bit about Borealis, the experience of dogfooding at Armory, and what we hope to learn from it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Borealis and Deploy Engine
&lt;/h3&gt;

&lt;p&gt;The application we onboarded is called &lt;em&gt;Deploy Engine&lt;/em&gt;. The name is uninspired and is out of place among the sea of ostensibly Grecian software systems — Kubernetes, Argo, Tekton, etc. — but is descriptive of its role within Borealis: it orchestrates software deployment strategies.&lt;/p&gt;

&lt;p&gt;Using the Borealis CLI or API, a user can provide a high-level description of their deployment: First, I’d like 10% of production traffic to go to my new software version. Next, I’d like the deployment to wait thirty minutes and then I’d like to run a canary analysis of application metrics. Next, I’d like to increase traffic to 50% — and so on. Deploy Engine, in concert with a few other subsystems, orchestrates this kind of deployment workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VSbfB3oN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x39caijj8ksbss572cb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VSbfB3oN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x39caijj8ksbss572cb7.png" alt="Dogfooding at Armory" width="880" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dogfooding at Armory
&lt;/h3&gt;

&lt;p&gt;In my experience, the mental state of even the most empathetic, thoughtful, and experienced software engineer is divorced from that of a user.&lt;/p&gt;

&lt;p&gt;I have two analogies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I am a very poor actor but during high school was required to act in classes and in friends’ short films. The experience of using software for the first time as a user — rather than as a developer — is a little bit like the watching a recording of yourself as a bad actor. It can feel stilted or inauthentic; the transitions from one moment to the next can be painful.&lt;/li&gt;
&lt;li&gt;Experiencing software for the first time as a user can mirror the experience of sharing a favorite video or song with a friend. What you once experienced as beautiful, catchy, moving, or hilarious can suddenly feel trite, bland, or tasteless as you hear the song through the ears of your friend. It can be jarring or unpleasant; it can also teach you about your friend and their values.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dogfooding is hard, painful work, but it’s one of the best ways to experience your software as your users will. It’s not a replacement for user feedback — we have biases and beliefs that inform how we experience our software that may be different than those of our customers — but it’s an essential part of the development lifecycle.&lt;/p&gt;

&lt;h3&gt;
  
  
  What we’ve learned
&lt;/h3&gt;

&lt;p&gt;I’ll share two anecdotes about our experience of dogfooding Deploy Engine.&lt;/p&gt;

&lt;p&gt;When we first tried to onboard Deploy Engine onto the Borealis platform, we hit a strange bug that we’d never seen in testing or development. I soon discovered a bug that’s a little embarrassing, a little funny, and fortunately won’t take long to describe.&lt;/p&gt;

&lt;p&gt;Our build uses Kustomize to generate manifests for five Kubernetes resources. When we tried using Borealis to deploy for the first time, only two of the five resources were deployed. We had unit tests that ensured that this case would work, so I was mystified. After some digging, I found the answer.&lt;/p&gt;

&lt;p&gt;Our API accepts both JSON-encoded and YAML-encoded Kubernetes manifests. We check the first 512 bytes of a manifest: if those bytes look like JSON, we interpret as JSON; if not, we interpret the manifest as YAML. Unfortunately, in the case where we decided the manifest is encoded as YAML, we only used the first 512 bytes – we threw the rest away! Oops.&lt;/p&gt;

&lt;p&gt;Our unit tests checked that we could deploy multiple manifests, but we used unrealistically small manifests — smaller than 512 bytes. This is a bug I’m glad a customer never had to experience, and is a bug we likely wouldn’t have caught without dogfooding.&lt;/p&gt;

&lt;p&gt;My second anecdote is also brief. Borealis has a UI that lists all recent deployments; Deploy Engine determines how those deployments are sorted. Working with the product team, we defined the sort based on our experience and what we thought would make sense to customers.&lt;/p&gt;

&lt;p&gt;Once we started using that UI as users, we realized the sort didn’t make sense at all — it bothered us, and we decided to change it. That very same day, one of our first users asked us to update the sort on the deployments page; their suggested change was the exact change we had just implemented. We were able to go back to the customer and tell them that their fix would be ready by the end of the day.&lt;/p&gt;

&lt;p&gt;Today all the services used by Borealis are deployed using Borealis. Additional teams throughout the company have also started using it as they’ve seen it improve. Teams across Armory are giving us feedback. Some of it is tough to hear, but we’ll catch bugs and improve the product in ways that our customers will love. I hope to give you an update on Borealis, our progress, and our dogfooding journey in a few months.&lt;/p&gt;

&lt;p&gt;If you would like to try out Borealis, we are still &lt;a href="https://www.armory.io/armory-design-partners/"&gt;accepting design partners&lt;/a&gt;, and I’d love to hear your feedback on it as well.&lt;/p&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

&lt;p&gt;Dan&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.armory.io/blog/dogfooding-at-armory/"&gt;Dogfooding At Armory&lt;/a&gt; appeared first on &lt;a href="https://www.armory.io"&gt;Armory&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>dogfooding</category>
      <category>qa</category>
      <category>testing</category>
    </item>
    <item>
      <title>Reducing Downtime Risk with Blue-Green Deployments</title>
      <dc:creator>Dan Peach</dc:creator>
      <pubDate>Tue, 15 Mar 2022 15:35:39 +0000</pubDate>
      <link>https://dev.to/armory/reducing-downtime-risk-with-blue-green-deployments-3njp</link>
      <guid>https://dev.to/armory/reducing-downtime-risk-with-blue-green-deployments-3njp</guid>
      <description>&lt;p&gt;Many of the world’s most common and trusted applications- for both personal or business use – are now delivered as SaaS applications, whether on mobile, desktop, or other devices. End users assume these SaaS applications – whether paid for via subscription or invoked free on demand – to be available 24/7/365. Users trust application builders to provide a dependable and uninterrupted service experience. When software isn’t available, customers get frustrated and businesses’ reputations suffer. &lt;/p&gt;

&lt;p&gt;Leading content platform and application software companies are increasingly using progressive software deployment strategies such as ‘blue-green’ to reduce the risk of downtime, enhance customer experience, and build brand loyalty. However, in many companies, there still exists the misconception that initiatives to improve quality and security translate into increased investment. Therefore, a business case for making the technology investments required to significantly reduce the mean time between service failures to avoid downtime will likely be required.  &lt;/p&gt;

&lt;h3&gt;
  
  
  The Costs of Downtime
&lt;/h3&gt;

&lt;p&gt;According to a &lt;a href="https://www.statista.com/statistics/753938/worldwide-enterprise-server-hourly-downtime-cost/"&gt;2019 report&lt;/a&gt; from Statista, the average cost of downtime can range from $100,000 to $5,000,000 per hour.&lt;/p&gt;

&lt;p&gt;Content customers and software users are working all hours, locally and around the world. Therefore, there is no ‘good’ time to have an outage. They expect and/or require the applications to be available all the time. &lt;/p&gt;

&lt;p&gt;A recent &lt;a href="https://newsroom.accenture.com/subjects/customer-relationship-management/customer-service-not-price-remains-top-cause-customer-churn-accenture-study-finds.htm"&gt;Accenture&lt;/a&gt; study found poor service quality is the top reason for customer churn. In addition to compromising customer experience, jeopardizing renewals, expansions and upsells, excessive downtime can trigger direct costs if service-level agreements (SLAs) are in place for operational performance. In addition, if a service is delivered to regulated industries like banking, insurance, and stock trading, outages may violate compliance requirements. Said violations can result in fines, penalties, or increased scrutiny from auditors and regulators.  Resultant scrutiny is very expensive in terms of time, consuming resources that could be working on revenue generating activities instead.&lt;/p&gt;

&lt;p&gt;There is also a sizable intangible cost to organizations that face continuous downtown incidents.  Service breakdowns impact employee productivity, morale, and job satisfaction. This often results in higher employee turnover.&lt;/p&gt;

&lt;p&gt;Implementing practices to achieve service uptime performance consistent with customer expectations is critical to sustained success. Blue Green deployments are a technique increasingly viewed as an operational best-practice for deploying applications reliably into production and ensuring minimal downtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blue-Green Deployment
&lt;/h3&gt;

&lt;p&gt;During a blue-green deployment, the system shifts traffic routing from the currently-deployed version to a new application version. This practice requires two concurrently-running application instances:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A current, or “blue,” version of the application&lt;/li&gt;
&lt;li&gt;A new, or “green,” version of the application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Containerization and cloud-native development augment the blue-green deployment model: Kubernetes provides a cost-effective, flexible, and automated process of generating similar application instances, and label-based traffic routing provides the necessary foundation to switch between different application versions quickly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KTeRpuA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ontx0109umqch6lmfzu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KTeRpuA6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ontx0109umqch6lmfzu.png" alt="Blue Green Deployment diagram" width="880" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I work on Armory’s new SaaS-based deployment offering, Project Borealis. We just added blue-green support. In Borealis we deploy the new version, then expose it to a preview or “dark” URL that the user can leverage for any needed validation. Once validated, they can issue an approval, and the new version will become live. The old version is kept around for instantaneous rollbacks until a final approval is issued, or a given amount of time has elapsed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Application Updates
&lt;/h3&gt;

&lt;p&gt;Let’s say a company has a running application with version V1 – this is the “blue” instance. When it’s time to deploy the next application version, V2, the company deploys without exposing this new application instance to production traffic – this is the “green” instance. Instead of receiving production traffic, it is exposed to a dark URL that can be used for manual or programmatic validation.&lt;/p&gt;

&lt;p&gt;The process of deploying and configuring applications can be elaborate. Typically, teams organize the process using steps in runbooks. Execution times vary from a few minutes to a few hours.&lt;/p&gt;

&lt;p&gt;The team tests each step without interrupting the blue application, eliminating any downtime. The blue application continues to serve customers until the green application is ready to go.&lt;/p&gt;

&lt;p&gt;Next, a QA pipeline runs automated tests to validate the green version. The team can triage any issues without the stress of a ticking clock. Post validation, the DevOps team or an automated tool configures the load balancers to route new requests to the green version. Once all traffic has been redirected to the green application, the blue application can be repurposed, torn down, or kept alive for a quick rollback.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mhFrNfZO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cmqcsguc26byqtrrnb43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mhFrNfZO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cmqcsguc26byqtrrnb43.png" alt="A blue-green deployment project in Project Borealis" width="880" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A blue-green deployment in Project Borealis&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This process can readily be applied to stateful applications as well. However, if your application has a database, there is additional thinking to be done about how to handle roll forward and backward compatibility.&lt;/p&gt;
&lt;h3&gt;
  
  
  Application Rollbacks
&lt;/h3&gt;

&lt;p&gt;Blue-green deployments significantly reduce the costs associated with a broken release. If a defect is detected during or after the deployment, the DevOps team can configure the load balancer to direct traffic to the still-running blue environment, as convenient as flipping a switch. Even if your application takes significant time to start, rollback is instant since the old version is still running.&lt;/p&gt;

&lt;p&gt;Blue-green deployments are more complicated than downtime deployments. Companies must support these environments with release automation, testing, infrastructure provisioning, configuration management, and the associated CI/CD practices. Because the deployment logic is also significantly more complicated, such strategies are often impractical to adopt without leveraging a production-ready deployment solution such as Project Borealis.&lt;/p&gt;

&lt;p&gt;The development teams must also invest the time to make these practices work for all teams that must collaborate to successfully ship software. Often, this requires some tooling standardization. While a custom-made continuous delivery process may work for some teams, it can be challenging to apply it to all teams in an enterprise. It can also be challenging to support and maintain an extensive, homegrown solution. For example, a new engineer may not find it easy to figure out how to use all the tools available for deployment, even with simple changes. Or if a connected tool or service is upgraded, it may require troubleshooting or code rewrites before it can work.&lt;/p&gt;
&lt;h3&gt;
  
  
  Armory Delivers Continuous Delivery
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.armory.io/"&gt;Armory&lt;/a&gt; provides enterprise-grade cloud-native continuous delivery, the next evolution of the open-source Spinnaker platform. With Armory, teams can accelerate the adoption of a blue-green model using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pipeline building based on Spinnaker &lt;/li&gt;
&lt;li&gt;Role-based access control&lt;/li&gt;
&lt;li&gt;Deployment compliance checks using policies &lt;/li&gt;
&lt;li&gt;Infrastructure provisioning using Terraform&lt;/li&gt;
&lt;li&gt;GitOps, secret management, and more &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These features enable collaboration between the developer, QA, DevOps, and SecOps teams for building end-to-end deployment pipelines. New deployment pipelines can be executed in different phases like code tagging, application release, tests, security checks, deployment, and smoke tests. This results in a green environment being set up without all the usual manual work. &lt;/p&gt;

&lt;p&gt;Armory provides a battle-tested, flexible pipeline management system with integrated CI tools, cloud providers, security policies, and third-party libraries. Pipelines can be fully automated or user interactions can be set up representing complex and customized delivery workflows to control the pipeline. Armory enables the creation of pipelines with stages to deliver software in support of any process or policy an organization requires. Teams can go from fully automated to manual checks at each gate. &lt;/p&gt;

&lt;p&gt;In addition to Spinnaker, Armory recently announced a new intelligent deployment-as-a-service offering, Project Borealis, that supports blue-green strategies so that developers can focus on building great code rather than deploying it. My team recently added blue-green deployments to this SaaS offering and is helping our design partners to leverage it. A &lt;a href="https://youtu.be/n2e7pYuVdHk"&gt;demo of blue-green in Project Borealis is available&lt;/a&gt;. If you’d like to try it out, spots are still &lt;a href="https://www.armory.io/armory-design-partners/"&gt;available for additional design partners&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/n2e7pYuVdHk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Next Steps
&lt;/h3&gt;

&lt;p&gt;The blue-green deployment model can eliminate the risks and toil of application release. To reap the model’s benefits, different enterprise teams must collaborate closely and have a high level of readiness.&lt;/p&gt;

&lt;p&gt;Armory provides a foundation for safe, reliable deployments using release and deployment pipelines with compliance checks. Its policy engine and external integrations reduce the deployment model’s overall complexity, enabling development teams to operate at peak efficiency. &lt;/p&gt;

&lt;p&gt;Are you ready to reduce your downtime and keep your application users happy while saving deployment time and effort? &lt;a href="https://www.armory.io/"&gt;Explore armory.io&lt;/a&gt; to learn how customers use the product to solve these deployment challenges and &lt;a href="https://armory.io/contact-us/"&gt;contact us&lt;/a&gt; for a demo and whitepaper to see how Armory can help you. If you’d like to try out Project Borealis, our new intelligent deployment as-a-service solution that makes advanced deployment strategies simple to adopt, you can &lt;a href="https://www.armory.io/armory-design-partners/"&gt;sign up to learn more and become a design partner&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.armory.io/blog/reducing-downtime-risk-with-blue-green-deployments/"&gt;Reducing Downtime Risk with Blue-Green Deployments&lt;/a&gt; appeared first on &lt;a href="https://www.armory.io"&gt;Armory&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>downtime</category>
      <category>deployments</category>
      <category>bestpractices</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
