<?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: Geoff Stevens</title>
    <description>The latest articles on DEV Community by Geoff Stevens (@thegeoffstevens).</description>
    <link>https://dev.to/thegeoffstevens</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%2F123230%2F875b3024-42b9-43fb-8e1a-ae508a5e86b8.png</url>
      <title>DEV Community: Geoff Stevens</title>
      <link>https://dev.to/thegeoffstevens</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thegeoffstevens"/>
    <language>en</language>
    <item>
      <title>How has development changed over the course of the pandemic?</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Tue, 09 May 2023 20:48:50 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/how-has-development-changed-over-the-course-of-the-pandemic-26kd</link>
      <guid>https://dev.to/softwaredotcom/how-has-development-changed-over-the-course-of-the-pandemic-26kd</guid>
      <description>&lt;p&gt;Today, we're excited to announce the release of the &lt;a href="http://www.software.com/reports/future-of-work" rel="noopener noreferrer"&gt;2023 Future of Work Report&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Our team has spent the past few months analyzing data from more than 400K software developers over the past three years. And in analyzing that data, we uncovered three key insights into how software development has changed, and what that means for the future of work.&lt;/p&gt;

&lt;p&gt;Those insights are summarized below, but we hope that you will check out the &lt;a href="https://www.software.com/reports/future-of-work" rel="noopener noreferrer"&gt;full report&lt;/a&gt;, which includes stats on burnout, work-life balance, AI trends, the tradeoffs between remote and office work, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we found
&lt;/h2&gt;

&lt;p&gt;We found that the developer experience has improved over the last three years, while productivity remains relatively unchanged. Developers are spending less time coding nights and weekends, reclaiming time from interruptions, and making better use of commute times. They are feeling less burnt out. While they are spending slightly less time coding, they are getting more efficient with their time, automating away repetitive tasks with AI and automation tools.&lt;/p&gt;

&lt;p&gt;These are a few of the indicators we've seen that the shift to remote work has been, overall, a net positive for the global development community.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Developer experience is improving
&lt;/h3&gt;

&lt;p&gt;With more flexible schedules, more work is getting done between 9am and 5pm (+5%). Developers are coding 9% more during morning commutes and less work is being pushed to late nights (-11%) and weekends (-9%). As a result of a better work-life balance, developers are feeling less burnt out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F705cozljb10r0z2gplxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F705cozljb10r0z2gplxq.png" alt="Work-life balance" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Productivity is unchanged
&lt;/h3&gt;

&lt;p&gt;While developers are spending marginally less time coding per day — 59.9 minutes in 2023 compared to 64.2 minutes in 2020 (-7%) — this change has been offset by a small improvement in efficiency. Keystrokes per minute coded, a proxy for focused work, increased by 4%. At the same time, an increasing number of repetitive tasks are being automated away with code completion and AI tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1wjra474es7huqe59kg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1wjra474es7huqe59kg.png" alt="Time vs. efficiency" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The effects of automation and AI are increasing
&lt;/h3&gt;

&lt;p&gt;With the rapid adoption of AI and automation tools, like GitHub Copilot, developers are writing and editing code at a faster rate than ever before. From 2020 to 2023, the average number of characters inserted per keystroke increased by 41% and lines of code edited per minute increased by 39% — indicators of the increased usage of generative AI and code completion tools. The long-term impact of these tools on productivity and code quality remains unknown.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vcj805j8r03q6o48ywl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vcj805j8r03q6o48ywl.png" alt="GitHub Copilot" width="800" height="993"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What has the impact been for you?
&lt;/h2&gt;

&lt;p&gt;Global trends, however, are not indicative of every company. Even within engineering organizations, there can be radical differences between teams, projects, and locations. Most companies have only scratched the surface of understanding the long-term impact of remote work.&lt;/p&gt;

&lt;p&gt;What has your team's experience been with remote or hybrid work over the last few years? We'd love to hear more stories from the community:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How has remote work impacted your work-life balance? &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are you more productive working from home or at the office? &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do you use generative AI tools, like GitHub Copilot?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're interested in this type of data, I'd recommend &lt;a href="https://www.software.com/reports/future-of-work" rel="noopener noreferrer"&gt;checking out our full findings&lt;/a&gt;, which includes more stats on AI-powered automation, improvements to work-life balance, and the shifting contributors to burnout.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>ai</category>
      <category>news</category>
      <category>development</category>
    </item>
    <item>
      <title>Frequent, less painful deployments</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Wed, 28 Sep 2022 23:13:54 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/frequent-less-painful-deployments-4003</link>
      <guid>https://dev.to/softwaredotcom/frequent-less-painful-deployments-4003</guid>
      <description>&lt;p&gt;If you're an engineer and you're reading this, chances are you've felt pain around deploying changes to production. Deployments cause stress and anxiety for everyone involved, especially when they're an infrequent occurrence.&lt;/p&gt;

&lt;p&gt;First, let's look at how a hypothetical team working on a financial app at a large company deploys code to production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The team schedules a release for the end of the month, followed by a two-week code freeze.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After scheduling the release, they kick off a formal change approval process, which requires coordination across multiple teams and departments. The app has a wide range of dependencies since it integrates with other core systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;During the release process, they uncover several features that are not production-ready. These features are delayed until the next release. They identify one critical feature that must go into the release this month, so the team works overtime and cuts a few corners to finish it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They deploy a release candidate to a staging environment for testing. Environments are frequently in contention, so the team is blocked while they wait on servers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After they validate that the release meets all functional and non-functional requirements, they start a manual deployment process, which means taking the application down for a few hours.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The first manual deployment fails, so they have to start over. After the deployment is successful, they monitor the release.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let's say they discover performance issues with the release. They can either manually provision more resources to handle the increased load, perform a hotfix, or roll back the release entirely. Rolling back the release is a lengthy, manual process, and the SLA to provision new infrastructure is too long, so multiple engineers work on a hotfix over the weekend. Those engineers end up working a &lt;a href="https://world.hey.com/jason/watch-out-for-12-day-weeks-b4441874" rel="noopener noreferrer"&gt;12-day workweek&lt;/a&gt;. The release is tacked onto a history of failed releases, which erodes trust with management. More manual approval steps are added to catch bad deployments, which will slow down future releases.&lt;/p&gt;

&lt;p&gt;Now, let's look at how deployments work for a hypothetical high-performing team working on a Ruby on Rails app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A developer plans a release and coordinates with the approval of a peer. Releases are continuous, so developers are empowered to release their changes on-demand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Since the team makes frequent use of feature flags, the mainline is always releasable. The developer is not blocked by any merged features that are not production-ready.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They spin up a staging environment and run automated tests. Environment creation and teardown is automated with Kubernetes and scripted GitHub Actions. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After all tests pass and they validate their changes, they deploy to production. Promoting the release to production is instantaneous and fully-automated. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They can automatically roll back the release in seconds if anything goes wrong. In the case of performance spikes, Kubernetes nodes automatically scale to meet the demand.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When it comes to release schedules, teams fall along a spectrum. While some apps benefit from moving at a slower pace for stability, faster is generally better for both not only the business, but also the psychological safety of engineers. In its &lt;a href="https://info.sourcegraph.com/hubfs/CTA%20assets/sourcegraph-big-code-survey-report.pdf" rel="noopener noreferrer"&gt;2020 Big Code Report&lt;/a&gt;, Sourcegraph found that 88% of software development teams feel anxiety during every release.&lt;/p&gt;

&lt;p&gt;There is an irony behind the first hypothetical team working on a financial app. To enforce stability, more steps were added to the release process, which actually make it harder to deploy, and as a result, deployments happen less frequently. These large, backed-up deployments pose a greater risk for production incidents, and developers feel that pain. Things get scarier when they're less frequent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.software.com%2Fremoteimages%2Fuploads%2Farticles%2F7q2ropw4ags0vs3h3d36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.software.com%2Fremoteimages%2Fuploads%2Farticles%2F7q2ropw4ags0vs3h3d36.png" alt="Pain vs. delays" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

Source: &lt;a href="https://martinfowler.com/bliki/FrequencyReducesDifficulty.html" rel="noopener noreferrer"&gt;FrequencyReducesDifficulty&lt;/a&gt; by Martin Fowler
&lt;br&gt;





&lt;p&gt;By making deployments mundane and doing them more often, teams can minimize the fear and difficulty of releasing to production. As Martin Fowler puts it: "By integrating every day, the pain of integration almost vanishes. It did hurt, so you did it more often, and now it no longer hurts."&lt;/p&gt;

&lt;h2&gt;
  
  
  Ways to minimize deployment pain
&lt;/h2&gt;

&lt;p&gt;By aiming to make deployments faster and more frequent, teams can minimize the pain they feel when pushing their changes live. &lt;/p&gt;

&lt;p&gt;Frequent deployments require less coordination between teams trying to get their changes into production, making releases safer and less complex. In turn, when deployments are safer and simpler, teams feel comfortable deploying more frequently. Unlocking this feedback loop is the key to achieving continuous deployment. &lt;/p&gt;

&lt;h3&gt;
  
  
  Measure deployments
&lt;/h3&gt;

&lt;p&gt;Teams can benchmark their performance against industry standards and against themselves. The important thing is to constantly gather data and feed it back into the system to drive continuous learning.&lt;/p&gt;

&lt;p&gt;Most teams now set up agents to monitor applications and infrastructure, using tools like DataDog, New Relic, and Sentry. These are table stakes for teams who need real-time data on any possible bugs or issues after a release.&lt;/p&gt;

&lt;p&gt;Teams can augment their existing analytics instrumentation by measuring how changes move through their CI/CD pipelines. They can measure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deployment Frequency&lt;/strong&gt;: how frequently changes are deployed to production&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Age of Unmerged Changes&lt;/strong&gt;: average time since a pull request has been open, but not yet deployed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deployment Batch Size&lt;/strong&gt;: average number of code changes per deployment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deployment Success Rate&lt;/strong&gt;: number of successful deployments vs. the total over time&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By measuring the Age of Unmerged Changes, or how long changes are in a "Ready to Deploy" state, teams can stay on top of how much time has passed between deployments and better manage their release backlog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.software.com%2Fremoteimages%2Fuploads%2Farticles%2Fpidzvi5m4cqw7buzmtw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.software.com%2Fremoteimages%2Fuploads%2Farticles%2Fpidzvi5m4cqw7buzmtw5.png" alt="Age of Undeployed Pull Requests" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deployment Batch Size also helps teams keep track of how big the backlog is getting. Deployments should be small if they are frequent, and introducing fewer changes in each deployment helps decrease the risk of errors.&lt;/p&gt;

&lt;p&gt;Developers working on automation and scripting can also track Deployment Success Rate and aim for a success rate above 99% for deployments to production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automate deployments
&lt;/h3&gt;

&lt;p&gt;Fast releases require teams to remove as much manual work as possible when deploying. Engineers shouldn't need to fiddle with scripts or commands every time they want to release their changes. It slows them down and opens the door to human error. Nick Moore of &lt;a href="https://about.sourcegraph.com/blog/continuous-delivery-mindset" rel="noopener noreferrer"&gt;Sourcegraph&lt;/a&gt; argues that "without automation, you're reliant on the heroics of individual engineers, which isn't scalable."&lt;/p&gt;

&lt;p&gt;Releases should be predictable, safe, and repeatable — in other words, uneventful. Most teams are familiar with a baseline of automation. The rise of automated CI/CD tools — from Vercel to Jenkins to GitLab — has made packaging your team's changes and deploying them dead-simple. &lt;/p&gt;

&lt;p&gt;As teams scale, they should look to take their abilities further. One option is to lean into a principle known as "Everything as Code," which requires as much of their deployment tooling to be codified as possible. GitLab enshrines this idea in their &lt;a href="https://about.gitlab.com/direction/deployment/" rel="noopener noreferrer"&gt;company handbook&lt;/a&gt;:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Deployment tooling, including pipelines, infrastructure, environments, and monitoring tools, are constantly evolving. If they can be stored as code and version-controlled, it will enable organizations to more effectively collaborate and avoid costly mistakes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When deployments are described in code, they can be managed, replicated, and built upon by every developer on a team. It also sets the foundation for building out an internal developer platform — think self-service library of toolchains, workflows, and infrastructure — which allows teams to spin up and tear down environments on their own. &lt;/p&gt;

&lt;h3&gt;
  
  
  Reduce co-dependencies
&lt;/h3&gt;

&lt;p&gt;When changes to a codebase require a lot of handoffs and coordination, it makes it harder to deploy even small updates. Deployments are also slowed when they impact many different parts of a codebase. Decoupling architectures and making ownership of services clear can help reduce these co-dependencies.&lt;/p&gt;

&lt;p&gt;A loosely-coupled architecture, according to The DevOps Handbook, is one in which "services can update in production independently, without having to update other services." Microservices are one way to decouple architecture, as long as services are independent of each other. But microservices can sometimes introduce more complexity and slow things down, making it important to measure Deployment Frequency. Some teams choose to break off only a few services from their monolith to get the best of both worlds. &lt;/p&gt;

&lt;p&gt;Some teams have reduced ambiguity by introducing a developer portal, like &lt;a href="https://www.opslevel.com/" rel="noopener noreferrer"&gt;OpsLevel&lt;/a&gt; or &lt;a href="https://backstage.io/" rel="noopener noreferrer"&gt;Backstage&lt;/a&gt;. These tools create a catalog of services by pulling together the tools and documentation needed to use them. &lt;/p&gt;

&lt;h3&gt;
  
  
  Follow your code 
&lt;/h3&gt;

&lt;p&gt;When developers hand off their changes to deployment teams, they miss out on an important feedback loop. They can't see how their changes are working or if there were any hiccups when deploying them. &lt;/p&gt;

&lt;p&gt;It also leads to badly aligned incentives. Without any communication between them, developers try to push code through as quickly as possible, while Ops teams try to keep the lights on. Development thinks there's a speed problem, but Ops thinks there's a quality problem.&lt;/p&gt;

&lt;p&gt;One solution is for developers to follow their changes all the way through to production. Teams can set up notifications in Slack to alert authors when their pull request is being released to production, so they can validate and watch their changes go live. The status of merged pull requests -- and whether they are deployed or not -- can also be made visible to everyone. Developers should also have access to test suites in the deployment pipeline, monitors in production environments, and feature flags. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.software.com%2Fremoteimages%2Fuploads%2Farticles%2Fr3ga39kz7zs0l4okhvp8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcommunity.software.com%2Fremoteimages%2Fuploads%2Farticles%2Fr3ga39kz7zs0l4okhvp8.png" alt="Pull requests ready to be deployed" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deployments should be the opposite of a black box. When developers can see how their code flows through CI/CD pipelines, they can take those learnings back to the beginning when they start writing their next line of new code. &lt;/p&gt;

&lt;h3&gt;
  
  
  Make deployments progressive
&lt;/h3&gt;

&lt;p&gt;Big releases can be stressful when they push out changes to many customers at once or make changes to vital systems, like a database or API. &lt;/p&gt;

&lt;p&gt;By using progressive delivery techniques, such as feature flags, canary release, and rolling deployments, teams can lower the stakes of every deployment. These strategies reduce anxiety during releases by gradually introducing new changes into a production environment, giving teams time to make sure everything works as expected. &lt;/p&gt;

&lt;p&gt;The DevOps Handbook describes progressive deployments as an important way to fight fear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Instead of firefighting for days or weeks to make the new functionality work, we merely change a feature toggle or configuration setting. This small change makes the new feature visible to ever-larger segments of customers, automatically rolling back if something goes wrong. As a result, our releases are controlled, predictable, reversible, and low stress. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://about.sourcegraph.com/blog/continuous-delivery-mindset" rel="noopener noreferrer"&gt;Using feature flags&lt;/a&gt; ensures that the main branch is always releasable. Teams can put work behind a feature flag until it's ready to release, which allows them to test their work in their continuous integration pipeline without blocking a deployment. During a release, they can turn on the new feature for progressively larger groups of users, gaining confidence at each step that their changes work properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Orchestrate an automatic release process
&lt;/h3&gt;

