Hello everyone,
I’ve been thinking a lot about the lifecycle of software applications. The cycle is as old as personal computing: a person buys/leases a piece of closed-source software, invests time in learning and entering data, and in the end application support is dropped for a variety of business/technical reasons. Software as a Service has only exasperated this problem.
The best-case scenario in these situations is a propriety input/export feature that is almost never in a useful format for interoperability. The fundamental problem is that business interests never align with robust data takeout. And as long as data is trapped within a single piece of software, we won’t have malleable systems.
With that in mind, my team at Yorba has built a prov-o (the provenance ontology)/schema.org-based export/import system that tracks the most critical facts our member’s application state. This decision has two important business consequences:
- Our main product is a SaaS offering. Building this makes it easy for someone to terminate their subscription and fully exercise their right to remove all their personal information from our system with no consequence. Because down the line they could simply re-upload and pick up where they left off.
- Building this on an open schema means any competitor could copy features and trivially bootstrap their product.
It also opens up the possibility that others may build on this data, which makes the data even more valuable. That’s the happiest path for everyone.
So that’s the gambit. Regarding the technical details, this data provides an auditable, interoperable history of actions that our members have taken with organizations and businesses using Yorba. Every event on Yorba is represented as a transaction (a verb) that happens between two parties (nouns: you and an entity).
Core Principles
- Every action is added to an immutable event stream represented using
@type(e.g.,AddAction,RegisterAction,DeleteAction) and is part of atargetCollectionof similar events. - Every event has an
agent(the party initiating the action) and aparticipant(the party affected by the action). - Events in Yorba are often based on data from outside systems. These events include the provenance of the claim being made using
prov:wasDerivedFromto trace external sources (e.g., an email’sMessage-ID).
We did not invent any of this schema.
This also puts Yorba in a good position to federate this data (local-first, Solid, etc…). While the metadata about this data is critical for the operation of our application, the actual facts (personal information) within are just a liability for us as we don’t sell user data nor do we use it to train LLMs. Furthermore, keeping it off our servers lightens our legal compliance load as a small startup that’s not taking VC. We’re still looking for the right substrate for federated/distributed storage. Would love to hear any success stories there.
Thoughts? Is anyone here aware of a precedence? Happy to share more details too.