DevOps is dead ๐, long live Platform Engineering!
1) Developers don't like dealing with infra 2) Companies need control of their infra as they grow
Platform Engineering (and Internal Developer Platforms) enable these two facts to coexist. Here's how:
(1/n)
Fact 1: Most developers don't like dealing with infrastructure.
They want to write code and run it somewhere but don't care much where that is.
Functions as a Service (e.g. Lambda) or Platforms as a Service (e.g. Vercel) provide this experience.
(2/n)
Fact 2: As a company/organization grows, its needs may "outgrow" the constraints imposed by the FaaS and PaaS offerings.
The challenge then becomes moving up the control axis without exiting the Developer Comfort Zone.
This is where platform engineering comes into play!
(3/n)
Platform engineers build the tooling and abstractions around the complex infrastructure configurations such that most software engineers don't need to worry about those aspects as much.
The resulting system is what is known as an "Internal Developer Platform" (IDP)
(4/n)
The exact form of an IDP will vary greatly from one organization to the next.
At a small company, it could be a set of helm charts that prescribe best practices for deploying services.
At a large company, it might be a fully automated Infrastructure as Code solution.
(5/n)
The key is that it provides the control the company needs while keeping the DevOps effort within the Developer Comfort Zone!
(6/n)
I recently spoke with Chris Stephenson of @humanitec_com and we did a deep dive on IDP's. The interview can be found on my YouTube Channel here:
In that discussion, Chris highlighted many of the key elements/design principles of IDPs:
(7/n)
1) Treat the Internal Developer Platform as a product!
Your customers are the developers using it. Get feedback from them, iterate, and confirm that you are solving real problems and not building in a vacuum.
(8/n)
2) Enable self-service!
IDP's empower developers to get their code running, without the need for intervention from someone else. This greatly increases their ability to quickly iterate on their solutions and leads to increased developer velocity.
(9/n)
3) Provide structure and standardization!
On the flip side of self-service, IDPs provide the opportunity to standardize how resources are provisioned and configured. It offers a place for operations and security teams to encode best practices into the system.
In order to answer this question, it is helpful to take a look back at the past 20+ years of web application deployment & operations: โ
1/n
Two decades ago, modern clouds didn't exist (AWS started in 2006), but deploying web applications still required access to servers! ๐ฅ
You either racked them yourself or rented them from a colocation facility, but either way, they were slow to procure and painful to manage!
2/n
The tooling to manage large fleets of servers and applications simply didn't exist, so you would often hire a team of system administrators, who would end up rolling their own tooling in the form of Bash or PowerShell scripts! ๐
3/n
So you want to build an application platform with Kubernetes?
There are MANY decisions you will need to make along your journey.
A thread ๐งต:
(1/n)
Should you even be using Kubernetes?
If you are operating many, containerized, microservices k8s can provide a great base for building an app platform.
If you have a single monolithic app, you will almost certainly be better served by a different approach!
(2/n)
Should you self-host Kubernetes?
If you are making this decision based on a Twitter thread... probably not ๐
There are use cases for large organizations that have mature infrastructure teams, but if getting started with k8s, using a managed service is much easier.