&lt;p&gt;If releases feel chaotic or stressful, teams can try coordinating them with some lightweight automation. In Slack, they can notify authors when a PR is queued up for a release or if checks fail during a deployment. Most CI/CD tools offer Slack integrations — such as &lt;a href="https://slack.com/apps/A0F7VRFKN-jenkins-ci" rel="noopener noreferrer"&gt;Jenkins CI&lt;/a&gt;, &lt;a href="https://slack.com/apps/A0F7VRE7N-circleci" rel="noopener noreferrer"&gt;CircleCI&lt;/a&gt;, and &lt;a href="https://slack.com/apps/A0F81FP4N-travis-ci" rel="noopener noreferrer"&gt;Travis CI&lt;/a&gt; — to automatically add context.&lt;/p&gt;

&lt;p&gt;Once changes have been deployed, monitoring gives developers confidence that a release can be undone if there is a catastrophic issue in production. If teams detect any problems, the ability to perform automatic rollbacks, fast forward fixes, or environment freezes also enables organizations to be more in control. &lt;/p&gt;

&lt;p&gt;For example, the &lt;a href="https://slack.engineering/deploys-at-slack/" rel="noopener noreferrer"&gt;Slack engineering team&lt;/a&gt; schedules its deploys at regular intervals and puts a team member in charge to make sure everything runs smoothly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every day, we do about 12 scheduled deploys. During each deploy, an engineer is designated as the deploy commander in charge of rolling out the new build to production. This is a multistep process that ensures builds are rolled out slowly so that we can detect errors before they affect everyone. These builds can be rolled back if there is a spike in errors and easily hotfixed if we detect a problem after release.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Core to Slack's playbook is the ability to find problems early and take action quickly. If teams can see issues with a deployment, but can't rollback or hotfix it, they're stuck on a runaway train. Conversely, if they can quickly push out fixes, but can't spot an issue until it's affecting a lot of users, much of the damage has already been done. &lt;/p&gt;

&lt;h3&gt;
  
  
  Keep experimenting 
&lt;/h3&gt;

&lt;p&gt;Like with &lt;a href="https://community.software.com/softwaredotcom/an-efficient-code-review-process-has-fast-feedback-loops-1m0o" rel="noopener noreferrer"&gt;code reviews&lt;/a&gt;, there are many experiments teams can run to see what works best for their deployment process. With modern tools like &lt;a href="https://github.com/marketplace?type=actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; and &lt;a href="https://circleci.com/" rel="noopener noreferrer"&gt;CircleCI&lt;/a&gt;, teams have more control over how and when they deploy. &lt;/p&gt;

&lt;p&gt;What tools does your team use for faster, safer deployments? What workflows have improved them the most?&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>devops</category>
      <category>management</category>
      <category>agile</category>
    </item>
    <item>
      <title>What's the longest build time you've experienced?</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Mon, 02 May 2022 22:30:33 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/whats-the-longest-build-time-youve-experienced-k2j</link>
      <guid>https://dev.to/softwaredotcom/whats-the-longest-build-time-youve-experienced-k2j</guid>
      <description>&lt;p&gt;The most successful engineering teams typically keep their workflow durations between five to ten minutes on average, according to CircleCI's &lt;a href="https://circleci.com/resources/2022-state-of-software-delivery/" rel="noopener noreferrer"&gt;2022 State of Software Delivery&lt;/a&gt;. The median is 3.7 minutes. &lt;/p&gt;

&lt;p&gt;Looking at our team's slowest GitHub Actions using our &lt;a href="https://bit.ly/software-github" rel="noopener noreferrer"&gt;GitHub App&lt;/a&gt;, our longest workflow is just under 13 minutes. This excludes local builds and workflows. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ucfmtp80xdophht5st6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ucfmtp80xdophht5st6.png" alt="Software.com GitHub Actions" width="800" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But it's not unusual to see build times measured in hours, depending on the stack you're using.&lt;/p&gt;

&lt;p&gt;LinkedIn's engineering org previously wrote about the steps they took to decrease build times from &lt;a href="https://engineering.linkedin.com/blog/2018/07/how-we-improved-build-time-by-400-percent" rel="noopener noreferrer"&gt;60 minutes to 15 minutes&lt;/a&gt; for their largest microservice, improving productivity and team happiness.&lt;/p&gt;

&lt;p&gt;What's the longest build or workflow time you've ever encountered? What tools were you using / could you fix it? &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
    <item>
      <title>DevSecOps and Shift Left Security: A Guide</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Mon, 10 Jan 2022 20:35:46 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/devsecops-and-shift-left-security-a-guide-3dfh</link>
      <guid>https://dev.to/softwaredotcom/devsecops-and-shift-left-security-a-guide-3dfh</guid>
      <description>&lt;h2&gt;
  
  
  What is DevSecOps methodology?
&lt;/h2&gt;

&lt;p&gt;DevSecOps—short for development, security, and operations—adds security-first thinking into every phase of the software development pipeline, helping engineering teams deliver secure software with speed and at scale. &lt;/p&gt;

&lt;p&gt;Previously, development teams performed security testing after the development cycle, meaning they handed work over to separate QA and security teams for final inspection. As software development teams adopted DevOps practices, particularly continuous integration and deployment, security reviews created costly bottlenecks by backloading important work at the final stages of the delivery pipelines. Teams only uncovered issues after features had been built, meaning they were costlier and more difficult to debug and fix. &lt;/p&gt;

&lt;p&gt;DevSecOps integrates security into every stage of the development pipeline, providing teams with tools and resources at each phase to create safe and secure code. As a result, DevSecOps helps teams address security issues earlier and faster without slowing their organization's software delivery. &lt;/p&gt;

&lt;p&gt;By adopting principles of DevSecOps, teams can benefit from: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Faster and more efficient software delivery&lt;/li&gt;
&lt;li&gt;  More secure codebase and proactive security&lt;/li&gt;
&lt;li&gt;  Continuous feedback and faster security vulnerability patching&lt;/li&gt;
&lt;li&gt;  Highly automated, standardized, and predictable security practices &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How does shift-left security fit into DevSecOps?
&lt;/h2&gt;

&lt;p&gt;Before DevSecOps, engineering teams structured their development cycles to be highly sequential, which meant completing all testing and security reviews after the planning, implementation, and integration phases. &lt;/p&gt;

&lt;p&gt;Once changes reach the end of the development cycle, they are often more complex to debug, forcing teams to disentangle several factors all at once, such as performance, integration, and more. As a result, uncovering significant issues late in the cycle requires large amounts of rework for development teams. After receiving a long list of complex defects from testers, developers need to design and apply multiple fixes all at once and across thousands of lines of code. &lt;/p&gt;

&lt;p&gt;Security testing late in the development life cycle creates especially painful bottlenecks throughout the delivery pipeline: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Insufficient resource planning&lt;/strong&gt;. By failing to include testers early in the planning phases, teams may not properly allocate resources later in the development cycle. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Less time and more debt&lt;/strong&gt;. Cramming testing at the end of the cycle increases the likelihood of teams skipping testing altogether, increasing technical debt, and deferring problems to later versions. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Wasted development time&lt;/strong&gt;. Engineers may continue to work on defective features or changes before receiving any feedback, leading to wasted energy and effort. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Complex debugging&lt;/strong&gt;. Systems become more complex later in the development cycle, making testing more challenging and burdensome. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shifting left means performing testing earlier in the development cycle. In other words, testing is moved to the left on the project timeline. &lt;/p&gt;

&lt;p&gt;Importantly, the goal is not to shift security to the left &lt;em&gt;as a discrete phase&lt;/em&gt;; instead, teams should integrate security into every phase of development—design, implementation, verification, and so on. Many of these improvements can be introduced by automating security tests, particularly as a part of the continuous integration and deployment pipeline. &lt;/p&gt;

&lt;p&gt;According to W. Edwards Deming, an American engineer famous for his key principles on transforming business effectiveness, engineering teams should design more secure products from the moment they start building:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cease dependence on inspection to achieve quality. Eliminate the need for inspection on a mass basis by building quality into the product in the first place.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Why shift left?
&lt;/h3&gt;

&lt;p&gt;The benefits of earlier intervention include faster development speed and improved security throughout the organization's DevOps capabilities. Ultimately, the goal of shift-left security and DevSecOps should be to avoid critical bugs and security defects during the deployment phase, while preserving the fast flow of work.&lt;/p&gt;

&lt;h4&gt;
  
  
  Greater transparency
&lt;/h4&gt;

&lt;p&gt;Implementing security measures throughout the value stream improves visibility into security coverage, including the number of defects discovered and any potential security blind spots. &lt;/p&gt;

&lt;p&gt;The consistent monitoring of threats in the delivery pipeline also introduces a high degree of traceability and auditability, which helps teams iterate and improve their security controls after incidents. &lt;/p&gt;

&lt;h4&gt;
  
  
  More secure codebase
&lt;/h4&gt;

&lt;p&gt;Shift-left security increases test coverage by encouraging more security testing during the development phase. Additionally, shift-left security enables distributed security, where more team members involved in the development process are responsible for building secure software. &lt;/p&gt;

&lt;p&gt;Shift-left security also inspires better software design, instead of a culture of patching and hotfixes, by making teams more aware of security requirements. Teams can code with security in mind from the outset of a project, avoiding ad-hoc and clumsy fixes in the later stages of development. &lt;/p&gt;

&lt;h4&gt;
  
  
  Lower production costs
&lt;/h4&gt;

&lt;p&gt;Shift-left security reduces the cost of development by resolving issues before introducing additional dependencies. According to &lt;a href="https://www.researchgate.net/figure/IBM-System-Science-Institute-Relative-Cost-of-Fixing-Defects_fig1_255965523" rel="noopener noreferrer"&gt;IBM researchers&lt;/a&gt;, fixing defects is 15 times more expensive to fix during the testing phase than during the design phase. Worse, that number jumps to 100 times more expensive when defects are fixed during the maintenance phase. &lt;/p&gt;

&lt;p&gt;Fixing security issues earlier requires less effort and rework than if teams wait until after implementation. &lt;/p&gt;

&lt;h4&gt;
  
  
  Organizational learning
&lt;/h4&gt;

&lt;p&gt;Shift-left security introduces key security practices to development teams and equips them with tools that provide fast feedback on their work. These insights help spread knowledge about security best practices throughout the organization, creating a more security-conscious culture. &lt;/p&gt;

&lt;h4&gt;
  
  
  Improved response time
&lt;/h4&gt;

&lt;p&gt;Better collaboration between development and security means issues can be discovered faster and fixed sooner. When coupled with continuous integration, shift-left security helps teams patch newly identified security vulnerabilities in faster release cycles, decreasing the time threat actors can take advantage of them.&lt;/p&gt;

&lt;h4&gt;
  
  
  Standardization and automation
&lt;/h4&gt;

&lt;p&gt;DevSecOps encourages teams to adopt highly repeatable and predictable security workflows. They can apply security controls consistently across environments, including containers, databases, serverless functions, and more. Such standardization prevents security issues from accidentally slipping through security controls due to human error. &lt;/p&gt;

&lt;p&gt;Shift-left security also introduces a high degree of automation into the software development life cycle, shortening feedback loops and eliminating handoffs. Teams can continuously decrease the workload of manual testers by iteratively and incrementally offloading routine testing to automated tooling.&lt;/p&gt;

&lt;h4&gt;
  
  
  Decreased time to market
&lt;/h4&gt;

&lt;p&gt;Overall, shift-left security can increase &lt;a href="https://www.software.com/devops-guides/delivery-velocity-score" rel="noopener noreferrer"&gt;delivery speed&lt;/a&gt;. Optimized security workflows and automation mean less wait time for developers and fewer bottlenecks when shipping new features.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to shift left in DevSecOps
&lt;/h2&gt;

&lt;p&gt;Adopting shift-left security is not a linear, binary outcome with a strict timeline; instead, it is a continuous process of security improvements over the long-term. &lt;/p&gt;

&lt;h3&gt;
  
  
  Define a strategy
&lt;/h3&gt;

&lt;p&gt;Before changing any security workflows, engineering and security teams must first agree on standards and expectations for their shift-left initiatives. It's important they decide what shift-left security looks like at their organization, creating a roadmap of iterative, long-term improvements. &lt;/p&gt;

&lt;p&gt;They can also perform a risk-based analysis to decide where to start implementing testing and tooling, balancing potential risk to the organization's security and resources required to implement new workflows. Incident history and can provide a list of high-priority and high-impact areas for improvement. &lt;/p&gt;

&lt;h3&gt;
  
  
  Understand the flow of work in your organization
&lt;/h3&gt;

&lt;p&gt;Next, teams need to understand the flow of work through the software delivery pipeline. The goal is to provide context to security teams about the tools and environments used by developers. They can then create a unified test strategy outlining the tests, tools, and data required for each new security requirement. &lt;/p&gt;

&lt;p&gt;They can also identify opportunities to improve existing workflows so they are more compatible with shift-left security. For example, teams can adopt &lt;a href="https://www.software.com/devops-guides/trunk-based-development-guide" rel="noopener noreferrer"&gt;trunk-based development&lt;/a&gt; to streamline automated security tests. &lt;/p&gt;

&lt;h3&gt;
  
  
  Implement security guardrails
&lt;/h3&gt;

&lt;p&gt;When adding security guardrails, the goal is to make security a seamless part of daily work. Teams can introduce these changes into the development pipeline by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  De-emphasizing acceptance and system level testing, while refocusing on unit testing and integration testing.&lt;/li&gt;
&lt;li&gt;  Reducing toolchain complexity with pre-approved tools.&lt;/li&gt;
&lt;li&gt;  Introducing &lt;a href="https://www.software.com/devops-guides/test-automation-guide" rel="noopener noreferrer"&gt;testing automation&lt;/a&gt;, including security workflows directly into continuous integration pipelines.&lt;/li&gt;
&lt;li&gt;  Hardening continuous integration systems with checklists to ensure teams follow best practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Continuously train and improve
&lt;/h3&gt;

&lt;p&gt;Shift-left security requires continuous improvement to respond to the ever-changing needs of development and security teams. As part of the ongoing shift left, security teams can be more involved in the early phases of design, reviewing implementation details to advise on potential testing requirements, architecture considerations, and security considerations. &lt;/p&gt;

&lt;p&gt;Development teams can also be kept up to date on the OWASP Top 10, testing best practices, and other security trends. &lt;/p&gt;

&lt;h2&gt;
  
  
  Shift left security best practices
&lt;/h2&gt;

&lt;p&gt;Shift-left security needs to be implemented with careful consideration for its impact on the development process. Like all DevOps capabilities, it works best when combined with visibility, monitoring, and continuous improvement. &lt;/p&gt;

&lt;h3&gt;
  
  
  Optimize test environments
&lt;/h3&gt;

&lt;p&gt;Security testing should also follow the &lt;a href="https://www.software.com/devops-guides/test-automation-guide" rel="noopener noreferrer"&gt;test pyramid&lt;/a&gt; to provide the most valuable feedback to developers at the right time. It's important to implement smaller, faster tests earlier, such as static code analysis, unit tests, and smoke tests. By starting with these smaller tests, developers avoid the need to create full builds to reveal certain security issues. &lt;/p&gt;

&lt;p&gt;Teams should run more comprehensive test suites—such as API, integration, and cross-browser testing—later in the development pipeline. These test suites should be designed to fail fast, stopping builds early if they uncover catastrophic issues. &lt;/p&gt;

&lt;p&gt;Teams should also consider using short-lived testing environments. Long-running environments can quickly become obsolete or require significant upkeep, while temporary environments avoid maintenance costs and outdated data. For example, containers for smoking tests can be created and destroyed quickly according to predefined configurations. &lt;/p&gt;

