<?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: Charity Majors</title>
    <description>The latest articles on DEV Community by Charity Majors (@mipsytipsy).</description>
    <link>https://dev.to/mipsytipsy</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%2F32607%2Fd4cca6c9-c50e-4cdd-ba95-99d1c575126d.jpg</url>
      <title>DEV Community: Charity Majors</title>
      <link>https://dev.to/mipsytipsy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mipsytipsy"/>
    <language>en</language>
    <item>
      <title>The Future of Software is a Sociotechnical Problem</title>
      <dc:creator>Charity Majors</dc:creator>
      <pubDate>Fri, 18 Dec 2020 21:19:14 +0000</pubDate>
      <link>https://dev.to/honeycombio/the-future-of-software-is-a-sociotechnical-problem-10m0</link>
      <guid>https://dev.to/honeycombio/the-future-of-software-is-a-sociotechnical-problem-10m0</guid>
      <description>&lt;p&gt;&lt;a href="https://www.interaction-design.org/literature/topics/socio-technical-systems" rel="noopener noreferrer"&gt;"Sociotechnical"&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I learned this word from &lt;a href="https://twitter.com/lizthegrey" rel="noopener noreferrer"&gt;Liz Fong-Jones&lt;/a&gt; recently, and it immediately entered my daily lexicon. You know exactly what it means as soon as you hear it, and then you wonder how you ever lived without it.&lt;/p&gt;

&lt;p&gt;Our systems are sociotechnical systems. This is why technical problems are never just technical problems, and why social problems are never just social problems.&lt;/p&gt;

&lt;p&gt;I work on a company, Honeycomb, which develops next-gen &lt;a href="https://thenewstack.io/observability-a-3-year-retrospective/" rel="noopener noreferrer"&gt;observability&lt;/a&gt; tooling. But I don't spend my time trying to figure out how to get more people to use observability tools. Observability alone can't solve anything, it's just a necessary part of the solution.&lt;/p&gt;

&lt;p&gt;What I do spend my day thinking about is the future of building software. How can we convert the creative fuel of people’s labor into healthier teams and more reliable, resilient systems? We are incredibly wasteful of the creative fuel that people pour into the process, and the result is that we have unreliable, opaque systems hairballs that nobody understands — which are then operated by stressed, burned out humans who are afraid to touch them.&lt;/p&gt;

&lt;p&gt;What if we had:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;a future where your code goes live a few seconds or minutes after you commit your changes, and this is all very predictable and boring&lt;/li&gt;
    &lt;li&gt;a future where everyone owns their code in production, and you actually look forward to your own turn on call&lt;/li&gt;
    &lt;li&gt;a future where all the energy you pour into writing code and building systems genuinely moves the business forward, and you are rarely frustrated or lost or misled by those systems&lt;/li&gt;
    &lt;li&gt;a future where the debugger of last resort is not the engineer who has been there the longest, but the most curious person&lt;/li&gt;
    &lt;li&gt;a future where shipping software is not scary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What do you think, does this sound achievable? Easy? Or are you thinking “never gonna happen for my team in this lifetime?”&lt;/p&gt;

&lt;p&gt;This is all much more attainable than you might think.&lt;/p&gt;

&lt;h3&gt;The future is here, it is just unevenly distributed.&lt;/h3&gt;

&lt;p&gt;I have lived in the future. It's why I started this company — I got a brief glimpse of what I now think of as ODD, or observability-driven development, a world where the best engineers wrote code with half their screen taken up by their editor, half by a tool where they were constantly watching and poking at and playing with that code live in production. The code they wrote was better. The systems they built were understandable, in a way I had never seen before.&lt;/p&gt;

&lt;p&gt;Going back to a world where people write and ship blind was unthinkable. Not an option.&lt;/p&gt;

&lt;p&gt;We hear echoes of this from Honeycomb customers now: "This is incredible. I can never go back.“ &lt;/p&gt;

&lt;p&gt;Because the teams who invest in these sociotechnical practices are radically more productive and happy than those who don't. They move so much faster and with more confidence; their systems are more reliable and better understood; they amass dramatically less technical debt and can do far more with radically fewer people. They attract and retain better candidates.&lt;/p&gt;

&lt;p&gt;And as a software company, this is how you win.&lt;/p&gt;

&lt;h3&gt;We are in the Middle Ages of software delivery.&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://stripe.com/reports/developer-coefficient-2018" rel="noopener noreferrer"&gt;Stripe developer report&lt;/a&gt; reports that engineers spend at least 40% (self-reported) on miscellaneous technical bullshit that keeps you busy, maybe blocks you from working on what you need to work on ... but does not move the business forward. Just sit with that a sec. Forty percent. Optimistically.&lt;/p&gt;

