 Hi, I'm Emily Freeman. I'm the author of DevOps for Dummies and the curator of 97 Things Every Cloud Engineer Should Know. I am thrilled to be here with you all today. I'm really excited to share with you a kind of wild idea, a complete re-imagining of the SDLC. And I wanna be clear, I need your feedback. I want to know what you think of this. You can always find me on Twitter at editingemily. Most of my work centers around DevOps. And I really can't overstate what an impact the concept of DevOps has had on this industry. In many ways, it built on the foundation of agile to become a default, a standard we all reach for in our everyday work. When DevOps surfaced as an idea in 2008, the tech industry was in a vastly different space. AWS was an infancy offering only a handful of services. Azure and GCP didn't exist yet. The majority of companies maintained their own infrastructure. Developers wrote code and relied on sysadmins to deploy new code at scheduled intervals. Sometimes months apart. Container technology hadn't been invented. Applications adhered to a monolithic architecture. Databases were almost exclusively relational and serverless wasn't even a concept. Everything from the application to the engineers was centralized. Our current ecosystem couldn't be more different. Software is still hard. Don't get me wrong. But we continued to find novel solutions to consistently difficult, persistent problems. Now, some of these end up being a sort of rebranding of old ideas, but others are a unique and clever take to abstracting complexity or automating toil or perhaps most important. Rethinking, challenging. The very premises we have accepted as canon for years, if not decades. In the years since DevOps attempted to answer the critical conflict between developers and operations engineers, DevOps has become a catchall term. And there have been a number of derivative works. DevOps has come to mean 5,000 different things to 5,000 different people. For some, it can be distilled to continuous integration and continuous delivery or CI CD. For others, it's simply deploying code more frequently, perhaps adding a smattering of tests. For others still, it's organizational. They've added a platform team, perhaps even a questionably named DevOps team or have created an engineering structure that focuses on a separation of concerns, leaving feature teams to manage the development, deployment, security and maintenance of their siloed services. Whatever the interpretation, what's important is that there isn't a universally accepted standard of what DevOps is or what it looks like in execution. It's a philosophy more than anything else. A framework, people can utilize to configure and customize their specific circumstances to modern development practices. The characteristic of DevOps that I think we can all agree on though, is that it attempted to capture the challenges of the entire software development process. It's that broad umbrella, that holistic view that I think we need to breathe life into again. The challenge we face is that DevOps is an increasingly outmoded solution to a previous problem. Developers now face cultural and technical challenges far greater than how to more quickly deploy a monolithic application. Cloud native is the future, the next collection of default development decisions and one the DevOps story can't absorb in its current form. I believe the era of DevOps is waning. And in this moment, as the sun sets on DevOps, we have a unique opportunity to rethink, rebuild, replatform even. Now I don't have a crystal ball that would be very handy. I'm not completely certain what the next decade of tech looks like. And I can't write this story alone, I need you. But I have some ideas that can get the conversation started. I believe to build on what was, we have to throw away assumptions that we've taken for granted all this time. In order to move forward, we must first step back. The software or systems development lifecycle, what we call the SDLC, has been in use since the 1960s. And it's remained more or less the same since before color television and the touchstone phone. Over the last 60 or so odd years, we've made tweaks, slight adjustments, massaged it. The stages or steps are always a little different with agile and then DevOps, we sort of looped it into a circle and then an infinity loop. We've added pretty colors. But the SDLC is more or less the same. And it has become an assumption. We don't even think about it anymore. Universally adopted constructs like the SDLC have an unspoken permanence. They feel as if they have always been and always will be. I think the impact of that is even more potent if you were born after a construct was popularized. Nearly everything around us is a construct, a model, an artifact of a human idea. The chair you're sitting in, the desk you work at, the mug from which you drink coffee, or sometimes wine, buildings, toilets, plumbing, roads, cars, art, computers, everything. The SDLC is a remnant, an artifact of a previous era. And I think we should throw it away or perhaps more accurately, replace it. Replace it with something that better reflects the actual nature of our work. A linear, single-threaded model designed for the manufacture of material goods cannot possibly capture the distributed complexity of modern socio-technical systems. It just can't. And these two ideas aren't mutually exclusive that the SDLC was industry-changing, valuable, and extraordinarily impactful. And that it's time for something new. I believe we are strong enough to hold these two ideas at the same time showing respect for the past while envisioning the future. Now, I don't know about you. I've never had a software project go smoothly in one go. No matter how small, even if I'm the only person working on it and committing directly to master, software development is chaos. It's a study in entropy, and it is not getting any more simple. The model with which we think and talk about software development must capture the multi-threaded, non-sequential nature of our work. It should embody the roles engineers take on and the considerations they make along the way. It should build on the foundations of Agile and DevOps and represent the iterative nature of continuous innovation. Now, when I was thinking about this, I was inspired by ideas like extreme programming and the spiral model. I wanted something that would have layers, threads even, a way of visually representing multiple processes happening in parallel. And what I settled on is the revolution model. I believe the visualization of revolution is capable of capturing the pivotal moments of any software scenario. And I'm going to dive into all the discrete elements, but I wanna give you a moment to have a first impression, to absorb my idea. I call it revolution because, well, for one, it revolves. Its circular shape reflects the continuous and iterative nature of our work, but also because it is revolutionary. I am challenging a 60-year-old model that is embedded into our daily language. I don't expect Gartner to build a magic quadrant around this tomorrow, but that would be super cool and you should call me. My mission with this is to challenge the status quo, to create a model that I think more accurately reflects the complexity of modern, cloud-native software development. The revolution model is constructed of five concentric circles, describing the critical roles of software development, architecting, development, automating, deploying and operating. Intersecting each loop are six spokes that describe the production considerations every engineer has to consider throughout any engineering work. And that's testability, security, reliability, observability, flexibility and scalability. The considerations listed are not all-encompassing. There are, of course, things not explicitly included. I figured if I put 20 spokes, some of us, including myself, might feel a little overwhelmed. So let's dive into each element in this model. We have long-used personas as the default way to divide audiences and tailor messages to group people. Every company in the world right now is repeating the mantra of developers, developers, developers. The personas have always bugged me a bit because this approach typically either oversimplifies someone's career or needlessly complicates it. Few people fit cleanly and completely into persona-based buckets like developers and operations anymore. The lines have gotten fuzzy. On the other hand, I don't think we need to specifically tailor messages as to call out the difference between a DevOps engineer and a released engineer or a security administrator versus a security engineer, but perhaps most critically, I believe personas are immutable. A persona is wholly dependent on how someone identifies themselves. It's intrinsic, not extrinsic. Their titles may change, their jobs may differ, but they're probably still selecting the same persona on that ubiquitous dropdown we all have to choose from when registering for an event. Probably this one too. I was a developer and I will always identify as a developer despite doing a ton of work in areas like DevOps and AIOps and DevRel. In my heart, I'm a developer. I think about problems from that perspective first. It influences my thinking and my approach. Roles are very different. Roles are temporary, inconsistent, constantly fluctuating. If I were an actress, the parts I would play would be lengthy and varied, but the persona I would identify as would remain an actress, an artist, a thespian. Your work isn't confined to a single set of skills. It may have been a decade ago, but it is not today. In any given week or sprint, you may play the role of an architect thinking about how to design a feature or service. A developer, building out code or fixing a bug, an automation engineer, looking at how to improve manual processes we often refer to as TOIL, a release engineer, deploying code to different environments or releasing it to customers or an operations engineer, ensuring an application functions in consistent, expected ways. And no matter what role we play, we have to consider a number of issues. The first is testability. All software systems require testing to assure architects that designs work, developers that code works, operators that infrastructure is running as expected and engineers of all disciplines that code changes won't bring down the whole system. Testing in its many forms is what enables systems to be durable and have longevity. It's what reassures engineers that changes won't impact current functionality. A system without tests is a disaster waiting to happen, which is why testability is first among equals at this particular round table. Security is everyone's responsibility, but if you understand how to design and execute secure systems, I struggle with this. Security incidents, for the most part, are high-impact, low-probability events. The really big disasters, the ones that end up on the news and get us all free credit reporting for a year, they don't happen super frequently. And then goodness, because you know that there are endless small vulnerabilities lurking in our systems. Security is something we all know we should dedicate time to, but often don't make time for. And let's be honest, it's hard and complicated and a little scary. DevSecOps, the first derivative of DevOps asked engineers to move security left. This approach meant security was a consideration early in the process, not something that would block a release at the last moment. This is also the consideration under which I'm putting compliance and governance. While not perfectly aligned, I figure all the things you have to call lawyers for should just live together. I'm kidding, but in all seriousness, these three concepts are really about risk management. Identity, data, authorization, it doesn't really matter what specific issue you're speaking about. The question is who has access to what, when, and how? And that is everyone's responsibility at every stage. Site reliability engineering or SRE is a discipline, a job, an approach for good reason. It is absolutely critical that applications and services work as expected most of the time. That said, availability is often mistakenly treated as a synonym for reliability. Instead, it's a single aspect of the concept. If a system is available, but customer data is inaccurate or out of sync, the system is not reliable. Reliability has five key components. Availability, latency, throughput, fidelity, and durability. Reliability is the end result, but resiliency for me is the journey. The action engineers can take to improve reliability. Observability is the ability to have insight into an application or system. It's the combination of telemetry and monitoring and alerting available to engineers and leadership. There's an aspect of observability that overlaps with reliability. But the purpose of observability isn't just to maintain a reliable system, though that is of course important. It is the capacity for engineers working on a system to have visibility into the inner workings of that system. The concept of observability actually originates in linear dynamic systems. It's defined as how well internal states of a system can be understood based on information about its external outputs. It is critical when companies move systems to the cloud or utilize managed services that they don't lose visibility and confidence in their systems. The shared responsibility model of cloud storage, compute, and managed services require that engineering teams be able to quickly be alerted to identify and remediate issues as they arise. Flexible systems are capable of adapting to meet the ever-changing needs of the customer in the market segment. Flexible code bases absorb new code smoothly, embody a clean separation of concerns, are partitioned into small components or classes, and architected to enable the now as well as the next. In flexible systems, change dependencies are reduced or eliminated. Database schemas accommodate change well. Components communicate via a standardized and well-documented API. The only thing constant in our industry is change. And every role we play, creating flexibility and solutions that can be flexible, that will grow as the applications grow, is absolutely critical. Finally, scalability. Scalability refers to more than a system's ability to scale for additional load. It implies growth. Scalability in the revolution model carries the continuous innovation of a team and the byproducts of that growth within a system. For me, scalability is the most human of the considerations. It requires each of us in our various roles to consider everyone around us. Our customers who use the system or rely on its services, our colleagues, current and future, with whom we collaborate, and even our future selves. Software development isn't a straight line, nor is it a perfect loop. It is an ever-changing, complex dance. There are twirls and pivots and difficult spins, forward and backward engineers move in parallel, creating truly magnificent pieces of art. We need a modern model for this modern era. And I believe this is just the revolution to get us started. Thank you so much for having me.