Do one thing well and communicate with others
This blog post is about software design.
Matan wrote a blog post One-Thing Apps in which he says:
I don’t want what they call a Super-app. I want an app designed to solve something specific, one that has been thoughtfully crafted to address a particular need.
I wholeheartedly agree. Whenever I see social media sites or other big tech corporations trying to make people do everything in their platform, I feel so worried about the future. Especially because I believe they might one day succeed.
The convenience for a regular user is so high. But the old saying about eggs in one basket is not pointless. If you’re not quite sure about it, imagine this: if you’re using Gmail and relying on that for logging into services, imagine what would happen if they would shut down your access and would not recover it. How much access to other places would you irrevocably lose? For a lot of people, I imagine: a shit ton. It’s a nightmare situation, especially given how difficult it is to even get a response from a human being at these massive corporations.
So I don’t want a super app or service. I want a lot of small apps and services that do one thing and do it really well. The crucial bit with that design is that these small apps and services must communicate with each other.
This thinking aligns with the Unix Philosophy’s first two points:
- Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new "features".
- Expect the output of every program to become the input to another, as yet unknown, program. Don't clutter output with extraneous information. Avoid stringently columnar or binary input formats. Don't insist on interactive input.
Imagine if streaming services like Netflix or Disney+ would be the providers of the content and people and companies could make competing clients to use them while still maintaining the authorization and payment stuff in the hands of these companies.
We could have so many great streaming clients that could be focused on different use cases rather than trying to serve everyone and thus being very bad user experience for many. But we’re locked with the combo of content and apps and we can only experience Netflix content with apps built and controlled by Netflix. A more interoperable system would also allow creations of apps that combine multiple services within one UI, given that you have subscriptions to those services.
I know it’s an utopia and very wishful thinking. Especially given the total opposite direction we are heading towards. But one can still hope. In addition, I do think it’s possible in the more indie and open source software side because many apps already operate this way there.
I’ve been very happy with Obsidian lately because it keeps my data mine, local and interoperable with any other software that can operate on Markdown files. It adds its own tooling on top but in the end, I can still run custom scripts from command line, open my notes in other apps and do whatever I want and they will still work when I open them in Obsidian.