Sign up

discovery

How to Build a Product Discovery Process

Dan Feusse

MagicBell's goal is for customers to love our product - and for them to feel panicked at the idea of us not existing.

User research and discovery are paramount to achieve that goal. Our team built a user research process to systematically and effectively approach discovery. We also coded up a pretty cool Google App Script to visualize findings. Hopefully, our approach can help your team with user research!

Approach

We love Notion at MagicBell. It's no surprise it's the tool of choice for taking notes and recording information during discovery.

Our goal for discovery is to define measurable experiments, conduct interviews to test the experiment's hypothesis, gain learnings, and visualize the results. We also hold general user research interviews to learn about unknown pain points.

Three primary documents drive our engine - experiments, interviews, and our dashboard.

Experiments

Before development, we formulate an experiment to validate the work we're considering. We use the table below to structure and track ongoing experiments.

An example of an experiment is, "We believe groups functionality for non-technical users leveraging the UI to send notifications will result in more notifications sent using the Compose window."

Because our team clearly defines success metrics before an experiment begins, it's easy to have a binary outcome. For this example, a success metric could be 1/3 of interviewees describe manually copy and pasting individual users into our Compose window as a pain point.

'The Startup Owners Manual' is a great book that dives into experiments in depth.

It's important to note; we also conduct general interviews to uncover pain points we may not be aware of.

Interviews

Now we have an experiment to run; we can start talking to users. We use a Notion database with a record for every interview. The columns (i.e., properties) - name, date, organization, requests, score, and experiment - summarize each interview well in the table view.

Each column provides value:

Name, Date, and Organization

No explanation is needed - this is necessary information.

Requests

It's key to focus on user pain points and problems, not suggested solutions. I then map pains to epics on our roadmap.

Score

Not all pain points are the same. A scoring system, especially when running experiments (we'll get to that soon), helps weight pains and prioritize our roadmap.

Our scoring system was adopted from "Lean Analytics" and has worked well for me in the past. The perfect score for an interview is 55 points. A good score is 35 points or higher.

Experiments

We also tag the experiment the interview is part of, if relevant. How do we run experiments? See the Experiments section below.

Content of the interview

A strength of Notion compared to Excel is each entry in the table is a clickable document containing notes on the interview. It's crucial to keep discussions as consistent as possible. Notion templates lead to consistency and make interviewing easier. Every template starts with:

  • Who - attendees
  • When - time, date, location
  • Why - purpose and goals

We create a template for each experiment. 'The Mom Test' - a book we wholeheartedly recommend - helps shape the questions. We dig into the behaviors and actions of the interviewee. Some principles that guide questions we ask are:

  • Gather concrete facts about our customers' lives
  • avoid mentioning the idea or feature - talk about their life instead!
  • Ask about their life - how they currently fix the problem, how much it costs, how much time it takes,
  • Learn through their actions, not words

It's important to note the date and epics requested in the database. That data will fuel the dashboard!

Dashboard

You've set up the necessary Notion documents, spoken with users, and recorded data. Now you need to visualize the information! (Note: our dashboard summarizes all user interviews - not a specific experiment)

We tried a handful of approaches before settling on using Notion's API and Google App Scripts within Google Sheets to store, extract, wrangle, and visualize discovery data.

Notion's API

Notion finally released an API this year, solidifying it as an excellent option for a data source now that it's possible to extract data programmatically.

You need a Notion admin to create an integration, then share your Notion database with the integration to get started. Now you're ready to use the API! Necessary information is below.

The URL is:

https://api.notion.com/v1/databases/DATABASE_ID/query

The headers are:

{
  "Authorization": "secret_API KEY",
  "Notion-Version": "2021-08-16"
}

The JSON body can be an empty object: {}.

We recommend using cURL or a tool like Insomnia to verify the API returns data before jumping straight into Google App Script. You should now have an API returning your Notion database! Let's move on to visualizing the data.

Google App Script in Google Sheets

After weighing various options, we decided to use Google App Scripts in Google Sheets to wrangle and visualize data. We found that coding in App Scripts allows the automation of most of the work with the flexibility of Google Sheets, which is a powerful combination.

To open Google App Scripts, create a new Google Sheet. Navigate to Tools -> Script Editor in the menu bar.

First, we pulled data into Google App Script from Notion using their API. An example code snippet used is:

function getNotionAPIData() {
  let url = "https://api.notion.com/v1/databases/DATABASE_ID/query";
  let headers = {
    Authorization: "[SECRET_API_KEY]",
    "Notion-Version": "2021-08-16",
  };
  let options = {
    method: "post",
    contentType: "application/json",
    headers: headers,
    muteHttpExceptions: true,
  };
  let response = UrlFetchApp.fetch(url, options);
  let notionData = JSON.parse(response.getContentText());

  return notionData;
}

Now Notion data is flowing into Google App Scripts; you have the flexibility to do whatever you want leveraging JavaScript.

For our initial dashboard, we did quite a lot of wrangling in App Script. The final function writes the formatted data to a tab using the setValues() method:

It's then easy to create charts, metrics, and more to visualize the data.

If you want a free Google Sheet template we built, including the Google App Script code, email our team at hello@magicbell.io, and we'll send it over!

We hope this series has shown one approach to user research and how to build a customer-centric culture. We'd love to hear from you if you have any thoughts or questions!

Featured Blogposts