Problem

We need a better way to store user data:

  • too fragmented: user data is spread across dozens of apps/platforms
  • vendor lock in & walled gardens limit user choice
  • privacy issues & stolen user data are too common
  • user data depends on third parties - can be shut down, censored, lost, etc

Objectives

The following are the main goals we set out to achieve when designing Basic:

  1. User should be able to revoke data from an app, without it getting lost or deleted
  2. User data should be interoperable - data should exist in multiple apps, and sync automatically when updated
  3. Privacy: User should have the option to use apps without giving developers read access

Furthermore, any new database should be:

  1. Easy: it should take only minutes to design and deploy a database, and integrate it into any stack. It should just work.
  2. Relational: most devs prefer relational and typed models
  3. Serverless scale: Devs should never have to worry about performance - database should automatically scale up with growth, and scale down to zero when not in use.

Solution

Basic is a serverless, relational database, for user-owned data.

Databases have always worked the same way. An application that wants to store data will create and host a database, and use it to write and read data. When an end user - a client - wants to view their data, they send a request to the application, which then looks up the data in their database, and then returns that information back to the client.

traditional diagram

In this current model, data lives with and is controlled by the application - and the user must request access to it.

This presents a number of problems, both for the the user, and the application developer. Developers, for one, have to scale their database as their app grows, and might have to save and store data for millions of users.

This model presents a further problem for the actual users though - they don’t have any direct access or control over their data, and must rely fully on the application.


Basic presents an alternative. What if data lived with, and was controlled by, the user - and applications requested access to it.

basic diagram

In this model, rather than all data being stored with the application, user data is instead stored in a user-controlled database that the application has access to. Since the user data exists independent of the app, this leads to some key benefits:

  1. User can revoke access to data, or limit the read/write permissions
  2. User can give multiple apps access to the same data, creating a source of truth for all personal data
  3. User data becomes interoperable, and can easily be transferred across apps

Furthermore, it provides benefits to application as well:

  1. Easier scale: Devs don’t have to worry about storing user data, or scaling their database, since users will “bring their own data”
  2. Improved security: Sensitive data doesn’t need to be stored on app servers
  3. Devs can make it easier for users to import their data, removing friction from onboarding