&lt;p&gt;Or maybe you're familiar with the &lt;a href="https://cloud.google.com/blog/products/devops-sre/the-2019-accelerate-state-of-devops-elite-performance-productivity-and-scaling" rel="noopener noreferrer"&gt;DORA report&lt;/a&gt;. The honeycomb team’s engineering stats are an order of magnitude or two better than their Elite teams, which represent the top 20% of all teams. ("But the company is young, easy for you to say!" you may protest. Sure, we are relatively young ... a little over four years old. We are also a fast-growing platform with unpredictable, spiky traffic composed of user-generated streams of content that we have no control over.)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2n75lbmxpposh7s6qh7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2n75lbmxpposh7s6qh7a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I wish I could tell you "just buy Honeycomb and voila! Get high-performing teams!“&lt;/p&gt;

&lt;p&gt;That is not what I'm saying. &lt;b&gt;It is not that easy.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's a sociotechnical hole, and only a combination of technical fixes and social change will get us out of it.&lt;/p&gt;

&lt;h3&gt;A sociotechnical recipe for high-performing teams&lt;/h3&gt;

&lt;p&gt;But lots of smart, creative teams are out there working hard on this and sharing their findings. As a result, we know a LOT more about what contributes to a solution than we knew even just a year or two ago. You will be forgiven for skimming this very long list:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Blameless retrospectives&lt;/li&gt;
    &lt;li&gt;Automatic deployments triggered on each commit, single commit per deploy&lt;/li&gt;
    &lt;li&gt;Removing human gates in the deploy pipeline&lt;/li&gt;
    &lt;li&gt;Good test coverage, instrumented test harness&lt;/li&gt;
    &lt;li&gt;Shared conventions around instrumentation&lt;/li&gt;
    &lt;li&gt;Training, education, collaboration&lt;/li&gt;
    &lt;li&gt;Code reviews and mentoring&lt;/li&gt;
    &lt;li&gt;Promoting people for their value as team members and force multipliers, not just raw coding ability&lt;/li&gt;
    &lt;li&gt;Interview processes that value strengths, not lack of weaknesses&lt;/li&gt;
    &lt;li&gt;Shared value systems and organizational transparency&lt;/li&gt;
    &lt;li&gt;Welcoming of diverse viewpoints and fresh eyes&lt;/li&gt;
    &lt;li&gt;Teams that value juniors and know how to train them up&lt;/li&gt;
    &lt;li&gt;Tooling that rewards curiosity&lt;/li&gt;
    &lt;li&gt;Job ladders that value communication and independent initiative&lt;/li&gt;
    &lt;li&gt;Encouraging software engineers to own their code from end to end&lt;/li&gt;
    &lt;li&gt;Encouraging SRE types to work more like product teams&lt;/li&gt;
    &lt;li&gt;Adopting SLOs, SLIs, and aligning on call pain strictly with user pain&lt;/li&gt;
    &lt;li&gt;Making sure everyone gets enough sleep and time off&lt;/li&gt;
    &lt;li&gt;Observability tooling (in the technical sense, &lt;a href="https://www.honeycomb.io/blog/so-you-want-to-build-an-observability-tool/" rel="noopener noreferrer"&gt;as I define it here&lt;/a&gt;; not in the old fashioned sense of "metrics, logs and traces")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://thenewstack.io/observability-a-3-year-retrospective/" rel="noopener noreferrer"&gt;Observability&lt;/a&gt; is only a one piece of the solution ... but it is a necessary piece that should be actively frontloaded if your efforts are to have maximum impact.&lt;/p&gt;

&lt;h3&gt;Observability is about the unknown-unknowns&lt;/h3&gt;

&lt;p&gt;Rolling out o11y tooling is like turning on the light and putting on your glasses before you start swinging at the pinata.&lt;/p&gt;

&lt;p&gt;To get at the candy inside — the real actionable user and technical insights — you need to be able to interactively slice and dice in real time, break down by high cardinality dimensions, and ask those new questions, the ones that you couldn’t have predicted you would need to ask. This is the minimum viable technical functionality you need in order to explore exactly what is happening in production, what happened when you deployed a particular piece of code, what happened when that user reported that bug. That’s why previous iterations of monitoring were not enough.&lt;/p&gt;