&lt;h3&gt;
  
  
  Monitor pipeline performance
&lt;/h3&gt;

&lt;p&gt;Shift-left security should be highly automated, with tools and tests added directly to the build process. Teams will need to maintain security tests and plan for their upkeep each development cycle. &lt;/p&gt;

&lt;p&gt;As a result, an important part of shift-left security is consistently monitoring pipeline performance. Teams should highlight slow pipelines and jobs, as well as their success rates. The goal is to fine tune their configuration to eliminate false positives, increase speed, or flag outdated tests. They can also identify recurring security weaknesses that require additional tooling earlier in the development cycle. &lt;/p&gt;

&lt;h3&gt;
  
  
  Security teams involved in design
&lt;/h3&gt;

&lt;p&gt;Requesting feedback from security teams during the design phase helps teams flag potential issues and highlight areas of focus during implementation. Security teams can help teams prevent complex security issues before developers have a chance to build them into the codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Increase pre-approved tools
&lt;/h3&gt;

&lt;p&gt;Standardization and pre-approval for dependencies, packages, toolchains, libraries encourages their use and avoids rework. Overall, it decreases the surface area for security issues by eliminating vulnerable toolchains before they're added into the codebase. &lt;/p&gt;

&lt;h3&gt;
  
  
  Develop a culture of visibility
&lt;/h3&gt;

&lt;p&gt;Above all, teams should improve visibility into their organization's shift-left security practices. They should make it easy for all team members to understand their organization's security posture, including its strengths and areas for improvements. &lt;/p&gt;

&lt;h2&gt;
  
  
  Measuring shift left security
&lt;/h2&gt;

&lt;p&gt;To measure the effectiveness of shift-left security, teams should improve visibility into: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Security review time&lt;/strong&gt;. The goal should be to decrease the time required for security reviews so they do not slow the development process. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Percentage of security requirements integrated into automated testing&lt;/strong&gt;. Teams should increase the coverage of security requirements performed as part of test automation, which provide faster feedback to developers. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Percentage of development tools in use that have been pre-approved&lt;/strong&gt;. Teams should increase their approval coverage until most or all tools used by development teams have been pre-approved by security teams. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Shift left security tools
&lt;/h2&gt;

&lt;p&gt;Organizations can implement several different types of tools to help developers shift security to the left. The four main security testing methods include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Static Application System Testing (SAST) involves scanning source code for vulnerabilities. It's typically fast and cheap because it does not require code to compile or run. &lt;/li&gt;
&lt;li&gt;  Dynamic Application Security Testing (DAST) involves black-boxing testing, exposing an application to common attacks. &lt;/li&gt;
&lt;li&gt;  Interactive Application Security Testing (IAST), a hybrid of SAST and DAST, analyzes running applications and watches behaviors initiated by both manual and automated tests. &lt;/li&gt;
&lt;li&gt;  Runtime Application Self Protection (RASP) integrates with an application to prevent attacks during runtime, blocking or preventing execution based on traffic and user behavior. Two popular tools include OpenRASP and Sqreen. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teams can also implement security practices to further secure the software supply chain: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Secrets detection: Teams can use tools to scan code for secrets, like API keys, encryption keys, and credentials, to prevent accidental exposure. &lt;/li&gt;
&lt;li&gt;  Dependency scanning: Tools like WhiteSource and FOSSA scan dependencies and open source projects for security issues or identify outdated packages. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Start small, start today
&lt;/h2&gt;

&lt;p&gt;As teams work in increasingly complex development environments—relying on more dependencies, tools, and open source technology—security is more important than ever. With widespread security scares, such as &lt;a href="https://www.zdnet.com/article/log4j-flaw-hunt-shows-how-complicated-the-software-supply-chain-really-is/" rel="noopener noreferrer"&gt;Log4j&lt;/a&gt; and SolarWinds, creating a resilient and security-focused organization can be a daunting task. In 2021 alone, the US-CERT Vulnerability database recorded more than 18,000 vulnerabilities, &lt;a href="https://www.securitymagazine.com/articles/96668-2021-breaks-the-record-for-security-vulnerabilities" rel="noopener noreferrer"&gt;breaking previous records&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;In spite of these challenges, DevSecOps and shift-left security testing offers teams a way to confidently and consistently write more secure code and build safer software. With small, continuous improvements, any engineering team can inspire a culture that prioritizes better security.&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
    </item>
    <item>
      <title>Is hyperautomation the future of development?</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Wed, 05 Jan 2022 21:18:36 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/is-hyperautomation-the-future-of-development-2ped</link>
      <guid>https://dev.to/softwaredotcom/is-hyperautomation-the-future-of-development-2ped</guid>
      <description>&lt;p&gt;I recently read about Gartner's &lt;a href="https://www.ciodive.com/news/gartner-strategic-trends-2022/608315/" rel="noopener noreferrer"&gt;12 technology trends for 2022&lt;/a&gt;. One of the predictions that stood out to me was the idea of &lt;strong&gt;hyperautomation&lt;/strong&gt;: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The hyperautomation playbook yields benefits for enterprise leaders in the year ahead. This strategy seeks to rapidly identify, vet and automate as many processes as possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the world of software development, there's a lot of discussion about automation. Automated workflows impact so many different parts of the software development life cycle — CI/CD pipelines, &lt;a href="https://www.software.com/devops-guides/test-automation-guide" rel="noopener noreferrer"&gt;testing&lt;/a&gt;, &lt;a href="https://copilot.github.com/" rel="noopener noreferrer"&gt;code suggestions&lt;/a&gt;, &lt;a href="https://yeoman.io/generators/" rel="noopener noreferrer"&gt;code scaffolding&lt;/a&gt;, and even &lt;a href="https://marketplace.visualstudio.com/items?itemname=mintlify.document" rel="noopener noreferrer"&gt;writing documentation&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;What do you think? Will hyperautomation will be a key trend in software development in 2022? What things can or can't be automated? &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Psychological Safety at Work: Does Trust Drive Innovation?</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Thu, 16 Dec 2021 22:21:06 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/psychological-safety-at-work-does-trust-drive-innovation-27g6</link>
      <guid>https://dev.to/softwaredotcom/psychological-safety-at-work-does-trust-drive-innovation-27g6</guid>
      <description>&lt;p&gt;Psychological safety refers to the cultural and social dynamics of a team that enable members to feel safe taking risks and being vulnerable around each other. On teams with a high degree of psychological safety, employees work freely without unfair punishment, ridicule, or embarrassment. They value curiosity over blame and learning over shame. &lt;/p&gt;

&lt;p&gt;Recent research conducted over the last few years shows that psychological safety serves as the engine of high-performing teams. It is a key driver of organizational learning, innovation, creativity, resiliency, and, ultimately, effectiveness. &lt;/p&gt;

&lt;p&gt;Without psychological safety, engineering teams resort to fear, shame, and retribution—an environment that leads team members to retreat from conflict, communicate less effectively, and engage less with team efforts to improve the status quo. When engineers do not feel comfortable expressing their views, they face a heightened risk of &lt;a href="https://www.software.com/devops-guides/developer-burnout" rel="noopener noreferrer"&gt;burnout&lt;/a&gt; and their wellbeing suffers. In the long term, poor psychological safety and burnout lead to high turnover, dissatisfaction, and unhealthy employees.&lt;/p&gt;

&lt;p&gt;In today's fast-paced world of software development, engineering organizations that fail to support their most important knowledge workers will struggle in the marketplace against their competitors. They will lose both their customers and best talent to the highest performing, most innovative companies. &lt;/p&gt;

&lt;p&gt;By embracing the principles behind psychological safety, teams and organizations can reach their full potential—experimenting, learning, and building faster and more efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is psychological safety?
&lt;/h2&gt;

&lt;p&gt;Many of the modern ideas behind psychological safety emerged from parallel concepts about &lt;em&gt;physical&lt;/em&gt; worker safety in the world of manufacturing. &lt;/p&gt;

&lt;p&gt;Between 1950 and 1970, leaders at Toyota introduced the Toyota Production System, a socio-technical system emphasizing both continuous improvement and mutual respect as important contributors to team performance. The company also created the Andon Cord, a mechanism allowing any worker to immediately stop production if they noticed quality or processing problems on the factory floor. &lt;/p&gt;

&lt;p&gt;During the 1990s, Alcoa, an aluminum industrial corporation, quintupled revenue under CEO Paul O'Neill by emphasizing worker safety. At the start of his reign, O'Neill famously proclaimed his intention to "make Alcoa the safest company in America." By galvanizing deeper inspection of their manufacturing processes, Alcoa created a long-lasting culture of improvement and transformation.  &lt;/p&gt;

&lt;p&gt;Today manufacturing employs less than 10% of the U.S. workforce, but many of the same principles of worker safety have been carried over to the technology industry. With the growth of knowledge work in the last few decades, researchers have recently begun to focus on psychological safety, rather than physical safety, as the key driver of team effectiveness. &lt;/p&gt;

&lt;p&gt;In 2012, Google embarked on Project Aristotle, a research project to uncover the secrets of high performing teams. After analyzing 180 teams over two years at Google, researchers discovered that psychological safety—not team members' tenure, seniority, or extraversion—is the team trait most highly associated with strong performance. &lt;/p&gt;

&lt;p&gt;According to organizational behavioral scientist Amy Edmondson, psychological safety is "a shared belief held by members of a team that the team is safe for interpersonal risk taking."&lt;/p&gt;

&lt;p&gt;Google, in its research on psychological safety, provides a more expansive definition: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Psychological safety refers to an individual's perception of the consequences of taking an interpersonal risk or a belief that a team is safe for risk taking in the face of being seen as ignorant, incompetent, negative, or disruptive. In a team with high psychological safety, teammates feel safe to take risks around their team members. They feel confident that no one on the team will embarrass or punish anyone else for admitting a mistake, asking a question, or offering a new idea.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The goal of psychological safety is to overcome natural tendencies to exclude, punish, or marginalize other team members. When individuals face a perceived threat at work, they often attempt to reestablish fairness within their group—an instinctive reflex rooted in primitive fight or flight responses. For example, an individual may unfairly reject a team member's idea simply because that team member previously disagreed with one of their ideas in another meeting. &lt;/p&gt;

&lt;p&gt;Such unsafe conditions create a domino effect, passing frustration and stress from one team to another. If engineers feel they have been unfairly blamed for a recent outage, they're more likely to reassert fairness by shaming the team they hold responsible, making fewer changes to the codebase to avoid conflict, and deflecting criticism to others in the future. &lt;/p&gt;

&lt;p&gt;On the contrary, psychological safety seeks to prioritize curiosity and learning over blame and shame. It is known as an "enabling mechanism" because it fosters positive group dynamics and team learning.  &lt;/p&gt;

&lt;p&gt;Psychological safety, however, does not require team members to always agree with or coddle their teammates. Instead, it requires them to embrace and manage conflicts or disagreements in a respectful, inclusive, and constructive manner. By creating a culture of psychological safety, teams ensure everyone leaves each conversation feeling they achieved something meaningful for their team as a whole.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stages of psychological safety
&lt;/h3&gt;

&lt;p&gt;Psychological safety is not a binary outcome; instead, teams fall somewhere on a spectrum of safety. Each step meets different individual needs on the path to creating a truly psychologically safe workplace. &lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://www.amazon.com/Stages-Psychological-Safety-Inclusion-Innovation/dp/1523087684" rel="noopener noreferrer"&gt;Dr. Timothy Clark&lt;/a&gt;, founder and CEO of a global leadership consulting and training organization known as LeaderFactor, the four requirements are inclusion, learner, contributor, and challenger safety.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 1: Inclusion safety&lt;/strong&gt;. Team members feel included on a team and accepted for their true self. They have a shared identity with their team members. Inclusion safety satisfies the need to connect and belong. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 2: Learner safety&lt;/strong&gt;. Team members feel safe to ask questions, experiment, and make mistakes. They give and receive fair feedback without fear of embarrassment. Learner safety satisfies the need to learn and grow. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 3: Contributor safety&lt;/strong&gt;. Team members feel safe to contribute. They feel empowered to use their skills and talents to create value for their team. Contributor safety satisfies the need to make a difference and have an impact. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 4: Challenger safety&lt;/strong&gt;. Team members feel safe to challenge the status quo. They embrace candor and honesty when discussing things that need to change without fear of retribution. Challenger safety satisfies the need to make things better. &lt;/p&gt;

&lt;h2&gt;
  
  
  How does psychological safety impact performance and innovation?
&lt;/h2&gt;

&lt;p&gt;Psychological safety is considered the engine of team performance. Teams with better psychological safety benefit from: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Enhanced creativity&lt;/strong&gt;: Teams encourage solution-finding and divergent thinking, which are both critical for creative work. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Increased open-mindedness&lt;/strong&gt;: Team members embrace and explore new ideas. They are more willing to acknowledge potential weaknesses, take risks, and experiment. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Increased resiliency&lt;/strong&gt;: Teams bounce back faster and learn from failure when they feel safe to raise issues with other individuals and find solutions. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Higher engagement&lt;/strong&gt;: Team members are more engaged with their work, driving organizational effectiveness. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Faster learning&lt;/strong&gt;: Teams enjoy experimenting with new ideas, allowing teams to test and debate more ideas. They are more likely to share those learnings across the organization as a catalyst for other teams to experiment. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Improved knowledge sharing&lt;/strong&gt;: Learnings from failures are shared throughout an organization, transforming individual and team learning into organizational learning. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Collectively, the positive outcomes of psychological safety improve how well companies innovate by increasing the rate of change and decreasing time to market. In other words, psychological safety helps teams surface more ideas faster and implement them more rapidly. &lt;/p&gt;

&lt;p&gt;Psychological safety, however, is not a silver bullet for organizational performance. It must be combined with other 'fuels' of performance—powerful developer tools, a world-class developer experience, effective communication, long-term investments in team growth, and so on. &lt;/p&gt;

&lt;p&gt;In particular, psychological safety works best when paired with team accountability. On teams with high psychological safety and high accountability, individuals understand what is expected of their team and have the safety to meet those expectations. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5mgi65y48wemp6jnr1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5mgi65y48wemp6jnr1m.png" alt="Psychological safety and accountability" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

Adapted from &lt;a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7393970/" rel="noopener noreferrer"&gt;How Psychological Safety Affects Team Performance&lt;/a&gt;




&lt;p&gt;Teams without psychological safety consistently push team members into fight or flight responses, creating an organization driven by fear rather than collaborative improvement. As a result, teams with low psychological safety suffer from: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Lack of diversity of thought&lt;/strong&gt;: When team members fear sharing new ideas, teams tend to defer to the most popular or least divisive ideas. They attract like-minded individuals who prefer to uphold the status quo. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Unequipped to prevent failure&lt;/strong&gt;: Teams do not have the communication habits needed to raise potential issues before they cause damage. They do not share learnings from past mistakes and are more likely to repeat those mistakes. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Knowledge silos&lt;/strong&gt;: Individual or team learning is never translated into organizational learning when people cannot freely share their findings. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Indifference and disengagement&lt;/strong&gt;: Individuals take a defensive stance by retreating from disagreements and protecting themselves against future conflict.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Despite the importance of psychological safety to innovation, most employees work at companies without psychologically safe cultures. Only 47% of employees across the world describe their workplaces as psychologically safe and healthy, according to a global survey conducted by &lt;a href="https://www.ipsos.com/en-us/half-47-global-employees-agree-their-workplace-psychologically-safe-and-healthy-three-ten-27-say" rel="noopener noreferrer"&gt;Ipsos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozwjen4i6qdr4tn67wvu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozwjen4i6qdr4tn67wvu.png" alt="Psychological safety prevalence" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to measure psychological safety
&lt;/h2&gt;

