One Kind of Platform Engineer
Tags: webdev, programming, career, motivation
Published: 2022-12-01 17:00:26

Platform Engineering is hot again! I think...

I've been seeing a lot of information coming out about Platform Engineering being an "emerging field".

Ok, but it's not really.

While I don't necessarily consider myself only a "Platform Engineer", I am a Software Engineer that works on a platform team.

I want to share a bit about my experience working in this discipline over the last few years.

## What is a Platform Engineer?

According to GPT-3: Platform engineers are responsible for designing, building, and maintaining software platforms used by companies to build applications and services. Platform engineering is a specialized field of engineering that requires a combination of technical and managerial skills.

Nice, that kind of makes sense.

In layman terms, your customers are the developers building the product. Your products are the tools that enable them to build more, build faster, and build with less bugs. 

## What skills do you need to become a Platform Engineer?

This is where things get blurry.

Platform Engineering is very specific to the company you work for, the tech stack you use to develop, and the CI/CD tools at your disposal.

For me, I started with a fairly common Web Development background.

- JavaScript / TypeScript
- React / HTML / CSS
- GraphQL
- Express
- Insert flavor of State Management
- Insert flavor of Database (SQL, NoSQL, KindOfSQL*)


As I mentioned before, Platform Engineering is heavily intertwined with the tech stack your company uses.

Where it gets more interesting is when you throw some more tools into the mix.

- Webpack <- but like actually how it works
- Shell Scripting
- Docker
- Kubernetes
- Visibility (Grafana | Kibana | Datadog | StatsD | etc.)
- CI/CD Tools (TeamCity | GitLab | Github Actions | Jenkins | etc.)

The list goes on but I'll stop here.

Do you feel like I'm just listing out every technology you see in bloated job descriptions?

I kind of am and it's all actually kind of necessary.

Oh I forgot one other thing.. **Systems Architecture**

Yes, after learning how to use the tools I just mentioned and figuring out how they fit together, the products you build have to optimize and fit into the overall system design.

## This Sounds Like 3 Jobs In One

Mostly because it can be. Remember you've got to understand the product code, how to bundle it, containerize it, test it, deploy it, and have visibility on your system when it's in production.

Yeah, it's a lot.

Platform Engineering sits in between a Product Developer, DevOps Engineer, and a Site Reliability Engineer.

Knowledge in each of these categories is required and the depth of knowledge can vary greatly depending on the task at hand.

## Day to Day Work (My Kind)

My team maintains a few different platforms. 

I'll emphasize maintain here because it's our responsibility to upgrade packages used by the platform and make sure that any breaking changes are identified and supported across the platform.

This can be anything from upgrading React or Apollo, keeping up with the latest versions of Node, or deprecating a testing library like Enzyme across an entire codebase.

Visibility is huge, if you can't see what's happening to your application while in production, optimizing it is impossible.

Site went down? Your metrics should tell you why and how to fix it.

Code quality, not just eslint and prettier, you're looking to see that anti-patterns aren't being created and that the codebase follows a predictable design pattern.

Middleware and shared component libraries fall under the category of infrastructure and it's our job to make sure everyone is on the same page with these.

Webpack, oh webpack, it can't all be sunshine and rainbows.

## Who Is a Fit For Platform Engineering?

To be honest, when I started my current role I didn't know that this is what I would be doing, but this is the type of work I've always enjoyed doing.

Folks that I've seen succeed in Platform Engineering are interested in

1. Software Architecture 
    
      - How the entire system fits together and functions as a whole

2. Codebase Scalability

     - What abstractions/tooling/design patterns can I build to make a growing/large codebase maintainable

3. Eager to Learn

    - How does this OSS library work?
    - Reading source code if documentation isn't clear or not available.
   
4. Excited About Exploring

    - As new technologies emerge, you're someone that likes to experiment and weigh the cost/benefit of adopting them

5. Willing to Assist and Mentor

    - Often you'll feel like the tech support for the people building the tech.
    - Your decisions directly affect the day to day of the product development teams you support

## Final Thoughts

It's a fun discipline if you like to be challenged. 

If you're feeling bored or that your day-to-day work is repetitive, Platform Engineering is a route that's always full of new and interesting problems to be solved.

Success here comes from making sure your co-workers are informed, supported, and can execute.

I'm happy to answer questions or write a follow-up if there's interest.

Find me on Twitter [@markkdev](https://twitter.com/markkdev).

[Original post](https://www.markk.dev/blogs/one-kind-of-platform-engineer)