I recently started an email list named Platform Thinking. You can subscribe here or read the posts in this topic. Comments are welcome in this topic thread.
Update: I’m no longer posting these topics here, so please subscribe if you would like to follow Platform Thinking.
If you are building a one-off consumer product that will not be maintained, improved, or ever change, then you probably don’t need a platform.
However, if you are building an long-lived industrial product that will be maintained, or a series of related products, then it gets very expensive to start over every time.
To effectively maintain multiple unrelated products, or a system that that is difficult to update, improve, test, and deploy is a recipe for cripling technical debt.
The expectation today is things will improve over time, because software can be updated. It is not really optional any more.
And with the complexity of systems today, the odds you’ll get perfect on the first release are near zero.
This may seem like a contradiction – how can small companies afford to own and control their Platform? Should not this all be outsourced? “Platforms is what large companies do.”
Actually, the reverse is true. Netflix can afford to build on AWS and be locked into the AWS platform because they have enough volume that they have clout and the ability to negotiate. Amazon will make sure Netflix gets what they need.
Small companies cannot get this type of support.
Does this mean “small company” should never use AWS? No, certainly not – AWS is a good option for many things.
But it does mean that we only use stuff in AWS that we can migrate elsewhere if needed.
Use managed Postgres instead of some proprietary AWS.db.
Use NATS running on EC2 or managed at Synadia instead of a proprietary event system.
Owning YOUR Platform does not mean you build all of it, but rather you have some level of control over it. You have options.
And the smaller you are, the more important this is.
A common objection to investing in a platform is that it is “too expensive.”
“We want to get it right, lock it down, and then crank out our product and make some $$$.”
Many managers and owners are wary of platform development because they have experienced false platform development – endless tinkering, the costly pursuit of perfection, etc.
However, real platform development is focused on shipping as soon as possible and then improving.
Real platform development is realizing that complex, connected systems are dynamic, living things that need maintained. They do not operate in isolation.
Real platform developers have the humility to realize they can’t see and understand the big picture up front until they build something and get feedback.
The key to controlling costs is not locking things down such they cannot change, but rather the opposite – improving your process so that improvements are efficient to develop and and painless to test and deploy.
However, at the scale of most industrial products, none of these things are very hard.
A couple servers can easily handle all your traffic.
A backup and restore plan can handle failures in most cases. Redundancy and high-availability are overkill.
Cloud services require management too – often you end of managing the cost instead of the fundamental issues listed above. Six of one, half-dozen of the other – take your pick. And then you still have to deal with problems – often due to the distributed nature of cloud services where the network is the weak link.
See DHH’s posts on “leaving the cloud” for an example. They are saving millions owning and managing their own servers and it is not any more work.
You can hitch up to one of the major cloud vendors and go all in on their services – that is what everyone else is doing.
Or you can do something different. Take the technology that is being developed for the cloud, use the cloud where it make sense, and then optimize for YOUR Platform.
A blog article published 2017 titled You Are Not Google is a good read. This article makes the case that most companies are not operating at the size of Google, Amazon, and LinkedIn. Thus, most of us are solving different problems than the big 5 tech companies.
YOUR Platform needs to fit your problems at your scale.
If one server will work, then you are saving yourself untold pain and suffering by not pre-maturely building a distributed system.
If one monolothic application can run your product, then you are saving a lot of hassle not implementing microservices up front.
Keep it simple – you can move to distributed micro-services later – AFTER you succeed at a smaller scale.
And if you succeed at small scale, then there will be plenty of resources to adjust your architecture later.
The quicker you can get to a MVP, the better, and simple gets you there quicker.
In the last post, we discussed the fallacy of using complex technology when the scale does not justify it.
But, what if we get a lot more customers, or sell a lot more systems? Should we not plan for the future now? Use technologies now that will work at large scale? We don’t want to paint ourselves into a corner such that we end up with a system that won’t meet our needs in the future.
Certainly, we should keep the future in mind, but the most important way to plan for the future is to streamline your processes and development workflow now so that you can continually move toward the future as it comes.
NOT try to implement the future now. That is costly, and you’ll never get it right that way.
Some decisions are important now and some are not.
You don’t need to use Kubernetes now – you can add that in later. But it is important to use some type of automated configuration and deployment – perhaps a simpler solution like a simple Github Action, or Ansible.
The same with micro-services. It is easy to split things apart later as it makes sense. But it is difficult to deal with a mess that is prematurely split up.
You can plan by using a decoupled architecture, data structures that are flexible, and modern programming languages that are efficient.
If you have an efficient workflow where it is easy to make and deploy changes, the correct architecture will naturally emerge. You will continually simplify things as you see common patterns.
And simple patterns are what scale to any problem.
Had a nice visit with Rod and he asked me to describe what a Platform is in 20 words or less, so here we go:
YOUR Platform is the collection of technology, tools, and processes that enableyou to differentiate and consistently deliver your products and services.
sorry Rod, that is 22 words
We have discussed this before, but I want to revisit this question occasionally and see if the definition improves over time.
What got added this time is “differentiate” and “consistently”.