Yeah, Cory, I'm excited to be here in the dude shed with you out in LA. I mean, where to begin? I just... yeah, a little obsessed with bugs. Definitely kind of picked up the itch at the NSA looking for bugs for 10 years.
I don't know, I think finding bugs is, it's like the best way to learn how software works and have a better understanding of systems and it kind of scratches an OCD itch. You know, a little obsessed, but just my entire career, that's sort of been the theme.
And so, you know, after the NSA, I ended up joining a startup called Endgame, where we were building an endpoint security product. And so I got to do more of that and ended up joining Elastic a couple of years later, which was super fun. I loved working there.
But yeah, I think I've always sort of had this nagging obsession with finding bugs and really wanted to find ways to... you know, my background's cybersecurity, but, you know, building software products, you would always have, you know, an outage, an incident. And it was exactly the same experience as looking for a vulnerability as it was to find out the root cause to some outage or some big bug. So definitely scratch that itch as well.
And we were just excited about taking some of the lessons that we learned in the security community in how to build people, build a community, have people work together through tools and take that to the space of reliability problems. And that's kind of how we ended up here.
So, anyway, it's awesome to be with you. I love listening to your podcast and yeah, great to talk to you today.
Yeah, good question. A couple things maybe to talk about there. The first is, yeah, it's, you know, putting up a PR, there's abstraction upon abstraction upon abstraction.
You're new to a code base, it's a big team, there's just... there's a lot of complexity and a lot of hidden complexity that's abstracted away from people. And so I mean, failures and bugs and unexpected interactions are inevitable. And one of the things that... it is overwhelming.
It's an overwhelming experience. And as you build up even more experience as a software developer, these things are still going to happen.
Actually, I just saw someone tweet this today. They were talking about they learned something the hard way. And I think that's a bummer.
I think learning something the hard way is a bummer because someone else somewhere has run into the same problem before. Almost always.
You know, of course you can have bespoke bugs in an application you're writing, but at the same time there's common developer anti patterns that you can introduce into whatever you're writing.
So I think the starting point for us, like a good anchoring point is like, you know, contrast it with, you know, in the security community, anytime there's a new problem, you have this massive community of threat researchers that are posting their blogs where at the end of it they'll talk about, here's how you go and find this problem. But you know, in, in reliability and software bugs, it's like you're on your own, like, good luck, you have to go do the investigation.
And then after like hours or days of looking into it, you know, sometimes you'll stumble across like, "Oh my gosh, someone else has run into this exact same problem, and I'm the one that learned it the hard way. And here's how I could have detected it, here's how I could have mitigated it."
And I think the thing that we get really excited about is like, "How do we just start there?" Like, let's start with a detection.
How do you leverage community knowledge so that other people that have learned it the hard way can give you the benefit of that experience so you don't have to. That's like kind of the starting point.
And then like kind of maybe, and we can get into this, but like, kind of how our approach works is we work with this community of problem detection engineers. We have our own reliability research team where we write rules that kind of codify this knowledge of failure - like misconfigurations, known issues in open source software, or developer patterns, like I said - and takes that detection and couples it with a mitigation in the form of a rule and then actually runs that on the data where the data sits.
So instead of sending data, you know, continuously somewhere else - that can get expensive or unpredictable - we actually bring the rules to the problem and then constantly update those rules from things that the research teams are finding, that the community is finding.
And so that way if some new problem comes up in Apache, Kafka, or using something else, you know, like an ORM for SQL and there's some new issue the community is facing, like you get that intelligence immediately instead of learning about it the hard way hours, days later.
Yeah, yeah. I mean, look, we started off this journey really focused on developer bugs and applications, but as we worked more with customers - we're still doing that - but what we have learned is you're exactly right.
All of these interactions between different systems, Argo, Terraform, Vault, and then all of the sort of infrastructure components just to, you know, connect applications, the message queues and just all of these different things, just these interactions - there's just always something going wrong.
There's always like this chaos that's happening. Sometimes you're able to recover from it and sometimes it's just sort of this lingering thing that eventually is going to become some customer issue.
And I think, as we saw that - and then we would go do research on these problems and see that there were many people that had already run into them, talked about how they fixed it or mitigated it and it's some open source GitHub issue or whatever it was - we got excited about the idea of how do we actually codify that knowledge in the form of intelligence.
We call them common reliability enumerations.So it's a rule that would allow you to basically automatically know about this thing instead of discovering it later. So that, that's kind of where the idea came from.
You know, you asked, something earlier about a, you know, interesting production bug. Actually there's an origin story there too. When I was at Endgame in 2017, I think... I actually ended up blogging about it because again, it's like... it's definitely a high tense moment because it ended up being like a six-day partial outage for a couple of customers at Endgame.
Oh, what an interesting question.
If you've been around building software applications... even for a short amount of time, but long enough... like, you probably already have this anxiety, like you already know where the bodies are buried. Like, "Oh, man, this is. This is not going to be good."
I think the thing that's really interesting is when you can do sort of this... We've built this distributed matching engine that allows you to do things sequences of events, like A followed by B followed by C, and to do correlations on those things - like, "Hey, on the same IP address or host name and then with negative conditions too." So, like, false positives is a thing that you have to kind of pay attention to because if you're telling someone there's a problem and it's not a problem - you do that long enough, they're going to ignore it. And then there's a problem and it gets ignored.
So I say all of that because some of the rules that we have, they'll look for if you run containers inside of certain cloud environments that have a C group configuration that prevents child processes when they crash - like an OOM crash - it prevents the main container from crashing. So you never know this is happening. It's like a silent OOM.
You know, when you see, like, nginx start having worker processes silently OOM because it's trying to process too many ingress objects at the same time, that then produces these 500s for your customers. Like kind of stringing all these things together, I think... that's one of the things that we've seen a couple times where people thought things were going fine and then we would sort of piece together like, "Hey, we see this problem happening in nginx coupled with some stuff that we're seeing in Kubernetes events as well as this application.", like putting those three things together. I think people didn't even know there was a problem with nginx because, again, the container was just running.
So yeah, I think it probably depends on what technology you're using. Like there's also problems with RabbitMQ that don't even produce metrics to trigger alarms. There's some example of this for every technology.
There's probably too many to go through. But yeah, that's a good question.
Yeah, exactly. You know, it's sort of. There's that famous XKCD article about like the query language to solve all query languages. This is the last one.
You know, it's not a new language, it's just YAML. And very simply it's just describing a problem, its severity, its impact, how easy or hard it is to mitigate the actual language.
What is the cause of this problem? What is the impact other people in the community have seen? Like when I saw this problem, this is what would happen.
And also like if there's a mitigation. So like, like you Said the like comet that was buried 30, 30 comments deep in a GitHub issue. Like, here's the how to fix it.
Like how do you surface that up to the top. Yeah. And then coupling that information, like what is this problem for? How do you fix it with the actual way to find it.
So that way when you find it, you're immediately like the Google search with that term that you, you know, you finally found has already been done for you. Like it's right there. You just go do that, that thing and then there's references to all of those results.
So I mean that's at a fundamental level, that's, that's the idea and the way the language actually works or way the. It's YAML.
But the way the description of the problem works is it's just like I said, it's a sequence of events you could also do set, so order doesn't matter. But you're describing these conditions that must be true or not true within a window of time with correlations that can help you find that problem.
And for preq, the open source tool, the data sources that you can run, the rules on are things like standard DIN log data, configuration data, and then the enterprise commercial version has a much richer set of data sources that you can run it on, like process events, kubernetes events, time series data, lots of other data that you might be interested in looking at.
Yeah, that is tight. I remember there was a company I worked for maybe eight or nine years ago, and we had.
We had this debt problem where it was like, the product had existed for, like, 10 years. It was revenue positive from, like, day one. So this company just went and went and went and went and went.
And there was just so many debt, like, just left by the wayside. And it was just. Everything was always in the pursuit of revenue.
And this company was very good at making money, but, like, the code base was just torturous to work with. And we had a really hard time communicating the debt, like, to the team. And we actually built some tooling internally to surface it.
And so, like, we had these, like, comments that you could put in that was like, hey, this is impacted by another piece of debt.
And so you could put in, like, the ticket number, and it would actually build a dashboard, like, relating back all the tickets that were, like, slow and, like, off from their estimates that were tagged with debt. And it would be like, you'd go look at a ticket that was like, hey, this is the debt, and you'd see, like, 48 PRs reference it.
And so it was very visible. And what happened was the product managers started seeing this, how this debt was impacting the features that they were trying to get out.
And now all of a sudden, that empowered us to start prioritizing debt. It was. It was easy to communicate. I feel like this is. This is great for security teams and SREs that are like, we have problems.
We know there's problems. And, yeah, that is a really cool integration.
I mean, first of all, I think having a reproduction, it actually does require a lot of work.
And the good news is that there are many projects out there, like Istio and others that have troubleshooting guides. Through their experience of people finding problems and doing the reproductions because they ran into the problem, they've like taken all that knowledge and put them in these guides. And you can actually write rules from those things fairly quickly, which is kind of cool, but it's still a human doing it.
So I think there's a couple of things that we get really excited about with AI. The first is actually using it in the pipeline of reproductions. So I don't know if you've ever used OpenAI as codex, but it's actually pretty cool.
Like you could watch it check out a Docker container, download your GitHub repository, you give it a task to say, "Hey, I want you to go increase my test coverage to 50%." And it'll go and do that and it'll actually test it and then put up a PR and you can actually watch it do its work.
And I think one of the things that we've been really excited about is leveraging models in a very similar fashion, but for the reproduction. And so I think that's one way that we get... we're excited about the future of scaling a process like this with AI.And that's sort of an important thing that we thought about with things like LLMs.
I think another piece that's really important is the schema is nice. It marries this mitigation, the impact, the references with how to detect it. But sometimes nothing beats a really good story, especially whenever it's concise. And I think LLMs actually do a really good job of summarizing content, especially maybe complex content that's like, "Hey, first this thing happened over here, then this thing happened over there."
So another thing that we've been doing with LLMs is when a CRE is detecting a problem, we'll actually take an LLM and say, "Okay, we'll give us like the couple of sentences that describe the problem and walk us through it step by step, just a couple sentences at a time, and use the actual context of the rule."
And the cool benefit of this is that you're not taking gigs of RabbitMQ data and putting it into an AI model and telling it like, "Hey, tell me what happened." You actually have this intermediate step that's reduced your token count. It's more focused. And so the actual content you're sending to the LLM is much less and it's cheaper and it scales better. You know, your CFO might be happier. So I think that's like the second thing that we get excited about.
And then the third piece is just in rule creation itself. Just like imagine when you're doing a development in Cursor, like the same exact experience applies to writing a CRE.
Oh, gosh, there's many. You know, I mentioned this problem that we had in 2017 with our NATS client in the deadlock.
I actually think that one still sticks out in my mind as one of the most interesting ones. You know, putting aside for a moment the pressure of having like a six day partial outage for some customers, that was not fun.But we just had this mystery of like, why is this happening? We can't explain it. And we ended up going into a lot of... I actually ended up blogging about it, like on a Medium article in 2017. The NAS team, they're great. They ended up like retweeting it and we talked about it.
But I think the reason why that one was so rewarding is because sort of the start of the journey is like, there's no obvious answer to why this is happening. We have no idea what, what's going on here.
And we had to write some extra tools to do some additional introspection into the messages to kind of really hone in on this deadlock. And then once we had the theory, like, we had to test the hypothesis. And so actually testing that out and like seeing the reproduction and then seeing the reproduction go away with the fix was just like... I love a story that begins with, I have no idea how this ends. Like, no clue. Like I was just... no, no idea, but we're going to have to figure it out.
And then when you finally get that answer, especially after it's hard and like grueling and you're learning something new, you're learning new skill sets to actually solve the problem. To me, that's like a really rewarding experience.
And it's honestly why I get so excited about building a community around problem detection because there are many people out there that have gone through the exact same work. And wouldn't it be great if you could benefit from that? I think that's the thing that gets me really excited about it.
It doesn't matter. And I think the other thing is like, if you feel like you start making these assumptions, "Oh, I bet I know it's this. Or it's probably that."
You're wrong. You're probably wrong. And so again, a detective, a good detective is going to just follow the evidence. He or she's going to look at the timeline and pull all this stuff together. And as you're putting the timeline together, different theories can start emerging.
Like, "Okay, well, if I connect these dots in this order, it could be this", or "If I connect these dots, it could be that." So then you start thinking about what is the most likely hypothesis here that would explain how these things are happening?
And you also see holes like, "Oh, we don't know what's going on here. If the hypothesis is this is what's happening, well, we are missing a piece of evidence that would actually make this more likely. So let's go interview that witness." Like, we forgot to interview that, you know, whatever that is.
So I think that, like, that general approach is really important when it comes to hunting down a bug. It's, you're a detective, you're putting together a timeline, you need to go interview witnesses, and you can't make any assumptions.
And once you've collected enough data, you look at it, you see what theories emerge from it. If you have a theory, but the data doesn't support it, you either need to go find more data or eliminate the theory, and then you start testing it.
I don't know. That's a really good question. This is what I love. That's what I love, that is like it, right there.