Flying cars have been a symbol of technological progress. We have been predicting that the sign of a modern society will be the mode of transportation that can take off from a ground and travel in space along any direction with minimal effect to its surroundings and very tight manouevering. We envision this would solve the congestion problems we face when we are stuck in traffic.
However flying cars are an example of a very generic solution. A generic architecture has a lot of freedom. It can be bent in many possible ways to achieve several different things. However because of those overwhelming possibilities we also have to work on ways to restrict many of them, because they don't pertain to the problem we are trying to solve and can cause damage. In case of flying cars we will have to worry about these problems.
- How to train all drivers to become pilots so that they could fly in three dimensions.
- A car on ground will be hard to get into a position where gravity is pointing in wrong direction, but a car in air can easily turn upside down. How to avoid that from happening?
- We will have to deal with a very complicated signaling framework to route the traffic. Imagine the difficulty of navigating through a round-about that has eight roads leaving it. Now imagine doing it on the surface of a sphere with thirty routes emanating from it.
In order to solve all these problems we will have to put artificial restrictions on the flying cars so that people driving them don't shoot themselves in the foot. The goal of most of those restrictions will be to confine the cars in two dimensional space, something we already have.
Freeways were the best solution to solve the congestion problem we faced in tiny city roads. The solution was incrementally achievable in terms of technology and user education. It worked for existing cars. The drivers didn't need to become pilots.
This is a useful analogy to keep in mind while designing Software architecture. Before designing the most powerful and generic framework that can solve all the problems in the world, one has to consider the costs of dumbing it down to properly solve a specific problem at hand.