“Cities have the capability of providing something for everybody, only because, and only when, they are created by everybody”, said Jane Jacobs, a prominent architect, in her famous book, Death and Life of Great American Cities.
In many aspects, software is like architecture. “Software is eating the world” - we are spending increasingly more time in our digital spaces comparing to physical ones. We’re increasingly reliant on our technologies to seek truth, do many kinds of work, and even to extend our minds and connect them with others.
But most software architects hardly consider their “software dwellers” when designing them. Our data - conversations with best friends, photos of loved ones, places to go to, books to read - all subsumed to software creators, in opaque boxes of cloud services, isolated from each other, ripped away from their contexts - from our lives. When I’m writing an email to someone, why shouldn’t I be able to pull up relevant social media DMs, notes I’ve had with her over the years, or books she recommended me to read? We’re reliant on our digital devices to be our “extended memory”, but decades after the internet, we still have to remember which apps to search for our digital lives in the first place.
Treating users as holistic beings
In my opinion, these shortcomings of software architects come from a form of reductionist thinking - “no matter who you are and what you do, we offer the same service to you - the customer.”
This mode of thinking is great - they allow developers to target the widest range of people and their needs, and make software affordable and available to nearly everyone. But along with company incentives that only seek to maximize users’ values as customers, it’s easy to see how it can be problematic. There’s almost no point in integrating third-party data and providing APIs - rather than syncing with external data that doesn’t fit in database schemas, with low expected return for each integration, just provide an “import button” so that everything can be converted to our ontology, while maximizing customers’ engagement with our product.
Unigraph provides an alternative approach - “what if we create software or digital spaces that treats users as holistic beings?” We believe that the human experience is irreducible: we cannot take anything we created away from the original context and expect it not to lose some of its meaning. A contact is not just some phone numbers and email addresses - it’s an experience with every message and email you exchange, every meeting you have and related meeting logs, every Tweet and LinkedIn updates they sent, and every time you mention them in your notes. There’s no reason to separate them in different silos only because different software vendors are involved.
We built Unigraph because we believe that our experiences, and our data, are more than sum of their parts. In Unigraph, you can create a contact (or sync from Google Contacts), connect them to their social media accounts and email addresses, let Unigraph automatically archive and associate direct messages, emails, calendar invites and meeting logs with them, and reference them in your notes or todo lists with the
[] wikilink syntax. Then, when you’re writing something in their research area for example, they will automatically resurface on the sidebar, and you can open everything associated with them and the research topic on the sidebar in one click, without leaving the current context.
Example: psychological flow state and user attention
As an example, one characterizing feature in Unigraph out of the human-centric design principle is how easy it is to navigate your work while remaining focused.
Being focused on the internet has become increasingly harder. Mostly, this friction is simply due to how isolated each app is from another. If I was writing a reflection on a project and has to look something up, I’d have to jump out of the writing context first, then spend a lot of time going through all possible places relevant info could be stored, at the same time risking being distracted by anything that pops up.
In Unigraph, this interaction is simple - just open a search window or sidebar, then type in your queries and hit Enter. Unigraph will perform a full-text search on the whole database, return results within a second, and rank them based on relevance to the query, number of backlinks across the database, and quality and relevance of them.
This graph-wide search is also deeply integrated into every part of Unigraph - from creating a todo item, to taking some notes, the
[] wikilink syntax not only searches for relevant notes or contacts, but for any type of object and uses the same powerful algorithm as above under the hood, and then pop up related results to link to under the text, without interfering with the current workflow.
Pluralist perspectives, personalization and end-user programmability
Another important aspect of building a human-scaled digital space, is recognizing and representing variances in ways all kinds of people interact with different kinds of media. For example, a Tweet and a Pinterest Pin encode different ways to view and to interact with - even if both contain texts, links and images. The former emphasizes on textual understanding, and the latter on visual impression. Additionally, these two types of data is different from a long article, too, which requires a much more focused state of mind while reading.
The RSS protocol is an example of something not respecting such differences - to an RSS reader, there’s no difference between a Tweet, a Pinterest Pin, or a New York Times article. As a result, you’d often have to click on an abbreviated title to see the whole tweet, even though its entire content could be displayed with another line of text.
Meanwhile, different kinds of data in Unigraph can have custom views that fits best to those data types. An Email message in your inbox can be displayed as a “block”, showing the avatar and name of the sender, title, timestamp, and an abstract of the content. As you click on it, it will be displayed in a “detailed object” view in another page, showing the full rich-text content of the message, and contact information of the sender. A todo item, on the other hand, has tags, start/due date, people assigned to it, priority, and optionally notes for the task.
Even with the exact same type of data, different people, in different contexts, might want to see them differently. For example, a normal user reading their email would probably prefer to see the time received in relative time, but prefer to see time converted to recipients’ timezones when scheduling an international video call, while the company’s legal department might prefer to see the same data in absolute time.
In Unigraph, a type of data can have multiple representations, ranging from simple inline texts and labels to complex blocks that stand on their own. More importantly, these atomic types can be arbitrarily small, like
time_point, which represents a point on the timeline, with a timestamp, timezone, and an optional name for reference. Objects in Unigraph use these basic types as building blocks in both their schemas and views, so if a
time_point has different views with relative time, time converted to timezones, and absolute time, everything that uses
time_point can change between these types of view depending on the context.
Finally, the ability to create data with fractal complexity means that users can create their own data types and views using existing building blocks, without the need to write any code. For example, if I want to create a Book type for every book I’m reading, I can add a “cover image” property (which is of type
icon_url), an “author” property (of type
person), a title (just a string), tags, reading notes (of type
note_block), and external links (like a goodreads url, or a wikipedia link, of type
url). All of these types, from simple, primitive ones like
icon_url, to complex ones like
note_block, all have different views that can be arranged in a visual editor to create any type and their corresponding views unique to the user’s needs.
Building a human-scaled digital city, one brick at a time
“The medium is the message”. To pioneers like Doug Engelbart and Ted Nelson, computers and the internet are printing press-level inventions, a new, interactive medium beyond the spoken word and the written text.
Although the contemporary consumer internet is nowhere near that promise, it’s only the tip of the iceberg. Unigraph is taking the first steps towards building that medium, by organizing all your data into a single graph database, and by building atomic, interactive schemas and views for composing these data.
With these as building blocks, we’ll start building a community of power users and developers to create integrations and apps on the Unigraph platform. Unigraph’s architecture is extremely extensible - the entire note editor, for example, which offers a Roam-like outliner experience, is implemented as a Unigraph package in the user space. Moreover, with Unigraph’s data and view primitives at your disposal, creating different types of views is easier than ever: as an exercise, I prototyped a Kanban board that accepts any Unigraph data type with drag and drop and autocomplete, and it only took me 2 hours with 200 lines of code.
Just like what Jane Jacobs said, software can provide values to truly everybody only when they’re designed by everybody. Designing software on the human scale doesn’t only mean creating intuitive user interfaces, but more importantly entails an approach of empathy - to understand the diversity of ways to use software, to understand users’ wellbeing outside of the service provider/customer relationship, and to build software based on these insights to give users the power to create their own experiences with technology, and to embody their lives in them.
That’s what we’re heading with Unigraph - we’ve raised an angel round backed by angels like Andrew Sutherland (founder of Quizlet) and Jeromy Johnson (first engineer at IPFS). If you resonate with this and want to talk to us or work with us, feel free to reach out to us at @getunigraph, @thesophiaxu, @exgenesis on Twitter, firstname.lastname@example.org via email, or join our Discord server at https://discord.gg/vDTkKar5Vz.