&lt;p&gt;Observability in the modern technical definition is about answering the unknown-unknowns, and it is necessary. With observability, all things become easier. It is a force amplifier for all your other efforts.&lt;/p&gt;

&lt;p&gt;If you don't have observability -- if you only have metrics, logs, and/or traces -- all you can ask will be those questions that you predicted and defined in advance. You are swinging out at the pinata in the dark, or where you think it was yesterday or last week. It might not be completely prohibitively impossible, but it's a damn sight harder and a lot comes down to luck.&lt;/p&gt;

&lt;h3&gt;
&lt;a href="https://thenewstack.io/observability-a-3-year-retrospective/" rel="noopener noreferrer"&gt;Observability is a necessary ingredient&lt;/a&gt;. But everything matters.&lt;/h3&gt;

&lt;p&gt;People often kvetch at me "yeah, but anything's easy when you have the best engineers." They have this exactly backwards. &lt;b&gt;Observability-driven development is what makes great engineers&lt;/b&gt;. Observability is what enables you to peek under the hood of the abstractions, it grounds you in reality, forces you to think through the code all the way to how the user will use it. It tethers you to your users and lets you see the world through their eyes.&lt;/p&gt;

&lt;h3&gt;TDD → ODD&lt;/h3&gt;

&lt;p&gt;Learning to check your assumptions vs reality was the argument for TDD (test-driven development). That makes you write better code, indisputably. But tests stop at the edge of your laptop! Tests imperfectly mock a predictable subset of reality. Testing in production means replacing the artificial test sandbox with reality.&lt;/p&gt;

&lt;p&gt;If you believe TDD makes you a better developer, you should be hungry for the developer you will become using ODD.&lt;/p&gt;

&lt;p&gt;I am cautiously optimistic that the industry will embrace observability in far less time than it took to adopt TDD and metrics. Mostly because it is much, much easier to do things this way. It’s actually much harder to do things the bad old ways, what with all the hacks and workarounds.&lt;/p&gt;

&lt;p&gt;And every little bit helps. Every one of these changes will, if you embrace them, make your people happier and more productive.&lt;/p&gt;

&lt;h3&gt;Observability-driven development is what creates great software engineers.&lt;/h3&gt;

&lt;p&gt;The greatest obstacle between us and a better tomorrow is this pervasive lack of hope. (The second greatest is our perverse pride in our Rube Goldberg hacks &amp;amp; sunk costs fallacy.)&lt;/p&gt;

&lt;p&gt;Most people still have not experienced what it's like to build software in a radically better way. Even worse, most people don't see themselves in the better world I describe. They don't think this world is meant for them.&lt;/p&gt;

&lt;p&gt;I don’t know how to fix this yet. But if we only succeed in making life better for the elites, we will have failed.&lt;/p&gt;

&lt;p&gt;Observability is for everyone, and it is easier if you do it first. Observability makes every technical effort that comes after it sooooo much easier to achieve. Observability is what creates great engineers, not vice versa. Start at the edge, instrument some code, and work in. Rinse and repeat. You got this.&lt;/p&gt;

&lt;p&gt;Experience what Honeycomb can do for your business. Check out &lt;a href="https://www.honeycomb.io/get-a-demo?&amp;amp;utm_source=Devto&amp;amp;utm_Devto=blog&amp;amp;utm_campaign=referral&amp;amp;utm_keyword=%7Bkeyword%7D&amp;amp;utm_content=the-future-of-software-is-a-sociotechnical-problem" rel="noopener noreferrer"&gt;our short and sweet demo&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>observability</category>
      <category>debugging</category>
      <category>instrumentation</category>
      <category>devops</category>
    </item>
    <item>
      <title>The Future of Ops Careers — Honeycomb</title>
      <dc:creator>Charity Majors</dc:creator>
      <pubDate>Fri, 13 Nov 2020 16:36:21 +0000</pubDate>
      <link>https://dev.to/honeycombio/the-future-of-ops-careers-honeycomb-56pj</link>
      <guid>https://dev.to/honeycombio/the-future-of-ops-careers-honeycomb-56pj</guid>
      <description>&lt;p&gt;Have you seen &lt;a href="https://medium.com/@jeremydaly/lambda-a-serverless-musical-cf8ec5d522e1?" rel="noopener noreferrer"&gt;Lambda: A Serverless Musical&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;If not, you really have to. I love Hamilton, I love serverless, and I’m not trying to be a crank or a killjoy or police people’s language. BUT, unfortunately, the chorus chose to double-down on one of the stupidest and most dangerous tendencies the serverless movement has had from day one: misunderstanding and trash-talking operations.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;“I’m gonna reduce your… ops&lt;/i&gt;&lt;br&gt;