&lt;p&gt;Psychological safety is a measurable concept. Similar to other DevOps metrics, such as lead time and change failure rate, it is an important metric that teams should track and improve. To measure psychological safety, teams can use: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Surveys&lt;/li&gt;
&lt;li&gt;  One-on-one feedback&lt;/li&gt;
&lt;li&gt;  DevOps data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Edmonson supported her research with a survey-based approach to measuring psychological safety. Team members score the following statements on a Likert scale of 1 (strongly disagree) to 7 (strongly agree): &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  When someone makes a mistake in this team, it is often held against him or her.&lt;/li&gt;
&lt;li&gt;  In this team, it is easy to discuss difficult issues and problems.&lt;/li&gt;
&lt;li&gt;  In this team, people are sometimes rejected for being different.&lt;/li&gt;
&lt;li&gt;  It is completely safe to take a risk on this team.&lt;/li&gt;
&lt;li&gt;  It is difficult to ask other members of this team for help.&lt;/li&gt;
&lt;li&gt;  Members of this team value and respect each others' contributions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get your final score, subtract your score on question 1 from 8 and subtract your score on question 4 from 8, then add those numbers to your scores from questions 2, 3, and 5. &lt;/p&gt;

&lt;p&gt;A final score of 15 or less means your team is psychologically unsafe, while a score above 30 means your team enjoys a high degree of psychological safety. A score between 15 and 30 indicates room for improvement. &lt;/p&gt;

&lt;p&gt;Managers and engineers can also gauge psychological safety by conducting one on one conversations. During these discussions, leaders should analyze not just the &lt;em&gt;what&lt;/em&gt; of their communication, but also the &lt;em&gt;how&lt;/em&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  How is my delivery?&lt;/li&gt;
&lt;li&gt;  How is my feedback?&lt;/li&gt;
&lt;li&gt;  How well do I ask questions? &lt;/li&gt;
&lt;li&gt;  How well do I include everyone in the conversation? &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teams can also use other DevOps metrics to identify potential issues with psychological safety. Poor psychological safety can create bottlenecks and slowdowns in the development pipeline: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Delivery throughput&lt;/strong&gt;: Engineers are afraid to make changes to the codebase, so they ship fewer features. &lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mean time to recovery&lt;/strong&gt;: Teams are afraid of being blamed for downtime, so they communicate less during outages. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Change failure rate&lt;/strong&gt;: Teams do not feel comfortable sharing their learnings from previous failures, so they are more likely to repeat mistakes. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Review time&lt;/strong&gt;: Teams do not feel comfortable sharing feedback with others, so they avoid code reviews and pair programming. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many DevOps metrics can be indicators of communication challenges within an organization. Metrics can be impacted by many other factors—such as automation, testing strategies, tooling, and CI/CD maturity—but it's important to remember that one of the factors impacting team performance could be non-technical and cultural. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tips for driving psychological safety in the workplace
&lt;/h2&gt;

&lt;p&gt;Fostering psychological safety requires teams to overcome imbalances in workplace incentives: members must think more about the positive impact of sharing an idea than the potential negative consequences. &lt;/p&gt;

&lt;p&gt;According to Edmondson, there are three key things leaders can do to fix these imbalances and improve psychological safety: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Frame work as a learning problem, not an execution problem&lt;/li&gt;
&lt;li&gt;  Acknowledge your own fallibility&lt;/li&gt;
&lt;li&gt;  Model curiosity and ask lots of questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To achieve these goals, teams should: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Establish clear rules of engagement&lt;/li&gt;
&lt;li&gt;  Embrace conflict as a source of innovation&lt;/li&gt;
&lt;li&gt;  Reframe negativity as a learning experience&lt;/li&gt;
&lt;li&gt;  Create space for open communication&lt;/li&gt;
&lt;li&gt;  Measure consistently for long-term improvement&lt;/li&gt;
&lt;li&gt;  Invest in DevOps&lt;/li&gt;
&lt;li&gt;  Consider the context&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Establish rules of engagement
&lt;/h3&gt;

&lt;p&gt;Teams should first focus on creating ground rules and expectations for better and more productive group discussions. A code of conduct can include ideas such as: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Challenge ideas, not people&lt;/li&gt;
&lt;li&gt;  Avoid blame or speculation&lt;/li&gt;
&lt;li&gt;  Take responsibility for the quality of the discussion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many of these guidelines are designed to help teams be more empathetic in their communication by listening more, praising others, and expressing gratitude when someone shares. By codifying these rules, leaders communicate the importance of psychological safety and empathy as key objectives and expectations for their team.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Embrace conflict as a source of innovation
&lt;/h3&gt;

&lt;p&gt;A core tenet of psychological safety is that conflict and tension should be viewed as a source of new and better ideas. In a psychologically safe workplace, team members should feel comfortable discussing ideas objectively, disagreeing with others, and building on existing ideas. &lt;/p&gt;

&lt;p&gt;To make conflict productive, leaders should focus on using &lt;em&gt;generative&lt;/em&gt; &lt;em&gt;language&lt;/em&gt;—structuring questions and discussions to create new ideas rather than destroy them. They should ask open-ended questions, embrace half-finished thoughts, and welcome naive questions as a launchpad for further discussion. &lt;/p&gt;

&lt;p&gt;To ease the pressure on other participants, leaders should introduce opposing viewpoints and facilitate everyone speaking up. They can even deliberately suggest controversial ideas or ask 'dumb' questions to jumpstart conversations. &lt;/p&gt;

&lt;p&gt;Most importantly, individuals should seek clarity before criticism. Asking deeper questions often unearths better ideas. &lt;/p&gt;

&lt;h3&gt;
  
  
  Reframe negativity as a learning experience
&lt;/h3&gt;

&lt;p&gt;Teams should reinforce a blameless culture that prioritizes learning over shame. Leaders need to establish norms for failure by setting an example for their team. They should admit mistakes, share their failures, and ask for help when faced with a difficult task.&lt;/p&gt;

&lt;p&gt;Teams should also seek unity in both their accomplishments and mistakes. Teams celebrate product launches and feature releases, but often neglect to rally as a team around their failures. As with sports teams, &lt;a href="https://doi.apa.org/doiLanding?doi=10.1037%2F0022-3514.34.3.366" rel="noopener noreferrer"&gt;people prefer&lt;/a&gt; to say "we" when describing victories, but choose to say "they" when talking about defeats. When teams fail, they should celebrate the lessons they have learned as a group and the positive impact it will have on their team in the future. &lt;/p&gt;

&lt;h3&gt;
  
  
  Create space for open communication
&lt;/h3&gt;

&lt;p&gt;Consistent communication is key for enabling continuous feedback and improvement between team members. Without channels for open communication, individuals have no clear or sanctioned way to express their opinions and ideas. &lt;/p&gt;

&lt;p&gt;Teams should be deliberate in creating space to improve communication, surface issues faster, and spark discussions between team members. These can be regular one-on-one conversations, happy hours, &lt;a href="https://www.donut.com/" rel="noopener noreferrer"&gt;randomized meetings&lt;/a&gt;, and watercooler Slack channels. &lt;/p&gt;

&lt;h3&gt;
  
  
  Measure consistently for long-term improvements
&lt;/h3&gt;

&lt;p&gt;To improve team performance, psychological safety must be an explicit and transparent team goal. All team members should understand how well their team is doing and how they can improve; the goal is to remove ambiguity, create a shared understanding of reality, and help surface issues faster. &lt;/p&gt;

&lt;p&gt;When psychological safety is a clear goal, teams emphasize the importance of strong communication as a part of organizational expectations. As a result, psychological safety itself becomes a focus of team learning. In the event of a team failure, self-reflection activities such as retrospectives and post-mortems should analyze both technical challenges and cultural shortcomings around psychological safety. &lt;/p&gt;

&lt;h3&gt;
  
  
  Invest in DevOps
&lt;/h3&gt;

&lt;p&gt;To improve psychological safety, teams can adopt DevOps practices that reduce the time to uncover failures, reduce the cost of failures, and amplify the lessons learned from failures. &lt;/p&gt;

&lt;p&gt;It's important to remember that high-performing teams fail more often than low-performing teams. While the best teams experience lower failure &lt;em&gt;rates&lt;/em&gt;, they deliver more software in less time. The result is a greater absolute number of failures; however, teams with high psychological safety recover, learn, and grow from those failures faster, too. &lt;/p&gt;

&lt;p&gt;The key DevOps tactics to improve psychological safety include creating guardrails, improving resiliency, and reducing the stigma of failure. &lt;/p&gt;

&lt;p&gt;Guardrails help teams prevent changes from breaking their systems before they reach production environments. They include practices such as shift-left testing and security, automated CI/CD pipelines, and feature flags or canary releases. They provide engineers with the safety needed to experiment and try new things without fear of serious outages or downtime. Guardrails also reduce anxiety and stress during the development life cycle so teams can code free from fear or toil. &lt;/p&gt;

&lt;p&gt;When considering which guardrails to implement and how to do so, DevOps teams should look to enable innovation by providing "buoys not boundaries," according to Ralph Loura in The DevOps Handbook: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Instead of drawing hard boundaries that everyone has to stay within, we put buoys that indicate deep areas of the channel where you're safe and supported. You can go past the buoys as long as you follow the organizational principles. After all, how are we ever going to see the next innovation that helps us win if we're not exploring and testing at the edges? As leaders, we need to navigate the channel, mark the channel, and allow people to explore past it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In addition to guardrails, teams can improve their resilience to help them fix issues quickly when they do occur. Erik Hollnagel defines resiliency engineering as: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The intrinsic ability of a system to adjust its functioning prior to, during, or following changes and disturbances, so that it can sustain required operations under both expected and unexpected conditions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Teams can invest in self-healing systems and decoupled architecture to mitigate and contain damage in the event of a failure. With safer failures, teams can reduce stressful deployments and constant firefighting. &lt;/p&gt;

&lt;p&gt;Lastly, teams can reduce the stigma of failure. Even high-performing teams are not able to catch every mistake. In fact, if they did, they wouldn't be high-performing teams because they would lack valuable feedback loops and learning opportunities. &lt;/p&gt;

&lt;p&gt;To reduce the stigma of failure, teams should view post-mortems and retrospectives as a learning opportunity. Organizations are only able to strengthen their engineering performance when individuals can discuss their challenges openly and without fear of embarrassment. &lt;/p&gt;

&lt;h3&gt;
  
  
  Consider the context
&lt;/h3&gt;

&lt;p&gt;Psychological safety does not exist in a vacuum. According to Google's research, after psychological safety, teams needed four additional team dynamics to be successful:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Dependability&lt;/strong&gt;: Team completes quality work on time. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Structure and clarity&lt;/strong&gt;: Teams have clear expectations for their work. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Meaning&lt;/strong&gt;: Teams have a sense of purpose. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Impact&lt;/strong&gt;: Individuals feel they are making a difference for their team. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Leaders should work to create a culture with each of these dimensions to support their team's psychological safety. &lt;/p&gt;

&lt;h2&gt;
  
  
  How to drive psychological safety in a virtual workplace
&lt;/h2&gt;

&lt;p&gt;Psychological safety requires the same communication principles regardless of whether teams are working at the office or working remotely; however, how teams tactically implement psychological safety can look very different depending on their workplace environment. &lt;/p&gt;

&lt;p&gt;Remote calls, for example, are especially challenging for individuals because they tend to restrict conversation to just a few people. Leaders can avoid this problem by relying on breakout rooms, hand-raising, and polls. &lt;/p&gt;

&lt;p&gt;Asynchronous can also be challenging. When working remotely, team members can often feel overlooked in the deluges of Slack messages and Zoom calls. Leaders must make a conscious effort to include others in their discussions and be transparent in their decision making by documenting and sharing the outcomes of important team conversations. &lt;/p&gt;

&lt;p&gt;With the cover of asynchronous communication, individuals may prefer to disengage from their team when facing failure. Instead, leaders should create cultural norms around sharing failures and asking for help. For example, they can share post-mortems in public Slack channels or improve documentation after an outage.&lt;/p&gt;

&lt;p&gt;Team-building exercises, coffee chats, and happy hours can also make remote teams more resilient in the long-term. Group events help team members get to know each other as people; when failure does happen, they're able to talk more freely and openly. &lt;/p&gt;

&lt;h2&gt;
  
  
  What to do in a psychologically unsafe workplace as an employee
&lt;/h2&gt;

&lt;p&gt;In the worst case scenario, individuals should consider leaving an organization that fails to provide psychological safety. In the long-term, the lack of psychological safety leads to burnout, unhappiness, and dissatisfaction. &lt;/p&gt;

&lt;p&gt;Most teams, however, start with a solid foundation for psychological safety they can build upon. They already focus on output metrics and objectives—such as features released and revenue targets. Team leaders should make the case for also measuring inputs—like psychological safety—to the development pipeline. Armed with a better understanding of the entire development life cycle, teams can better identify their most serious bottlenecks and constraints. &lt;/p&gt;

&lt;p&gt;Most importantly, leaders and individuals can lead by example. They should express vulnerability, listen intently to their coworkers, and ask deeper questions.&lt;/p&gt;

</description>
      <category>culture</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
    <item>
      <title>Context Switching is Killing Your Productivity</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Wed, 17 Nov 2021 19:58:28 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/context-switching-is-killing-your-productivity-427m</link>
      <guid>https://dev.to/softwaredotcom/context-switching-is-killing-your-productivity-427m</guid>
      <description>&lt;h2&gt;
  
  
  What is context switching? 
&lt;/h2&gt;

&lt;p&gt;Context switching is a form of multitasking requiring developers to switch between unrelated tasks. &lt;/p&gt;

&lt;p&gt;Frequent context switching reduces productivity, decreases energy and creativity, and negatively impacts quality of work. Minimizing context switching can help developers better focus on their highest priority tasks, avoid mental fatigue, and reduce the risk of burnout. &lt;/p&gt;

&lt;p&gt;The concept of context switching originated in computer science. When computers switch between tasks, they need to carry out several intermediary tasks to stop the previous task and begin the new task. Each switch &lt;a href="https://en.wikipedia.org/wiki/Context_switch" rel="noopener noreferrer"&gt;costs time and energy&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[Context switching] refers to the process of storing the system state for one task, so that task can be paused and another task resumed. A context switch can also occur as the result of an interrupt, such as when a task needs to access disk storage, freeing up CPU time for other tasks...The process of context switching can have a negative impact on system performance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Similar to computers, the human brain needs time to adjust focus from one task to another. It must unload and reload context—costing developers energy and mental resources—when switching between tasks.&lt;/p&gt;

&lt;p&gt;Unlike computers, humans experience context switching hangovers—the lasting effect of the mind being unable to completely forget a previous train of thought in favor of a new one. These hangovers decrease cognitive performance long after switching tasks.&lt;/p&gt;

&lt;p&gt;Engineering teams who create a culture that reduces overall context switching can benefit from happier and more productive developers. They can also improve development speed and product quality by allowing teams to focus on their most important tasks free from disruptions, delays, and firefighting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What causes developers to context switch? 
&lt;/h2&gt;

&lt;p&gt;Context switches are often caused by distractions and disruptions—brief interruptions that divert attention and break flow.&lt;/p&gt;

&lt;p&gt;Disruptions, like Slack messages and emails, shift developers' attention away from their current tasks. Shoulder taps, meetings, and noisy open offices interfere with valuable focus time.&lt;/p&gt;

&lt;p&gt;Importantly, not all context switches are a result of distractions. Context switching often happens between &lt;em&gt;important&lt;/em&gt; tasks, as developers intentionally jump between them. Developers might stop coding due to an upcoming project planning meeting or they might pause a code review to help fix an outage with their team. They might even jump back and forth between multiple tickets during the workday because of impending deadlines.&lt;/p&gt;

