Yeah, I guess it sort of becomes mainstream, is what happens. And so your post, "DevOps is Bullshit", I had a lot of people text me about it.
I guess they're like, “Gene, what do you think?” And I thought, it's part of the evolution of the market. And I guess if you were to ask me kind of what did I think? I think it started from the very beginning about, you know, what is the Venn diagram between DevOps and Agile and Infrastructure as Code and Platform Engineering? And we can argue till the cows come home about what's the subset of the other? To what extent does it overlap? Is it disjoint? And I think so many people believe that DevOps is really about what happens when you have two silos that don't communicate enough and when they don't, you end up with catastrophic outcomes that are not good for Dev, not good for Ops, not good for the organization that we serve.
The state of DevOps research, which remains one of the things I'm most professionally proud of, that's the work that I did with Jez Humble and Dr. Nicole Forsgren that went into the Accelerate book that said, “You know what? It's not just a banner or a poster on the wall.” It's actually made up of cultural norms and technical practices and architectural practices that enable independence of action that enable fast feedback. And you know, no matter what sort of system you work in, you want independence of action. You want fast feedback on your work and you want an environment where it’s safe to tell bad news. In the context of platform engineering to make developers more productive or in a service, you know, in thousands of services… you know, I think they're all really the same. And so for me, I just find myself having a lot of equanimity about what you call it as long as we achieve a sense of shared goals and a general agreement on a direction that's better than others.
Anyway, so what happened? I'm sorry. That's a long way of my point of view. What happened?
So one of the things I got to do from two thousand nineteen to two thousand twenty-two is to work with Dr. Steven Spear. So he was the author of the famous nineteen ninety-nine paper called “Decoding the DNA of the Toyota Production System”. I remember reading that in two thousand one and thinking that this is the most amazing thing I've ever read. So I took an executive education workshop from him in two thousand fourteen. We wrote the Wiring the Winning Organization book together. And the question we set out to solve, “Like what's in common between DevOps and Agile and manufacturing?” You would think we have nothing to talk about at all, right? Because what we have in common would be very small. I come from software, he comes from hardware. Turns out like the papers we've read, the books we've read, the research we admire were almost all the same. And so, you know, that's what we really tried to do in that book. But there was one talk that he gave at the conference I run - It was called the DevOps Enterprise Summit, now called the Enterprise Technology Leadership Summit. We're on year number 11 - and he described what happened in Lean, where before it was all about continuous learning, continuous experimentation, and it turned into a set of tools. Like the three S's, the Kanban, the Andon cord.
So what seems to happen in any movement is that in the beginning, it's all about the research problem and then by the end it's all about the tools.
And so I think some of that also happens, right? And I think it’s just a part of any industry succeeding, right? And so if I were to choose that route versus it being irrelevant and facing obscurity, I would definitely choose the first, right?
Yeah, great question. I think that's kind of the phenomena you see in any movement, right? You have a name, you have an ideal, right? But then it gets sort of cargo-cultured and it's easy to become cynical about that.
But I don't find myself cynical about it at all because we know what the goal is, right? The goal is, you don't want CI/CD for its own sake, you want it so that you can deliver feedback to developers in the daily work. And you want sort of the product build, test and operations to happen within seconds, worst case minutes… hours, if you really need to. And you can say that's a very tactical issue that only the “DevOps infrastructure engineering people” have to deal with. But no, that actually predicts how quickly you can give feedback to developers in their daily work, because you want to have them learn about mistakes within minutes not weeks, months or quarters.
So what's the measurement? It’s the code deployment lead time. So the goal is not CI/CD, the goal is to have fast feedback as measured by… one of the measures is fast code deployment lead times - so between build, integrate, test, deploy, and customers hopefully saying thank you. The other one I think is independence of action. I love the… famously right, Amazon… They went for an organization that were in the early days, in the late 90s, doing hundreds of deployments a year. And then as the product complexity grew, as they went from two products to 35 different product categories, it went to tens of deployments per year. Most deployments didn't finish. What's interesting is you have thousands of engineers and even small changes required weeks or months because you have to communicate, coordinate, synchronize, prioritize, blah, blah, blah… not with just your team but potentially every other engineer on the team.
Everyone knows the story, right? But what I learned working with Steve Spear is that the term for that is that no one had independence of action. That no one could do what they wanted to without having to communicate, coordinate with everybody else in the organization. And so of course, the story goes… the famous Jeff Bezos memo, famously chronicled by Steve Yegge, who I've been talking with every day for the last year on the Vibe Coding book… I mean, it shows that the effect was to recreate hard modular boundaries in the system to regain independence of action. So every team could build, test and deploy on their own. And that's how you go from, you know, tens of deployments a year to 136,000 deployments per day.
And I think it's just a magnificent example of what it is to really unleash and liberate teams to do what they want and need to do. And by the way, just real quick and just to show how nuanced the problem can be… you have Amazon video who kind of went the opposite direction and said, “You know what, we found that we kind of over partitioned the system and now we were spending all our time basically in transport.” Copying data from one bucket to another, right? And so, they glued it back together into a monolith and they reduced costs by 90%.
Figuring out how to partition systems, I think is a job of the leader. None of it is easy. DevOps is certainly maybe a part of the answer, but more importantly, are you doing the hard thinking to figure out what do you need to do to achieve the system or the goals?
Yeah, so we're targeting developers. You mentioned the famous Allspaw/Hammond Flickr presentation where they shocked the world by describing how they're doing 10 deploys a day every day, right? And you and I were probably part of the people who were fainting in the aisles, just thinking that this is like unthinkable, irresponsible, reckless, maybe even immoral, right? I mean, it was just crazy, right? Because most of the world is doing a deploy, maybe every quarter, probably more likely once a year, right?
We now know from the state of DevOps research is that the only way to be reliable is to do smaller deployments more frequently. And so I think the equivalent right now is just watching Steve Yegge work. So he's my co-author. I mean, he's the person who chronicled the famous Jeff Bezos memo - Thou shalt only communicate by APIs. He spent 20 years at Amazon and then Google. He's routinely generating 12,000 lines of code per day. That's his commit rate. That's production ready. This is the 35-year-old game that he's been working on called Wyvern. And, you know, to get to 12,000 lines of production ready code, you know, he's reviewing 100,000 lines. So just like in the writing game, right? The practices are so isomorphically identical, right? Seinfeld said, “Comedy is a game of tonnage.” and I think writing is too.
So the 70 million tokens is really about creating candidate drafts. So for the three to five paragraphs that make it in, we reviewed 30 pages. And so for Steve Yegge to be committing 12,000 lines of code, he's reviewing 100,000 lines of code. And so I think it turns the coding into a search problem. Just like comedy and writing is often a search problem. And so the goal is I think… we define vibe coding as anything besides writing code by hand.
And so Dr. Eric Meyer, he was part of the Visual Basic Movement, he owned the C# Initiative, he created the Hack programming language at Facebook and Meta…
So the compiled PHP… I'm sorry. No, that's HipHop… Hack was the strongly typed version of PHP that any PHP programmer could use. So he said, “The days of writing code by hand are coming to an end.”
I mean, he's been such an inspirational figure, right? And for someone who, I would say, would rank among the top 10 programming language designers on the planet… for him to say that, right? After spending his entire career in programming languages and theorem proofs and so forth, and all the work he did on Haskell, to say like, ”You know, coding by hand is probably not going to be a thing in five to seven years.” I mean, it just resonates so deeply with me.
Sorry for expounding on this, but I just found like, it's just so addictive, so fun. It makes us work faster. You can do things alone. You can be more ambitious about the things you can build. And you can explore so many more options and do things that you never could have done before, right?
For me, it was like struggling to move things to say GitHub actions, without having to learn, you know, it's obscure YAML syntax. It was just incredible. And that was like an hour's worth of work. That would have been three, four days, especially with the feedback cycle so slow.
Trello, yeah, absolutely. I think it came out in 2013. So it's like 12 years.
So I've written so many programs that like give me a different front end and recently I wrote a tool to basically say, “All right, take the article and summarize it. If there's a YouTube video, download transcript, summarize it. And then find out which part of the book would just be a potentially good place to put it as a citation of evidence.”
So I couldn't get… I had to use Trello attachments API for the first time and I couldn't get it to work. And so 45 minutes in, I'm in Claude Code and I'm copying and pasting and like, “Does it work?” And it would tell me what to type, right? And I became the bottleneck and I'm just so tired of copying and pasting from one window to another. And finally out of frustration, I said, “You run cURL. I'm not going to run it for you, you run cURLs.” It’s like, “I can't.” It's like, “Okay, write a program that does what curl does.” 45 seconds later, you know, it tells me, “Oh, I got it working. I tried six different iterations and I got it working because I'm using the OAuth header pattern.” Whatever that is, right? And so like for me, that was life changing.
To actually have it see what it did, get feedback on its own work, and be able to iterate on itself. I mean, does that change like what programming is? Anytime you have like an API you just like iterate until it works and you don't really care in most cases, like what shape the API is.
I did it again for Google docs where I'm trying to add text into this thing, right? I can't get the shape of the JSON right. It's like, “Make it work.”
Incredible. Like who would want to go back to like iterating by hand? I remember the first time I saw a correct Kubernetes YAML file, like a deployment file, and it was so different than what my mental model of what correct YAML files look like.
Oh, man. Like, there's this entire category of problems that we just shouldn't be working on anymore, right?
Yeah, for sure. There was one that I saw in the past few days. At my day job, we've been doing a vast amount of refactoring. We're actually going through a very similar Amazon video scenario.
We're using a ton of cloud services and we're collapsing it all back into our monolith. And it's kind of around like, we have customers that want to self-host our product and it's all built on top of AWS stuff.
But we have this one test that like rears its head every once in a while and it's flaky. I swear to God it only shows up when something has to get out right now.
It's like, “I'm unrelated to what's going on, but I just want to remind you that I'm here.” And it'll just fail 800 times in a row. And then if you ever sit down to try to fix it this test never flakes. And so I spent hours looking at it yesterday. I was like, “I'm gonna sit down, I'm gonna find this thing, I'm gonna fix this one flaky test that just like blows up our builds every once in a while.”
And it's a very important test. It never happens in prod, the scenario that crops up. I cannot find… for the life of me, I cannot figure out what this is. I'm staring at it for hours. I've got OTel traces on it, coming up with nothing. I've got Logger output and our tests just dumping stuff. Like, “What is going on here?” And then finally I was like, “Okay, like I've got tests for all this stuff. Like the test is flaky.” And I pretty much just like opened up Cursor, I put the three files - there's the API where it comes in, there's the business logic, and there's where I write it to the database - like, it has to happen in here, I can see the path this goes. AI was like… there's this one lazy part where we just decided not to use a struct, we were just using a random map… and lo and behold, in my test, there's this one case that it goes through where I misspelled one of the keys in the map.
And it was just like, dude, the amount of builds that have failed because of this. It's like this random chance in the map where… it's like we randomized something in the test. I'm looking at it like, “What do mean I misspelled them? I spelled right.” And it's one of these words that I misspell all the time. And it was my misspelling. I’m like, “Argh!” But it was just like, I literally spent hours and AI was just like, “Yo, you don't know how to spell.”
This has been in the code base for like nine months, 12 months, just randomly it will fail a build. It's like, okay, that's cool. Thanks AI.
No, totally, right? Which is why it requires just so much vigilance. And the problem is that I think it was like 35 commits after the fact a colleague would go, “What happened to all the tests?”
So just being kind of aware of like… even just concretizing that has made me a better prompter. Even just kind of pointing out that when you compare the conversational prompting you use kind of in vibe coding versus prompt engineering… just even making the analogy that the prompts when you're vibe coding are more like texting a friend who's trying to help you versus like prompt engineering is like emailing your lawyer who's actually suing you.
Everything is fraught with consequences, needs to be tested, I mean, it's rigorous engineering on its own.
And then we kind of break down like here are the practices you need in your inner loop, middle loop and outer loop to prevent detecting correct problems. I mean, it's just been… I can't tell you how much I learned in this. And if you don't do this, you end up with these… we came up with like four or five examples of when vibe coding goes wrong. You know, creating content code bases that, basically you’ve lost all modularity and it's incomprehensible, impossible to understand, let alone… impossible to change, right?
Which actually happened to me in his workbench tool I used. What can go wrong when… you know, Steve found himself with 80% of his tests deleted silently, discovering weeks later. Just being aware of like how AI will backdoor every… you know, for anything you're trying to build, there's an infinite solution space of how to do it and AI will find the weirdest ways to implement your solution. Just to get concrete, for this writer's workbench I wrote… I just decided to write a spinner status window in a swing screen - just the easiest way I could, you know, figure out how to do it - and left to its own devices, it will create new windows, it will write directly to the screen, right? And I'm just trying to tell it, “Use only the five functions I gave you. Don't open a window. Don't write directly to the thing. I need you to follow these functions so that I can take a screenshot of it.”
Anyway, so just being hyper aware of how you have to constrain the solution space to get the outcomes that you want. I mean it's just… what an amazing time to be alive. Right, Cory?
Yeah, the read someone else's mind, I think, has another interesting implication. And that is, I think, no matter what your organization size, there's… you know, calling it legacy code is one thing, but there's code that you're not familiar with. It's funny, like when we think about software, from Node.js to Erlang to Ruby to C, like you can say that there's these different programming languages for their feature sake. But I feel like a lot of programming languages exist because we want to express our ideas in more interesting ways. But at the end of the day, to a computer, our programming languages don't matter at all. To it, it's zeros, it's zeros, it's ones.
So looking at somebody else's old code… when I write code and when I write my tests, I generally think… How is somebody else who has zero familiarity with this part (whether they're a new employee or this is part of the stack that's been stabilized, become legacy and you don't touch very often)... how can I write my code in a way that's not just documentation, but like the code helps explain what I'm doing?
And what I’ve found the AI is great at is just giving you a TLDR - like ELI5 on a section of code. Not even like the whole code base. Like I’ll pop open a module, you know, maybe it's like a domain function and I'm like, “What is the business purpose of this and what quirks are there to how it works?” Having it spelled out - this line is doing this, and the reason it does this is…, I can see that there's some debt over here - It's just like, oh my gosh, this is so much better than staring at a block of code, drawing a picture, trying to reason about how it's all connected together. If I had a HUD that would just do that on code I haven't seen in a while, it's like, “Oh, this would be fantastic.”
I chose Clojure. That's also on top of the JVM. At first I felt like, am I going to be at a disadvantage because there's just a lot less training data on Clojure code? I have not found that to be a problem, but you know, it's not unreasonable to think that, you know, maybe you choose languages based on just how much training data there is on it. That's maybe one thing.
The other thing I just found really exciting… and this reminds me of the “[blank] is bullshit” thing… is just how in the beginning people react to kind of these amazing new technologies. Whether it's cloud, DevOps, CI/CD…
One of people who was reading the book, he described how (I have his permission to share the story, just don't necessarily want to make it worse) he had this open source project that he was using that he wanted it to do a certain thing. And of course the open source project owner said, “Don't have any plans to do it. PR is welcome.” He doesn't know Python. So, you know, for the first time, he decides, “All right, let's see if we can create that functionality.” And it's like a 20 line diff. He submits it, has it merged. He can now solve his problem. And then he writes somewhere that he used AI to do it. And suddenly someone outs him. Says, “You should have told the maintainer or something and blah, blah, blah, blah...” In the pull request, he actually force pushed the history… he took his change, but like erased kind of the fact that it was him who contributed to it.
What's so interesting is that - What was the lightning rod? What was the vitriol? It's like, “Oh, he didn't even know Python. And yet he had the audacity to offer this PR that worked.” And it's like, “Oh, should you or should you not tell the maintainer?” It was like, “Oh my gosh, I just never…”, I was just… It was mind-expanding because never could I have conceived a world where you would get yelled at for using AI to help solve a problem.
So the second thing you were talking about - Clojure, Elixir, like the lack of big training sets. Like I see that crop up in Elixir from time to time. I know some other Elixir folks listen to the podcast, I'm not sure if they've had the same issue. What I actually see is like there was some stuff that changed pretty significantly between a couple different versions. It's very much like, “Hey, it's just treating it like it's an older version.” It's like the code works but it's not like idiomatic Elixir. So you'll see stuff like that and it's like, “Eh, it works.” And my linter or formatter will usually pick it up, I see them fight over it a little bit.
But the thing that I see more with lack of training data, and this is something that I'm thinking about quite often, is we have tons of training data on software.
Now, we don't know why. We haven't labeled this stuff. Something crawled GitHub and it's like, “Oh, this is the way it is.” And it's like, “Well, why is it that way?” We don't have ADRs for every single like.. It’s like why? So you get some crappy code sometimes. Like lowest common denominator, maybe the average, is what we're getting into these models. Which is great, if it works. We can always make the code better and read better for humans. What matters to me on the first pass is that the test passes.
I can make the code look better through any other tool. And as AI gets better, we do more linting, it gets trained on the linted code, the code gets better. But the thing that I get asked a lot as a business owner in this space is like, “Oh, how is AI assisting DevOps? Is it going to take the jobs away from operations engineers and sysadmins?”
The crazy thing is we're not training AI on prod. We don't train it on our architecture diagrams, the metrics, the usage of these systems. I mean, there's people that are starting to do this within their own orgs, but there's not an LLM that takes into account production. And so like, I've actually seen where this is harder - it's harder to train, it's harder to like use it day in, day out. And I was trying to respond to a Reddit post this morning, because I saw somebody's like, “How are you all using this in DevOps?” And I was like, “Well, I do Dev and Ops. I use it more on my Dev side, actually very rarely use it on the ops side. Maybe I'll use it for generating some OpenTofu code.” But like, it generated the code, it's still not thinking about my use case that I have. That's the hard part.
It's very easy for it to be like, “Some Terraform? This is what it looks like.” It's like, “Yes, but um… does that deal with the scale? Does that deal with cross-region stuff?” There's so much reality to production that's not in these models.
You know, as somebody who's working in this space with like the Vibe Coding book, somebody who's researched and done a ton of work on the Ops side, like I would love to know, are you seeing people that are starting to address this? Is this still one of those kind of unsolved problems in this space? And do you think there's a reality to having an LLM that's trained on production systems?