A Working Definition of Platforms
Introduction
Whenever I have a discussion about platforms, the very first item to be discussed is “Well, what is your definition of Platform?” I have a lot I want to say about platforms and in order to do that I need some sort of definition. I’ve defined them many ways over the years and I have a working definition that I’m starting to like, and it is flexible enough to span both business and technology platforms. This definition of platforms comes down to two elements:
A platform is a system that allows you to build things and provide home for them
A platform captures or abstracts work from the user of the platform.
I’m going to explain this a bit more and show how it is useful to contrast with other ideas.
Building things and giving them a home
Our first criteria for a platform is that it allows you to build things and it provides a home for them. This is a broad definition on purpose because the concept of building and providing a home can be applied in so many ways. An automotive platform allows a manufacturer to create multiple car models that use the same basic chassis and share assembly lines. A container platform like Kubernetes allows a company to build applications and run them. A platform will necessarily allow for building certain types of things rather than being completely general in order to be worth actually using and that leads us to our other criteria.
Capturing and abstracting work
For a platform to be of any use, it needs to capture and abstract work from us, so that we can get on with our primary goal. Operating systems are a good example of this. Back when I was starting out as a sysadmin, it was very fashionable to ask very detailed, low level questions in interviews, like “What is an inode?” or “How does a machine boot?” While interesting (to me at least), these are not things you want to deal with all the time. Operating System Platforms take care of things for us:
Abstracting access to hardware resources
Abstracting security concerns
Capturing housekeeping like starting services at boot
Another example of a platform would be an ecommerce platform that:
Abstracts interfaces to payment processors
Captures the process of sending order updates
Abstracts using a database to create a product catalog
This abstraction and capturing of work is what makes platforms so useful for building and running things. Different platforms will of course take care of different concerns for you and that focus is necessary to keep things from getting too complex.
How does a platform compare to other types of systems?
It helps us because we can look at things like applications and services and decide whether they are platforms or more static things. For instance, a library catalog is an application which allows you to interact with the holdings in a library but you can’t put anything on it (unless you write a book, of course). At the same time, a game like Minecraft allows the user to create fairly arbitrary extensions, so it can be thought of as a special purpose platform. Applications and services can also be component parts of a platform. There might be a service in an operating system that takes care of video processing for other applications, for instance.
Fit for purpose
While there are many platforms to cover building many kinds of things, the fit of the platform to the problem is quite important. You wouldn’t try to build an auto factory inside of a residential home, for instance. The services of the platform, the ones that capture and abstract away our work need to fit properly too. Too broad and the expense of being able to do anything is a huge learning curve and less work captured in the system and more on you. Too narrow for a given purpose and you will be constantly fighting the system to try and get your application to fit. What you thought was going to capture work for you ends up having a high up-front cost. In addition, platforms come in layers.
Layers
A platform is not necessarily a monolithic implementation. You can layer together multiple components that are themselves built on platforms. Take the automotive platform example, the underlying components and manufacturing systems are likely made up from many underlying platforms provided by more specialized suppliers.
Why define things this way?
Starting from a set of basic definitions allows us to build on a solid foundation (a platform, if you will :-) when having discussions about platforms and their benefits. With some additional dimensions it is possible to have conversations about platform choices and the impacts a platform can have on business outcomes.
Summary
To summarize, I am proposing a working definition of platforms as systems that allow the user to build things and provide a home for them as well as abstracting and capturing work the user needs to perform. This definition can work for both technical and business platforms. Having this definition allows us to have a structured conversation about platforms, including their fitness and impact on business outcomes.
I’d love to hear feedback on this definition of platforms. What resonates, what doesn’t?