Maybe you have read the new infamous Steve Yegge Google platforms rant. If still shared I'd highly recommend reading his full Google+ posting but I'll recap a bit of it here:
At least that's the core gist of it and people will point out different parts as key points but this notion of platforms really clicked for me. This has a lot to do with timing in that I had many thoughts about direction of several of my projects and ideas for my job as well as side ones. This notion of building platforms that enable solutions, I believe, is the next step in computing for many areas with healthcare, education, and environmental causes as my focus.
My website, in general, exists for me to flush out my thoughts on platforms via writing, but I'm not here to just espouse the idea but to help me figure out how to best implement those ideas.
What is a platform then? My simple definition:
Product != Platform
Platform = Framework + Open Extensibility + Infrastructure + Killer App
The structure required for an ecosystem
Frameworks can be thought of as the environment in which things exist. This is not just the rules that must be followed but it abstracts out underlying complexities such that systems using the framework can focus on the problems they solve. One could argue that Earth (and physics) provides a framework in which ecosystems can exist. Laws of gravity and rainfall patterns can make life difficult but without them life would not exist.
The framework provides the context of accomplishing tasks in a structured manner. Most software developers and start-ups don't seek to build an entire world and ecosystem but they have a specific area of problems in mind. Facebook wanted to make the Internet more directly social so it's framework (API) works on the level of sharing things between people and seeing what others are doing. Without this structure that limited focus, anything could be done and, in such systems, nothing would actually get done.
This alone is not enough to be a platform, which is the greatest mistake everyone makes. Frameworks disappear all the time for many reasons, mostly due to a lack of adoption. Frameworks inherently have to be used to do anything and thus people must either be forced into picking up the framework or find it compelling enough to take the time to learn. If a framework is too hard to use then it is ignored or eschewed. If a framework is too narrow then its use is limited.
Allow others to build and define their own niche
The narrowness of framworks spells the downfall of many. If a framework exists to do very specific things then it is more of a product to accomplish those goals. To fall into a platform model, frameworks must be extensible. To be extensible, the rules of the framework must be fairly granular. For example, take the concept of friction, friction allows us to move because a frictionless world would have no force to propel us forward. A framework that defines friction instead of defining the act of walking would require much more work to now provide for wheels. Yes, I know friction is not a fundamental force but that goes with the notion that frameworks do need to abstract to some level.
I would further suggest that openly extensible frameworks win out over closed ones. The reason for this is because one should focus on their own money makers and goals. Closed frameworks have to chase customers and constantly try to put in the user specific desires. An open framework basically allows punting on doing customizations unless it's for the direct product the platform was built to do. Also open frameworks get extended and contributed back to the community allowing on to take advantage of the work of others. Win-win.
The best case scenario for a platform is getting surprised by what someone builds on top of it. One can do very well with their own tools on the platform but having someone take it in a new, amazing direction is what makes a platform win over the world. Someone helped prove out the framework and it only requires as much effort on the platform builder's end as doing what they already are doing.
Hadoop is a great example of an open framework. The core is just HDFS and MapReduce but modules such as HBase, Pig, Avro, Hive, ZooKeepr are all a part of a larger ecosystem. The HDFS developers can remain focused on making HDFS better.
If you build it, they will come
Here's the main thing that framework makers forget: hardware and IT is hard. This is the Field of Dreams part of platforms, "If you build it, they will come." One could produce a great framework that does awesome stuff on clusters and is super easy to use but how many people out there have a cluster on hand and the resources to hire the right people to actively manage one?
Frameworks without infrastrcture are just like policies without the support. I'm sure everyone has dealt with policies handed down from high above but they made life difficult instead of helping anything. Many times this is purely because a policy is created to cover the asses of the organization. If an organization really cared about making things work better than resources would be dedicated to make it happen and easy for people to be compliant. For example, I work in medical informatics, if the VA only had a policy of all data being on secure servers without providing IT departments with the ability to create secure servers then it would be a shoot show with data being stored willy nilly because researchers don't (and shouldn't) know a lot about setting up servers.
In other words, infrastructure, allows people to focus on their real concerns and do good work or at least play with new and interesting ideas.
Prove it and profit
Finally the keystone of platforms, one must provide a killer app to showcase their framework and their infrastructure. The killer app not only proves a system works but this should be the bread-and-butter of the organization running the platform. Many Internet start-ups develop a hosted framework and then hope they'll make money off of it somehow. This has not worked for over a decade now and it probably will only ever work in a few cases. The killer app though can be a product that makes money and does things well, in fact, it must do whatever it does well. This does not pigeon-hole a platform as the good people that will be atracted to a platform can see beyond any particular use case.
Amazon provides a great example of this idea and probably a big reason something even exists to rant about. Amazon.com is the killer app for Amazon Web Services. It was a necessity for Amazon to build it so if the platform didn't take off, heck, they still sell a ton of products every minute. But we all see that Amazon, using their own platform, can sell a ton of products every minute. That makes people with their own problems to solve see that this is a system that can be used and relied upon. One may point to the outage that occurred that took out a ridiculous amount of the web, but I feel that just prove the point even more. All those websites were built on top of Amazon's platform and nobody knew it until a hiccup.
System design to enable elegant solutions
After spending a couple years in both medical informatics and adult education I am beginning to feel that their is plenty of room for system designers. Too many solutions keep rebuilding the proverbial wheel. It's all models and frameworks that have to redo the "backend" to reach their goals. That is not to say they aren't fantastic solutions, it's that they tend not to be scalable in adoption. Read a paper or news article about some facility doing something awesome and then ask how does another facility get there? Usually the answer involves requiring resources A, B and C, all of which are very hard to find, purchase, or manage.
I believe this is the sweet spot of system designers for the coming future of applying social tooling and massively scalable technology to real problems. How do we enable facilities and people to do good work? Make A, B, C cheap, easy, and available. Let them do the customization to suit their field and needs to not just answer questions but to achieve real world results. Consumers don't need more stuff but there are plenty of people who could use good computer science and software engineering skills.
* Stolen from Colbert Report