&lt;p&gt;Engineering teams should watch for &lt;em&gt;frequent&lt;/em&gt; and &lt;em&gt;abrupt&lt;/em&gt; context switches, which will have an outsized impact on their daily work. A few key causes of context switching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Too much work in progress&lt;/strong&gt;. A lack of clear priorities and an oversized backlog of tasks can force developers to multitask, rather than finishing the most important task and then moving on to the next one. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Highly fragmented schedules&lt;/strong&gt;. Too many meetings and obligations fragment calendars and reduce the amount of time that developers have to focus on their most important tasks. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Information overload&lt;/strong&gt;. Many of the tools that developers use on a daily basis are designed to engage and catch our attention—such as Slack bots, monitoring, alerts, and more. When improperly configured or managed, these tools can inundate teams with information that distracts them from their immediate tasks. &lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Poor workplace incentives&lt;/strong&gt;. Developers often feel pressure to be online and responsive in Slack. When conversations happen quickly and without warning, many people will frequently check Slack to avoid missing out on important discussions. Especially in remote-first and work-from-home workplaces, there's a widespread fear of missing out that drives team members to constantly check and respond to notifications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DevOps practices also play an important role in how often engineering teams need to context switch. Suboptimal processes and a lack of automated or standardized workflows can increase the likelihood of context switching. Two indicators that teams should focus on improving their DevOps performance to reduce context switching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Frequent firefighting&lt;/strong&gt;. Fragile systems that require developers to constantly put out fires and respond to emergencies are more susceptible to frequent context switching. Such systems often lack sufficient telemetry to quickly debug and restore service. They may also lack &lt;a href="https://www.software.com/devops-guides/shift-left-devsecops-guide" rel="noopener noreferrer"&gt;shift-left testing&lt;/a&gt; or CI/CD automation to prevent breaking code changes from finding their way into production environments.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Disjointed or slow workflows&lt;/strong&gt;. Unwieldy and manual workflows often lead to abrupt context switches, especially if they require developers to create multiple tickets or lack automation, like &lt;a href="https://www.software.com/devops-guides/test-automation-guide" rel="noopener noreferrer"&gt;testing&lt;/a&gt; and environment provisioning. Change approval boards and slow code reviews also increase wait time, opening up developers to distractions and context switches.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is the cost of context switching in development? 
&lt;/h2&gt;

&lt;p&gt;Context switching can lower productivity, increase fatigue, and, ultimately, lead to &lt;a href="https://www.software.com/devops-guides/developer-burnout" rel="noopener noreferrer"&gt;developer burnout&lt;/a&gt;. Switching tasks requires energy and each switch depletes mental focus needed for high cognitive performance. Over an entire workday, too many context switches can leave developers feeling exhausted and drained.&lt;/p&gt;

&lt;p&gt;The impact of context switching lingers even &lt;em&gt;after&lt;/em&gt; switching tasks. Cognitive function declines when the mind remains fixated on previous tasks, a phenomenon known as &lt;em&gt;attention residue&lt;/em&gt;. According to &lt;a href="https://www.uwb.edu/business/faculty/sophie-leroy/profile" rel="noopener noreferrer"&gt;Sophie Leroy&lt;/a&gt;, an Associate Professor of Management at the University of Washington Bothell School of Business who specializes in the study of attention:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Attention residue is when thoughts about a task persist and intrude while performing another task&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Attention residue consumes cognitive processing power, making it more difficult to achieve a new task even after switching away from a previous one.&lt;/p&gt;

&lt;p&gt;At the team level, context switching is a source of engineering friction within the development pipeline. Left unchecked, rampant context switching across an entire team can increase the time it takes to &lt;a href="https://www.software.com/devops-guides/lead-time" rel="noopener noreferrer"&gt;release new features&lt;/a&gt; or recover from failure.&lt;/p&gt;

&lt;p&gt;Context switching also incentivizes teams to tackle short and easy tasks (i.e. low hanging fruit), instead of the most important ones. In disruptive environments, engineers lack confidence that they'll have the time, energy, or focus to complete an important task. With less time to focus, they prioritize fast wins over meaningful work. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tips for avoiding context switching
&lt;/h2&gt;

&lt;p&gt;Context switching is inevitable, but teams can take actionable steps to minimize its impact. Here are some tips to reduce context switching. &lt;/p&gt;

&lt;h3&gt;
  
  
  Schedule focus blocks and thematic days
&lt;/h3&gt;

&lt;p&gt;Mastering your calendar is key to avoiding context switches. By better planning the tasks you hope to complete and when you want to work on them, you can reduce the likelihood of context switching and optimize your mental focus.&lt;/p&gt;

&lt;p&gt;One trick to prevent context switching is to create time blocks on your calendar for focus time. Reserve time slots for specific tasks that you want to complete without distractions or disruptions.&lt;/p&gt;

&lt;p&gt;Many developers also use the Pomodoro technique to stay focused during their focus blocks. The Pomodoro technique recommends you break your workday into 25-minute chunks separated by five-minute breaks.&lt;/p&gt;

&lt;p&gt;You can also bundle together related tasks and projects. Many people use thematic days—e.g. Tuesday is reserved for interviews—to minimize the number of context switches each day. It's cognitively easier to shift from one coding task to another than it is to jump from a coding task to an email backlog. By grouping similar tasks, you maximize cognitive overlap between your various responsibilities each day, reducing the magnitude of your context switches. &lt;/p&gt;

&lt;h3&gt;
  
  
  Force rank priorities
&lt;/h3&gt;

&lt;p&gt;Frequent context switching is often a sign that you need to clarify your tasks and prioritize them. After prioritization, you can focus on the most pressing tasks without wasting mental energy worrying about secondary responsibilities.&lt;/p&gt;

&lt;p&gt;One helpful prioritization method is the Eisenhower Matrix, which forces you to rank tasks by both urgency and importance. Urgent and important tasks get done first, while other tasks are scheduled, delegated, or deleted based on where they are located in the matrix. Team or company Objective Key Results (OKRs) can also help you prioritize. &lt;/p&gt;

&lt;h3&gt;
  
  
  Build strong atomic habits
&lt;/h3&gt;

&lt;p&gt;An atomic habit is a regular practice that is simple and easy to do; when done repeatedly, atomic habits help you unlock the power of compound growth through consistent, incremental improvement. &lt;/p&gt;

&lt;p&gt;According to James Clear, author of &lt;a href="https://jamesclear.com/atomic-habits" rel="noopener noreferrer"&gt;Atomic Habits&lt;/a&gt;: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You do not rise to the level of your goals. You fall to the level of your systems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Atomic habits can help you create a more effective system of daily work, one that makes it easier to regain control of your work hours and get more done in less time. Four habits development teams can adopt to reduce context switching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  When possible, finish a task before starting a new one to prevent your mind from unintentionally multitasking. &lt;/li&gt;
&lt;li&gt;  Be mindful of when you're switching tasks so you can better understand your personal habits—and find areas for improvement. &lt;/li&gt;
&lt;li&gt;  Declutter digital apps by removing them from main screens and reducing notifications. &lt;/li&gt;
&lt;li&gt;  Take breaks between tasks and take time to recharge so you are better able to focus when you are in flow. Add buffers and micro-breaks to your schedule to make context switching smoother. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Protect and defend flow
&lt;/h3&gt;

&lt;p&gt;Flow is the wellspring of impactful work. It provides you with the focus, concentration, and immersion you need to sustain your productivity.&lt;/p&gt;

&lt;p&gt;To preserve flow, it's important to proactively eliminate distractions. Use Do Not Disturb mode, silence notifications, set Slack to &lt;em&gt;away&lt;/em&gt;, and hide your phone out of sight. Even small disruptions, like email notifications, can unintentionally lead to context switching. It's far easier to preserve your flow state than it is to regain it.&lt;/p&gt;

&lt;p&gt;Even if you're briefly blocked by another task, try to avoid switching to a completely new task. It can be tempting to fill idle time with small todos or quick social media breaks, but doing so can negatively affect your productivity in the long-term by increasing attention residue. &lt;/p&gt;

&lt;h3&gt;
  
  
  Manage the flow of information
&lt;/h3&gt;

&lt;p&gt;Teams should control the flow of information and communicate thoughtfully to avoid frequent disruptions and interruptions.&lt;/p&gt;

&lt;p&gt;For remote teams, asynchronous communication across an entire organization can be a boon for deep work and focus. Creating a culture of thoughtful collaboration provides workers with ample time to respond to messages and feel included in online discussions. By eliminating the fear of missing important conversations, teams can encourage their members to confidently protect their focus times.&lt;/p&gt;

&lt;p&gt;Even on teams with strong asynchronous communication, notifications and messages from automated systems, like application performance monitoring, can interfere with valuable focus time. Teams should deliberate in deciding who receives alerts at certain times and through what channels they will be notified. Teams should strive to avoid duplicate messages, false alarms, and notifying too many engineers. &lt;/p&gt;

&lt;h3&gt;
  
  
  Reduce firefighting
&lt;/h3&gt;

&lt;p&gt;Emergencies and downtime pull developers away from their work and break flow. To reduce firefighting, teams need to provide guardrails to identify issues earlier in the value stream and provide tools to quickly find and fix issues that make their way into production environments.&lt;/p&gt;

&lt;p&gt;Automated testing reduces the number of catastrophic changes that get merged into production. Furthermore, testing in production-like environments avoids surprises when changes are finally pushed.&lt;/p&gt;

&lt;p&gt;If issues arise in production environments causing downtime or loss of service to customers, telemetry and version control provide fast ways to shorten time spent firefighting. Ample telemetry in production helps teams quickly identify and root cause issues, while version control enables fast rollbacks. Feature flag tools, like Optimizely, also make it easier for teams to turn off problematic features without needing to do complex rollbacks or hasty forward fixes. &lt;/p&gt;

&lt;h3&gt;
  
  
  Improve tooling and automation
&lt;/h3&gt;

&lt;p&gt;Context switching happens more frequently when teams face long wait times or delays. To minimize context switching, teams should enable fast feedback through automated and self-service workflows when possible.&lt;/p&gt;

&lt;p&gt;Continuous integration and continuous deployment prevent code from becoming stale on branches or inducing time-consuming merge conflicts, all while providing fast feedback to developers. Automated testing and automated test data management helps teams fix issues in a matter of hours, rather than days or weeks.&lt;/p&gt;

&lt;p&gt;Moreover, self-service tooling prevents both Dev and Ops teams from context switching by eliminating handoffs: developers don't need to file requests or message team members to get what they need, and operations teams don't need to find time in their schedule to provision it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Investing in the developer experience
&lt;/h2&gt;

&lt;p&gt;Teams should aim to improve the developer experience at their organization by helping engineers get their work done—efficiently and without frustration.&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://itrevolution.com/the-devops-handbook/" rel="noopener noreferrer"&gt;&lt;em&gt;The DevOps Handbook&lt;/em&gt;&lt;/a&gt;, "the improvement of daily work is more important than daily work itself." Dedicating time, resources, and manpower to reduce context switching and enable the fast flow of work sets a strong foundation for organizational success.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>devops</category>
    </item>
    <item>
      <title>Achieving Great Work-Life Balance</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Wed, 10 Nov 2021 17:53:14 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/achieving-great-work-life-balance-3k3o</link>
      <guid>https://dev.to/softwaredotcom/achieving-great-work-life-balance-3k3o</guid>
      <description>&lt;h2&gt;
  
  
  What is work-life balance? 
&lt;/h2&gt;

&lt;p&gt;Work-life balance means finding a healthy balance between your working and personal life. It means creating clear boundaries between work hours and non-work hours that allow you to achieve both your professional and personal goals.&lt;/p&gt;

&lt;p&gt;Many companies abide by the traditional 9am to 5pm work hours as a way to uphold work-life balance for their employees. With the shift to &lt;a href="https://www.software.com/devops-guides/remote-vs-office" rel="noopener noreferrer"&gt;remote work&lt;/a&gt;, freelancing, and the gig economy, teams are increasingly responsible for ensuring they maintain a healthy work-life balance in less traditional workplaces.&lt;/p&gt;

&lt;p&gt;The stakes are high. Improving work-life balance can boost happiness and productivity, while preventing &lt;a href="https://www.software.com/devops-guides/developer-burnout" rel="noopener noreferrer"&gt;burnout&lt;/a&gt;. Ignoring work-life balance can create &lt;em&gt;innovation zombies&lt;/em&gt;—companies that overwork their employees to increase output, but ultimately sabotage their organization's ability to compete in the marketplace.  &lt;/p&gt;

&lt;h2&gt;
  
  
  What are the consequences of poor work-life balance? 
&lt;/h2&gt;

&lt;p&gt;Consequences of poor work-life balance manifest at both the individual and team levels.&lt;/p&gt;

&lt;p&gt;Individuals can experience decreased productivity, lower satisfaction at work, and growing frustration with their current role and responsibilities. Without sufficient time outside of work to explore their own interests, individuals are also more vulnerable to negative changes to their self-image when it is tied too closely to their performance at work.&lt;/p&gt;

&lt;p&gt;Over the long-term, poor work-life balance can lead to &lt;a href="https://www.software.com/devops-guides/developer-burnout" rel="noopener noreferrer"&gt;burnout&lt;/a&gt; and chronic stress.&lt;/p&gt;

&lt;p&gt;Burnout is a severe form of mental and physical exhaustion. One common cause of burnout is overworking for extended periods of time without opportunities to rest, recharge, or pursue interests outside of work. Symptoms of burnout can be mental—negativism, cynicism, and detachment—as well as physical—headaches, fatigue, and sleeplessness.&lt;/p&gt;

&lt;p&gt;Left unchecked, burnout can negatively impact a team's ability to achieve their goals. Teams can experience drops in long-term productivity, growing dissatisfaction, and, ultimately, higher turnover. &lt;/p&gt;

&lt;h2&gt;
  
  
  Can you use data sources and metrics to measure work-life balance?
&lt;/h2&gt;

&lt;p&gt;Engineers can measure time spent working during and outside their working hours. They can also measure code day length---essentially the time between their first and last line of code each day. Together, code time and code day length can provide insight into how long you are 'online' and at what hours you are connected to work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstmfp7pgu7qhu4n78buo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstmfp7pgu7qhu4n78buo.png" alt="Work-life balance" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's important to remember that different people work according to different schedules based on personal preferences. Unusual coding hours, such as night coding, may not necessarily indicate a poor work-life balance, especially now that more people are working remotely.&lt;/p&gt;

&lt;p&gt;For engineers with flexible schedules, they should be watching for aberrations from their long-term trends. Spikes in weekend coding or code day length can indicate changes to your work schedule that may be unsustainable. &lt;/p&gt;

&lt;h2&gt;
  
  
  How to promote a good work-life balance for development teams
&lt;/h2&gt;

&lt;p&gt;Promoting a good work-life balance requires a strong culture of planning, resilience, and development flow.&lt;/p&gt;

&lt;p&gt;First, teams should work to avoid &lt;em&gt;crunch time&lt;/em&gt;—cramming changes and fixes at the last minute to meet deadlines. Crunch time leads to poor work-life balance by requiring developers to work long, arduous hours in a high-stress environment. Reducing crunch time with more consistent and predictable development cycles can greatly reduce big fluctuations in work hours.&lt;/p&gt;

&lt;p&gt;Predictable development cycles require accurate estimations of the time and effort needed to complete sprints and projects. Most importantly, they require the intentional carving out of time for testing, refactoring, and paying down technical debt.&lt;/p&gt;

&lt;p&gt;Second, teams should invest resources into creating self-healing systems and processes. Organizational resilience stems from regularly improving your team's ability to respond to and resolve production failures. Teams can also reduce the chance or severity of failures by adding guardrails, such as shift-left testing, automated CI/CD pipelines, and feature flags. Over the long-term, greater resiliency means less time spent in firefighting mode with fewer emergency calls made to teams to restore service outside work hours.&lt;/p&gt;

&lt;p&gt;Netflix infamously built and deployed &lt;a href="https://github.com/Netflix/chaosmonkey" rel="noopener noreferrer"&gt;Chaos Monkey&lt;/a&gt;, a tool that randomly terminates virtual machine instances in production. By exposing engineers to such random failures, Netflix created a culture of resilience that helped them avoid production downtime and team burnout.&lt;/p&gt;

