Cutting Environment Costs In The Digital Age
If you’re a CIO, or an infrastructure manager, then you’ve probably got a mandate from the CFO or the CEO to cut costs. And you’re running a complex set of applications, across multiple environments – at least 3 (production, test and dev). Depending on how mature your infrastructure team is, you might already be running 5 or 6 environments, or even more.
But how many environments do you really need?
Multiple dev and test environments are needed to deal with different projects and agile teams delivering at different cadences, all wanting their own separate dev and test environments. You’re probably operating in multiple data centres and have to worry about multiple cloud providers and SaaS vendors.
If money was no object, you’d be scaling to 20 or 30 environments because that’s what your delivery teams are telling you that they need. Costs aren’t going down in line with your cost-cutting mandate, they’re going up.
So, here’s a radical thought: the number of environments that you actually need to look after is… 1. (And if you're good, it might be none).
What Do You Actually Want, Anyway?
You want to do the things you need to be able to do and do them well. So, if you’re working for a brewing company, that means you need to ensure your company is good at making, selling and delivering beer.
But as the CIO, you’re in charge of the apps that enable all that good stuff. You want software that works, running in production, on kit that doesn’t fall over, at a reasonable cost. That's about it.
If you didn't have to worry about managing multiple non-production environments across the data centre and the cloud, and all the cost and complexity that comes with them, then we bet that, frankly, you'd give it all up tomorrow.
Getting to One
To see why you only need that one environment, and why you can get rid of all the rest, let’s think about how the development of 3 key technologies that have grown up over the last 10 years: Cloud, DevOps, and API’s and microservices.
The grand promise of cloud is that Cloud says infrastructure is available on demand. You can have any number of servers, at any scale, whenever you want them. As much as you like. Somewhere in Sydney, Tokyo, Stockholm, London, São Paolo or Mumbai is a data centre the size of a football field, and it’s yours for the taking. If you want a dozen 128-CPU boxes with over 3TB of RAM, several petabytes of storage and 25-gigabit networking, they’re all yours (as long as your credit card is working!) You can have this, literally in minutes, any time of day or night.
We can go one step further than that: DevOps says not only is infrastructure available on demand, but that it is code. You can automate the provisioning of infrastructure, and on top of that, automate the deployment of all your applications.
You can have software on demand, not just infrastructure. By extension you can construct an entire environment whenever you need it, wherever you need it - and again by extension, you can throw it away whenever you don’t need it.
API's and Microservices
But that's not going quite far enough. The API Gateway means you can securely compartmentalise your environments – by insisting that every interaction between systems is mediated through an API gateway, you build a standard interface mechanism that is network-agnostic – so it matters less which network your API’s (and the (micro)services they provide façades for) live on. Coupled with the ability – in non-production environments at least – to mock and stub API services, this vastly reduces the need to be managing and running monolithic environments that contain all your services at once.
If your infrastructure is available on demand, and infrastructure is code, and environments are compartmentalised by API Gateways, then anyone can bring a dev or test environment – you don’t need to care where it is. It doesn’t need to be in your data centre, and it doesn’t really need to be in your VPC either.
Which Environments Do You Actually Need?
Production, maybe, and then only because you've still got legacy applications that you haven't yet hidden behind API's. But give as much of that away as you can, as soon as you can, using the SaaS model as your template.
Wherever possible, you should outsource the problem of running dev environments to your vendors who do build and test. They should be doing it on their kit at their cost.
They’ll be super-efficient: there will be no dev environment running if they’re not actually doing dev right this minute, unless they enjoy the smell of burning (their own) money. There’s no point in you running dev environments any more. Platforms like Marlo's Digital Enablement Platform [MDEP] provide for very rapid start environments where dev teams can be up and running, building business code, in a few hours, not days or weeks.
Furthermore, you should be making vendors run your testing environments for the applications that they're delivering, and for the same reasons as dev. You still have to manage test data (and most organisations still have to solve for privacy, but they seem to manage that just fine when they implement Salesforce). And you'll need to ensure that they make their environments available whenever end-to-end testing is going on.
What You’re Still Going To Have To Solve
- Security provisioning and network access to any environments that you're still running
- Making sure that legacy applications have their own API's (and API Gateways) in front of them, so they can be accessed safely by external developers
- Vendor contracts that encourage the right behaviour when vendors run dev and test environments
- Access to code (escrow arrangements)
- Standards and guidelines for vendors delivering applications and services to you
- Providing platforms like the Marlo Digital Enablement Platform [MDEP] to standardise and govern the way that your applications are built and deployed - mostly for non-functionals like security, monitoring, logging and auditing
- Dependency management on a grand scale (but you already have this problem, and well-designed API's help)
- Make your vendors bring their own environments for digital delivery; embed requirements for how they should behave in contracts
- Implement standards and guidelines for delivery – solve problems like containerisation, security, reliability, scalability, monitoring and logging etc in standard, cloud-native ways
- Provide standardised platforms for hosting in production like MDEP, so that delivery can concentrate on business value
- Engage with organisations like Marlo who truly understand the challenges of - and how to succeed in - today's complex digital environments