Companies often fall into the trap of building standardized infrastructure themselves, then offer it to their teams to run their workloads on. For example:
- Compute, IaaS, which let teams spin up and down compute;
- A mix of IaaS and DBaaS, making sure that databases are managed;
- Platform as a Service to let developers build and deploy their app all by themselves without having to maintain the underlying infrastructure;
- Container platforms like Kubernetes to let teams build and deploy anything on it, as long as it can be deployed as a container
The most complex, but most powerful option lets your teams choose individually what systems and deployment technologies they want to use. You can give them full access to the products and services a cloud provider is offering. Instead of only providing a subset of the offerings, like a Kubernetes cluster, you can give teams their own AWS accounts to build and deploy their applications on. If they want to use Kubernetes for example, they can spin up their own Kubernetes cluster. This also implies that the teams need to take ownership of it. They’ll have to make a well-informed decision about the technology they want to run and support. The teams will not only need to provision it, but will also need to ensure they can manage it. Managing a Kubernetes cluster is a lot of work, and maybe they don’t need such complex features or don’t want to spend resources on it. Other managed options like ECS, Elastic Beanstalk, or building AMIs with Packer can be a better option as they don’t require any development resources.
When implemented correctly within the organization the most noticeable will be the increase in developer velocity and autonomy. Over the years we have helped implement this strategy in various startups and enterprises and have seen a lot of amazing things happen. Below we have summarized a few key points on how to make this strategy successful within your organization using Amazon Web Services (AWS).