&lt;p&gt;Third, teams should enable the fast flow of work and fearlessly cut bureaucracy. The goal is to improve daily work so development teams are able to complete their tasks without needing to take time away from their personal lives.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Identify issues by making work visible. Understand bottlenecks in your organization's flow of work to see where to invest in DevOps and better tooling.&lt;/li&gt;
&lt;li&gt;  Provide developers with time to focus during work and complete tasks during work hours. Reaching flow state and staying in flow is key to getting work done. Try to eliminate unnecessary meetings and disruptions.&lt;/li&gt;
&lt;li&gt;  Decrease time spent waiting by removing or shrinking change approval boards and investing in self-service tooling, like automated environments and test data. Wait time works against team velocity and delays productive work, leaving developers feeling they need to "catch up" outside work hours. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Top tips for striking a work-life balance as a software engineer
&lt;/h2&gt;

&lt;p&gt;Software engineers can improve work-life balance by setting aside time for personal interests and disconnecting completely when stepping away from work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Schedule time for hobbies and activities outside of work. It's easier to step away from work when you have planned events that are just as visible as meetings on your calendar. &lt;/li&gt;
&lt;li&gt;  Plan vacations, both long and short. You need both long weekends &lt;em&gt;and&lt;/em&gt; week-long getaways to fully recharge. &lt;/li&gt;
&lt;li&gt;  When offline, stay offline. Although it's tempting to check emails and notifications while taking time off, staying offline helps create clearer boundaries between life and work. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why finding a work-life balance could make you a better developer
&lt;/h2&gt;

&lt;p&gt;By prioritizing work-life balance, engineering teams benefit from happier and more productive team members. They are more likely to report being satisfied with their role and less likely to leave their organization.&lt;/p&gt;

&lt;p&gt;Strong work-life balance also enables teams to be more agile and responsive to changes in workload. In exceptional situations and for brief periods of time, agile teams are able to temporarily ramp up their team's effort to meet deadlines, without burning out their team in the long-run. Emergencies happen, and teams with poor work-life balance won't have the resources or bandwidth to respond effectively.&lt;/p&gt;

&lt;p&gt;At the individual level, a strong work-life balance boosts energy, productivity, and creativity. By maintaining a strong work-life balance, developers can avoid one of the main risk factors for burnout. They are able to optimize for their long-term goals—career and personal development—rather than sprinting to achieve immediate, but potentially draining, short-term goals.&lt;/p&gt;

&lt;p&gt;Developers can also build valuable personal skills outside of work, which often translate into well-rounded employees who bring fresh ideas and new perspectives into the organization. A richer and more meaningful life outside of work creates a more diverse and engaging workplace for everyone.&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Developer Burnout — Signs, Impact, and Prevention</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Tue, 02 Nov 2021 16:58:14 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/developer-burnout-signs-impact-and-prevention-47a8</link>
      <guid>https://dev.to/softwaredotcom/developer-burnout-signs-impact-and-prevention-47a8</guid>
      <description>&lt;h2&gt;
  
  
  What is burnout?
&lt;/h2&gt;

&lt;p&gt;Burnout is an increasingly widespread and destructive mental health challenge for knowledge workers across professions and industries. Left unchecked, it is a silent killer of productivity, happiness, and team success.&lt;/p&gt;

&lt;p&gt;Unlike other types of stress, burnout is typically chronic and workplace-related. It is a result of unresolved and persistent stress that leaves workers feeling drained and unable to reach their full potential. According to the &lt;a href="https://www.who.int/news/item/28-05-2019-burn-out-an-occupational-phenomenon-international-classification-of-diseases" rel="noopener noreferrer"&gt;World Health Organization&lt;/a&gt;:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Burn-out is a syndrome conceptualized as resulting from chronic workplace stress that has not been successfully managed."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Burnout manifests in different ways for different people. For many workers, burnout is often associated with feelings of tiredness, helplessness, cynicism, and a drop in performance and motivation. &lt;/p&gt;

&lt;p&gt;The World Health Organization's definition of burnout specifies three key dimensions of burnout: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;feelings of energy depletion or exhaustion;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;increased mental distance from one's job, or feelings of negativism or cynicism related to one's job; and&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;reduced professional efficacy.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How common is software engineer burnout?
&lt;/h2&gt;

&lt;p&gt;Burnout is an especially prevalent challenge for engineering teams and tech workers. Developers frequently navigate fast-paced and high-growth work environments, building mission-critical software—often without the systems, processes, and culture needed to support their work. &lt;/p&gt;

&lt;p&gt;Recent &lt;a href="https://www.gallup.com/workplace/288539/employee-burnout-biggest-myth.aspx" rel="noopener noreferrer"&gt;Gallup surveys&lt;/a&gt; reveal most workers, about 76%, experience burnout. More specifically, 28% of workers responded that they experience burnout very often or always. Less than a quarter of workers feel they rarely or never experience burnout.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6527hysgck1qrnj508wc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6527hysgck1qrnj508wc.png" alt="Developer burnout" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In certain industries, such as game development, engineers are expected to work long hours and against strict deadlines. They often need to make last-minute changes before launch during a frenzied period of work infamously dubbed "crunch time." In one example at Rockstar Games, management admits to perpetuating a culture of burnout and hardship. According to &lt;a href="https://time.com/5603329/e3-video-game-creators-union/" rel="noopener noreferrer"&gt;Time&lt;/a&gt;: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The chief executive of Rockstar Games, publisher of the hugely popular Red Dead Redemption 2, bragged in an interview last year that people there were working 100-hour weeks to finish that game in time for its scheduled release date.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Chaotic release schedules and deployment setbacks are surprisingly prevalent across the world of software development. Companies rely heavily on engineers to ship code faster and provide value to customers, but often lack the DevOps practices to support them. Instead, developers often face delays, deployment pains, and organizational fear and mistrust that disrupt their team's flow. &lt;/p&gt;

&lt;p&gt;Such recurring organizational hurdles lead to chronic frustration—and ultimately developer burnout.  &lt;/p&gt;

&lt;h2&gt;
  
  
  What causes software engineer burnout?
&lt;/h2&gt;

&lt;p&gt;Burnout often arises from issues within the organization, rather than the individual. Many engineering teams fail to sufficiently address the causes of burnout because they focus on fixing people and not the systems that support them—or fail to support them. &lt;/p&gt;

&lt;p&gt;According to &lt;em&gt;Accelerate&lt;/em&gt;, a research-backed guide to building high performing technology teams, the six main organizational risk factors for developer burnout are work overload, lack of control, insufficient rewards, breakdown of community, absence of fairness, and value conflicts. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Work overload&lt;/strong&gt; arises from unrealistic expectations about the quantity or quality of work developers need to satisfy. Impossible deadlines, poor project timeline estimates, and insufficient planning push developers to work beyond what is physically and mentally sustainable. Developers who work long hours, nights, and weekends are more likely to burn out than those with better work-life balance.&lt;/p&gt;

&lt;p&gt;Workload, however, is not the only risk factor for burnout. Contrary to popular belief, teams with balanced workloads can still experience serious developer burnout. Developers can burn out working 100 hours per week, but they can also burn out working just 20 or 30 hours per week.&lt;/p&gt;

&lt;p&gt;In situations with manageable workloads but poor workplace culture, other organizational risk factors can lead to chronic stress and create unpleasant work environments. These risk factors disrupt an individual or team's development flow, making work consistently and unnecessarily difficult or challenging. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lack of control&lt;/strong&gt; in decision making processes leads to detachment from an organization's mission. When developers feel an inability to influence or contribute to decisions that affect them and their work, it breeds mistrust and creates distance between workers and managers.&lt;/p&gt;

&lt;p&gt;For example, developers are sometimes  forced to use tools they find ineffective. Developers can be at the mercy of slow workflows across the stack, from change approval boards to code reviews to data requests. In some organizations, development and operations may be making decisions about team practices without input from each other, creating organizational tension. &lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;breakdown of community&lt;/strong&gt; also leads to an unsupportive, hypercompetitive, and stressful workplace. Moreover, harassment and bullying leave developers feeling isolated and fearful. Without community support or unbiased feedback, developers must grapple with additional stressors that detract from their quality of life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Absence of fairness&lt;/strong&gt; (a lack of fairness in decision making) and &lt;strong&gt;insufficient rewards&lt;/strong&gt;, (a lack of positive reinforcement and feedback) also leave developers feeling not in control of their work and outcomes. &lt;/p&gt;

&lt;p&gt;Cultures that rely on blame—not organizational learning—perpetuate a lack of fairness and recognition. Rather than solving underlying system weaknesses, organizations sometimes blame and shame developers for engineering challenges, such as buggy code, change failures, or missed deadlines. &lt;/p&gt;

&lt;p&gt;Lastly, &lt;strong&gt;value conflicts&lt;/strong&gt; that result in a mismatch between organization, team, and individual values create chronic stress. For example, a developer who values individual privacy working on ad tracking software can be worn down by the constant internal tug-of-war between her personal values and her company's mission.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the cost of developer burnout?
&lt;/h2&gt;

&lt;p&gt;Stanford researchers &lt;a href="https://www.gsb.stanford.edu/insights/why-your-workplace-might-be-killing-you" rel="noopener noreferrer"&gt;estimate&lt;/a&gt; burnout leads to nearly $190 billion in healthcare costs each year and contributes to more than 120,000 deaths.&lt;/p&gt;

&lt;p&gt;In addition to healthcare costs, burnout leads to lost productivity, sick time, costly disabilities, and turnover. It's estimated that &lt;a href="https://hbr.org/2019/12/burnout-is-about-your-workplace-not-your-people" rel="noopener noreferrer"&gt;workplace stress costs&lt;/a&gt; the U.S. economy more than $500 billion per year. Researchers believe nearly 550 million work days each year are lost due to stress and burnout.&lt;/p&gt;

&lt;p&gt;For engineering teams, developer burnout leads to slower delivery speed, lower quality code, poorer project outcomes, and higher turnover. In the long run, burnout can also stifle innovation, creativity, and organizational learning.  &lt;/p&gt;

&lt;h2&gt;
  
  
  How can managers spot signs of developer burnout?
&lt;/h2&gt;

&lt;p&gt;It's important to understand that people react differently to burnout. Workers can experience several symptoms all at once, or just one or two at a time. Some workers experience mostly mental symptoms, while others experience physical and bodily changes. &lt;/p&gt;

&lt;p&gt;It's also important to remember that burnout is not a binary state. Instead, workers move up and down a 'burnout gradient' depending on their changing environment and workload. &lt;/p&gt;

&lt;p&gt;Mental and emotional symptoms of burnout include: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tiredness or exhaustion&lt;/strong&gt;: You feel too emotionally drained to engage fully with your work or coworkers. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cynicism or negativism&lt;/strong&gt;: You view your role as increasingly stressful and frustrating. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Detachment and alienation&lt;/strong&gt;: You feel distant from coworkers and the company mission. You feel "numb" about your work. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reduced performance or productivity&lt;/strong&gt;: You are less effective at completing tasks on time. Your quality of work noticeably decreases. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Physical symptoms are also common. Developers experiencing burnout may notice that they are more fatigued and exhausted than normal, yet may also suffer from sleeplessness. They may also be experiencing frequent headaches, loss of appetite, gastrointestinal issues, or dizziness. &lt;/p&gt;

&lt;h2&gt;
  
  
  Can you detect burnout through metrics and data sources?
&lt;/h2&gt;

&lt;p&gt;By looking more closely at their DevOps metrics, teams can spot early signs of burnout, developer frustration, and deployment pain.&lt;/p&gt;

&lt;p&gt;Teams should watch for indicators that their work is needlessly challenging or painful to complete. They should watch for signs that their engineering systems—i.e. organizational workflows and processes—are ineffective at providing developers with fast feedback, avoiding delays, and preventing toil. &lt;/p&gt;

&lt;p&gt;Long &lt;a href="https://www.software.com/devops-guides/lead-time" rel="noopener noreferrer"&gt;lead time&lt;/a&gt;, low &lt;a href="https://www.software.com/devops-guides/commit-frequency" rel="noopener noreferrer"&gt;delivery frequency&lt;/a&gt;, and low &lt;a href="https://www.software.com/devops-guides/lines-of-code-merged" rel="noopener noreferrer"&gt;code volume&lt;/a&gt; can reveal friction during the development process. In such scenarios, engineers are likely experiencing roadblocks and bottlenecks disrupting their development flow.&lt;/p&gt;

&lt;p&gt;At the DevOps Enterprise Summit 2014, David Ashman, former Chief Architect at Blackboard, recalls how his engineering organization became less agile and stagnant due to mounting technical debt. Ashman's red flag was &lt;a href="https://www.youtube.com/watch?v=SSmixnMpsI4" rel="noopener noreferrer"&gt;a significant change&lt;/a&gt; in the number of code commits.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[The codebase] is growing at such a pace that is becoming this enormous product with so much complexity, so much insurmountable debt that we were running into problems both in development and operations of significant failures in releases and problems with developers taking far too long for these products to get built out.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Such challenges can leave developers struggling to achieve their goals, fighting against the system, and potentially working longer hours to overcome it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzta79vkxc48furmzzb1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzta79vkxc48furmzzb1n.png" alt="Engineering team burnout danger" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
An example of developers fighting the system, &lt;a href="https://www.youtube.com/watch?v=SSmixnMpsI4" rel="noopener noreferrer"&gt;David Ashman&lt;/a&gt;



&lt;p&gt;Teams should also watch for signs of high workloads and disruptive schedules. High &lt;a href="https://www.software.com/devops-guides/meeting-time" rel="noopener noreferrer"&gt;meeting time&lt;/a&gt; can pull developers away from meaningful work and fragment their day, leading to dissatisfaction with daily work. Spending less time in flow during the workday and more time coding on nights and weekends puts teams at risk of burnout and poor work-life balance.&lt;/p&gt;

&lt;p&gt;Operating above 100% of team capacity for too long—without breaks or downtime—can wear down even the most productive team. Code volume, measured by pull requests and commits, can be one approximation for workload.  &lt;/p&gt;

&lt;p&gt;Similar to other engineering metrics, context matters. It's important to understand teams and individuals in their day-to-day life to attain a clearer understanding of the situation. There is no single 'burnout' metric. Instead, teams should rely on several indicators of team frustration and pain. &lt;/p&gt;

&lt;h2&gt;
  
  
  How to prevent developer burnout
&lt;/h2&gt;

&lt;p&gt;Avoiding burnout requires teams to reduce firefighting, hardship, and toil. The goal should be to alleviate deployment pain and enable the fast flow of work from code to production, as well as to create a culture of learning, psychological safety, and fairness. &lt;/p&gt;

&lt;p&gt;It starts with improving the organization's DevOps practices. According to &lt;em&gt;Accelerate&lt;/em&gt;: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Burnout can be prevented or reversed, and DevOps can help. Organizations can fix the conditions that lead to burnout by fostering a supportive work environment, by ensuring work is meaningful, and ensuring employees understand how their own work ties to strategic objectives. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Investments in DevOps strengthen the organization's developer experience, improving daily work. Over the long-term, better DevOps minimize several key risk factors for developer burnout. &lt;/p&gt;

&lt;p&gt;To prevent burnout, teams should first embrace the principle of &lt;em&gt;continuous improvement&lt;/em&gt;. Continuous improvement is a core idea in Lean methodology that advocates for incremental improvement in an organization's performance through continuous measuring, learning, and experimentation. It creates a culture that measures and improves daily work, identifying potential development pains and prioritizing their fixes. &lt;/p&gt;

&lt;p&gt;Second, teams should create an environment that prioritizes psychological safety. They should provide engineers with the safety needed to experiment and learn from mistakes, instead of resorting to blame or finger pointing. Developers must be a part of the decision making process when it directly affects their work. &lt;/p&gt;

