I know! It feels like I just joined, but at the same time, it's kind of crazy because you learn so much.
I mean, the first thing I'll say is within healthcare, the interesting thing is it's a lot faster paced than I thought it would be. I've worked in some regulated industries, but like, it's the pace of innovation that was always kind of like the interesting kind of component. When I first joined, I was like healthcare is going to be kind of annual releases. Certainly you can get there, but I think really it's what you build and how you like build a secure architecture.
You also have to remember that the reason things are kind of slowed down or things go in a slow way isn't because like, you know, you have to do quarterly, monthly, annual releases. There's no like law that says you have to do that. It's really like, what do you feel comfortable delivering. In the sense that you're delivering an initiative for your customers, whether that be your internal customers, external customers, developers, corporate customers. So that was kind of the first thing that I kind of had to overcome.
Once I overcame that, then I said, “Oh cool. It's just another kind of DevOps gig.” You know, kind of figuring out the world of platform, figuring out where tools can fit, and figure out how to get people to buy into this stuff.
My mantra is always start with the smallest component where you can kind of show an initiative and you don't also cause a major company outage. Because the worst thing is you start this initiative, you move a major component… let's say your x-ray processing system and all of a sudden you're in support mode day one. It isn't to say you're not working, but at the same time you also have to like start and prove. You have to recognize that everyone isn’t at that vision. So you have to almost kind of sell that vision out a little bit.
Yeah, and I think to that point, the example I mentioned earlier about like launching a website… again, you know, people are like, “You do these Kubernetes for the web server. Like you're crazy. That's insane.” Like there's kind of a whole little subculture of people - “It's only meant for like high compute.”
At the end of the day, you know, if you right size it enough, and especially at an enterprise scale, it's all about the efficiencies you gain that are not like dollars on compute. It's the dollars on the time wasted. If it wasn't in this, it would be some multi spanning auto-scaling group of web servers.I mean I have to patch Windows servers versus containers, right? There's a whole lot of other things that people have to consider. It's not just like using that.
I think that example, it was great, but it was very much like… you know, I used the word DevOps earlier and I think DevOps still very much exists… but it wasn't a platform, right? Like having a pipeline in Spinnaker to click a button and deploy, great. But I think what was lacking on that is the platform. And platform for me is the experience that an engineer gets. The first example, you click a button, you deploy. One thing in, one thing out.
I think the value of a platform is, “All right, now what guardrails do I have? Do I allow my engineers to declare the size of their cluster? Do I let my engineers declare the environment variables that they need?” That wasn't in V1. A lot of that stuff was kind of the hard-coded components of the pipeline. And some of those pipelines still exist.
I'm not saying, like, here I am, perfect health care pipelines. But people have to realize there's a path from proof of concept to delivery to ultimately getting things out there into the world. Don't get lost on the perfection. One of my old managers says, it's not his quote - don't let perfect be the enemy of good.
It's about expanding that culture too. I think a lot of people see it (and I know we briefly talked about this like at KubeCon), but a lot of people say like it's almost like they go to the CNCF landscape and they like go shopping. It's like, check, check. Check, check, check, check, check.
And it's like, great, you have a whole list of tools, but what's your end user's experience? Are you just giving YAMLto engineers and saying, “Hey, go figure out how to do auto-scaling inside of Kubernetes?” Or “Hey, go figure out how to do OPA policies and define them in some sort of arbitrary repo?”
The goal, at least for me, has always been architect that away.. and it's actually something that Kelsey mentioned in one of his early talks… architect things away, not because the engineer doesn't understand it, but because they shouldn't need to.
I'm the biggest fan and everything that we do is an open core model. If an engineer wants to give me free work and say, “I think if you make this a variable, I can expand upon that.” Great, so make me a pull request, I'll still review it. We have open source internally in the sense that it's not open to the public, but open within our nature.
If people want to contribute a fix or review how things are done by all means, but that's not the expectation. I don't want someone's boss to say, hey, this person is spending three days of their week figuring out YAML files. No, that is not the goal of anything that we're trying to do.
Yeah, I mean, I think the biggest thing from there is when you can sell the repeatability of what you deliver, because by doing so you make what you've built so common and well understood. The first few weeks of kind of learning a new thing kind of are, you know, problematic. But after they kind of learn it and they kind of get on it, that engineer, that person could in theory go look at something else on another brand. Or another resource can go work on another product. You're basically kind of leveling up everyone along with it too.
I mean, for me it's simple, it's kind of coming up with a contract. I mean, even before my time here at TAG, it would all be about building a contract. Like hey you have your local environment, I'm certainly not going to police what IDE you can use, I'm not going to police what tools you can install, but at the end of the day I want the contract to be simple. If you could build a container and it could run, I could deploy it.
So then from there it goes, “Yeah, cool. I built a container.” But then what is that path to delivery? It's kind of like that artifact-minded promotion process. And it's not just a code. We're talking about feature changes, things within feature flags, and even infrastructure as code. What's that method of artifact bundle to kind of get that progression and then visualize it. Then you can layer in all your processes because that's really what gets that buy in.
When you start saying, “Hey security team, you know how you said we should be doing this every time we deploy, but you know, it's kind of a manual script. Well, guess what? We can enforce it and maybe we don't block things, but I guess at the very least I can guarantee you anytime someone deploys, you're going to get this.”
For me, one of the biggest wins is… you know, it's a tale as old as time… DevOps is seen as it's kind of the antithesis of change control and stuff like, “They're going fast. There's not going to be no way of tracking what they do.” No, if you do it right, you should audit everything.
Anything that occurs within a pipeline - I can go to a change engineer (who is really more on an operational side) saying, I can tell you down to the millisecond that that change occurred in production. And that way when you get that report or you're looking at your monitors and your dashboards, when you see that that time correlates, you should be able to say, “Oh, it was that change that occurred at this time.” And because I have such a great audit trail, I can actually track what was that change and what went into it down to the Git commit. So that's awesome.
Especially when you see some outages and you're on there like, “What was changed?” I don't know, let's take this - this is where the error's coming from. Take that git commit. Go look in the pipeline. Go look in the git. And you're going say, “Oh yeah, of course, this API path changed.” That's extremely powerful.
So I think like to that, selling it up to leadership of being standardized, having these kind of common ways, and then bringing everyone else along. If you do it right the pipeline is for everybody not just for the DevOps team, not just for the platform team, not just for the developer. But you build in methods for these SMEs in these key areas like quality, security, app, architecture, the networking, to have their say on how to properly guardrail the pipeline. Again, not a gate, I'm not saying yes or no, I'm saying a guardrail where things can kind of be expanded upon.
If you do that the right way, you build like this culture of people communicating and talking versus kind of like, “No, you can't go to prod if you click that button.”
Not to say like we deploy any time we want. It's almost like the mindset of like, if I know there's a problem and I know the fix, do I really have to get approval to fix it?
If the building's on fire and I know that by me using this fire extinguisher… does that really mean like I have to, “Hey, can I use this fire extinguisher to put out the kitchen fire?” No, put out the kitchen fire and then ask why that kitchen fire happened there.
It's not to say you circumvent process. Like there's still RCA's. There's still reasons why things break. But at the end of the day, my commentary is usually… very rarely, more rarely… I don't think anyone wakes up in the morning saying, “I can't wait to take down production today.” I don't think that's anyone's book. We all feel ashamed. We all are very protective. Like, we all have a shared interest in keeping a platform running. Otherwise you're on bridges all day, you're on outages.
But how do you kind of have that like right balance of you can deploy whenever you want and you have these checks and balances? I think it is level setting.
What are some base requirements to kind of get there? Some people are looking at things like IDPs to do scorecards, right? Hey, you can deploy whenever you want, but you have to have some things.
Like for me, I feel certainly a lot better if the app that's deploying whenever they want has a lot of the baseline things. Do you have on call? Do you have proper logging set up? Are you using the logging framework and the most up-to-date version that we released internally? Do you have security scans like with SonarCube or Sneak or whatever?
It's a very visible number that you don't have to be technical to understand. It just says, “Hey, look, this app has a good scorecard and it looks like it's healthy. Let's reward that effort.” Because it's not easy to do that, right?
I mean, how many apps… I know for a fact, even ourselves, we have apps that probably aren't the most up-to-date version of Python. Maybe they're a rev back or two. But what's your base standard and how do you kind of level that stuff up? That to me is kind of how you sell the maturity aspect of it.
If you just say, “Hey, we're deploying fast.” Great, but is deploying fast really the goal or is it deploying in a safe way fast? And I think that's really where I think a lot of people get lost. They see the numbers and they just want to see, “Hey, look, we deployed 20,000 times in a month.” Great. How many outages do we have?
Yeah, I mean, generally speaking, I alluded to it earlier with environment variables, but that also extends to tags and labels and standardization. I like to think that, in general, most organizations kind of go through this kind of shift, especially when they start going to the cloud.
“Hey, we need to run it so they see data center costs versus cloud.” Great. But if from there, you're able to then break down that cost by org, by vertical, by team, by (if you can somehow) person - You can then start seeing like what is the most expensive line items and how to kind of pivot.
Most orgs when I walk in, just see the cloud spend and I'm like, “Holy crud.” That's either very high or “What level of rigidity do we have? Do we have any standardization there?” So for me, we have all these kind of like tags and labels applied to things. It's just a matter of the question. So then you can then say, “Hey, how much was AWS for this brand from this month to this month?” You can start breaking that down. Again, it's more so from us doing the right thing, due diligence in terms of this cost.
It's always improving. We don't have the perfect levels of tags and functionality. We certainly have things that we've kind of like, “Oh, we should have tagged it this way. We should have added this label.” But I think that is something very important.
As you're building your pipeline and your auditability, consider that too, because that's all going to come back. Especially when you start talking about the maturity. Remember, once this like kind of train keeps moving and people are going fast, it's going to be fast. Like for us it went from you know maybe one to two to three apps and now we're close to like 60-70 apps across all. So like it went from like zero to nothing in like a year and a half almost two years.