&lt;i&gt;I’m gonna reduce your… ops”&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Well, I hate to tell you, but…&lt;/p&gt;

&lt;p&gt;&lt;i&gt;“No, I am not throwing away my… ops.&lt;/i&gt;&lt;br&gt;
&lt;i&gt;And you’re not throwing away my… ops.”&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Or anyone else’s for that matter.&lt;/p&gt;

&lt;p&gt;Even if you don’t run any servers or have any infrastructure of your own, you’ll still have to deal with operability and operations engineering problems. I hate to be the bearer of bad news (not really), but the role of operations isn’t going away. At best, the shifts that supposedly reduce your ops are simply delegating the operability of your stack to someone that does it better. The reality for most teams is that operations engineering is more necessary than ever.&lt;/p&gt;

&lt;p&gt;Beyond Hamilton clap backs, that distinction matters because it has real career ramifications for engineers who, like me, are so operationally minded. Where are Ops careers heading?&lt;/p&gt;

&lt;h2&gt;Where Does Ops Fit, Anyway?&lt;/h2&gt;

&lt;p&gt;In some corners of engineering, “ops” is straight up used as a synonym for toil and manual labor. There is no good ops, only dead ops. The existence of ops is a technical failure: a blemish to be automated away, eradicated by adding more and more code. Code defeats toil. Dev makes ops obsolete. #NoOps!&lt;/p&gt;

&lt;p&gt;If this is such an inexorable march towards utopia, maybe someone can explain to me why the shops that flirt the hardest with #NoOps have been, without exception, such humanitarian disasters?&lt;/p&gt;

&lt;p&gt;Or, I’ll start. Operations is ridiculously important. When you denigrate it and diminish it, that’s the first sign that you aren’t doing it well. The way to do something well generally starts with adding focus and rigor, not writing it off.&lt;/p&gt;

&lt;p&gt;Consider Business Development and Operations. Business is the why, development is the what, operations is the how. Operations is the constellation of your organizational memory: patterns, practices, habits, defaults, aspirations, expertise, tools, and everything else used to deliver business value to users.&lt;/p&gt;

&lt;p&gt;The value of serverless isn’t found in “less ops.” Less ops doesn’t yield better systems than more ops, any more than fewer lines of code means better software. The value of serverless is unlocked by clear and powerful abstractions that let you delegate running large portions of your infrastructure to other people who can do it better than you — yes, because of economies of scale, but more so because that’s their core business model. YOUR core business model probably has nothing to do with infrastructure.&lt;/p&gt;

&lt;p&gt;Because of that, a great sort is now happening between software engineering, infrastructure operations, and core business value.&lt;/p&gt;

&lt;h2&gt;What Is Infrastructure?&lt;/h2&gt;

&lt;p&gt;Infrastructure is software support. It’s the prerequisite thing you &lt;i&gt;have&lt;/i&gt; to do, in order to get to the stuff you &lt;i&gt;want&lt;/i&gt; to do. It’s not what you want to be doing, yet your business goals presume its existence.&lt;/p&gt;

&lt;p&gt;An important quality of infrastructure is that it typically changes less often and is more stable than the software that constitutes your core business value. The features you ship to customers are typically under constant or frequent development, and they change at the rate of pull requests and commits (in fact, the velocity of these changes can be a critical competitive advantage). Infrastructure, on the other hand, changes at a more glacial pace — at the rate of package managers, OS updates, and new machine images. It’s seconds-to-minutes versus hours-to-days.&lt;/p&gt;

&lt;p&gt;This dividing line between infrastructure and core business value even holds true for companies whose business model is building infrastructure for other companies. For example, a company providing email focuses on products that consist of email workflow features that are constantly being developed and shipped to users. There isn’t much new business value to be wrung out of modifying commodity SMTP transport layers or optimizing IMAP servers.&lt;/p&gt;

&lt;p&gt;To its credit, serverless is perhaps the first trend to have really understood and powerfully leveraged that dividing line. IaaS, PaaS, and full-service suites like Gitlab were all germinal forms of this shift. “Cloud native” was also, arguably, another lurch in that direction. But where has that taken our industry?&lt;/p&gt;

&lt;h2&gt;*-As-a-Service Is Really Just Code for “Outsourcing”&lt;/h2&gt;