&lt;p&gt;Third, teams must invest in the developer experience. Doing so requires teams to enable fast feedback, minimize thrash, and reduce fear. &lt;/p&gt;

&lt;p&gt;In particular, organizations can reduce chronic stress by providing guardrails that improve the flow of work and remove fear and pain from deployments. Developers can quickly and confidently make changes to code when they have automated tests and environments, telemetry for performance visibility, loosely coupled architecture to isolate failures, and version control for fast rollbacks. Teams can also tackle technical debt on a recurring basis to avoid development stagnation and fear. &lt;/p&gt;

&lt;h2&gt;
  
  
  Can hybrid or remote work help prevent burnout?
&lt;/h2&gt;

&lt;p&gt;Workplaces are quickly changing as the world grapples with a shift from office to remote or hybrid work. Such a seismic shift will likely change how teams identify and prevent burnout. &lt;/p&gt;

&lt;p&gt;Remote work reduces time spent commuting and provides workers with greater control over their schedules. They benefit from more flexibility, which allows them to spend more time with family and friends or pursue activities outside of work. &lt;/p&gt;

&lt;p&gt;Remote work can also lead to fewer distractions and more time spent in flow to work on meaningful tasks. Developers are interrupted less frequently by shoulder taps and open offices. &lt;/p&gt;

&lt;p&gt;While remote and hybrid workplaces can remove certain stressors, they can also create new ones. Workers may face unfamiliar challenges, such as a lack of face time with coworkers and less rigid work-life boundaries. Without cultural changes to grapple with their new work environment, newly remote teams increase their risk for burnout.&lt;/p&gt;

&lt;p&gt;Engineering teams switching to remote work can also face DevOps issues during their transition. They need to grapple with new requirements, particularly around hardware and team communication. &lt;/p&gt;

&lt;p&gt;For a successful transition, teams should monitor for changes in the development process to ensure their tools and practices still work well in their new workplace. If not, they should adopt new ones that cater better to asynchronous communication and remote development.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>development</category>
    </item>
    <item>
      <title>Community showcase: automated home setup to stay in flow</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Thu, 20 May 2021 13:09:44 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/community-showcase-automated-home-setup-to-stay-in-flow-37f</link>
      <guid>https://dev.to/softwaredotcom/community-showcase-automated-home-setup-to-stay-in-flow-37f</guid>
      <description>&lt;p&gt;&lt;a href="https://www.software.com/code-time" rel="noopener noreferrer"&gt;Code Time&lt;/a&gt;, Software’s extension for code editors and IDEs, helps you protect valuable code time with &lt;strong&gt;Flow Mode&lt;/strong&gt;—a set of automations that makes it easy to eliminate distractions, mute notifications, and stay focused when you’re in flow. &lt;/p&gt;

&lt;p&gt;Once connected to a Slack workspace, Flow Mode enables Slack’s Do Not Disturb mode, sets a custom status message, and adds a purple icon to your status. In some editors and IDEs, like Visual Studio Code, you can also choose to enable Zen mode or enter fullscreen with Flow Mode. Flow Mode can be triggered manually, via a button in the sidebar or status bar, or automatically, based on your coding activity. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitch.tv/tehshane" rel="noopener noreferrer"&gt;Shane Lawrence&lt;/a&gt;, a member of the Software community and senior software developer, saw an opportunity to make Flow Mode even more powerful. &lt;/p&gt;

&lt;p&gt;He extended Flow Mode to automate his entire workspace setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change ambient lighting in his workspace to purple&lt;/li&gt;
&lt;li&gt;Silence notifications on his phone&lt;/li&gt;
&lt;li&gt;Set a custom Do Not Disturb status on his home system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s a short demo of Shane’s custom Flow Mode in action:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/CpvgArVhCF4"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview of the flow automation stack
&lt;/h2&gt;

&lt;p&gt;Shane’s setup uses a few different automation tools and APIs: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.software.com/code-time" rel="noopener noreferrer"&gt;Code Time&lt;/a&gt; to detect when he’s in flow and update his Slack status&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://api.slack.com/events" rel="noopener noreferrer"&gt;Slack Events API&lt;/a&gt; to monitor his status and trigger his home automations&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.home-assistant.io/" rel="noopener noreferrer"&gt;Home Assistant&lt;/a&gt; for connecting and controlling his devices&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.philips-hue.com/en-us/products/smart-lightbulbs" rel="noopener noreferrer"&gt;Philips Hue bulb&lt;/a&gt; for his desk light, &lt;a href="https://www.philips-hue.com/en-us/products/smart-lightstrips" rel="noopener noreferrer"&gt;Hue lightstrips&lt;/a&gt; and &lt;a href="https://nanoleaf.me" rel="noopener noreferrer"&gt;Nanoleaf Aurora&lt;/a&gt; for accent lighting on the wall &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm&amp;amp;hl=en&amp;amp;gl=us" rel="noopener noreferrer"&gt;Tasker&lt;/a&gt; and the &lt;a href="https://joaoapps.com/autoremote/" rel="noopener noreferrer"&gt;AutoRemote plugin&lt;/a&gt; to set his Android phone to Do Not Disturb&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shane wrote a small watcher script in Node.js that checks for changes to his Slack status using the Slack Events API (&lt;a href="https://www.npmjs.com/package/@slack/events-api" rel="noopener noreferrer"&gt;@slack/events-api&lt;/a&gt;). If a new status includes Flow Mode’s purple emoji, 🟣, Shane’s bot sends a custom ‘begin_flow’ or ‘end_flow’ event to his Home Assistant, a popular open source home automation hub. &lt;/p&gt;

&lt;p&gt;Home Assistant then sets a custom Do Not Disturb mode for his home automation system,  triggers his workspace lighting, and sends a notification to his phone. &lt;/p&gt;

&lt;p&gt;Home Assistant comes with powerful connections out-of-the-box. It integrates directly with &lt;a href="https://www.home-assistant.io/integrations/hue/" rel="noopener noreferrer"&gt;Philips smart bulbs&lt;/a&gt; and &lt;a href="https://www.home-assistant.io/integrations/nanoleaf/" rel="noopener noreferrer"&gt;Nanoleaf lights&lt;/a&gt;, as well as more than &lt;a href="https://www.home-assistant.io/integrations/" rel="noopener noreferrer"&gt;1,500 other smart devices&lt;/a&gt;. To control his phone, Shane uses AutoRemote to listen for notifications from Home Assistant. Tasker then changes his phone’s settings. &lt;/p&gt;

&lt;p&gt;In his next iteration, Shane is considering how he might trigger &lt;a href="https://www.android.com/digital-wellbeing/" rel="noopener noreferrer"&gt;Digital Wellbeing&lt;/a&gt;’s Focus Mode to disable all distracting apps on his Android phone. He is also exploring how he could integrate with Spotify to start playing newly recommended songs from &lt;a href="https://www.software.com/music-time" rel="noopener noreferrer"&gt;Music Time&lt;/a&gt; when he’s in flow. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why defending flow matters
&lt;/h2&gt;

&lt;p&gt;Developers constantly battle meetings, interrupts, and inertia—the ‘enemies’ of developer flow—that interfere with valuable code time. Impromptu Zoom calls and relentless Slack messages make work feel disjointed and chaotic.&lt;/p&gt;

&lt;p&gt;Protecting flow helps us silence these distractions and make the most of each workday. From Shane: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“As someone who’s deeply passionate about the work I do, being in flow is the part of my day where I’m immersed and energized in what I really love most: working on challenging problems and helping online communities be a safer place for everyone to connect.&lt;/p&gt;

&lt;p&gt;While I’m fortunate to have been able to keep my job through the pandemic, working from home has introduced its own set of challenges, such as staying focused on days when other distractions want to drag my attention away from important tasks, making it difficult to always sink my teeth into a solid coding session.&lt;/p&gt;

&lt;p&gt;Code Time’s flow feature combined with my smart home integration helps me quickly tune out all of the distractions at once, helping me focus faster and reduce the chatter of apps and chat messages all competing for my attention.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’re interested in automation tech, you can &lt;a href="https://twitch.tv/tehshane" rel="noopener noreferrer"&gt;find Shane on Twitch&lt;/a&gt;, where he’s currently building a bot service that helps streamers let their viewers redeem channel points to change their smart light colors. He streams Wednesdays at 6pm PT and Saturdays at 7pm PT. Shane’s streams are open to all, coders and non-coders alike. &lt;/p&gt;

</description>
      <category>productivity</category>
      <category>showdev</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Track your 100 Days of Code. Get a Software certificate.</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Fri, 07 Aug 2020 18:43:06 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/track-your-100-days-of-code-get-a-software-certificate-34e8</link>
      <guid>https://dev.to/softwaredotcom/track-your-100-days-of-code-get-a-software-certificate-34e8</guid>
      <description>&lt;p&gt;🚀 &lt;strong&gt;Check out our launch on &lt;a href="https://www.producthunt.com/posts/100-days-of-code-vs-code-extension" rel="noopener noreferrer"&gt;Product Hunt&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The 100 Days of Code Challenge
&lt;/h2&gt;

&lt;p&gt;100 Days of Code is a coding challenge created by &lt;a href="https://twitter.com/ka11away" rel="noopener noreferrer"&gt;Alexander Kallaway&lt;/a&gt; to encourage people to learn new coding skills. The challenge follows two simple rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code for at least an hour each day for 100 consecutive days.&lt;/li&gt;
&lt;li&gt;Share your progress each day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tens of thousands of developers from around the world have taken on this challenge. Whether you are learning to code or an experienced developer, everyone, regardless of their skill level, can participate in the 100 Days of Code challenge. You can learn more on the official &lt;a href="https://www.100daysofcode.com/" rel="noopener noreferrer"&gt;100 Days of Code website&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 100 Days of Code Extension
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flg2cnef3cg77ijhvqcpe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flg2cnef3cg77ijhvqcpe.png" alt="100 Days of Code dashboard" width="800" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Software’s &lt;a href="https://www.software.com/100-days-of-code" rel="noopener noreferrer"&gt;100 Days of Code extension&lt;/a&gt; is a free, open source plugin for Visual Studio Code to track your 100 Days of Code progress. With the 100 Days of Code extension, you can create logs and share your progress all within Visual Studio Code. You can also earn rewards throughout the challenge with unlockable milestones that you can share with your friends.&lt;/p&gt;

&lt;p&gt;The 100 Days of Code plugin is built on &lt;a href="https://www.software.com/code-time" rel="noopener noreferrer"&gt;Code Time&lt;/a&gt;, our powerful time tracking extension backed by the Software community.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://www.software.com/100-days-of-code" rel="noopener noreferrer"&gt;learn more&lt;/a&gt; or install the extension from the &lt;a href="https://marketplace.visualstudio.com/items?itemName=softwaredotcom.swdc-100-days-of-code" rel="noopener noreferrer"&gt;Visual Studio Code Marketplace&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Log your progress
&lt;/h2&gt;

&lt;p&gt;Tracking your progress during the 100 Days of Code challenge with a personal journal helps you focus on your goals and keeps a record of your accomplishments for you to reflect on and share with others. Logging your progress each day will help build good coding habits and allow you to successfully complete the challenge.&lt;/p&gt;

&lt;p&gt;The 100 Days of Code extension offers an in-editor log page where you can keep a record of your projects, bookmarks, and coding activity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbh8ylemxf0uvwzcj09ui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbh8ylemxf0uvwzcj09ui.png" alt="100 Days of Code log progress" width="800" height="810"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create a log for the day, open the Code Time view in your Activity Bar. Click the View Logs button in the 100 Days of Code section to open your Logs view. At the top of the opened page click the Add Log button. Simply add a title, description, and links relevant to your coding projects.&lt;/p&gt;

&lt;p&gt;Each new log is automatically updated with your coding metrics for that day, such as hours coded. You can see these values while writing your log entry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkqscdbsfyrapfayyn5c1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkqscdbsfyrapfayyn5c1.png" alt="100 Days of Code logs" width="800" height="694"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you submit a log, it is then added to your personal &lt;strong&gt;Logs&lt;/strong&gt; page where you can view details about each log—including title, description, links, code metrics, and milestones for that day. Each day's metrics are compared to your average metrics calculated from all your log entries throughout the challenge.&lt;/p&gt;

&lt;p&gt;If you forget to create a log for a day that you worked, don’t worry! The 100 Days of Code extension automatically creates a log for you with your coding metrics. You can edit these logs at any time with additional information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Collect badges
&lt;/h2&gt;

&lt;p&gt;Milestones are fun, collectable badges to help motivate you through the 100 Days of Code challenge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fujq0qgqy64lftjsrf6uu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fujq0qgqy64lftjsrf6uu.png" alt="100 Days of Code milestones" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can earn milestones by completing coding tasks and progressing through the 100 Days of Code. For example, you can earn badges by coding for 10 total hours, programming in a new language, or even sharing your progress on Twitter.&lt;/p&gt;

&lt;p&gt;There are over 50 unlockable milestones, divided into six levels of difficulty, for you to earn throughout the challenge. How many can you collect in 100 days?&lt;/p&gt;

&lt;h2&gt;
  
  
  Share your progress and milestones
&lt;/h2&gt;

&lt;p&gt;Sharing your progress with the community is important to stay motivated throughout the challenge.&lt;/p&gt;

&lt;p&gt;With the 100 Days of Code extension, you can share log entries, unlocked milestones, and your personal coding dashboard to Twitter right from VS Code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2llz1kgs0iwq4vjsoyb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2llz1kgs0iwq4vjsoyb8.png" alt="100 Days of Code Twitter" width="800" height="767"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To join the community on Twitter, use the hashtag #100DaysOfCode and publicly commit to the challenge. Every small step matters, so we encourage you to share something every day.&lt;/p&gt;

&lt;p&gt;Don’t forget to tweet &lt;a href="https://twitter.com/software_hq" rel="noopener noreferrer"&gt;@software_hq&lt;/a&gt;! We would love to see all your progress towards your 100 Days of Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Earn your certificate
&lt;/h2&gt;

&lt;p&gt;After completing your 100th day, you will unlock the official Software 100 Days of Code certificate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fw1cemz1kh9kexms5o8p9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fw1cemz1kh9kexms5o8p9.png" alt="Software's 100 Days of Code certificate" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To claim your certificate, open the 100 Days of Code dashboard in VS Code and click the gold button that appears at the top of your dashboard. You can view, download, and share your certificate right from VS Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;Whether you are a newbie or have 10 years of development experience, it only takes a moment to begin your 100 Days of Code journey with Software.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Get Software’s &lt;a href="https://marketplace.visualstudio.com/items?itemName=softwaredotcom.swdc-100-days-of-code" rel="noopener noreferrer"&gt;100 Days of Code extension&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sign up for a free Software account from your editor.&lt;/li&gt;
&lt;li&gt;Start coding!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We’re excited to see your tweets and progress during the 100 Days and beyond. Good luck!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check out the discussion on &lt;a href="https://www.producthunt.com/posts/100-days-of-code-vs-code-extension" rel="noopener noreferrer"&gt;Product Hunt&lt;/a&gt; or let us know what you think below!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>vscode</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How to set up your own personal website for 100 Days of Code</title>
      <dc:creator>Geoff Stevens</dc:creator>
      <pubDate>Mon, 22 Jun 2020 23:31:03 +0000</pubDate>
      <link>https://dev.to/softwaredotcom/how-to-set-up-your-own-personal-website-for-100-days-of-code-11b9</link>
      <guid>https://dev.to/softwaredotcom/how-to-set-up-your-own-personal-website-for-100-days-of-code-11b9</guid>
      <description>&lt;p&gt;➡️ If you just want to get the template for your personal 100 Days of Code website, &lt;a href="https://github.com/brettmstevens7/100-days-of-code-site" rel="noopener noreferrer"&gt;go here and fork the repo&lt;/a&gt;. See a preview &lt;a href="https://bretts-100-days-of-code.netlify.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt;. If you want to learn how it all works, keep reading.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyk2ab73hcg8dugrpnbyj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyk2ab73hcg8dugrpnbyj.gif" alt="100 Days of Code starter template" width="600" height="693"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://bretts-100-days-of-code.netlify.app/" rel="noopener noreferrer"&gt;100 Days of Code website&lt;/a&gt; built using Gatsby.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;In this post, we’ll walk through how to create your own personal website for &lt;a href="https://www.100daysofcode.com/" rel="noopener noreferrer"&gt;100 Days of Code&lt;/a&gt;. You'll use a pre-built website template that takes just a few steps to set up. No knowledge or coding experience is required, but will be helpful (I'll do my best to outline some of the basics in each section).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmuukf3uex3x3xqli94wy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmuukf3uex3x3xqli94wy.png" alt="100 Days of Code starter template" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;100 Days of Code starter template, built using Gatsby. &lt;a href="https://github.com/brettmstevens7/100-days-of-code-site" rel="noopener noreferrer"&gt;Fork it&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you’re new to 100 Days of Code, it is a self-directed commitment by developers to build strong and consistent coding habits. The challenge uses social accountability, transparency, and deep reflection to form healthy developer habits.&lt;/p&gt;

