I know, right? Scandalous. And it was sitting next to your desk. It was this big, like, mini fridge. And you could tell you were like doing something wrong, like you're out of memory, because it was like making all these grindy sounds. You're like, "Oh man, those disks are going. We must be swapping..." And that was like, you had this like kind of intuitive physical feel for the system.
We moved them out to data centers and things like that, but we kept track of like, you know, that stuff I was talking about before. It's like, "Oh, well, did we use all the CPU? Did the machine die? Like, is it out of memory?" Just this like... really basics, kind of this like system monitoring. And it didn't tell you anything about the applications you were running on it.
Like we always said, you know, to an Ops person, an application is just some crap the software team gives you that like fills up your perfectly good servers. You're like, "I bought this beautiful machine. It had all this memory, then you went and ate it." And it's just like, it converts it to heat. And that was kind of the world we lived in for a really long time.
And when New Relic was founded, that was the way a lot of companies were. Where monitoring to them was, "Oh, you know, I have, you know, WhatsApp gold. I can tell that the machine pings or, you know, I can, you know, run Nagios and see I'm not out of memory yet." But none of that told you the why, it just told you the final result. It was very infrastructural.
So our big idea was to go above that and say, "Well, let's talk about why. What's your application doing wrong?" And Ruby on Rails actually made this really easy and special because Rails is very opinionated and it wasn't just, "Oh, here's some code that's running." Like, no, no, no, you know, it's a web application, it's got models, controllers and views. It has actions inside the controllers. Here's how the models are organized. It's a very small ecosystem at first. And that super structured approach meant that we could do something magic.
You could go in and the New Relic gem just went and instrumented. It said, "Well, I know where your code's going to be because you're using active records. So here's your database stuff. Oh, you're using... here's the HTTP stuff." We know what to instrument and we know what it means, because those strong conventions gave it meaning. But of course the Rails part of the industry is like this big.
And so as we expanded over the years, we went out to Java, we went to Python, we went to PHP, we went to .Net, Node, like this whole ecosystem, we had to shift that view because those opinions weren't consistent anymore. As soon as we went to Java, there's no single Java web framework, there's no single Java way of doing things. There's a million ways to do things in Java.
So on top of those strong opinions in the early product, we had to start building this like flexibility. It'd be like, "Well, we're going to do our best to figure out how your application works. But we're probably going to miss some stuff, and you're going to have to help us along." And with each new layer, we saw that ecosystem expand further and further.
And today, with like, you know, open source, like we would have been... if we did the same kind of work we did, you know, when the company was founded 18 years ago, we'd be buried. I mean, there's no way to keep up with that instrumentation. And so partway through that journey, we actually shifted gears to open telemetry for this reason. We said, "You know what? The person who knows the most about this framework is the framework author. Let the framework author just like, put OTel instrumentation in it. Let the customers who have stuff, let them put OTel into it, and then we'll just read what they have to say about that."
And that line, as you see, is shifted as to what do we do that's valuable. And this isn't just New Relic. This is like, what do all the companies in the industry do? 18 years ago, you had to convince people that observability was different than monitoring, that you had to look inside applications, you had to build an active record instrumentation, an active, like, you know, it's like whatever cable instrumentation. Like, you had to build those different instrumentation systems in there. Now all that's done. Everyone's instrumented everything. Like, every piece of software you pick up has instrumentation.
That war was won, and it's not interesting anymore. So then we entered this world where you're like, "Okay, well, where are you going to put all that data as each system starts putting the data in?" And we had to figure out... you know, suddenly there's a lot of data, there's petabytes a month coming in of data that we have to find a home for. And so that was that like... I would say, you know, we hit that earlier than most companies just because of the scale we operate at. But everyone's hit this. Everyone said, "Oh, I've got a lot of data now I need a place to put it. I have to be able to query it, have to answer those questions."
But today, even that's not really valuable anymore because now I have so much data in one place, and I can ask it any question I want, and I don't know what to ask it. And I think that that's this really weird moment that we're in. You know, you talk about the change from slices to today in the cloud, or like, you know, I'm cracking about servers and their disks swapping. But like now, I don't know where my server is. I don't even know what instance my stuff is running on. It's like software just runs out there in the universe somewhere. And in some ways that's fabulous because it lets me do so much without having to like, you know, get my knuckles all bloodied. But in other ways it's super weird because I don't have access to it. I can't figure out what's going on with any of my traditional tools.
And I see that back and forth of complexity. It's like every time we abstract stuff away, the complexity doesn't go entirely away and you lose some of your capabilities.
I think it was configuring it, right? And like nowadays, like, it is interesting.
We use OTel pretty heavily in our product and actually I would love to talk a bit about how teams can start adopting it because I think we have a pretty novel way of adopting OTel. Like, we do it, we do OTel driven development internally. Very, very buzzwordy buzzword.
But like, that's kind of how we figure out, like, where to instrument, like, where to kind of put facts. Because as somebody who's writing tests, if I don't understand it during tests, I'm sure as shit not going to understand it in production, right? And so like seeing something fail in Prod it's like, "Oh, I didn't put any attributes or anything on that."
So that's like kind of like how we drive through doing it, but I still see like so many teams today where they aren't doing instrumentation. Like, even when the frameworks have a tie in for OTel, it's like they might have that first little bit, right? It's like, okay, the actions are dispatching and they show up in OTel or whatever, but the rest of it feels so hard because we don't have that magic.
How do you see teams when they're ready for instrumentation? And I'd love to know when you think teams are ready for instrumentation. But how do you see them start to kind of bite off that first big chunk of being able to get in, get this instrumentation and get in all of their practices around attributes, et cetera? Like how they want to tag stuff. How do you see teams go about that successfully? I've seen so many start in fits and dizzy spells. They get something, like, "Eh whatever, it's too hard to instrument." I would love to know what you're seeing there.
My mind's in two directions on this. And so one is, I mean, you talk about instrumentation, it's funny you talked about doing it. It's like, this is like a test driven development thing.
This is that same set of skills of 'It's not writing the software that's necessarily hard. It's like thinking about the software.' And part of the analogy from classical unit and functional testing into observability is really tight.
Observability is the equivalent of testing once you're live. If you've designed your software well and you've built your instrumentation, you kind of have an observability strategy. Then when you're live in production, you'll know what is happening and be like, "Oh yeah, it's doing what it's supposed to do," or "It's not doing what it's supposed to do." And when something unexpected happens, then you'll be able to react to it and be like, "Oh, yeah, that's what that means."
And so it's tricky because it takes a lot of judgment to figure out what to put in there.
And so what we see generally... obviously our engineers, we've got a lot of instrumentation experts, a lot of observability experts at New Relic and, you know, and they've got great access to a great tool, so they have a lot of fun with it... But we see the teams that are successful are teams who, before you make a change, you think about, "How am I going to know whether this change was successful in production?" You put in the instrumentation, you get the baseline, then you make your change, and then you see the confirm that, like, "Yep, it's doing what it's supposed to do. We've reduced the memory footprint on this one path. We've added throughput here without changing latency there." Like those types of things.
And it could be a technical change or it could be a business change. Like, "Oh, well, I really felt like this navigation path was crap and so I put a bigger button on it." All right, "Well, did anybody click on it?" These are all that same type of like, I'm making a hypothesis, I'm doing the work, whether it's a test or instrumentation, I'm baselining, I'm confirming my hypothesis. And you kind of go through that whole method for developing it.
So now what I'm going to say is.. I don't know, so we should check the watch to see how many minutes we got in without saying the letters A and I next to each other... When we talk about, you know, what are the strengths of AI, we often say AI is good at things that any basically experienced engineer could do. Like, you don't think about it too much. It's kind of automatic for you. Doesn't require like really grounding your gears. But you know, if someone's brand new, they don't know how to do it.
I actually think instrumentation might be one of these. And so we've done a bunch of experiments with this, trying to get instrumentation into code generation. Because when you're telling your coding agent, "Oh, hey, I need you to add a new feature to my app that's going to allow cats to post their, like, you know, food favorites on here." It's not enough to just generate the code. If you want to make production ready code, any reasonably experienced engineer is going to have some tests, but they're also going to have some instrumentation. They're going to say, "Oh, okay, well, I'm adding in my, like, whatever, my cat food feature. So it's like, you know, we need to just add in a little custom attribute that says which cat it was and what their choice was and that kind of thing."
I think that there's a huge opportunity for teaching our coding agents to build production software the same way we learned to do it. Which is make a plan, make a test, make instrumentation, test it in production. And today nobody's really pushing on this. Like, OpenTelemetry is absolutely a lever that we can be pulling more on those coding agents.
Yeah, no, totally. Because in the Dev teams it's like, "What you told us to instrument and now you're complaining."
I think that the future... you know, I'll put on my, like, you know, it's like great Karnak, like, prognostication helmet... we've got to move to a more dynamic system where you bring in that ability of those AI systems to just kind of work tirelessly and say, "Oh, well, you know, here's a bunch of data that nobody cares about. Let's store it cheaply." Like, maybe it's in fact, "So nobody cares about it. Let's not store it at all." But when I see this, "That's an interesting question, I wish I had more information about it. Let's go and let's trigger instrumentation. Let's do some of this observability work on the fly."
You can never do everything on the fly because... long ago I heard some wag saying observability is like, by definition, the data you wish you had before the problem started. And I think that there's a lot of truth to that, that you do want to have the baseline data. Because I've been in a hundred incidents where someone's like, "Oh, this looks really bad," and you're like, "Yeah, but was it like that before the incident too?" "Oh, yeah, yeah. It's actually always been that way. I have no idea why that works, but apparently it does."
You can't lose that. You've got to have those baselines, but we need to be able to surface these different levels of data.
Is it? That's a great name for it. I mean, you could have named it something like, very sci-fi ish and people'd be like, "I have no idea what that's called." The breakdown graph is a good one.
But, like, that was one of those places where it was like... and this was a monolith back then, right? It's two thousand tens. We're not even thinking about Lambdas and serverless and just the array of potential services this information could be passed from... it's a monolith, right? And so logging in and seeing that, I was like, "Oh, I know that some of my requests are slow. This just told me why." I wasn't actively investigating what was slow. It's just like, I logged in, it's like, "Oh, this thing takes 3 seconds on average to run this query. That's not great. I can just tune that, right?"
And it's funny, because think about what we do. We love to have the word engineer on our title. We're developers. We develop, right? But, like, part of the difference between engineers, like, that carry of quality, craftsmanship, like, the bridge has to stay up, it must be maintained. And when we think about software maintenance, what software maintenance do we do? Like, we might refactor, like, "Oh, something's broken. There's an error budget, right?" And like, I think that's the thing, and maybe that's what you're hitting at here is like, it seems like there's so much insight in what I store in OTel of places where I - or hell, maybe even an agent - could proactively maintain the software. Like, not add new features. But like, "Hey, this is slow." We know it's slow. It's not a huge problem. But like, if it saves us like 5% compute a month, money just came back, right?
And that's one of the things that's hard... I feel like it's like we maintain software when we need to do some refactoring to make something easy, we maintain software when some shit's broke, and besides that, we're just shipping features, right?
To be able to have a wealth of this data where it's like, "Hey, there are things that can be done to make the system more optimal" and you don't have to wait for somebody else to discover it.
I think in the near term, the biggest trade off is that we've made it a lot easier to create software, but we haven't made it any easier to maintain software. I don't think that's fundamental.
I think that, just what you were talking about earlier, I think we can teach AI and apply AI to look at the bridge and tell us what needs to be tightened, to tell us like when we're crossing over and to do some of these maintenance and awareness checks that, you know, we all know we should be doing. I should go through my whole system periodically, but I often don't.
And I feel like there's an opportunity there to improve software maintenance until we do.
We're in this weird moment where suddenly not only are our software engineers shipping a bunch of code, but like everyone throughout the business is now a software author and they're just like, "Oh, well, I can create a tool to like automate my email flows."
I was talking to our competitive intelligence person and they're like, "Oh yeah, well, I built this fabulous workflow and it processes these, you know, press releases from competitors and looks at this and looks at that and then gives me like a report that I send to my team."
Like, this stuff is amazing, these capabilities, and it must feel like when computers first started to come into the workplace and we got like the spreadsheet and you got this stuff, you're like, "Oh, instead of adding these numbers up by hand, check this out. I wrote a formula to do this." And it's that shift of every person in every role becoming a bit of a creator.