&lt;p&gt;IaaS, PaaS, and even FaaS/serverless are really all just types of outsourcing. But yet we don’t call it “outsourcing” when we rely on companies like AWS to run our datacenter and provide compute or storage, or when we use Google apps for our email, documents, and spreadsheets?&lt;/p&gt;

&lt;p&gt;Historically, “outsourcing” is what we call shifting work off-premises when we aren’t yet comfortable with the arrangement; whether because the fit is awkward, the support is incomplete, or the service isn’t on par with what we could do ourselves. With infrastructure outsourcing, service quality is now creeping up the stack. More and more complex subsystems are becoming commodity components: and other companies utilize them to build their own businesses (or other infrastructure!) on top.&lt;/p&gt;

&lt;p&gt;When I started my career, I was a jack-of-all-trades systems person. I ran mail, web, db, DNS, cache, deploys, CI/CD, patched operating systems, built debs and rpms, etc, etc. Most engineers don’t do those things now, and nor do I. Why would I, when I can pay someone else to abstract those details away, so that I can spend my time focusing on delivering customer value?&lt;/p&gt;

&lt;p&gt;Increasingly, as an industry, we are outsourcing any bits that we can.&lt;/p&gt;

&lt;p&gt;As a more personal example, why would you want to run your own observability team or build your own in-house monitoring software, if that’s not your core business? Why split your focus to building a bespoke and unsustainable version of a thing when you can readily buy a world-class version? If my company has had ten or twenty full-time engineers working on that solution, how long will it be until your team of three or five can catch up?&lt;/p&gt;

&lt;p&gt;In a post-cloud world, we’ve learned that it’s usually much better and far easier to buy than it is to build those things that don’t add business value.&lt;/p&gt;

&lt;h2&gt;How to Outsource Things Well&lt;/h2&gt;

&lt;p&gt;In my personal example, buying doesn’t mean that you shouldn’t have an observability team. It means that the observability team should turn their gaze inward. That team should take a page out of the SRE or test community’s books and focus on providing value for your org’s developers whenever they interact with this outsourced solution.&lt;/p&gt;

&lt;p&gt;That team should write libraries, generate examples, and drive standardization; ushering in consistency, predictability, and usability. They should partner with internal teams to evaluate use cases. They should partner with your vendors as roadmap stakeholders. They might also write glue code and helper modules to connect disparate data sources and create cohesive visualizations. Basically, that team becomes an integration point between your organization and the outsourced work.&lt;/p&gt;

&lt;p&gt;We already &lt;a href="https://cloudplatformonline.com/rs/248-TPC-286/images/DORA-State%20of%20DevOps.pdf" rel="noopener noreferrer"&gt;know from industry research&lt;/a&gt; that the key to success when outsourcing is to embed those off-prem contributions within cross-functional teams, which manage integrating that work back into the broader organization.&lt;/p&gt;

&lt;p&gt;Monstrous amounts of engineering work create the stack that ships value to your customers. Trying to save work, some teams build complicated Rube Goldberg machines that are brutal to run, change, and debug. It’s much harder to build simple platforms with operable, intelligible components that provide a humane user experience. Bridging that gap requires quality operations engineering to streamline that outsourcing for successful user adoption.&lt;/p&gt;

&lt;p&gt;That’s why even if you run no servers and have no infrastructure of your own, you still have operability and operations problems to contend with. Getting to the point where your org successfully has no infrastructure of its own takes a lot of world-class operations expertise. Staying there is even harder. Any jerk with a credit card can just go spin up a server you’re now responsible for. Try being any sort of roadblock and see how quickly that happens.&lt;/p&gt;

&lt;h2&gt;What This Means For Operationally Minded Engineers&lt;/h2&gt;

&lt;p&gt;The reality is that jack-of-all-trades systems infrastructure jobs are slowly vanishing: the world doesn’t need thousands of people who can expertly tune postfix, SpamAssassin and ClamAV — the world has Gmail. You might find your next job by following the trail of technologies you know, like getting hired as a MySQL expert. But technologies come and go, so you should think carefully before hitching your cart to any particular piece of software. What will this mean for your career?&lt;/p&gt;

&lt;p&gt;The industry is bifurcating along an infrastructure fault line, and the long-held indistinguishability between infrastructure-oriented engineers and operationally-minded engineers is swiftly eroding. These are becoming two different roles and career paths at two different kinds of companies: infrastructure providers, and the rest of them. Those of us who love optimizing, debugging, maintaining, and tackling weird systems problems far more than writing new greenfield code, now have a choice to make: go deep and specialize in infrastructure, or go broad on operability.&lt;/p&gt;

