Yeah, thanks. So the open source component is this framework called Kratix. And what Kratix focuses on is this idea that internal platforms are internal because they're specific to an organization. If you could completely buy your processes and your provisioning and your infrastructure and all that from a third party, we are the first ones to say, “Do it.”
I've worked at organizations, I've been at other startups that are small enough that we outsourced to Vercel. We outsourced to the cloud providers. We didn't have the type of compliance and the type of business processes built up that needed customization internally to any significant degree. But it's funny because even that startup I worked in… where we had, by the time I left, I think 80 engineers or so, and when I started it was about 10 engineers… in that time of scaling, we already hit the point where we couldn't be on Vercel anymore.
And let me tell you, as the person who took the team off of Vercel, I think it was good I left that company so they could hate me forever. They adored being on Versel. They found that to be a fantastic user experience, developer experience. But the problem is that we had a compliance requirement that we no longer could control because we depended on a third party that didn't meet our needs.
We had to be PCI compliant. Vercel is itself PCI compliant, but it can't prove PCI compliance for any apps running on it. So it as a system is, but it's apps or not. And so we had to move off it in order to meet our expectations from our customers. That's the moment where we had to go to internal platform instead of platform as a service external.
So with Kratix, we believe that when you are at that stage where you need an internal platform, you need things that are custom to your business, things that allow you to set standards, allow you to apply processes, things like that. You need a way to do that easily and to bring all those experts together to collaborate and democratize that experience. And that's what the Kratix framework does. It enables you to take your compute experts, your storage experts, but also your security experts and your financial experts and all of those things, bring them together and create services that are on demand in your business.
When seeing teams like that, I love that. Let's say we built our platform – whether it's, you know, whether it's a Kratix promise or like how we do it with bundles – like there's a subtraction that's been designed. And one of the things that we kind of say to our customers (sorry, not to talk too much about us) is we want your engineers that are using the platform to find places where it doesn't work for them anymore, because that's interesting. Like you’ve found somebody whose use case doesn't map to what you had and that's good, that is product. That is revisiting product, iterating on a product, that is a thing that you want.
Now, should that person have to fix it? I don't think so. And I don't think that they should necessarily have to know how it works under the hood. I should be able to open an issue on maybe the repo that has that module inside of it and say, “Hey, this doesn't work for me.” This is me putting in, effectively, a support request. I'm saying, “Hey, the use case has been presented to me doesn't work for me.” And I think that that is an absolute valid path to take.
Now, if on that same team, somebody's like, “Hey, this use case doesn't work for me.” and that person says, “You know what? Like I've always been a little bit interested in Terraform or OpenTofu or Ansible or whatever the tool is and I've got the time. Like I'm going to open a PR and not just open an issue.” I'm going to say, “Hey, like this would help me.” That's valid too.
There's just two different people who have two different ways about going about problems. And like the reality is like, if you say, “Hey, no one from outside of this team is allowed to open a PR.” that just, that sucks. And if you're saying, “Hey, if you have problems, it's your problem.” that also sucks, right? And so I think letting people kind of express their differences in the use case and how they need it, I think is how you get to a system that works well. And it's like, you might not take my PR and you can't be offended if I don't, but you also have to give me good feedback as to why you didn't.
And now we're in an interesting spot. I have something that works for me. We don't want it in the use case. Okay, do we make a separate Kratix promise for this particular use case and say this is a logging bucket versus a UGC bucket, right?
That's great. Because now other people may have just been saying, “Hey, you know what? I need a bucket for logs. There was a bucket module there. I just used it. It didn't really work the way I want it to.” Now people are like, “There is one for logs now? That's great.” That's a good place to be.
So I think it needs a mix. I think it really comes down to the team dynamics and the personalities of those teams. If you don't have engineers that have the breathing room, that are working on the product, you can't expect them to grind to a halt and fix the problems themselves. They're there to pay your salary. They're paying for your product in an interesting way. They're making the money that pays the business…
Yeah, like being able to have some sort of way of being able to like oversee what people are doing, while giving them the room to do it, I think is one of the things that makes it a bit freeing. It's like, “Okay, I can see that these patterns are starting to coalesce. Like maybe that should be a part of the platform.” And that's happening, right? Like, if we rewind three years ago, people weren't talking about AI and model hosting as much as they were talking about ETL, right? And so now we're starting to get new things that the system is required to do.
If it's just like, “Hey, ask us and we'll build it when we think it's valuable.”, that's a weird way to go about it. When you see teams start to experiment and now you're starting to see patterns of like how three different teams are doing their model builds and fine-tuning. Now you can say, “Okay, well, how do we create a nice abstraction that works for the other 85 teams?” And now that can be a part of the platform.
It's funny, like, you know, you'll have engineers that like kind of like look up to the platform engineers it’s like, “oh, they know everything.” And it's like, I think a really good platform engineer is saying, “I am learning what we should be doing by watching what you all are doing. And what I'm trying to do is figure out how you all work and how I can create efficiencies and like synergies… not to use that word, but… between these different teams.” And like, I think that's where the good work comes from. Not me saying, “Okay, let me decree that this is how you all run a Postgres database.”, right? And people are like, “We run MySQL, dawg.”
There are people that go about it that way, right? And I feel like you can't be prescriptive about it if you want people to adopt it. Instead, you have to see how people are using it and what use cases they're presenting and say, “OK, how do I take those and how do I bring them in so that it's more accessible to the rest of the team and that we can have our security and compliance oversights and requirements built in there.”
Yeah, it's a great question. Kratix is the open core framework for being able to manage your services across your infrastructure.
So to accept requests in and then ferret out the infrastructure or the provisioning across your infrastructure, whether it be Kubernetes or elsewhere. The promises is what tells the framework… defines for the framework what it needs to do. And so a promise is the embodiment of something as a service or anything as a service.
So your promise, you might have something like a database as a service. That would be a database promise. And the reason why promises are able to be generic in concept, even if you're going to have specific implementations, is because something as a service is generic.
When you provide a service, you need a way to be able to accept requests. And you need a way to able to find what needs to and can be a part of that request. You need a way to be able to pass information back to those users and to actually take that information in, provision what they asked for, and then get them back what they need to be able to use the infrastructure. You need a way to be able to have common dependencies across all instances.
So if I'm providing databases as a service, I might need to have cloud accounts that can run those databases. I might depend on third party providers being configured correctly to vendor those databases out, those kinds of things. And you need a way to be able to actually schedule this stuff. So you might use PlanetScale SaaS for production, but you might use a Postgres operator in Kubernetes for Dev. And you want to be able to manage when a request comes in to schedule some things to Dev, some things to Production, and so on. So those sort of components of something as a service are all defined as a promise.
So what is the platform engineers experience? It's YAML. It's a custom resource type in Kubernetes. You can define everything as YAML. It's great. Just make sure you get your spacing right. And it all sort of wraps up into a CRD for your interface. So you're writing sort of the CRD from Kubernetes and a set of containers that run as your workflows on request and on setup.
Someone has previously described it as sort of controllers or operators for dummies. And I think that's actually really smart because who wants to be worrying about reconcile loops and when they should run and what their frequency is and how to manage things in an idempotent way, et cetera.
Give us a container. We'll run it for you at the right times. We'll get you the feedback you need. You get the behaviors of a control loop without having to learn Golang or the controller frameworks or those kinds of things.