Throughout my career as a developer, I’ve always had a reluctance to manage data. Whenever I start working on an app, my first thought is usually, “I don’t want to deal with data management.” Recently, while building a small concept project management app, I began to consider the possibility of turning it into a full-fledged app. However, I quickly realized that, especially for web apps, managing user data is an unavoidable fact of life.
Unlike desktop or mobile apps, which have various options for data management, the web presents a unique challenge. As web developers, we not only have to write the software but also handle all the data that users interact with through our applications. Unfortunately, the web lacks a built-in storage or data layer, making data management a necessary burden.
The responsibility of managing user data comes with various concerns and liabilities. Firstly, as your user base and the usage of your app grow, you need to scale your data storage accordingly. Additionally, security and privacy become major concerns. What if someone hacks into your server and compromises or steals the data? Ensuring proper backup, restoring procedures, and auditing becomes vital. Multiply these worries for every web app you use, and you can see why managing data can be a daunting task.
While browsers do offer temporary data storage solutions like local storage and IndexedDB, they are not sufficient for long-term or large-scale data management. There have been some attempts to address this issue on the web, but the ideal solution would be a data layer managed by browsers, with every app connecting to it. Third-party services could then integrate with this centralized data layer.
We can draw inspiration from the “Sign up with Apple” feature, which streamlines the signup process for users. Imagine if major companies like Apple, Google, or DigitalOcean provided access to their cloud data services for any app. For example, using apps like Trello or Basecamp would allow users to store their data in their own trusted cloud data provider, eliminating the need for third-party servers. The browser could act as a bridge between the app and the storage, managing permissions and APIs.
It’s important to note that this solution would only apply to a subset of apps. Apps like Facebook or Gmail, which require collaboration and a multi-user experience, would still need centralized storage. However, for the majority of single-user apps developed by solopreneurs or indie hackers, this approach could simplify data management significantly.
As an example, I use Bear, a note-taking app that syncs seamlessly across my iPad, iPhone, and Mac devices via iCloud. However, there is no browser version of Bear because syncing through a website would mean storing my personal notes on their servers. Bear doesn’t necessarily care about the content of my notes; they focus on shipping software updates. If they wanted to, they could make use of my data, but they don’t have to.
Now, going back to that concept project management app I mentioned earlier, I realized that building it as a desktop app using Electron might be limiting its reach. However, if I were to develop it using Swift, I could create a single codebase that runs on iOS, iPadOS, and Mac devices. This approach aligns with the “dream” scenario, where Apple handles the data storage, allowing me to focus on delivering a great app.
Of course, there are other challenges to overcome with this approach. One major hurdle is the walled garden nature of Apple’s ecosystem. While it’s possible to make the web more app-like, companies like Apple may not have a vested interest in supporting this approach, as it could compete with their own App Store business. It remains uncertain whether Google would have similar concerns. Nonetheless, the idea of using a distributed database and data storage for user files is appealing, as it removes the burden of managing them myself.
In conclusion, although managing data is an integral part of web development, the lack of a built-in data layer introduces complexities and concerns. While temporary storage solutions exist, a centralized data layer managed by browsers, with support from major cloud service providers, could alleviate many of these challenges. This approach would simplify data management for single-user apps, allowing developers to focus on building great experiences without the added burden of data storage.