&lt;p&gt;If the mission of your company is to solve a category problem by providing infrastructure to the world, then operations will always be a core part of that mission: your company thrives by solving that particular operability problem better than anyone. So you are justified in going deep and specializing in it, and figuring out how to do it better and more efficiently than anyone else in the world — so that other people don’t have to. But know that even this infrastructure-heavy backend work also needs design, product management, and software engineering work — just like those non-infrastructure focused companies!&lt;/p&gt;

&lt;p&gt;If your chosen company isn’t solving an infrastructure problem for the world, there are still loads of opportunities for ops generalists here too. But know that a core part of your job is critically examining the cycles your company devotes to infrastructure operations and finding effective ways to outsource or minimize their in-house developer cycles. Your job is &lt;i&gt;not &lt;/i&gt;to go deep if there is any alternative.&lt;/p&gt;

&lt;p&gt;I see operationally-minded engineers working cross-functionally with software development teams to help them grow in a few key areas: making outsourcing successful, speeding up time to value, and up-leveling their production chops.&lt;/p&gt;

&lt;p&gt;They’re evolving very crude “build vs. buy” industry arguments (often based on little more than whimsical notions) into sophisticated understandings of how and when to leverage abstractions that radically accelerate development. They build and maintain the bridges that make outsourcing successful.&lt;/p&gt;

&lt;p&gt;They’re evolving release engineering to fulfill the delivery part of CI/CD. Far too many teams are perfectly competent at writing software, yet perfectly remedial when it comes to shipping that software swiftly and safely.&lt;/p&gt;

&lt;p&gt;They’re also up-leveling the production operational skills of software engineers by crafting on-call rotations, counseling teams on instrumentation, and teaching observability. As teams leave behind dated metrics and logs, they start using observability to dig themselves out of the ever-increasing massive hole where everyone constantly ships software they don’t understand to a production system they’ve never understood.&lt;/p&gt;

&lt;p&gt;Everyone needs operational skills; even teams who don’t run any of their own infrastructure. Ops is the constellation of skills necessary for shipping software; it’s not optional. If you ship software, you have operations work that needs to be done. That work isn’t going away. It’s just moving up the stack and becoming more sophisticated, and you might not recognize it.&lt;/p&gt;

&lt;p&gt;I look forward to the improved Lambda Serverless Musical chorus:&lt;/p&gt;

&lt;p&gt;&lt;i&gt;I’m going to improve your… ops.&lt;/i&gt;&lt;br&gt;
&lt;i&gt;Yes, I’m going to improve your… ops!&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Read more about &lt;a href="https://www.honeycomb.io/blog/observations-on-the-enterprise-of-hiring/?&amp;amp;utm_source=tns&amp;amp;utm_medium=blog-links&amp;amp;utm_campaign=referral&amp;amp;utm_content=observations-on-the-enterprise-of-hiring" rel="noopener noreferrer"&gt;Honeycomb’s hiring methodology&lt;/a&gt;. P.S. &lt;a href="https://jobs.lever.co/honeycomb" rel="noopener noreferrer"&gt;We’re hiring&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Join the swarm! Get started with &lt;a href="https://ui.honeycomb.io/signup?&amp;amp;utm_source=Devto&amp;amp;utm_Devto=blog&amp;amp;utm_campaign=referral&amp;amp;utm_keyword=%7Bkeyword%7D&amp;amp;utm_content=the-future-of-ops-careers"&gt;Honeycomb for free&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>career</category>
      <category>observability</category>
      <category>operations</category>
      <category>sre</category>
    </item>
    <item>
      <title>A Next Step Beyond Test Driven Development</title>
      <dc:creator>Charity Majors</dc:creator>
      <pubDate>Mon, 09 Nov 2020 17:08:26 +0000</pubDate>
      <link>https://dev.to/honeycombio/a-next-step-beyond-test-driven-development-h05</link>
      <guid>https://dev.to/honeycombio/a-next-step-beyond-test-driven-development-h05</guid>
      <description>&lt;p&gt;The most successful software development movement of my lifetime is probably test-driven development or TDD. With TDD, requirements are turned into very specific test cases, then the code is improved so the tests pass. You know it, you probably use it; and this practice has helped our entire industry level up at code quality.&lt;/p&gt;

