# PROBLEM

Software is fragmented. This leads to poor user experience.

- I have 100+ apps on my phone

- I have 1000+ online accounts

I need to discover these apps/websites/services, repeat the same information over and over again, learn their features and limitations. They don't talk to each other, which means that I need to continuously update them. We're humans, we're smart, we adapt easily, we got used to it, we don't even notice. However, when you take a step back and look at it, it's a mess.

Generally, when I try to show the problem to people, they blame the user. They say there's no need to use that many systems. And they're right. In the real world, I can get by using only English (or in my case, French) as a general-purpose communication interface.

The problem with software is that people tend to associate one system with one use-case. One app for this, one app for that. Do one thing, and do it well. That's the general direction a lot of software is going in (i.e., Facebook Messenger vs Facebook). When people tell me I should use fewer systems, they also imply that I should accept to cover fewer use-cases with software. And while most people think it's reasonable not to use software for various things (unlock doors, turn on lights, preheat oven, change channel, pay goods, track calories), I consider them short-sighted. We can't afford to choose which activities deserve the power of software and which can continue to be done the old-fashion (and so-called "simpler") way. We need software everywhere.

Beyond the consumer-facing UX fragmentation problems, as an application developer, I'm exposed to the even uglier side of things. The arbitrary design process, the compromise-ridden business decisions. Most people have no idea how expensive (in time and resources) it is to build the simplest of software in the real world. Take 100 different teams, and they'll all design the same system in completely different ways, repeating the very same mistakes. How many different user authentication systems have been implemented in the world? How many caching layers? How many ORMs? How many online stores (all with pretty much the very same features, from the image gallery to the cart). This is insane. This makes SAP look sexy.

Now, take the top 100 most popular apps and websites. List out all of their features. Remove duplicates. Remove duplicates. Generalize. Remove duplicates. You'll realize they all share 80% of the same features, probably more. Don't be tricked by functional synonyms. A like, an upvote, a favorite, a share, a retweet, a rating, a pin. They're all the same things. You can reduce the functionalities of most app to a very simple vocabulary. Basically, people have things, people want things. The only challenge is in describing things. And that's what we need a tool for.

# SOLUTION

The customer is NOT king.

Stop thinking that software should be tailored to its users. People don't know what they want. People have a tendency to under-generalize. They think that because two things look different, they're different. They're wrong.

There is not as much difference between hailing a cab, ordering a pizza, sharing a video, shipping a package, flying to Hawaii, renting a room, sending money, taking an elevator, and selling your couch, as people are lead to believe. They're essentially the same things, and software should treat them as such.

We need a general purpose communication platform. Not one monolithic app to which all possible features were added, but something that can be extended to a wide array of use cases. I'm not talking about plugins, micro-apps, or a web browser. These usually give too much freedom to developers, which once again results in fragmentation. I'm talking about a language, English on computer-steroids.

By communicating through a computer, this language gains access to the world's knowledge. This language can challenge your thoughts. This language can predict your thoughts. You only need to be as verbose as what the language doesn't already know about you. With time, the language becomes more like a to-do list a la Google Now (i.e., tells you what to do next) than a notepad. This language is your interface with the past, present and future world.

English is text-based and linear. You start from nothing, then a word, then a sentence. I don't want a language where you start with nothing. Start with the entire state of the entire world (as some sort of hyper-graph), communicate by editing it. Edit edges, introduce new nodes. One place for every idea. Never repeat, support instead. Invest your social credit to augment the credibility/value of facts. Use it as a way to describe both the past, present, and future (prediction and/or wish). Follow the path of PROLOG, RDF and lojban.

Graph-oriented communication is what the world needs. I believe we can make it accessible, not without a learning curve, by the use of inference and custom renderers. I'm not saying it's going to be easy, but I can't foresee it not being done.