The total entropy—or lack of predictability—in a system increases over time, according to the second law of thermodynamics. Disorder compounds. And people’s problems in life—like needing to get to work, or requiring liquid to hydrate—are no exception. Problems stay problems if not solved, and increase in number over time.
Luckily technology obeys the same laws. More randomness inside our complex system of life means more ideas and better solutions. Each bit of tech stands on the shoulders of giants. Sometimes this is called “cumulative innovation” (see Cambridge or JSTOR). There is no iPhone without metallurgy.
Products solve problems, and there’s a heuristic for creating the best possible products, which are best-in-class and first-in-mind (more on this here). The concept of a primitive is core to creating this class of products. The world’s best products…
Build single primitives, the smallest problem-solving unit
Build the primitives with existing technology
What are primitives in a product?
A primitive is a custom building block, specific to a product, that can positively adapt over time.
This primitive becomes the product’s go-to solution. Usually, it’s custom to the business or product. It’s repeated ad nauseam. Because the product is first-in-mind, customers will think of the product when they need the problem solved (l think of Google when I need to find something) and expect the primitive (the search result) to solve it. Here are some examples of primitives today:
A ride on Uber
An app on iOS
A product on Amazon
A search result on Google
A Zap on Zapier
A meeting on Zoom
A message on Slack
A drink at Starbucks
These are all primitives that are custom to the specific product. Each one of these primitives was built with existing technology (RE: cumulative innovation). They stand on shoulders. Starbucks didn’t invent the cup. But they do offer the same size drinks, whether it’s hot coffee or iced tea.
As a designer, Figma is one of my favorite examples. Figma doesn’t happen without almost-free storage, fast internet, and even faster browsers (deep dive on Figma here). Figma decided to combine this existing technology in a new way to solve a problem for product designers.
The Zapier product is another good one. A Zap as they’re called, is a logical workflow, “if someone tweets at our business account, send the tweet to Slack, and mention the right people”. This solves the problem of needing an engineer to manually connect different pieces of software together. It combines existing tech, like APIs, to create a single primitive, the Zap, which solves this problem repeatedly.
Stacking primitives
A primitive is often repeated in the product, to solve a recurring problem. Lots of great products use multiple primitives, but they are nested or stacked. There is a parent-child relationship.
Notion is a great example of this. Notion has blocks as a primitive: individual chunks of content, that can be formatted in different ways (you can swap bullet points for checklists). These are collected into pages, which can be nested as well.
Github is another example. You can consider a repository a primitive: whether it’s a website or an operating system, the repository is the same. Repositories collect commits on branches (more primitives) that are nested, and each solve a specific problem.
Types, properties, features over forks
Single primitives prioritize improving the primitive over forking the user experience into two paths. This is the single piece of the rule above: there are not multiple primitives at the same hierarchical level. There’s only one best solution to a problem. If you fork the road, you’re making users choose how to solve their problem. Winning products don’t do this, they make this decision for the user, and create the best possible solution.
A meeting on Zoom could be an internal call or external call, it could be between two people, or broadcasted to many. There are options, types, and features within the primitive to solve these distinct situations.
Single primitives are a custom building block for a product, the smallest problem-solving unit.
Single primitives combine existing technology in a useful way (using existing technology is more stable and can be more relatable to users).
Single primitives can be stacked and combined (messages are stacked into channels in Slack, blocks combine on pages in Notion). The primitive adapts over time, adding features and power (Zoom adding reactions to the meeting, Github adding comments to the repository). This is why primitives avoid forking to many paths. This maintains familiarity for people using the product, reduces friction, and creates the environment for exponential product value to be added over time.
An Uber ride, a Zoom meeting, a Notion page, a Slack message, an Amazon product, an iOS app, and a drink at Starbucks are all primitives.
Recommendations for different stages of a product
It’s worth thinking about your product primitive at any stage of product development. Your primitive is your bread and butter, your differentiator, your primary solution to someone’s problem.
If you’re at the early stage and building a product, you could think about one primitive that can solve the most important problem, and be repeated each time the problem comes up. Try not to create multiple paths for the user. Multiple things for them to create or interact with. If you’re a bit later, you could think about what the primitive is in your product currently, and how you can continue to use that container to solve new and existing problems. Then, you can think about the hierarchy, and how to stack primitives together.
You can use the examples above to ideate on your primitive, of course after defining your problem. Make sure to leverage existing solutions: like sharing, text formatting, and comments (just as a few examples, the list is long). Culturally, these existing solutions adapt over time (“reactions” may be pretty common today in 2023). You can use these common patterns to create a product that feels more simple. This is how you get someone to say “that was easy to use”. Because they’re familiar with the experience from doing it before.
This was a deep dive into the smallest problem-solving unit: the primitive. It’s key to building best-in-class products and solving world-class problems. If this all feels a bit abstract, you can go upstream to the well-worn “simplicity” principle. Simplify, simplify, simplify. Focus on one thing at a time and all of that. It’s not wrong.
Awesome! Always love your insights! What would be the primitives for Twitter, Reddit, Discord, Patreon, and OnlyFans?