&lt;p&gt;But it’s time to take a step beyond TDD in order to write better software that actually runs well in production. That step is &lt;strong&gt;observability driven development&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;&lt;strong&gt;Using TDD to Drive Better Code&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;TDD has some powerful things going for it. It’s a very pure way of thinking about your software and the problems it’s trying to solve. TDD abstracts away the grimy circus of production and leaves you with deterministic, repeatable bits of code that you can run hundreds of times a day, giving you the warm, fuzzy assurance that your software would continue to work today the same as it worked yesterday and the day before that. But that assurance quickly fades when you start considering whether having passing tests means that your users are &lt;strong&gt;actually&lt;/strong&gt; having a good product experience. Do those passing tests mean that any errors and regressions can be crispily isolated and fixed before your code is released back into the wild?&lt;/p&gt;

&lt;p&gt;TDD helps produce better code, but a fundamental limitation of TDD is exactly the thing that makes it most appealing. With TDD, your tests run in a hermetically sealed environment. Everything in that environment is erased and recreated from zero on each run: your data is dropped and seeded afresh, your storage and remote systems are empty mocks. There is no chaotic human element, only wave upon wave of precisely specified bots and mocks performing bounds checks, serializing and deserializing, and checking for expected results, again and again.&lt;/p&gt;

&lt;p&gt;All of the interesting deviations that your code might encounter out in the wild have been excised from that environment. We remove those deviations in the interest of making your code testable and tractable. There are no charming surprises: the unexpected is &lt;strong&gt;violently unwelcome&lt;/strong&gt;. Any deviation from the spec must be dealt with — immediately.&lt;/p&gt;

&lt;p&gt;But just because something about the environment doesn’t go according to plan and gets excluded from TDD, that doesn’t mean it isn’t valuable. In fact, one might reasonably argue that those deviations are the &lt;strong&gt;most&lt;/strong&gt; valuable parts of your system; the most interesting, valuable, and worthwhile things to surface, watch, stress, and test. Because it’s all of those things that are really going to shape how your software actually behaves when real people start interacting with it.&lt;/p&gt;

&lt;p&gt;If this rings true to you, then you may be interested in another method of validating and gaining confidence in your code. I have been referring to that approach as “observability-driven development”, or ODD. That’s &lt;strong&gt;oh-dee-dee&lt;/strong&gt;, because using real data obtained from operating your software in production to drive better code is an approach that no engineer should find odd.&lt;/p&gt;

&lt;h2&gt;&lt;strong&gt;Using Production to Drive Better Code&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;“But that’s not how it’s done! We have confidence in our tests!!!”&lt;/p&gt;

&lt;p&gt;The tests in your code are still valuable. But there’s an additional step we need to take in order to extend our validation to encompass the reality of production. It requires shifting your mindset, developing a practice, and forming a habit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embrace failures.&lt;/strong&gt;  Instead of being afraid of failure and trying desperately to avoid it, try adopting a mindset of cheery fatalism. Everything will fail eventually, usually at the worst possible time, and in a way you failed to predict. The first step is admitting that you cannot possibly predict all the entertainingly disastrous ways that your precious code is going to fail in the real world. All the different scenarios you so painstakingly enumerated and wrote tests for are but grains of sand on a beach. Accepting this might take some time. Go on. I’ll wait.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instrument as you go. &lt;/strong&gt; Given that we can’t predict the future, the next step is to develop a practice that helps us better see that future as it starts to unfold. This is the practice of developing instrumentation as you go. The things you want to build might become fully broken, partially degraded, or end up in any number of unusual states — or depend on services that are. How will that non-optimal state affect other parts of the system and how might those failure modes manifest in novel ways?&lt;/p&gt;

&lt;p&gt;Just as you wouldn’t accept a pull-request without tests, you should never accept a pull-request unless you can answer the question, “how will I know when this isn’t working?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Close the loop. &lt;/strong&gt; The habit you then form is one of relentlessly circling back to check on your code once it has been released into the wild. It’s a habit of checking up on any code that has just been deployed through the lens of the instrumentation you just wrote. Is it working as intended? Are you sure? Does anything else look… weird? This should be as automatic as muscle memory.  Your job is not done when you have merged to master.  It is not done until you have watched it run in the wild, kicked the tires, and made sure it is working as intended.&lt;/p&gt;

&lt;p&gt;This step, when followed regularly, will catch the overwhelming majority of problems in production before users can notice and before they’re big enough to trigger an alert. It also helps you catch those transient hard-to-find problems that will &lt;strong&gt;never&lt;/strong&gt; cause big enough errors to trigger a monitoring alert. Plus it catches them at the optimum time: right after you’ve built it and shipped it, while your original intent is still warm and fresh in your mind, before it’s had the chance to decay or page out for all the other things competing for your attention throughout the day.&lt;/p&gt;

