Encourage Your Users to Write Their Own Clients
Published on 2026-07-20
As a software developer, one of the greatest abilities I have is to make my own applications. By my tastes, a lot of applications aren't great. That's not necessarily the fault of the developers or designers, it's just they often don't fit my wants. Sometimes it's down to technology choices leading to a sluggish or resource heavy application, maybe the aesthetic just does not do it for me, or it could be as simple as it not fitting my mental model. When an application offers a way for me to bend it to my will, it suddenly has lasting power with me.
A great example of this in the software development community is Neovim. It's pretty common for people to start out with a pre-built configuration, designed around the greatest common denominator of users. That's a great way to get started as it helps you see some of the things that are possible and give you a taste of what you like and what you don't like. Once you're comfortable with using vim, you'll eventually want to cater it to your exact needs. My config, for example, opts for no file tree, as I tend to use fuzzy pickers for navigation. And once I got used to oil.nvim for actually managing files, there was just no need for a file tree in my workflow. You, however, may swear by the file tree and have it in yours.
I'm not saying every application needs to be crazy modular, have a plugin system that lets you dictate how everything works, and be everything to everyone. Rather, you should give people the tools to take the unique parts of your application and build something with them.
I think defining what you are offering your users is an important first step in this. I tend to put applications into two and a half buckets:
You are a data provider. Your application isn't about the presentation of data per se, but the fact that you are the one offering it. Think YouTube, GitHub, social media, etc.
You are an action provider. You provide actions that people will use to act on data. For example, resizing an image, formatting code, etc.
You are a data transformer. Your application is all about interacting with data. Think a web browser, code editor, photo editor, writing application, etc.
As a data provider, any frontend you offer does not really matter. People are just there for the content you're offering. For example, you don't watch YouTube because you love the platform, it's because you enjoy the creators. If there were no creators on YouTube, you would not use YouTube. Data providers should offer APIs for interacting with the data so that people can interact with it in a way that makes sense to them.
As an action provider, people really only care about the functions you offer. You offer a better way to scan a document? Rather than forcing me to scan in your application, let me fit it into my workflows exactly how I want it, allowing me to seamlessly do what I need to do. Think Apple Shortcuts: applications provide App Intents, allowing you to perform actions and chain them together. This is something that I hope will become a bit more common, as public APIs are generally pretty limited or aren't offered at all. One of the best things to come out of the LLM craze is the Model Context Protocol, which encourages companies to offer up access to tools that models can use to perform actions. However, MCP is an open standard and does not actually require an LLM to use. They've effectively been forced into making APIs, which they may not have offered before, so that they aren't "falling behind."
Lastly, as a data transformer, you're offering an interface for interacting with data and actions. You may provide your own data and/or actions, or may use others', but people use you because of the experience you offer. Obsidian, for instance, is an ideal here. You're not forced to have your files in a proprietary format, locked away in some cloud server. It offers all the functionality you really need out of the box, but there are some great plugins for catering it to your needs. If you decide it doesn't work for you, then you can jump ship without going through a painful migration process.
Too many apps, that are really data or action providers, pretend to be data transformers. I understand that there needs to be some profit incentive for many of these services to exist, but the fact that there is nothing available, even to paying users is a bit sad, if not egregious. There are many companies that pay six figures or more for access to applications just for their data, but then the applications make it absolutely intolerable to get to the data in a way that's meaningful for the company. The amount of times where I've run into situations like "you need to export a list of 3,000 items from our system? Sorry, you can only export 25 at a time," is insane. I do not care about your silly little interface, give me the data I'm paying for.
I hope going forward people recognize this pattern, realize what it is they're offering, and encourage users to make their own applications. Whether they literally program their own, or fit it into an existing one a la Neovim, it doesn't matter. Software should not be so rigid.