&lt;p&gt;The ultimate goal of the 100 Days of Code challenge is to become a better developer and to build coding as a habit. If you hope to become a more versatile, disciplined, and skilled developer, you should consider joining the challenge.&lt;/p&gt;

&lt;p&gt;Building a site to showcase your progress during 100 Days of Code is a great way to stay motivated and share what you learned with others. Alexander Kallaway, creator of the challenge, suggests keeping a log &lt;a href="https://github.com/kallaway/100-days-kallaway-log/blob/master/R1.md" rel="noopener noreferrer"&gt;like this one&lt;/a&gt;. Creating a log is also helpful for memorializing your accomplishment after you finish the challenge.&lt;/p&gt;

&lt;p&gt;To build your site, we'll use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.gatsbyjs.org/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt;: a free, open source framework based on React that lets you build static websites and apps.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;: a free hosting platform that lets you quickly deploy your app to the web, without running or managing any servers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;: a free and popular service to store and edit your code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You might have heard of Wordpress before—it’s a content management system with a large ecosystem of plugins and templates you can use to set up your site. We're not going to be building a Wordpress site, which is a dynamic site and executes code running on a backend server. Instead, we’ll be building a static site, can run entirely on a client-side machine using a Jamstack architecture.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://jamstack.wtf/" rel="noopener noreferrer"&gt;Jamstack&lt;/a&gt; is a modern web development architecture based on client-side JavaScript, reusable APIs, and prebuilt Markup. Coined by Netlify CEO Mathias Biilmann, the Jamstack underpins the modern static website.&lt;/p&gt;

&lt;p&gt;Static sites offer many benefits over dynamic sites, such as faster performance, cheaper hosting, and ease of development. Static sites are also ideal for mobile-first indexing and page speed—two top ranking criteria for search engine optimization and top of mind for any frontend web developer.&lt;br&gt;
Now let's dive into how we built the site template and how you can deploy your own version.&lt;/p&gt;
&lt;h2&gt;
  
  
  Designing the template
&lt;/h2&gt;

&lt;p&gt;Before writing any code, it's important to start by designing what you are going to build. &lt;a href="http://figma.com" rel="noopener noreferrer"&gt;Figma&lt;/a&gt; is a free tool that you can use to create prototypes of your website. It has become the most widely-used design tool in the market today.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fm1fya4vyg94m1bp4ovam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fm1fya4vyg94m1bp4ovam.png" alt="100 Days of Code Figma" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Website design using Figma, a free design tool.&lt;/p&gt;

&lt;p&gt;Here is &lt;a href="https://www.figma.com/file/67wL0uexIv6YWia3iR4cJh/100-Days-of-Code-Template?node-id=0%3A1" rel="noopener noreferrer"&gt;the template&lt;/a&gt; in Figma. Note: my brother Brett built the site. He didn't build the site exactly to his original design, but it is still important to get the layout and structure of the site down before building anything. It will save you time.&lt;/p&gt;
&lt;h2&gt;
  
  
  Set up your Node environment
&lt;/h2&gt;

&lt;p&gt;Gatsby is built with Node.js, a popular Javascript runtime environment with an extensive ecosystem of packages—third-party modules built by other developers that you can use in your projects.&lt;/p&gt;

&lt;p&gt;A prerequisite to running Gatsby is setting up your Node development environment. You can follow &lt;a href="https://www.gatsbyjs.org/tutorial/part-zero/" rel="noopener noreferrer"&gt;this tutorial&lt;/a&gt;. I prefer to use nvm to manage Node:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download the nvm install script via curl: &lt;code&gt;curl -o- [&amp;lt;https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh&amp;gt;](&amp;lt;https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh&amp;gt;) | bash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install the latest stable version of Node: &lt;code&gt;nvm install --lts&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Set up Git and GitHub
&lt;/h2&gt;

&lt;p&gt;You'll also need to have Git and a GitHub account. If you're new to these tools, Git is an open source tool that lets you manage versions of your code by tracking changes with commits and branches.&lt;/p&gt;

&lt;p&gt;Once you've set up Git, you're going to link it to your GitHub account. GitHub is a remote hosting provider for Git repositories that allows you to share your code with the world and collaborate with other developers. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://kbroman.org/github_tutorial/pages/first_time.html" rel="noopener noreferrer"&gt;Here is a guide&lt;/a&gt; to set up Git and link it to your GitHub account.&lt;/p&gt;
&lt;h2&gt;
  
  
  Developing a Gatsby site
&lt;/h2&gt;

&lt;p&gt;Now that the site is designed, Node is installed, and we've set up Git and GitHub, let's cover Gatsby. Initially, to set up the site, we followed the &lt;a href="https://www.gatsbyjs.org/docs/quick-start/" rel="noopener noreferrer"&gt;quick start guide&lt;/a&gt;. Here were the steps to set up our site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new Gatsby site by running &lt;code&gt;gatsby new 100-days-of-code&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Make changes to the starter template&lt;/li&gt;
&lt;li&gt;Commit all of our changes to Git&lt;/li&gt;
&lt;li&gt;Push everything to GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You won't need to do these steps, since we've already set up the repo for you. Instead, you'll just need to run these commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone your forked GitHub repo to your machine: &lt;code&gt;git clone &amp;lt;link to your forked repo&amp;gt;&lt;/code&gt; (you can get this link from your forked repo on GitHub).&lt;/li&gt;
&lt;li&gt;Navigate to the directory you just cloned: &lt;code&gt;cd &amp;lt;link to your forked repo&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install the Gatsby CLI globally: &lt;code&gt;npm install -g gatsby-cli&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install dependencies: &lt;code&gt;npm install&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run the site using &lt;code&gt;gatsby develop&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Visit localhost:8000 in your browser to see a version of your website running locally&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Set up your package manager (optional)
&lt;/h2&gt;

&lt;p&gt;There are several different ways to install Node packages in your project, the two most popular being &lt;code&gt;npm&lt;/code&gt; and &lt;code&gt;yarn&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;By default, Gatsby works with &lt;code&gt;npm&lt;/code&gt;, which comes installed with it. I prefer to use &lt;code&gt;yarn&lt;/code&gt;, so here's how to set that up.&lt;/p&gt;

&lt;p&gt;To edit your Gatsby config to use yarn, edit this file on your local machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// .config/gatsby/config.json
{
    "telemetry": {
        "enabled": true,
        "machineId": "895568d5-3051-4ba4-9563-0a4dc4b3638b"
    },
    "cli": {
        "packageManager": "yarn"
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now, you can add new packages to your Gatsby repo using &lt;code&gt;yarn add&lt;/code&gt;. This will add a package to your &lt;code&gt;package.json&lt;/code&gt; file and create a &lt;code&gt;yarn.lock&lt;/code&gt; file in your repo. You can delete the &lt;code&gt;package.lock&lt;/code&gt; file if it exists, since you should only use one package manager. Anyone else working in your repo will have to run &lt;code&gt;yarn&lt;/code&gt; before they run &lt;code&gt;gatsby develop&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Some packages that I used when creating this site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The plugins for Material UI core, styles, and icons: &lt;code&gt;yarn add @material-ui/core&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://www.gatsbyjs.org/packages/gatsby-transformer-remark/" rel="noopener noreferrer"&gt;markdown&lt;/a&gt; plugin: &lt;code&gt;yarn add gatsby-transformer-remark&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://www.gatsbyjs.org/packages/gatsby-remark-images/" rel="noopener noreferrer"&gt;remark images&lt;/a&gt; plugin: &lt;code&gt;yarn add gatsby-remark-images&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These packages are automatically installed when you run &lt;code&gt;yarn&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The template we’ve built uses &lt;a href="https://material-ui.com/" rel="noopener noreferrer"&gt;Material UI&lt;/a&gt;, a React implementation of Google's &lt;a href="https://material.io/design/" rel="noopener noreferrer"&gt;Material design framework&lt;/a&gt;. They have premade components that you can leverage, such as buttons, dialogs, and navigation. I encourage you to browse their site to get an understanding for the types of components you can leverage from any React component library (others include &lt;a href="https://ant.design/docs/react/introduce" rel="noopener noreferrer"&gt;Ant&lt;/a&gt;, &lt;a href="https://developer.microsoft.com/en-us/fluentui" rel="noopener noreferrer"&gt;Fluent&lt;/a&gt;, and &lt;a href="https://v2.grommet.io/" rel="noopener noreferrer"&gt;Grommet&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;
  
  
  Site structure
&lt;/h2&gt;

&lt;p&gt;Before adding any content of your own, let's go over the anatomy of the site structure. In your &lt;code&gt;/src&lt;/code&gt; folder, you have these subfolders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;components&lt;/code&gt; - contains the components rendered on your site, such as &lt;code&gt;layout.js&lt;/code&gt; and &lt;code&gt;header.js&lt;/code&gt; components.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pages&lt;/code&gt; - contains all of your markdown files, as well as any other pages on your site. Gatsby automatically creates a new page for each Javascript file you had to this folder.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;images&lt;/code&gt; - image assets for your site. This is where you'll put your post thumbnails.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;theme&lt;/code&gt; - this is where you can customize the Material UI theme. You can also edit &lt;code&gt;layout.css&lt;/code&gt; to customize the raw CSS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outside of the &lt;code&gt;/src&lt;/code&gt; folder, there are also a set of files that use the Gatsby API. These include &lt;code&gt;gatsby-config.js&lt;/code&gt;, which is used to manage your site data and plugins. You don't really need to worry about the other files if you're just getting started, but you can &lt;a href="https://www.gatsbyjs.org/docs/api-files/" rel="noopener noreferrer"&gt;read more here&lt;/a&gt; if you'd like.&lt;/p&gt;
&lt;h2&gt;
  
  
  Add your own posts
&lt;/h2&gt;

&lt;p&gt;The Gatsby site works by reading in your posts in markdown and converting them into HTML on your website using the markdown remark plugin. The markdown remark plugin also allows us to easily query for all of the markdown content in our repo using GraphQL.&lt;/p&gt;

&lt;p&gt;What is GraphQL? It's a query language that allows you to fetch data in a flexible way. Compared to REST APIs, GraphQL gives you the power to get exactly the data you need (instead of having a predefined set of data in a set of API endpoints). You can see your data and build queries using the GraphQL explorer available at localhost:8000/__graphql.&lt;/p&gt;

&lt;p&gt;To add your own posts, create a new &lt;code&gt;.md&lt;/code&gt; file in the &lt;code&gt;/pages&lt;/code&gt; folder. Each post has &lt;code&gt;frontmatter&lt;/code&gt;, which is the metadata attached to your post. This is where, for instance, you can set the day number (e.g. Day 5) and the path to the image you want to display on your page for that day. Posts are ordered by day when they are organized in the paginated layout, so be sure to add day to the frontmatter of your posts.&lt;/p&gt;

&lt;p&gt;Once you've added your post, commit it to Git! If you don't know Git yet, the commands you need to know are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;git init&lt;/code&gt; - initializes a new Git repository in a folder on your machine (you don’t need to run this if you cloned your repo from GitHub)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git add -A&lt;/code&gt; - adds all of the files you’ve modified to your staged changes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git commit -m "some message"&lt;/code&gt; - commits your staged changes to Git&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git push origin &amp;lt;branch name&amp;gt;&lt;/code&gt; - lets you push your changes to your remote repository on GitHub&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Deploying the template
&lt;/h2&gt;

&lt;p&gt;Now that you've set up your local development environment, it's time to build and deploy your site to Netlify.&lt;/p&gt;

&lt;p&gt;First, create a free Netlify account. Click "Create a new site from Git", authorize the Netlify app to be installed in your GitHub account, and choose your GitHub repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxbp0lc85h8z0r1tpqlkz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxbp0lc85h8z0r1tpqlkz.png" alt="100 Days of Code Netlify deployment" width="800" height="739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave all of the settings as-is and click to deploy your site. Make sure to set the production branch to the correct branch of your choice in the Netlify deploy contexts.&lt;/p&gt;

&lt;p&gt;Netlify will give you your own unique Netlify domain (e.g. &lt;a href="https://bretts-100-days-of-code.netlify.app/" rel="noopener noreferrer"&gt;https://bretts-100-days-of-code.netlify.app/&lt;/a&gt;), but you can configure your own custom domain using your hosting provider of your choice.&lt;/p&gt;

&lt;p&gt;When you deploy your site, your React code is compiled and deployed to Netlify's servers. Netlify hooks into your GitHub account to allow your site to be deployed automatically. Every time you make a new commit, a new build of your site is triggered, and then your site is deployed (as long as the build succeeds).&lt;/p&gt;
&lt;h2&gt;
  
  
  That's it!
&lt;/h2&gt;

&lt;p&gt;You've created your own 100 Days of Code site. &lt;a href="https://www.software.com/src/essential-guide-to-the-100-days-of-code-challenge" rel="noopener noreferrer"&gt;Check out this guide&lt;/a&gt; for more resources on completing the challenge.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/softwaredotcom/essential-guide-to-the-100-days-of-code-challenge-3b5g" class="crayons-story__hidden-navigation-link"&gt;Essential Guide to the 100 Days of Code Challenge&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/softwaredotcom"&gt;
            &lt;img alt="Software.com logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F427%2F71853910-e050-47cb-aa4d-2df249eac23f.png" class="crayons-logo__image" width="384" height="384"&gt;
          &lt;/a&gt;

          &lt;a href="/thegeoffstevens" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F123230%2F875b3024-42b9-43fb-8e1a-ae508a5e86b8.png" alt="thegeoffstevens profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/thegeoffstevens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Geoff Stevens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Geoff Stevens
                
              
              &lt;div id="story-author-preview-content-222940" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/thegeoffstevens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F123230%2F875b3024-42b9-43fb-8e1a-ae508a5e86b8.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Geoff Stevens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/softwaredotcom" class="crayons-story__secondary fw-medium"&gt;Software.com&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/softwaredotcom/essential-guide-to-the-100-days-of-code-challenge-3b5g" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 26 '20&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/softwaredotcom/essential-guide-to-the-100-days-of-code-challenge-3b5g" id="article-link-222940"&gt;
          Essential Guide to the 100 Days of Code Challenge
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/100daysofcode"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;100daysofcode&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/softwaredotcom/essential-guide-to-the-100-days-of-code-challenge-3b5g" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;181&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/softwaredotcom/essential-guide-to-the-100-days-of-code-challenge-3b5g#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            19 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;👉 &lt;strong&gt;Join the waitlist to try out our 100 Days of Code extension for VS Code &lt;a href="https://www.software.com/100-days-of-code" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
    </item>
  </channel>
</rss>