&lt;p&gt;You need to follow that step so often that checking if your code is working as intended via instrumentation becomes muscle memory: it becomes a natural part of what happens every time you deploy code. It feels weird &lt;strong&gt;to not check&lt;/strong&gt; how it’s running. You should have a nagging itch in the back of your mind that won’t simmer down until you close the loop on that deployment by checking to see how your code is doing in prod.&lt;/p&gt;

&lt;h2&gt;&lt;strong&gt;TDD + Prod = ODD&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;That’s what I’ve been calling Observability Driven Development. It’s the coding equivalent of wearing a headlamp to go for a hike in the darkness; anywhere you go, it lights up your feet on the path and two steps ahead of you.&lt;/p&gt;

&lt;p&gt;With TDD, you rely on automated test suites to raise a hand and object if your code seems to be doing something wrong. All of the tests passed? That’s a green light! Your job is done when the branch is merged and tests have passed; that’s all the confidence you need to move on. Deploying that code is probably someone else’s job. Once it’s in prod, bugs will be surfaced by monitoring software (if you’re lucky) or unhappy users (if you’re not), and eventually make their way back to you or your team in the form of tasks or tickets.&lt;/p&gt;

&lt;p&gt;This is a feedback loop that &lt;strong&gt;works&lt;/strong&gt;, more or less, but it is long and slow and leaky. The person peering at your code in prod probably doesn’t know what they’re looking for or looking at, because they don’t have access to your original intent. By the time the bugs wend their way back to you — days, weeks, or months later — you too have probably forgotten a lot of relevant context.&lt;/p&gt;

&lt;p&gt;With ODD, you’ve accepted that you can’t enumerate every failure, so you have far less confidence in the ability of any canned tests to surface behavioral anomalies. But you &lt;strong&gt;do&lt;/strong&gt; have the greatest source of chaos and anomalies in the known universe to learn from: live users. Simply running your service with an open port to production invites chaos enough!&lt;/p&gt;

&lt;p&gt;Your instrumentation doesn’t exist to serve a set of canned questions, it’s there to unlock your active, curious, novel exploration of the ways users are interacting with your systems: the beating heart of observability. If you make it a daily practice to engage with your code in prod, you will not only better serve your users, you will also hold your systems to a higher standard of cleanliness and understandability. You will develop keen technical instincts, you will write better code. You will be a better engineer.&lt;/p&gt;

&lt;p&gt;Start going down the path of Observability Driven Development and follow your curiosity to wherever it leads.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://www.honeycomb.io/resources/guide-achieving-observability/" rel="noopener noreferrer"&gt;Download our Guide to Achieving Observability&lt;/a&gt; and learn more about observability-driven development.&lt;/p&gt;

&lt;p&gt;Experience what Honeycomb can do for your business. Check out &lt;a href="https://www.honeycomb.io/get-a-demo?&amp;amp;utm_source=Devto&amp;amp;utm_Devto=blog&amp;amp;utm_campaign=referral&amp;amp;utm_keyword=%7Bkeyword%7D&amp;amp;utm_content=a-next-step-beyond-test-driven-development"&gt;our short demo&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post was originally &lt;a href="https://thenewstack.io/a-next-step-beyond-test-driven-development/" rel="noopener noreferrer"&gt;featured on TheNewStack on 9 June 2020&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>observability</category>
      <category>instrumentation</category>
      <category>tdd</category>
      <category>production</category>
    </item>
    <item>
      <title>I'm Charity Majors, Ask Me Anything! [FINISHED]</title>
      <dc:creator>Charity Majors</dc:creator>
      <pubDate>Wed, 21 Feb 2018 18:43:46 +0000</pubDate>
      <link>https://dev.to/mipsytipsy/im-charity-majors-ask-me-anything--17np</link>
      <guid>https://dev.to/mipsytipsy/im-charity-majors-ask-me-anything--17np</guid>
      <description>&lt;p&gt;I am the cofounder and accidental CEO of &lt;a href="https://honeycomb.io/" rel="noopener noreferrer"&gt;honeycomb.io&lt;/a&gt;, where we are thinking hard about how to help you debug and understand the complex systems you have now &amp;amp;&amp;amp; the even crazier systems you're going to have soon. I think a lot about observability and how to help software engineers own the code they write without losing their quality of life.  Before this I was an engineering manager at Facebook, built systems at Parse and Second Life, and spent most of my time worrying about databases. I miss being on call.&lt;/p&gt;

</description>
      <category>ama</category>
    </item>
  </channel>
</rss>
