Don’t Reinvent the Platform

Norman Joyner
3 min readMar 28, 2016

--

If you’ve heard the phrase, you’ve most likely spoken it: “don’t reinvent the wheel.” That is, don’t recreate something that has already been created or optimized. Such an exercise is typically frivolous or futile. I have first hand experience with this idiom: building an internal hosting platform when the right choice was to use an existing one.

This isn’t a post about what went wrong at a previous job because we built a custom platform; in fact, I learned a lot in the process. However, now that I have moved on, and I reflect on that period of my career, I realize I performed a disservice to my company. That realization was part of the reason I went on to cofound ContainerShip. I’m here to tell you that choosing a platform is good and frankly necessary to the success of businesses. The goal here is not to shove a particular platform down your throat, but to shine a light on the features that make up a modern hosting platform and why these features are so important.

In my view, the list below outlines the Minimum Acceptable Characteristics of a modern hosting platform:

  • simple enough for both developers and operators alike
  • turn-key solution with an easily extensible, open-source core
  • underlying infrastructure management & orchestration
  • long-running application & scheduled job support
  • built-in service-discovery, loadbalancing, DNS & firewall
  • log & metric aggregation
  • interoperability with leading artifact repositories
  • API for interaction with top CI / CD systems
  • multi-cloud / cloud agnostic

Here is the reality: almost all companies want a platform-as-a-service type experience; however, many have trouble picking one off the shelf. There are thousands of companies, right now, building an internal platform that will attempt to accomplish the same goal, all in incompatible ways. Reinventing the wheel, if you will. I’ve been there, it’s an easy decision to make. What is less trivial is consistenly devoting resources to such a project. Handling the intricate complexities of building critical internal infrastructure, while also expecting the same employees to handle other types of work (as the book The Phoenix Project would point out). Hiring people to complete this work will be expensive and challenging, but not as challenging as training your new employees on a custom platform made up of dozens of obscure open source projects haphazardly glued together. When you start to think about it, who on the team knows how this monster really works? Who can troubleshoot issues at 3AM when it all comes crashing down? And more importantly, what is the bus factor on this rigged together system? Can your developers even interact or contribute to it, or are we tossing work over the wall again?

My good friend and mentor, Bob Namestka, has always said:

Software engineers have an enormous capacity to deal with complexity, and rarely look for opportunities to simplify.

I believe this capacity is ultimately what drives companies to reinvent the platform. Engineers, capable of dealing with such complexity, see no problem spending time building such a system despite their time being more useful geared towards the goals of the business.

A mature platform, one that meets the aforementioned criteria, is one that helps you become more productive. It is one that both developers and operators can interact with together. It is one that everyone can learn and contribute to. It has a proven track record, a dedicated engineering team, and a 24/7 support team. And finally, it makes life simple again. Chances are, you won’t realize these benefits from the platform you wrote internally. If you do, you’ve likely been working on it for years, blissfully unaware of your company’s core business. Maybe you’re Netflix and you have teams of people to devote to building such a platform. The reality is, you’re probably not; and unless you are a platform-as-a-service company, there is no reason to reinvent the platform. It’s time to pick one, and start building unique value on top of it.

--

--