<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Dan Wolchonok</title>
<link>https://www.danwolch.com/</link>
<atom:link href="https://www.danwolch.com/feed.xml" rel="self" type="application/rss+xml"/>
<description>Notes on building products with AI</description>
<language>en-US</language>
<lastBuildDate>Tue, 13 Oct 2026 18:49:26 +0000</lastBuildDate>
<item>
<title>You deserve more feedback</title>
<link>https://www.danwolch.com/2026/08/you-deserve-more-feedback/</link>
<guid isPermaLink="true">https://www.danwolch.com/2026/08/you-deserve-more-feedback/</guid>
<pubDate>Sun, 23 Aug 2026 15:25:19 +0000</pubDate>

<description>I have become obsessed with an idea lately: everybody is just winging it in basically every meeting they&#x27;re in. Whether it&#x27;s an job interview, a 1:1 with their manager, a team meeting, or a presentation, everyone is just YOLOing how they prepare and show up in meetings. Very little preparation, no…</description>
<content:encoded><![CDATA[<p>I have become obsessed with an idea lately: everybody is just winging it in basically every meeting they're in. Whether it's an job interview, a 1:1 with their manager, a team meeting, or a presentation, everyone is just YOLOing how they prepare and show up in meetings. Very little preparation, no introspection into what they did and how it can be better, and no clue into their blind spots.</p>
<p>What makes it worse is that nobody is giving others feedback to improve. I feel guilty I didn't provide better feedback to my direct reports when I was a manager, and I didn't provide enough feedback to my peers when I saw them kicking butt or when I saw how they could have done better.</p>
<p>It's uncomfortable to give feedback to others, that's the main reason that people aren't giving feedback. Companies have to mandate a once a year performance review to make sure that managers do a write up, have the conversation with their team member, and then have the person acknowledge it. If you talk with most people, they're not satisfied with the feedback they receive from their manager.</p>
<p>The thing that has changed recently is that AI is really good at giving feedback to help you improve. Mozilla shared how they found most bugs in April (due to AI) than they had in the entire previous year. If AI can find decades old bugs, I think it can tell you when you're undermining yourself or not speaking confidently.</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2026/08/image.png"><img src="https://www.danwolch.com/wp-content/uploads/2026/08/image-1024x576.png" alt="" class="wp-image-1048"/></a><figcaption class="wp-element-caption">Source: <a href="https://simonwillison.net/2026/May/7/firefox-claude-mythos/">Simon Willison</a></figcaption></figure>
<p>I now have a windows app, a mac app, and a web app that all help you to analyze how you're showing up in your important meetings. The goal is to give you feedback into how you can do better in each meeting and spot patterns across them. </p>
<p>Why is this different from Granola, Wisper Flow, Otter, Fireflies, Fathom, TLDV, etc? They're all built for your company. They want to become the second brain for your organization. They want to sync to your CRM, they want to draft follow up emails, they want to draft the next steps in Jira, they want to kickoff workflows, etc. They're built for your company to automate your work, not help you improve how you communicate. Look at their pricing pages to identify who they're selling to. They have free plans to get you using it, and then their paid tiers are all about enterprise features. They want to sell SCIM, SSO, enterprise features, etc. </p>
<p>It's not about helping you do better work, it's about doing more work and selling to the head of your company's IT tools.</p>
<p>My goal is to build a tool that is focused solely on helping people communicate better. For all of the new fancy AI tools that we have, the most important part isn't your prompts, agent, model, harness, or anything else. It's still about making a convincing argument and telling it well to help tell your story, advocate for yourself and your ideas, and convince others to invest in you. Nobody is focusing on that.</p>
<p>That's why you should try out my new product, <a href="https://work.coach">work coach</a>. <a href="https://work.coach/download">Download Work Coach for Mac or Windows here</a>.</p>]]></content:encoded>
</item>
<item>
<title>Hightouch vs. Segment: How we do reverse ETL at Reforge</title>
<link>https://www.danwolch.com/2022/11/hightouch-vs-segment-how-we-do-reverse-etl-at-reforge/</link>
<guid isPermaLink="true">https://www.danwolch.com/2022/11/hightouch-vs-segment-how-we-do-reverse-etl-at-reforge/</guid>
<pubDate>Tue, 15 Nov 2022 18:15:00 +0000</pubDate>

<description>How we use Reverse ETL We use reverse ETL here at Reforge for a bunch of different use cases. They are: Sending data about our customers to our email automation system, Iterable Sending data that is aggregated in our data warehouse (snowflake) to a Google sheet Sending data to our behvaioral…</description>
<content:encoded><![CDATA[<h2>How we use Reverse ETL</h2>
<p>We use reverse ETL here at Reforge for a bunch of different use cases. They are:</p>
<ul><li>Sending data about our customers to our email automation system, <a rel="noreferrer noopener" href="https://iterable.com" data-type="URL" data-id="https://iterable.com" target="_blank">Iterable</a></li>
<li>Sending data that is aggregated in our data warehouse (snowflake) to a Google sheet</li>
<li>Sending data to our behvaioral analytics system, <a href="https://amplitude.com">Amplitude</a></li>
<li>Sending data to our CRM (<a rel="noreferrer noopener" href="https://hubspot.com" target="_blank">HubSpot</a>) from our data warehouse</li>
<li>Sending data to Slack from our data warehouse</li>
</ul>
<h2>Examples</h2>
<p>We use <a href="https://segment.com/">Segment</a> and <a href="https://segment.com/product/personas/">Personas</a> features to send data to our email system, <a href="https://iterable.com">Iterable</a>. </p>
<p>There are cool features in Personas that allow you to use a GUI to define things like:</p>
<ul><li>Counters (example: how many page views that meet a certain criteria in the last X days)</li>
<li>Aggregation (example: how much revenue have they generated in the past quarter)</li>
<li>Most frequent (example: what's the most frequent blog post they've visited)</li>
<li>First (example: what's the first marketing campaign that got a user to visit your site)</li>
<li>Last (example: what's the last marketing campaign that got a user to visit your site)</li>
</ul>
<p>They also have the ability to write arbitrary SQL to pull a list of people and any columns in the SQL can be traits associated with a user. So you can use GUI to define basic things or use complicated SQL to pull sophisticated stats.</p>
<p>An example of a user trait we have in Segment:</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/04/image.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/04/image-1024x684.png" alt="" class="wp-image-757"/></a><figcaption class="wp-element-caption">A SQL user trait in Segment that pulls a list of applicants to Reforge and values associated with their application</figcaption></figure>
<p>Important caveat: it's on our roadmap to pull all of this logic out of SQL and put it into a DBT model. The benefits there are better testing, understanding of data lineage in a DAG, and we have all of it under source control. In the future the SQL for this trait could be something like applications.user_application_values.</p>
<p>In our data dictionary we define these properties:</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/04/image-1.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/04/image-1-1024x684.png" alt="" class="wp-image-758"/></a><figcaption class="wp-element-caption">Screenshot of our data dictionary covering the same fields</figcaption></figure>
<p>Then we can use the traits to send personalized campaigns in Iterable for many different scenarios:</p>
<ul><li>Application acceptance or denial</li>
<li>Payment nudges to remind someone they've been accepted</li>
<li>Stats about how many people from their company have participated</li>
</ul>
<p>Here's an example of a campaign in Iterable:</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/04/image-2.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/04/image-2-1024x684.png" alt="" class="wp-image-759"/></a><figcaption class="wp-element-caption">Sample campaign in Iterable that uses the fields from the SQL trait / data dictionary</figcaption></figure>
<p>You can see how we have a dynamic template in the email above that personalizes the email subject to have the company name they select as well as stats about the company with things like:</p>
<ul><li>How many people from their company have participated in Reforge in the past</li>
<li>How many people from their company are current members</li>
<li>How many people from their company have applied recently</li>
</ul>
<p>I think it's pretty great that Segment has this functionality especially when you combine it with their other platform tools like Protocols. That said, I have some gripes about the tool as of November 2022:</p>
<ul><li>On our current tier the most frequent traits can run is hourly. Maybe I can pay for a higher frequency, but that drives me nuts and I'd have to negotiate with a sales rep for that.</li>
<li>It's really hard to test a trait is working the way you want it, you can't trigger a sync. This drives me nuts because I always make a simple mistake and then either try to get it to trigger or have to wait an hour to see if an update fixed it.</li>
<li>The destinations you can sync to are the typical ones for a CDP. I wish I could sync a result set with a spreadsheet, but that's not possible.</li>
<li>I can't sync non-contact objects to our CRM. For instance, I can sync contacts and their properties to HubSpot but I can't sync subscriptions to a custom object or companies and their details to a company object in HubSpot.</li>
<li>It feels like Segment has abandoned working on this feature. They're busy integrating with Twilio and building things like Twilio Engage rather than investing in making Personas great. I might have missed it, but it feels like they haven't made changes to the product in years.</li>
</ul>
<h2>How we use Hightouch</h2>
<p>We use a second ETL provider at Reforge. It sucks that we have two, but my hope is that it's more of a transitionary period until we ultimately simplify with one. I started using <a href="https://hightouch.com/" data-type="URL" data-id="https://hightouch.com/">Hightouch</a> for free to sync data to a google sheet / to slack, and it became clear it was the vastly superior product to Segment Personas.</p>
<p>The world runs on spreadsheets, and often times it's really helpful to give teams a constantly updated resource that has data synced from your data warehouse. It's a great free path to get using their tools because once you have it connected, it's so easy to add additional sources.</p>
<p>Here's an example of how we send paid data into a spreadsheet for the marketing team (we pull paid numbers across all channels into our data warehouse and this helps them understand all of it and play with it in a spreadsheet environment rather than pulling it from a BI tool constantly):</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/11/image-4.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/11/image-4-1024x612.png" alt="" class="wp-image-865"/></a><figcaption class="wp-element-caption">Sending aggregate paid spend numbers into a spreadsheet for the marketing team</figcaption></figure>
<p>The model can be custom SQL, a table in a DB, or a model in dbt or Looker. It makes it really easy.</p>
<p>We also use Hightouch to sync data to our CRM, HubSpot. It's just so easy.</p>
<figure class="wp-block-image size-large is-resized"><a href="https://www.danwolch.com/wp-content/uploads/2022/11/screencapture-app-hightouch-reforge-com-syncs-41610-2022-11-12-12_05_05.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/11/screencapture-app-hightouch-reforge-com-syncs-41610-2022-11-12-12_05_05-384x1024.png" alt="" class="wp-image-860"/></a></figure>
<p>We also use Hightouch to send customized messages to Slack. I've done <a href="https://www.danwolch.com/2022/09/setting-up-a-simple-on-call-schedule-in-slack/" data-type="post" data-id="801">this</a> using <a href="https://zapier.com">Zapier</a> in the past but it's nice to be able to have all of these syncs in one place. Here's an example of a daily ARR report that the team built:</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/11/image-2.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/11/image-2-1024x523.png" alt="" class="wp-image-862"/></a><figcaption class="wp-element-caption">Our daily update that sends data from Snowflake to Slack</figcaption></figure>
<p>Here's what it looks like in Slack:</p>
<figure class="wp-block-image aligncenter size-large is-resized"><a href="https://www.danwolch.com/wp-content/uploads/2022/11/image-3.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/11/image-3-901x1024.png" alt="" class="wp-image-863"/></a><figcaption class="wp-element-caption">An example of a daily summary the team built via Hightouch</figcaption></figure>
<p>I spoke with the co-founders of Hightouch when it was early days and that's when I found out they were part of the early team that built Personas at Segment. It feels like they were able to address a lot of their frustrations about how the product was built and make big improvements on it. Things that are just so much better than Segment:</p>
<ul><li>Their support is so much better than Segment. This should be every startup's advantage against the company acquired by a big behemoth, and they do a good job. I have been so disappointed with Segment's support over the years and Hightouch makes the overall experience so much better because you can get an answer to why something is broken quickly. With Segment support, I often times have to wait days which is so painful when you're working on a deeply technical integration like this.</li>
<li>They have a "run now" button where you can run a sync anytime you want. This sounds so simple, but I'm sure it makes the technical implementation much harder. I can't tell you how many times I've messed up a piece of a sync in Segment personas and then I just have to wait until the sync runs again. It baffles me they haven't changed this.</li>
<li>It feels like it's being worked on all the time. Lots of changes and improvements, new features, and integrations with the latest and greatest tools.</li>
<li>The logging and insight into what happened is so much better with Hightouch. This is a real interaction I had with Segment's support team (no judgement on the support rep, this is a reflection of the state of their product). This type of response is infuriating when you are working to integrate two systems together and you don't know what's wrong or when it'll retry some logic.</li>
</ul>
<figure class="wp-block-image aligncenter size-full is-resized"><a href="https://www.danwolch.com/wp-content/uploads/2022/11/Personas_Audience_Sync_to_Facebook_Error_-_dan_reforge_com_-_Reforge_Mail.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/11/Personas_Audience_Sync_to_Facebook_Error_-_dan_reforge_com_-_Reforge_Mail.png" alt="" class="wp-image-861"/></a><figcaption class="wp-element-caption">A screenshot of my support ticket with Segment. I was very frustrated!</figcaption></figure>
<h2>Conclusion</h2>
<p>I look forward to moving all of our ETL infrastructure over to Hightouch from Segment at annual contract renewal time. While there are benefits to having the reverse ETL logic and elements all in Segment (we pay for their <a href="https://segment.com/product/protocols/">protocols feature</a> and there are benefits in blocking bad data / being alerted when your data doesn't adhere to the spec), I would rather use the better tool.</p>
<p>How do others do this type of work at their companies? I'd love to know if others solve their challenges similarly and if there are even better ways.</p>]]></content:encoded>
</item>
<item>
<title>Alerting on Snowflake Cost Spikes with Metaplane</title>
<link>https://www.danwolch.com/2022/11/alerting-on-snowflake-cost-spikes-with-metaplane/</link>
<guid isPermaLink="true">https://www.danwolch.com/2022/11/alerting-on-snowflake-cost-spikes-with-metaplane/</guid>
<pubDate>Mon, 07 Nov 2022 18:15:00 +0000</pubDate>

<description>We switched from a postgres data warehouse earlier this year to a Snowflake data warehouse. As part of that transition we spoke with sales and learned about what drives your bill on snowflake. It turned out that 15-20% of our bill with snowflake was because of our BI tool, Metabase . That led me to…</description>
<content:encoded><![CDATA[<p>We switched from a postgres data warehouse earlier this year to a Snowflake data warehouse. As part of that transition we spoke with sales and learned about what drives your bill on snowflake. It turned out that <a href="https://discourse.metabase.com/t/metabase-sync-costing-500-month-in-snowflake-credits/21230">15-20% of our bill </a>with snowflake was because of our BI tool, <a href="https://metabase.com">Metabase</a>.</p>
<p>That led me to wonder if I could understand better what was driving our costs on snowflake and ensure that we didn't get an unexpected bill. Our storage costs are tiny (we're lucky at Reforge that we have enough data to make it useful, but not so much that the costs are prohibitive / make us move slowly).</p>
<p>I did two things as a result of this:</p>
<ol><li>Visualized the costs over time.</li><li>We setup <a href="https://www.metaplane.dev/">Metaplane</a> so that it would monitor our daily usage and alert if it deviated from the historical norm. This was really easy.</li></ol>
<h2>Visualizing Costs over Time</h2>
<p>I got some great feedback from the DBT community about the types of queries I should be running to run down costs. They asked good questions like:</p>
<ul><li>How are your warehouses configured?</li><li>What warehouses are creating the most spend?</li><li>Are the warehouses set to auto-suspend?</li><li>What services are contributing to your bill?</li><li>Is your spend mostly on storage or compute?</li><li>What queries cost the most?</li></ul>
<p>Ultimately, one of the things that came out of the analysis was that all of our bill was being used for compute. The sales team at snowflake said that most customers don't pay for "cloud services" and that we were an outlier. That led us to look into what was driving the overage on our cloud services. I visualized the cost over time with <a href="https://www.deepnote.com">Deepnote</a> for both compute and cloud services. You can see that "overage-cloud services" represent a big part of our bill, and we attributed most of that cost to the metabase queries.</p>
<figure class="wp-block-image size-full"><a href="https://www.danwolch.com/wp-content/uploads/2022/08/image.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/08/image.png" alt="" class="wp-image-796"/></a><figcaption>Our montly snowflake bill broken out by usage type</figcaption></figure>
<p>We discovered the issue in April and took some action to try to reduce it. If you want to do the same analysis, I posted the notebook <a href="https://github.com/danwolch/JupyterNotebooks/blob/master/snowflake/notebook.ipynb">here</a>. I'd love to build a flowchart of the types of things you should be looking at when analyzing your snowflake bill and adding them to the jupyter notebook.</p>
<h2>Being Alerted to When Costs Go Haywire</h2>
<p><a href="https://www.metaplane.dev" data-type="URL" data-id="https://www.metaplane.dev">Metaplane</a> is a tool that looks at your data systems and lets you know when something is broken. It could be that tables have stopped being updated, it's not being updated at the same right, or someone is spamming events to your system. It has many different kinds of tests, but ultimately it helps to ensure that you know when things are going haywire so you can fix it before it causes problems or causes others to lose confidence in the reliability of your data and systems.</p>
<p>We configured Metaplane to run this query every day for both cloud services and compute spend, which are the vast majority of our spend. If it deviates from the historical norm it alerts the team so we can dig into what is increasing our usage and our bill. A big thanks to <a href="https://www.linkedin.com/in/ian-whitestone/" data-type="URL" data-id="https://www.linkedin.com/in/ian-whitestone/" target="_blank" rel="noreferrer noopener">Ian Whitestone</a> in the DBT community who helped with suggestions on this query as well as other ideas.</p>
<pre class="wp-block-code"><code>SELECT
  SUM(usage_in_currency) as total_cost
from SNOWFLAKE.ORGANIZATION_USAGE.USAGE_IN_CURRENCY_DAILY
where usage_type = 'overage-cloud services'
    and usage_date &gt;= current_date - interval '1 day' 
    and usage_date &lt; current_date
order by 1</code></pre>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/11/screencapture-app-metaplane-dev-data-analytics-prod-custom-92e3e5e4-229c-4299-8da2-52a05ef8745b-2022-11-07-08_38_38.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/11/screencapture-app-metaplane-dev-data-analytics-prod-custom-92e3e5e4-229c-4299-8da2-52a05ef8745b-2022-11-07-08_38_38-1024x937.png" alt="" class="wp-image-856"/></a><figcaption>Metaplane monitoring compute credits over time, our usage spiked in the last data point to 2X the normal range</figcaption></figure>
<figure class="wp-block-image size-full"><a href="https://www.danwolch.com/wp-content/uploads/2022/11/image-1.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/11/image-1.png" alt="" class="wp-image-854"/></a><figcaption>The slack notification when spend deviates from what we expect</figcaption></figure>
<h2>Example Use</h2>
<p>In the above image you can see how there was a big spike in usage that was much higher than the previous sixty days. Our team was notified, looked into the issue, and this was the result:</p>
<blockquote class="wp-block-quote"><p>found two queries made in the Snowflake UI that had been running for 20 and 40 hours respectively.  I force canceled the queries and let the user know what happened.  We also decided to update the query timeout account wide from it’s default value of 48 hours down to 1 hour.</p><cite>One of the data engineers on the team</cite></blockquote>
<p>This is a great example of how Metaplane ensures that we're on top of anything that is unexpected and can affect our team. It may be data quality issues, reporting issues, delays, logic issues, or something like costs. Examples like this confirm that data observability is a must-have that all companies will have in the next couple of years.</p>
<h2>Next Steps</h2>
<p>Ultimately, we didn't think it was worth our team's time to try to optimize our spend on Snowflake due to our metabase issues. I'd rather the team spend time on creating new value for our company and our customers rather than spending a lot of time to save $1,000 / month. There will come a point where it's worth it for someone on our team to look at this and a myriad of other areas for improvements, but until then we'll be monitoring our spend closely to ensure it doesn't change materially from where it is today. If anyone has any tips or insight into how to address the metabase problems, let me know!</p>]]></content:encoded>
</item>
<item>
<title>Setting up a simple on-call schedule in Slack and Zapier</title>
<link>https://www.danwolch.com/2022/09/setting-up-a-simple-on-call-schedule-in-slack/</link>
<guid isPermaLink="true">https://www.danwolch.com/2022/09/setting-up-a-simple-on-call-schedule-in-slack/</guid>
<pubDate>Tue, 27 Sep 2022 16:23:00 +0000</pubDate>

<description>The Reforge data team doesn&#x27;t require anyone to &quot;carry a pager&quot; and be available during certain periods to respond to issues at any time of day or night. That said, we do have a rotating responsibility for responding to slack forums and looking at alerts from our data observability tool, Metaplane…</description>
<content:encoded><![CDATA[<p>The Reforge data team doesn't require anyone to "carry a pager" and be available during certain periods to respond to issues at any time of day or night. That said, we do have a rotating responsibility for responding to slack forums and looking at alerts from our data observability tool, <a href="https://metaplane.dev">Metaplane</a>.</p>
<p>One of the issues is that we ask people to be available for a week at a time to be the point person on responding to questions or issues that come up. We don't expect everyone to be the one to fix / respond to an issue, but we ask that they be the point person to help move it forward.</p>
<p>I built a really simple reminder workflow in Slack to remind people of what they should be doing when they are in this role because it's easy to forget. I thought I'd share how easy it was to setup and see if anyone had any other tools / processes they use.</p>
<p>We already had a google doc that listed the dates that each person was responsible for, and I built a quick mapping table that takes a person's name and puts in their Slack id. It's easy to get <a href="https://zapier.com/help/doc/common-problems-with-slack">someone's slack id</a>.</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/08/image-1.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/08/image-1-1024x871.png" alt="" class="wp-image-802"/></a><figcaption>The google doc has a row for each day, lists the person responsible, and their slack ID</figcaption></figure>
<p>I then built a workflow in Zapier that:</p>
<ul><li>Runs every day at a standard time (12pm ET)</li><li>It checks to make sure that it's a weekday (not a weekend)</li><li>It looks up the row in the spreadsheet for the current day</li><li>It only continues if there's a slack ID for that person that day (if someone doesn't want the reminders they can delete their slack id from the row)</li><li>It sends them a direct message on slack from a reminder bot</li></ul>

<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/08/image-2.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/08/image-2-1024x482.png" alt="" class="wp-image-803"/></a></figure>
<p>This is the DM that people get in Slack:</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/09/image.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/09/image-1024x224.png" alt="" class="wp-image-818"/></a></figure>
<p>How do others in the data space ensure that the team rotates through different responsibilities, get reminded of what they're supposed to do, and ensure they're aware of how to do it? I don't want to go full-blown pager service and this felt like the right level of reminder for our stage of company (the team has 5 analysts, a manager, a data engineer, and myself).</p>]]></content:encoded>
</item>
<item>
<title>Analyzing Metabase Usage</title>
<link>https://www.danwolch.com/2022/09/analyzing-metabase-usage/</link>
<guid isPermaLink="true">https://www.danwolch.com/2022/09/analyzing-metabase-usage/</guid>
<pubDate>Thu, 08 Sep 2022 13:53:00 +0000</pubDate>
<category>Analytics</category><category>Growth</category><category>Startups</category>
<description>I am the head of data at Reforge ( we&#x27;re hiring !) and data is critical to our success. We use it to track our business, individual teams leverage it in their work, and we believe in empowering people in the company with data to help them do great work. We use all sorts of great tools, but as the…</description>
<content:encoded><![CDATA[<p>I am the head of data at <a href="https://www.reforge.com">Reforge</a> (<a href="https://www.reforge.com/careers" data-type="URL" data-id="https://www.reforge.com/careers">we're hiring</a>!) and data is critical to our success. We use it to track our business, individual teams leverage it in their work, and we believe in empowering people in the company with data to help them do great work. We use all sorts of great tools, but as the head of data I felt it was important to understand whether people were actually using our BI (business intelligence) tool.</p>
<p>I built a weekly report that lays out how my company is <a href="https://www.danwolch.com/2019/04/how-we-use-metabase/" data-type="post" data-id="608">using our BI tool</a>, <a href="https://www.metabase.com">Metabase</a>. It has the following reports:</p>
<ul><li>Dashboards created in the past 7 days</li><li>Questions created in the past 7 days</li><li>Individual Dashboard views by our exec team in the past 7 days</li><li>Dashboard view counts by user in the past 7 days</li><li>Activity by my boss (our CTO)</li><li>Metabase MAUs</li><li>Metabase WAUs</li></ul>
<p>It helps me to understand at a high level what is happening inside the company from a data perspective: </p>
<ul><li>Who is building reports (questions / dashboards)</li><li>What questions people are asking of our data</li><li>What is most important to our exec team</li><li>Who is looking at information on a regular basis</li><li>What is top of mind for my boss</li><li>How engaged our company is with our data &amp; analytics</li></ul>
<p>It was surprisingly easy to set this up. All we had to do was add the Metabase internal database as a source to Metabase (sounds confusing, but actually quite simple). It wouldn't shock me if this became a paid feature long-term for Metabase on their enterprise plan, but it took less than 30 minutes to figure out their data model and build some quick and dirty SQL questions that produced answers to our most important questions. Metabase is already storing all of the data we needed to visualize to get answers to our questions.</p>
<p>I set this up as a <a href="https://www.metabase.com/docs/latest/dashboards/subscriptions">dashboard subscription</a> so it is delivered to my email every week and I can quickly scan it to understand what's top of mind for the org.</p>
<h2>Reforge is Data Driven</h2>
<p>Since the beginning of the company we've looked at data to understand how well we're tracking against key goals for the company (revenue, applications, content completion, weekly activity, etc). These stats span across the entire company in terms of usefulness (support, sales, marketing, product, engineering, design, finance, etc) and we strive to make as much information accessible to everyone so that they can be data informed. </p>
<p>If you're considering joining a company - do you want to be at one that uses data to help inform decisions? You can see below that Reforge employees are using data on a regular basis and you can see how it scales as we've grown the team and hit key milestones. We've typically seen 75-100% of employees leveraging Metabase on a monthly basis.</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/08/image-7.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/08/image-7-1024x615.png" alt="" class="wp-image-812"/></a><figcaption>Our Metabase monthly active users along with company milestones</figcaption></figure>
<p>The queries that we use to power the charts:</p>
<h2>Dashboards created in the past week</h2>
<pre class="wp-block-code"><code>select created_at, name, u.email, left(description, 40) as description, 'https://BI_HOSTNAME/dashboard/' || d.id as url
from report_dashboard d
    inner join core_user u 
        on d.creator_id = u.id
where created_at &gt; current_date - interval '7 days'
order by 1 desc</code></pre>
<h2>Questions created in the past week</h2>
<pre class="wp-block-code"><code>select created_at, name, u.email, 'https://BI_HOSTNAME/question/' || d.id as url
from report_card d
    inner join core_user u 
        on d.creator_id = u.id
where created_at &gt; current_date - interval '7 days'
order by 1 desc</code></pre>
<h2>Exec team dashboard views in the past week</h2>
<p>For this report, I wanted to know what the exec team was looking at in the past week. I want to know how much they're looking at the metrics and whether they're looking at the dashboards I think they should be looking at.</p>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2022/08/image-8.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/08/image-8-1024x373.png" alt="" class="wp-image-813"/></a></figure>
<pre class="wp-block-code"><code>select u.email, d.name, count(v.id)
from view_log v
    inner join core_user u
        on v.user_id = u.id
    inner join report_dashboard d
        on v.model_id = d.id
where model = 'dashboard'
    and u.email in 
        (LIST_OF_EMAILS)
    and v.timestamp &gt; (current_date - interval '7 days')
group by 1, 2
order by 3 desc
limit 200</code></pre>
<h2>Dashboard views leaderboard (views in the past week)</h2>
<p>This shows the number of views by user in the past 7 days. It's always a good sign when your head of data isn't the most prolific viewer of dashboards.</p>
<figure class="wp-block-image size-large is-resized"><a href="https://www.danwolch.com/wp-content/uploads/2022/08/image-9.png"><img src="https://www.danwolch.com/wp-content/uploads/2022/08/image-9-1024x699.png" alt="" class="wp-image-814"/></a><figcaption>List of users and their views</figcaption></figure>
<pre class="wp-block-code"><code>select u.email, count(v.id)
from view_log v
    inner join core_user u
        on v.user_id = u.id
    inner join report_dashboard d
        on v.model_id = d.id
where model = 'dashboard'
    and v.timestamp &gt; (current_date - interval '7 days')
group by 1
order by 2 desc
limit 200</code></pre>
<h2>Most popular dashboards by views</h2>
<pre class="wp-block-code"><code>select d.name, count(v.id)
from view_log v
    inner join core_user u
        on v.user_id = u.id
    inner join report_dashboard d
        on v.model_id = d.id
where model = 'dashboard'
    and v.timestamp &gt; (current_date - interval '7 days')
group by 1
order by 2 desc
limit 200</code></pre>
<h2>Questions created by a single person</h2>
<pre class="wp-block-code"><code>select created_at, name, u.email, 'https://BI_URL/question/' || d.id as url
from report_card d
    inner join core_user u 
        on d.creator_id = u.id
where created_at &gt; current_date - interval '28 days'
    and u.email = EMAIL_OF_YOUR_BOSS
order by 1 desc</code></pre>
<h2>Metabase MAUs</h2>
<pre class="wp-block-code"><code>select date_trunc('month', timestamp), count(distinct user_id) 
from view_log 
group by 1
order by 1</code></pre>
<h2>Metabase WAUs</h2>
<pre class="wp-block-code"><code>select date_trunc('week', timestamp), count(distinct user_id) 
from view_log 
group by 1
order by 1</code></pre>]]></content:encoded>
</item>
<item>
<title>Hiring a Senior Data Engineer at Reforge</title>
<link>https://www.danwolch.com/2022/08/hiring-a-senior-data-engineer-at-reforge/</link>
<guid isPermaLink="true">https://www.danwolch.com/2022/08/hiring-a-senior-data-engineer-at-reforge/</guid>
<pubDate>Wed, 10 Aug 2022 16:13:27 +0000</pubDate>

<description>It is an exciting time to be joining the data team at Reforge. In the past 16 months, we created the data team and scaled it to 8 people. On the team today, there are five analysts, a data engineer, an analytics manager, and me (I’m the Head of Data at Reforge). We’ve been busy in this time. Some…</description>
<content:encoded><![CDATA[<p>It is an exciting time to be joining the data team at Reforge. In the past 16 months, we created the data team and scaled it to 8 people. On the team today, there are five analysts, a data engineer, an analytics manager, and me (I’m the Head of Data at Reforge).</p>
<p>We’ve been busy in this time. Some of the work that we’ve done:</p>
<ul><li>Migrated our data warehouse from postgres to snowflake</li><li>Rebuilt our entire data warehouse schema organization</li><li>Built countless models to model <a href="https://www.reforge.com/all-programs">our programs</a></li><li>Enabled the switch to a subscription model (reporting on subscriptions, change over time, renewals, etc)</li><li>Worked with our R&amp;D team to adopt and use a behavioral analytics system</li><li>Defined our data dictionary</li><li>Hired and onboarded 8 people</li><li>Built data pipelines to enrich data in our system via Airflow</li><li>Migrated our email automation system</li></ul>
<p>Reforge as a company has also been doing very well during this time. Our business has grown tremendously, we raised our $60M <a href="https://www.reforge.com/blog/reforge-raises-series-b">series B</a> round, and we have more than doubled the team in that time.</p>
<p>We had the good fortune of having raised our Series B earlier this spring before the recent economic turmoil and have the the money, time, and resources now to invest heavily in creating new experiences and products. It’s an exciting time to be investing and building when it feels like many companies are cutting back or deprioritizing investments.</p>
<p>Data engineering will be a critical component to our upcoming growth and I’m particularly excited about the projects we are undertaking:</p>
<ul><li>We will build data pipelines to enrich data about our prospects and customers. This will be the foundation for personalization and recommendations in the future. Having a reliable and performant system that can help us understand who someone is, where they work, and build classification models for their attributes will be critical for future product experiences as well as analyzing how our business is performing.</li><li>We will build more sophisticated foundational reporting for our growing analyst team to work with. Our analysts work with stakeholders in every department to help find insight in data, build visualizations, and impact our strategy and future roadmap. You will have a ton of leverage in creating impact - the data sources you create will be used by every department.</li><li>We will invest in additional data syncs between our systems to ensure that every customer interaction is excellent. Reforge is teaching how the best technology companies execute, and we aspire to be the best example of our own frameworks. Our customers are the leading practitioners in the tech industry and love to hold us accountable.</li><li>Revamp the infrastructure to enable reporting for our marketing organization. When the data team was spun up we didn't have anyone in the marketing org, yet were growing 100% year over year due to <a href="https://www.reforge.com/blog/word-of-mouth-coefficient">word of mouth</a>. The team has grown a lot since then, and we are becoming much more sophisticated in how we approach our marketing efforts. We need to empower our analysts and the marketing team with the data they need to understand how well we're attracting people to Reforge, where our best return on investments are, and what best explains the value of Reforge.</li></ul>
<p>We use best of breed tools in our data stack. Here’s a video of our current data stack. Most of these tools have been implemented in the past year and we will continue to invest heavily as our business grows and we become even more sophisticated.</p>
<figure class="wp-block-video"><video controls src="https://www.danwolch.com/wp-content/uploads/2022/08/Reforge-Data-Stack.mp4"></video></figure>
<p>If you know of anyone who wants more responsibility and has a strong vision for how data engineering should work today, please send them this post or let me know if I should reach out to them. This is a critical role for us to fill before the end of the year. </p>
<p>Apply <a href="https://www.reforge.com/careers/all">here</a> for the role.</p>]]></content:encoded>
</item>
<item>
<title>The Reforge Data Team is hiring</title>
<link>https://www.danwolch.com/2021/09/come-join-the-data-team-at-reforge/</link>
<guid isPermaLink="true">https://www.danwolch.com/2021/09/come-join-the-data-team-at-reforge/</guid>
<pubDate>Fri, 24 Sep 2021 04:19:46 +0000</pubDate>

<description>We are hiring for three analysts on the Data Team at Reforge. We&#x27;re looking for a Product Analyst , a Senior Product Analyst , and a Senior Marketing Analyst . It&#x27;s a very exciting time for Reforge and for the Data Team. Helping People do the Best Work of Their Careers Reforge is an amazing…</description>
<content:encoded><![CDATA[<p>We are hiring for three analysts on the Data Team at Reforge. We're looking for a <a href="https://www.reforge.com/careers/all?gh_jid=4068164004" target="_blank" rel="noreferrer noopener">Product Analyst</a>, a <a rel="noreferrer noopener" href="https://www.reforge.com/careers/all?gh_jid=4136673004" target="_blank">Senior Product Analyst</a>, and a <a href="https://www.reforge.com/careers/all?gh_jid=4136670004" target="_blank" rel="noreferrer noopener">Senior Marketing Analyst</a>.</p>
<p>It's a very exciting time for Reforge and for the Data Team.</p>
<h3>Helping People do the Best Work of Their Careers</h3>
<p>Reforge is an amazing opportunity to work on a product that has a significant impact on people's lives. We are taking the untapped knowledge, frameworks, and practices from industry leaders and making it accessible to our customers. Our goal is to help our members do the best work of their career by unlocking insights and then helping them apply it back to their jobs right away.</p>
<p>We routinely here from our members that it was the best educational experience they've had (better than their MBA if they got one), and that it has helped them be more confident in their role and drive a big impact for their business.</p>
<h3>$21 Million Series A Investment</h3>
<p>We raised our Series A investment from <a href="https://a16z.com/">A16Z</a> in February. At the time, our CEO Brian Balfour wrote about:</p>
<ul><li>The history of Reforge</li><li>Why there's a real need for our offering</li><li>The solution we are building</li></ul>
<p>I was lucky to be one of the earliest employees that took this from a nascent concept through today. It was an incredible time to be at the company, but today's inflection point is even more exciting. While we bootstrapped the company to eight figures of revenue, our recent fundraising round gives us the capital to invest even more aggressively.</p>
<p>We are the rare startup that has real revenue with generous margins and profits, yet also has raised venture capital and the ambition to continue growing 100% each year.</p>
<h3>The Data Team at Reforge</h3>
<p>The data team is just getting started here at Reforge. We're looking for people who want to be a part of a small team that is growing fast and are comfortable with ambiguity and fast paced change. It's a great opportunity for people who want to be a part of building a strong data practice at a company that sees data as invaluable in operations as well as strategic decisions.</p>
<p>The nature of our product is that it's cross functional. We create content, host events, and build relationships between people through marketing, community, operations, product, design, and engineering.</p>
<p>We have a central data team so that every part of the org has access to all of the data to deliver an exceptional experience. Every part of the experience should be tailored to your role, your company's business model, where you're located, how senior you are, what you've done in the platform, and what your goals are today. The data team is here to make sure teams have the information they need to deliver and iterate on an exceptional experience.</p>
<p>The data org owns the growth model for the business. It's our job to help bring together the metrics for the whole business to understand how we're trending towards our goals, what is performing well, where there is opportunity to improve, and what the greatest points of leverage are. This is especially important for a cross functional product like ours where opportunities require multiple groups within the company to collaborate.</p>
<h3>What we're looking for</h3>
<p>We're looking for someone who can take ambiguous questions, run independent analyses, and then clearly communicate their findings.</p>
<ul><li>Analysts will be required to field questions from many potential sources: the leadership team, PMs, Marketers, Engineering, Design, Operations, or support. Being able to listen to the questions of teams, clarify their goals, and then come up with the right way to analyze and summarize findings is critical.</li><li>Often times the initial question asked is not the right one or needs to be clarified and adjusted. It is not an analysts job to mindlessly give teams the answers to their questions, but to push back when necessary and be a collaborator with their teams to gain insights that will push the product experience forward and improve the business.</li></ul>
<p>An analyst should be deeply quantitative but naturally curious. This person should have opinions about software experiences and be passionate about finding ways to quantify value to end users, impact to the business, areas for improvement, and insights into behavior.</p>
<ul><li>Teams may not always know the right question to ask and the best analysts have their own opinions that they pursue.</li><li>Analysts should understand how the product works, the user psychology of end users, and how the product is different from its alternatives. The quantitative metrics that are used to measure its performance are a direct result of finding ways to express a deep understanding of the product.</li><li>The best analysts are looking around corners to help uncover pockets of strength, quantify areas that are under-performing, and are thinking about the best ways to influence people about what's important and should be focused on.</li></ul>
<p>An analyst should be an excellent communicator, story teller, and consultant.</p>
<ul><li>We are not looking for analysts that are simply responsible for producing charts. They will need to be able to understand the motivation behind a request, suggest alternatives, and have the conviction to push back when they disagree to foster debate.</li><li>We want analysts who are able to tell a story with the data, explain the technical elements of an analysis but communicate why it's important.</li><li>We want analysts to be consultative with their peers - they need to understand what will be impactful and resonate with an audience and tailor the summary accordingly.</li></ul>
<h3>The Tools we Use</h3>
<p>As much as possible, we use the best of breed technology stack available today. We have roots as a profitable, bootstrapped company so we haven't upgraded all of our tools yet but we are constantly evaluating each of the tools to ensure we're using the best tool for the job.</p>
<p>Our core sources of data:</p>
<ul><li>We have a read-replica of our production database so that we can query the latest and greatest production data in real time.</li><li>We have a data warehouse that is populated hourly by our customer data platform, Segment.</li><li>We are able to seamlessly run queries that mix and match data between the two systems so that we can use the latest production data with an analysis that uses raw event based data or models computed in the data warehouse.</li></ul>
<p>Some of the tools we use:</p>
<ul><li>We use DBT for modeling and data transformation in our data warehouse</li><li>We use github for our DBT models and all of our code</li><li>We use metaplane to ensure that we are the first to know of any structural changes to our schemas as well as unexpected changes or trends within our databases.</li><li>We use iterable as our email marketing tool</li><li>We use Segment for our event pipeline, reverse ETL tool, and to populate our data warehouse with event level information from sources of data.</li><li>We use Airflow for any jobs that connect to external services and to create more sophisticated models and jobs that can't be created in pure SQL.</li><li>We use Amplitude as our behavioral analytics tool to get insights about how people are using our product, key conversion paths and funnels, and retention behavior.</li><li>We use Metbase as our BI tool. I've written about examples of how we use it <a href="https://www.danwolch.com/2019/04/how-we-use-metabase/">here</a> and <a href="https://www.danwolch.com/2019/05/stripe-segment-metabase/">here</a>.</li></ul>
<figure class="wp-block-image size-large"><a href="https://www.danwolch.com/wp-content/uploads/2021/09/Screen-Shot-2021-09-23-at-9.56.30-PM.png"><img src="https://www.danwolch.com/wp-content/uploads/2021/09/Screen-Shot-2021-09-23-at-9.56.30-PM-1024x965.png" alt="" class="wp-image-721"/></a><figcaption>A simplified version of our data systems</figcaption></figure>
<h3>How Teams are Structured</h3>
<p>We are rapidly building our teams and how they are structured, but our strategy is a product led experience. That means that our product team is responsible for the core experience of our members. We are structuring teams in pods that own discrete elements of the experience. While every pod may vary, they will typically have:</p>
<ul><li>A product manager</li><li>A product designer</li><li>A Tech Lead</li><li>Multiple software engineers</li><li>A marketer</li><li>A product analyst</li></ul>
<p>It will be the product analysts responsibilities to:</p>
<ul><li>Be the expert on the team about data</li><li>Empower the team to do their own reporting and answer the vast majority of their own questions</li><li>Do deeper analyses than any other team member can do</li></ul>
<p>If this is interesting to you, please apply <a href="https://reforge.com/careers">here</a>.</p>]]></content:encoded>
</item>
<item>
<title>Stripe + Segment + Metabase</title>
<link>https://www.danwolch.com/2019/05/stripe-segment-metabase/</link>
<guid isPermaLink="true">https://www.danwolch.com/2019/05/stripe-segment-metabase/</guid>
<pubDate>Wed, 08 May 2019 02:41:16 +0000</pubDate>

<description>I&#x27;ve written about how we use Metabase at Reforge , and how I&#x27;m a big fan. It has allowed us to make data accessible to anyone in the organization, whether it&#x27;s for a deep analysis or for a quick status update on an important initiative. We use Segment as one of the key pieces of data our data…</description>
<content:encoded><![CDATA[<p>I've <a href="https://www.danwolch.com/2019/04/how-we-use-metabase/">written about</a> how we use <a href="https://metabase.com">Metabase</a> at <a href="https://reforge.com">Reforge</a>, and how I'm a big fan. It has allowed us to make data accessible to anyone in the organization, whether it's for a deep analysis or for a quick status update on an important initiative.</p>
<p>We use <a href="https://segment.com">Segment</a> as one of the key pieces of data our data infrastructure, and I recently turned on the Stripe integration. I was pleasantly surprised by how well it works. I authenticated into our Stripe account to configure it as a source within Segment. Segment then updates tables in our data warehouse with the latest and greatest data from Stripe. This is a screenshot of our database and the tables under the Stripe schema:</p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/image-3-1024x643.png" alt="" class="wp-image-637"/></figure>
<p>On one of our key dashboards showing our progress in generating revenue, I wanted a cumulative revenue chart. This is helpful to see how quickly we're generating revenue, what our total revenue in a period of time is, and how our revenue growth compares to previous periods.</p>
<p>This is a sample chart that's easy to setup in Metabase:</p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_08_PM-1024x932.png" alt="" class="wp-image-638"/></figure>
<p>To generate it, this is the SQL I wrote to generate it:</p>
<script src="https://gist.github.com/danwolch/6504e43ca1bc5b84cd11ddea45894ec6.js"></script>
<p>The way it works:</p>
<ul><li>The first statement generates a table (that's the <a href="https://www.postgresql.org/docs/9.1/functions-srf.html">generate_series</a> function) that has a start date and end date</li><li>I join from that table with a left join to the stripe payments table. This ensures that if we don't have a day of revenue, the day still shows up in our table. This table gives me a total amount of revenue per day.</li><li>In the final part of the statement, I use a window function to do a cumulative sum of all of the revenue per day, so that day 2 has all of day 1's revenue along with day 2's revenue added in.</li></ul>
<p>I hope this helps you create similar charts of revenue per day or cumulative revenue reports. I've worked with teams where we've manually hit the Stripe API to pull all of this information, which is always a pain in the butt. The nice part of this solution is that Segment keeps the table up to date automatically, and then anyone can run these reports on the latest values in the data warehouse.</p>
<p>While we're still an early stage company, the type of integration is super powerful. There are a lot of interesting applications of being able to access failed charges, successful charges, refunds, and the various types of paying customers when joined to other data sources.</p>]]></content:encoded>
</item>
<item>
<title>How we use Metabase</title>
<link>https://www.danwolch.com/2019/04/how-we-use-metabase/</link>
<guid isPermaLink="true">https://www.danwolch.com/2019/04/how-we-use-metabase/</guid>
<pubDate>Tue, 30 Apr 2019 02:24:36 +0000</pubDate>

<description>When I joined Reforge a year ago, I found that we were querying our databases manually to do routine analysis. If we wanted to update the team on the number of people who had applied or paid for our programs, we’d run a query against the database and then put the results in a spreadsheet. If we…</description>
<content:encoded><![CDATA[<p>When I joined Reforge a year ago, I found that we were querying our databases manually to do routine analysis. If we wanted to update the team on the number of people who had applied or paid for our programs, we’d run a query against the database and then put the results in a spreadsheet. If we wanted a list of users from our programs by company, we’d run a query and put it in a spreadsheet. While this answered our questions at the time, I felt like we could do a lot better. After having used Looker in my time at HubSpot, I wanted a lightweight solution to help us enable the entire company to have access to critical data about the business and make data-informed decisions. We started using <a href="https://metabase.com">metabase</a>.<br></p>
<p>Metabase has been a huge help for me in democratizing access to our data. Metabase connects directly to any databases you want, and it allows anyone in the company (I have chosen not to set up advanced permissions yet) to manually inspect data, do advanced reporting, or view dashboards.<br></p>
<p>This is an example of what it looks like when someone looks at our program applications table (simple database table that keeps track of applications to our <a href="https://www.reforge.com/all-programs">growth programs</a>):</p>
<figure class="wp-block-image is-resized"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__8_36_PM-1-1024x458.png" alt="" class="wp-image-619"/></figure>
<p>Benefits:</p>
<ul><li>Team members can look at the table as if it were a spreadsheet</li><li>They can apply filters as if it was a spreadsheet</li><li>They can visualize the results more easily than in a spreadsheet</li></ul>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__8_40_PM-1-1024x709.png" alt="" class="wp-image-623"/></figure>
<p>I routinely build reports in metabase that filter to people with a certain condition and send it to teammates. It’s so easy to report on people who work at company X that are in participating in one of our programs. Much better to generate a simple report and then share it with a colleague knowing that it should always be up to date, even if our underlying data is updated.</p>
<p>You can also easily switch between a table view, and many other ways to visualize the data (table, line chart, area chart, bar chart, row chart, scatter chart, pie chart, and a map):</p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__8_43_PM-1024x709.png" alt="" class="wp-image-625"/></figure>
<p>Once you’ve filtered your data set and chosen how to visualize it, it’s easy to then add it to a dashboard of other reports. It’s really nice that you can combine data from multiple databases into the same dashboard, and drag and drop the charts in any configuration you want. This is a dashboard that I setup to monitor the performance of applications submitted to our recent cohort of programs, as well as how people were paying for their spot. It has a segmentation of which programs they’re applying to, how much revenue we’re generated, how we’re comparing to previous periods, and where people are submitting applications from:</p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/dashboard_blurred-554x1024.png" alt="" class="wp-image-630"/></figure>
<p>There are a ton of other features that I am a huge fan of. Some of them:</p>
<ul><li>Posting questions to slack at a regular interval:</li></ul>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Slack_-_Reforge-1024x1011.png" alt="" class="wp-image-632"/></figure>
<p>Or via email:<br></p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__8_51_PM.png" alt="" class="wp-image-634"/></figure>
<p>It has been a huge help for me personally, and this doesn’t even cover all of the ways in which we use it. Best of all, it’s free and open source. We pay to host it ourselves via Amazon Elastic Beanstalk.<br></p>
<p>This kind of solution comes in incredibly handy in our overall data pipeline, especially when we can point it to a copy of our production database and our analytics data warehouse that is populated by <a href="https://segment.com">Segment</a>.<br></p>]]></content:encoded>
</item>
<item>
<title>Email Cohort Retention</title>
<link>https://www.danwolch.com/2019/04/email-cohort-retention/</link>
<guid isPermaLink="true">https://www.danwolch.com/2019/04/email-cohort-retention/</guid>
<pubDate>Thu, 25 Apr 2019 03:53:11 +0000</pubDate>
<category>Analytics</category><category>Growth</category>
<description>I have used and love behavioral analytics tools like Amplitude, Mixpanel, Heap, and Pendo. They’re life-savers if you’re a product manager, marketer, designer, analyst, or engineer focused on improving the product experience. If I was dropped into any company’s product management team, it would be…</description>
<content:encoded><![CDATA[<p>I have used and love behavioral analytics tools like Amplitude, Mixpanel, Heap, and Pendo. They’re life-savers if you’re a product manager, marketer, designer, analyst, or engineer focused on improving the product experience. If I was dropped into any company’s product management team, it would be one of my initial asks: point me to your data system and let me understand your metrics. Last year as I was helping to launch an email newsletter, I wanted to leverage the same type of analyses I did for products, but for email. I spoke with a couple of experts in the email industry to get ready to understand what to measure, and they told me to:<br></p>
<ul><li>Monitor my engagement metrics by email provider</li><li>Remove non-engaging contacts from our email distribution list</li><li>Monitor my long term retention of cohorts of contacts</li></ul>
<p>These felt like classic behavioral analytic problems in the product space, but email focused. I assumed that somebody was enabling this kind of analysis for the email, space, right?<br></p>
<p>Nope. I worked at HubSpot for five years, and I have so much respect for that product team. They’re badass, plain and simple (crazy smart, humble, and get stuff done). They built some simple features to answer some of these questions, but don’t provide retention across all of your email campaigns. Does mailchimp offer anything like this? Nope. What about AutoPilot, the company we were using when I joined Reforge? Nope. I did a quick search and I didn’t find any company that provides this type of feature.<br></p>
<p>One of the core things we teach at Reforge is that <a href="https://www.reforge.com/blog/growth-metric-acquisition-monetization-virality">retention is king</a> - it makes or breaks your company (acquisition, monetization, payback period, competitive advantage). So I set out to measure it.<br></p>
<p>It was pretty simple, once I got the pieces working together:</p>
<ul><li>I turned on the AutoPilot source in Segment, and piped the data to our data warehouse. Luckily we’re not Amazon, so a simple postgres database easily housed the data for this new product.</li><li>I turned on the Sendgrid source in Sendgrid, then spent weeks going back with Segment’s support department figuring out how to properly configure webhooks so email activity data flowed into our data warehouse.</li><li>I wrote a Jupyter notebook that bucketed contacts into their weekly subscriber cohorts and then built retention heatmaps based on the email activity data from both our email marketing system and our transactional emails.</li><li>I ran a script that queried DNS for a domain’s email provider so I could segment the retention curves by email provider (g-suite, microsoft, aol, yahoo, etc).</li></ul>
<p>The outputs looked like this (non-segmented charts):</p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_25_PM.png" alt="" class="wp-image-644"/></figure>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_25_PM-1-1024x738.png" alt="" class="wp-image-645"/></figure>
<p>This helped us to answer key questions like:</p>
<ul><li>What percentage of our subscriber cohorts were active N weeks after they subscribed?</li><li>Did we have a sticky email newsletter? Did people still around long term?</li><li>Would we be able to sustainably grow our subscriber base over time, if we were able to keep acquisition constant / grow it over time?</li><li>How did our retention curves look by email provider?</li><li>Who were our most prolific consumers (forwarding emails to others, consuming regularly, etc)?</li><li>Who should we be removing from our distribution lists (so that the email providers weren’t hurting our sender and reputation scores)?</li></ul>
<p>It made me ask myself, why don’t email companies provide this kind of functionality? Some thoughts:</p>
<ul><li>Mailchimp, HubSpot, and companies like it are focused on all of the other aspects of email: helping people design emails, setup automation, and measure individual campaign performance. The bigger problem is not having enough contacts to email in the first place, not having a well designed email, or wanting to analyze a single campaign rather than look at the health of an entire contact database. </li><li>Cohort analysis is not something many people find intuitive, and is a relatively advanced topic. There are still many product teams that don’t measure it, and I expect it’ll come to marketing tools eventually.</li><li>This is a big company problem, and they'll end up writing custom software to solve it for themselves. For everyone else, this isn't a must have.</li></ul>
<p>Is there some easier way to do this? Is there a company that enables this? Let me know, I’d love to use their less-buggy code. I am trying to clean up the code so it’s half respectable and will try to post when I can.<br></p>]]></content:encoded>
</item>
<item>
<title>Being the closest to the customer</title>
<link>https://www.danwolch.com/2019/04/being-the-closest-to-the-customer/</link>
<guid isPermaLink="true">https://www.danwolch.com/2019/04/being-the-closest-to-the-customer/</guid>
<pubDate>Tue, 09 Apr 2019 03:17:17 +0000</pubDate>

<description>If you read about the strategy of successful tech companies today, it’s all about having “obsessive customer focus” ( Jeff Bezos’ 2016 Amazon annual shareholder letter ). You’ll hear that “whoever gets closest to the customer wins” ( Drift ), and that companies want to “solve for the customer” (…</description>
<content:encoded><![CDATA[<p>If you read about the strategy of successful tech companies today, it’s all about having “obsessive customer focus” (<a href="https://blog.aboutamazon.com/company-news/2016-letter-to-shareholders">Jeff Bezos’ 2016 Amazon annual shareholder letter</a>). You’ll hear that “whoever gets closest to the customer wins” (<a href="https://www.drift.com/blog/customer-feedback/">Drift</a>), and that companies want to “solve for the customer” (<a href="https://www.slideshare.net/HubSpot/the-hubspot-culture-code-creating-a-company-we-love/27-SFTCSolve_for_the_customerWe_dont">HubSpot culture code</a>). Ultimately, the question isn’t about whether you’re focused on your customers, but how you go about evaluating who they are, what they’re trying to accomplish, and how they’re interacting with your product. I recently started using a workflow that gives me a continual stream of feedback, allows me to go back and forth to dig deeper and clarify important questions, and then also easily share the results with my team. It also required no effort from our engineering team to setup and didn’t require additional budget.<br></p>
<p>I work at <a href="https://www.reforge.com">Reforge</a>, and we’re an education company. We offer programs for those located in SF, but we also have an equivalent online-only experience. For a bunch of our key initiatives this year, I felt that I didn’t fully understand what brought people back to our web app after some time away, and I wanted to dive deeper to improve it. Rather than do a <g class="gr_ gr_7 gr-alert gr_spell gr_inline_cards gr_disable_anim_appear ContextualSpelling ins-del multiReplace" id="7" data-gr-id="7">one off</g> <g class="gr_ gr_8 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Grammar only-ins replaceWithoutSep" id="8" data-gr-id="8">survey</g>, I <g class="gr_ gr_6 gr-alert gr_spell gr_inline_cards gr_disable_anim_appear ContextualSpelling ins-del" id="6" data-gr-id="6">setup</g> a campaign that runs continuously to deliver this feedback on a daily basis.<br></p>
<h4>Using Segment to create our list of “alumni” to survey<br></h4>
<p>When I arrived at Reforge we were already using Segment, and we ended up buying their <a href="https://segment.com/product/personas/">personas add-on</a>. I’m a relatively happy customer (and happy <a href="https://news.crunchbase.com/news/segment-raises-175m-for-big-data-infra/">they just raised $175 million</a><g class="gr_ gr_5 gr-alert gr_gramm gr_inline_cards gr_run_anim Punctuation only-del replaceWithoutSep" id="5" data-gr-id="5">),</g> but used it because we were already paying for it. I'm a big fan of using the tools available to you.<br></p>
<p><g class="gr_ gr_8 gr-alert gr_gramm gr_inline_cards gr_run_anim Grammar only-ins doubleReplace replaceWithoutSep" id="8" data-gr-id="8"><a href="https://segment.com">Segment</a></g> has a feature called <a href="https://segment.com/product/personas/">Audiences</a> that lets you create lists of people. Since most of our important data attributes and events were already flowing through Segment, it was very easy to define small segments or large swathes of our user base through a simple editor. While I live and breathe SQL, sometimes it’s really nice to build it out in a GUI. Here’s what I built:<br></p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_27_PM.png" alt="" class="wp-image-647"/></figure>
<p>The nice thing about this is that when someone enters this audience, it means that they’re an alum, they’re not in our most recent cohort, and they have viewed our online material. The cool thing is that you could specify anything about the users that you have available (role, country, seniority, <a href="https://www.danwolch.com/2017/12/segment-your-user-base-depth-of-engagement/">depth of engagement</a>, type of user, organization, etc). <br></p>
<p>A feature of Audiences is that you know when someone enters the audience. The way I’ve structured the audience, this will mean that they came back to our site and it has been more than 90 days since their last visit - otherwise they’d already been a member. So it’s a cool way to know when someone has come back.</p>
<h4>Send the list of people to Zapier</h4>
<p><g class="gr_ gr_5 gr-alert gr_gramm gr_inline_cards gr_run_anim Grammar only-ins replaceWithoutSep" id="5" data-gr-id="5">Segment</g> then allows you to send this information to any of their supported destinations. I sent this information to Zapier:<br></p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_27_PM-1.png" alt="" class="wp-image-648"/></figure>
<p>Segment tells Zapier that the user has come back to our site, and Zapier then writes it to a google spreadsheet. This is what our looks like:<br></p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_28_PM-1024x141.png" alt="" class="wp-image-650"/></figure>
<p>What you can see here is that a user from HubSpot named Kieran has revisited how to build a qualitative growth model. I am also using a Segment API to pull in their first name and the title of the last page they visited, in case I want to include that in my outreach asking for feedback. Segment is continuously sending data about people coming back to Reforge, and each time it happens Zapier is writing it to a Google Spreadsheet for me.</p>
<h4>Email the people revisiting the material</h4>
<p>I then have another Zap that takes the rows from this spreadsheet and emails the person from my personal G-suite account.<br></p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_29_PM-1024x777.png" alt="" class="wp-image-651"/></figure>
<p>You can see what it looks like if I look in my sent folder within gmail (and you can see that people have replied to the email from Gmail's threads):<br></p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_29_PM-1-1024x472.png" alt="" class="wp-image-653"/></figure>
<p>Via this workflow, I’m automatically emailing people that are coming back to our site asking them what brought them back. I love getting a continual stream of this feedback. Because it’s in Gmail, I can go back and forth with them to clarify what they mean and to dive deeper to understand. If you have a huge user base, you can easily filter down the number of people you email with another step in Zapier (<a href="https://en.wikipedia.org/wiki/Modulo_operation">mod</a> their user id by a number to make sure you don’t email too many people at once).</p>
<h4>Collect all of the feedback in a Google Doc</h4>
<p>At this point I’m automatically emailing everyone from the segment I care about, and I’m able to go back and forth to clarify any questions that I have or dig deeper. Rather than copy and paste their responses into a google doc to share snippets of feedback / soundbites, I hooked up another Zap to automatically pull in their feedback and put it in a google doc.<br></p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_30_PM.png" alt="" class="wp-image-654"/></figure>
<p>When the feedback emails come in, I <g class="gr_ gr_5 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del" id="5" data-gr-id="5">setup</g> a <g class="gr_ gr_11 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace" id="11" data-gr-id="11">gmail</g> filter to automatically apply a label to the email. I use Zapier to look for new emails under that label, and I exclude any emails from me (my replies to them). Zapier then puts the emails as a spreadsheet row in a google sheet:<br></p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_30_PM-1.png" alt="" class="wp-image-656"/></figure>
<p>Then I used a couple of simple formulas to combine all of the emails from a single user into a single row in another spreadsheet:<br></p>
<figure class="wp-block-image"><img src="https://www.danwolch.com/wp-content/uploads/2019/04/Pasted_Image_4_29_19__9_30_PM-2.png" alt="" class="wp-image-657"/></figure>
<p>I <g class="gr_ gr_4 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace gr-progress" id="4" data-gr-id="4">separate</g> the replies with a ---------, so the above row represents multiple emails back and forth with this person. You can see that my first question was about uses cases, and then the third one was about the ones that come up frequently.<br></p>
<p>Column A is set to be “=UNIQUE(Emails)”. That means that there will only be one row for each email address I have feedback from. The formula for column B is “=ARRAYFORMULA(TEXTJOIN(CHAR(10) &amp; "--------" &amp; CHAR(10), TRUE, IF(Emails=A2,Response,"")))”<br></p>
<p>Array formulas are really cool, I’ve only had the need to use them a couple of times but I am always so impressed with their functionality. Basically this formula tells Google Sheets to combine all of the emails from users (remember, each row is a single user) together with the “--------” separator. <br></p>
<p>This is pretty powerful. Now I have a spreadsheet that has the entire conversation with someone in a single spreadsheet row, and I can share that spreadsheet with my entire team. We can then add columns to categorize feedback into buckets for easy filtering / reading.<br></p>
<p>Why I love this approach:</p>
<ul><li>I get to read feedback from a critically important segment of users every day. I can define multiple segments to run simultaneously. The only limit is the limit on emails I can send from my Google account (<a href="https://support.google.com/a/answer/166852?hl=en">2,000 messages</a>), and the number of emails I have time to respond to.</li><li>I get to follow up with them in my main email tool</li><li>Their feedback then gets pulled into a spreadsheet automatically that I can share with my team members, categorized, and filtered.</li><li>While this isn’t the easiest thing to put together, this is so much easier than it used to be: writing complex SQL by hand, setting up a cron job to run this, writing a custom Gmail script, and then store this information in some database / google sheet). This is so much easier. If you have read this far and are thinking <a href="https://twitter.com/rrhoover/status/1102593186285858816">about building this</a> - let me know I’d love to try it out first. </li></ul>
<p>Is there an easier way to accomplish this? Let me know, I'd love to switch to it.</p>]]></content:encoded>
</item>
<item>
<title>Accounting for Growth</title>
<link>https://www.danwolch.com/2018/07/accounting-for-growth/</link>
<guid isPermaLink="true">https://www.danwolch.com/2018/07/accounting-for-growth/</guid>
<pubDate>Sun, 08 Jul 2018 23:58:59 +0000</pubDate>
<category>Analytics</category><category>Growth</category>
<description>You’d be crazy not to measure your active users, at the appropriate frequency for your app. That may be daily, weekly, monthly, or yearly. (DAU / WAU / MAU). As you monitor these key metrics, you’ll want to understand how and why it’s changing. I am a big fan of how Jonathan Hsu breaks it down in…</description>
<content:encoded><![CDATA[<p>You’d be crazy not to measure your active users, at the <a href="http://thisweekinstartups.com/osh-elman-greylock-rob-may-talla/">appropriate frequency</a> for your app. That may be daily, weekly, monthly, or yearly. (DAU / WAU / MAU).</p>
<p>As you monitor these key metrics, you’ll want to understand how and why it’s changing. I am a big fan of how Jonathan Hsu breaks it down in <a href="https://medium.com/swlh/diligence-at-social-capital-part-1-accounting-for-user-growth-4a8a449fddfc">accounting for growth</a>, breaking out the components that add or subtract from your top-level numbers. Understanding the dynamics that contribute to your growth (or lack thereof) are critical for members or your team to understand what drives success. Not just the PM that owns the feature, but many of the team members.</p>
<p>I’ve had conversations with PMs at many companies who may know their top-level numbers, but don’t have a good handle on why they’re going up or down. As Jonathan outlines in his post, two very different businesses can have the same MAU numbers, but one is much better than another.</p>
<p>There are a couple of scenarios I think are important to understand:</p>
<ul>
<li>If your retention rates are poor and new signups are helping you grow:
<ul>
<li>When will your <a href="https://www.danwolch.com/2016/06/good-vs-bad-retention%e2%80%8a-%e2%80%8athe-user-and-revenue-impact/">growth rate flat line</a>?</li>
<li>Could signups go down? What would happen if your growth flat lines or if your user base shrinks?</li>
</ul>
</li>
<li>If your active user numbers go up:
<ul>
<li>Is that because of a one-time increase in new signups? Do you expect that to continue?</li>
<li>Is it because of resurrecting users (making dormant users come back)? Is this a sign of a pattern you could invest in making stronger? Why do people stop using it in the first place?</li>
</ul>
</li>
<li>If your active user numbers go down:
<ul>
<li>What component decreased? Was it isolated to resurrected users / signups / retaining existing users? If it was isolated, was there a product issue that contributed to it?</li>
</ul>
</li>
<li>Are you soliciting feedback from each of these buckets of users? There is gold to be mined by <a href="https://www.danwolch.com/2017/12/segment-your-user-base-depth-of-engagement/">segmenting</a> and surveying the <a href="https://www.danwolch.com/2016/07/identify-users-with-the-most-valuable-feedback/">users with the most valuable feedback</a>.</li>
</ul>
<p>In addition to knowing your high-level active user numbers, you should know why you’re growing. It’s helpful to understand what the future looks like if things stay the same or worsen. Even if you know, does the rest of your team know? When everyone understands how your product and business will be successful, they’ll have the context to more effectively make the critical decisions in building tech products.</p>
<p>If you're looking to get started with this type of analysis, <a href="https://twitter.com/jonathanhsu?lang=en">Jonathan Hsu's</a> <a href="https://medium.com/swlh/diligence-at-social-capital-epilogue-introducing-the-8-ball-and-gaap-for-startups-7ab215c378bc">8-ball analysis</a> or the <a href="https://amplitude.zendesk.com/hc/en-us/articles/115005110888-Video-Walkthrough-Lifecycle">lifecycle feature</a> in Amplitude is extremely helpful.</p>]]></content:encoded>
</item>
<item>
<title>Using analytics before any code is written</title>
<link>https://www.danwolch.com/2018/06/using-analytics-before-any-code-is-written/</link>
<guid isPermaLink="true">https://www.danwolch.com/2018/06/using-analytics-before-any-code-is-written/</guid>
<pubDate>Wed, 20 Jun 2018 15:00:53 +0000</pubDate>

<description>I was very lucky to have worked at HubSpot during a pivotal transition in its evolution. I managed a team of Product Analysts and data scientists, and we were charged with improving our product and the overall customer experience. We did this by analyzing what our customers did in our product. This…</description>
<content:encoded><![CDATA[<p>I was very lucky to have worked at HubSpot during a pivotal transition in its evolution. I managed a team of Product Analysts and data scientists, and we were charged with improving our product and the overall customer experience. We did this by analyzing what our customers did in our product.</p>
<p>This isn’t helpful when you are a brand new startup without a product. At that stage, you should be sitting with your customers or talking to them all the time. You should be taking advantage of your ability to <a href="http://paulgraham.com/ds.html">do things that don’t scale</a>.</p>
<p>Once you have more users than you can speak with, behavioral analytics are crucial to being successful. I often have conversations with people that aren’t sure how to apply data enhanced methodologies when launching new features. They bring up a good point:</p>
<blockquote>How are you supposed to leverage behavioral analytics when the feature doesn’t exist?</blockquote>
<p>It’s a good question. At this stage of your lifecycle, your most important task is to speak with customers that may be a good fit for what you want to build. While you may not have people using this new feature yet, there are usually groups of people who could use it within your existing user base. You just need to find the <a href="https://www.danwolch.com/2016/07/identify-users-with-the-most-valuable-feedback/">right people to speak with</a>.</p>
<p>These are the types of questions I ask:</p>
<ul>
<li>Which of your existing users are most likely to use the new feature?</li>
<li>What characteristics do those users have?</li>
<li>What actions are they taking?</li>
<li>Do you know why they’re taking the actions they are and whether this new feature would be useful to them?</li>
</ul>
<p>Take advantage of the existing users you have and their patterns of usage. If you’re building a new feature or iterating on an existing one, it’s helpful to understand the high-intensity users or the infrequent users. They are a goldmine of information and you’d be crazy if you didn’t ask them for feedback.</p>
<blockquote>Talk to your existing high intensity users and your infrequent users, they are a goldmine of information. You’d be crazy to ignore their feedback when building something new.</blockquote>
<p>I typically push PMs / researchers / marketers to spend 30 minutes looking at their analytics system to pick out a group of people they want to speak with. I think that anyone involved in building new products is already overloaded with too many tasks, and this can easily feel like unnecessary work or an endless process that will take too much time. I think the key is to timebox this type of analysis and have it point you in the right direction.</p>
<p>I agree with this <a href="https://blog.intercom.com/great-product-managers-dont-spend-time-on-solutions/">Intercom post</a> that more than half of a PM’s time should be spent understanding customers’ problems, doing research, and thinking about how design can be applied to those problems. In order to spend that time most effectively, I think behavioral analytics systems are crucial to making sure you maximize that time and understand what your existing users are doing.</p>]]></content:encoded>
</item>
<item>
<title>Snapchat&#x27;s Secrecy and DAU Metrics</title>
<link>https://www.danwolch.com/2018/01/snapchats-secrecy-and-dau-metrics/</link>
<guid isPermaLink="true">https://www.danwolch.com/2018/01/snapchats-secrecy-and-dau-metrics/</guid>
<pubDate>Wed, 17 Jan 2018 13:58:37 +0000</pubDate>

<description>I was pretty interested to read about Snapchat&#x27;s DAU numbers and their culture of secrecy . At first, I was pretty shocked to read about the stories employees told about the lengths the company goes to in order to keep its information private. It&#x27;s consistent with anecdotal stories I&#x27;ve heard about…</description>
<content:encoded><![CDATA[<p>I was pretty interested to read about <a href="https://www.thedailybeast.com/this-is-the-data-snapchat-doesnt-want-you-to-see">Snapchat's DAU numbers and their culture of secrecy</a>. At first, I was pretty shocked to read about the stories employees told about the lengths the company goes to in order to keep its information private.</p>
<p>It's consistent with anecdotal stories I've heard about Snap (they're serious about privacy and keeping their own information a secret), but I always try to take these stories with a grain of salt.</p>
<p>I immediately thought about how we try to do things differently at HubSpot. Two elements in the <a href="https://blog.hubspot.com/blog/tabid/6307/bid/34234/the-hubspot-culture-code-creating-a-company-we-love.aspx">HubSpot culture code</a> are using metrics and transparency in the organization. I thought "we're totally different than that here at HubSpot", and I bet many of you thought the same thing when reading the Snapchat article. While I think we strive to be different, we're far from perfect and are constantly trying to improve. Some of the questions I asked myself (and ways I want to hold myself and our teams accountable):</p>
<ul>
<li>Does everyone in the organization have access to data (behavioral analytics, data warehouse) that helps them make better decisions?</li>
<li>For those that aren't technical, is it accessible with non-technical tools?</li>
<li>Just because they have access to the data, do they leverage it in their ideas, analysis, and proposals?</li>
<li>Do we have sufficient documentation about how to use the data that's available to all employees?</li>
<li>Do we make an effort to train people on using the data so they are as self sufficient as possible?</li>
<li>Do we create a culture of sharing and encouraging others to showcase their findings?</li>
<li>Do we enable others to reproduce analysis that has been done in the past?</li>
</ul>
<p>&nbsp;</p>
<p>While I like to think we're better than the portrayal of Snapchat in the article, I'm not 100% satisfied with the answers to the questions above.</p>]]></content:encoded>
</item>
<item>
<title>Choosing a behavioral analytics system: our journey to Amplitude</title>
<link>https://www.danwolch.com/2018/01/choosing-a-behavioral-analytics-system-our-journey-to-amplitude/</link>
<guid isPermaLink="true">https://www.danwolch.com/2018/01/choosing-a-behavioral-analytics-system-our-journey-to-amplitude/</guid>
<pubDate>Tue, 16 Jan 2018 14:00:58 +0000</pubDate>

<description>As part of my role at HubSpot, I run a team of analysts and data scientists that leverage quantitative analysis to inform our product development and improve the customer experience. It’s our goal to make teams self-sufficient in answering questions like: “How many people are using this feature?”…</description>
<content:encoded><![CDATA[<p>As part of my role at HubSpot, I run a team of analysts and data scientists that leverage quantitative analysis to inform our product development and improve the customer experience. It’s our goal to make teams self-sufficient in answering questions like: “How many people are using this feature?” or “What percentage of signups do X?” or “How sticky is this feature?”. In addition, we perform analysis and build models to identify and act upon areas of opportunity. One of the main tools we use on a daily basis is our behavioral analytics system, which helps us understand what our customers are doing inside our product.</p>
<p>I’ve become increasingly obsessed with behavioral analytics over the years. Here’s a brief timeline of my experience with them:</p>
<ul>
<li>2013: 
<ul>
<li>Join HubSpot, start building a new product with <a href="https://mixpanel.com">Mixpanel</a></li>
<li>Blown away by the type of analysis it enables. Mind. Blown. It revolutionizes how I think about building products</li>
</ul>
</li>
<li>2014: 
<ul>
<li>Grow the new product to hundreds of thousands of users, start to get nervous about our Mixpanel bill (this was a huge mistake in hindsight)</li>
</ul>
</li>
<li>2014 - 2015: 
<ul>
<li>HubSpot decides to build its own internal behavioral analytics system</li>
<li>Rationale: 
<ul>
<li>HubSpot is a public company at this stage, it’s a competitive advantage to have complete ownership and control over this system</li>
<li>If it costs as much as an engineer’s salary, why not pay someone to build a system customized for us?</li>
<li>We could solve our own problem, then turn the solution into a solution that could be sold to customers</li>
</ul>
</li>
</ul>
</li>
<li>2016: 
<ul>
<li>Perform a vendor assessment of our internal tool vs. a vendor (for a variety of reasons, to be explained in a future post)</li>
<li>We choose to go with <a href="https://amplitude.com">Amplitude</a> as our new behavioral analytics system</li>
</ul>
</li>
<li>2017:
<ul>
<li>Finish our migration to Amplitude, we currently have 250-300 HubSpotters using Amplitude on a monthly basis</li>
</ul>
</li>
</ul>
<hr />
<p>Why did we pick <a href="https://amplitude.com">Amplitude</a>? Some key reasons:</p>
<ul>
<li>They allowed us to create charts that count by users or by other arbitrary identifiers. Since HubSpot is a B2B company, we want to track active companies, look at the conversion rates for key actions for all users in a company, and look at company retention. Amplitude had the best solution: it allowed us to change one option in an existing chart to toggle between users and organizations. Other companies could technically solve this, but I thought it was too cumbersome.</li>
<li>They had an option to store our data in a SQL database (at the time Redshift, now it’s Snowflake). The important piece is that it allows our business intelligence team to ingest the data at a regular interval so it could be combined with other data sources. We use Looker internally, and we want to take behavioral data and combine it with financial data, CRM data, support data, and any other data loaded into our data warehouse.</li>
<li>They were focused on product analytics. We felt that their roadmap aligned perfectly with our priorities and long-term goals.</li>
<li>We had a team of 3 engineers and some of a PM’s time devoted to our internal tool. Amplitude has a much bigger engineering team and we didn’t think the customizations we would build were worth it. We felt the product team’s efforts were better spent generating value for the company, not in building a tool that was (at best and probably not the case) slightly better than Amplitude.</li>
<li>Their dashboard and behavioral cohort features were just what we wanted</li>
<li>It was fast. Our internal system had been plagued by slowness and outages (we had turnover on the team that built the internal tool and had then understaffed the team)</li>
</ul>
<p>No solution is a panacea and I won’t say that Amplitude is perfect in every way, but I have been personally very happy with the decision we made. I’m pretty bullish on all of the companies in this space (I think they’re all powerful and worth the money), and unless there’s a fundamental shift in the technology required for these kinds of systems, I don’t want to be involved in building another one from scratch.</p>]]></content:encoded>
</item>
<item>
<title>Flying blind: not setting or measuring product metric goals</title>
<link>https://www.danwolch.com/2018/01/flying-blind-not-setting-or-measuring-product-metric-goals/</link>
<guid isPermaLink="true">https://www.danwolch.com/2018/01/flying-blind-not-setting-or-measuring-product-metric-goals/</guid>
<pubDate>Thu, 04 Jan 2018 14:59:54 +0000</pubDate>
<category>Analytics</category><category>Entrepreneurship</category><category>Growth</category><category>Product Design</category><category>Startups</category>
<description>I love building new products. Ever since I was building junky web apps as a geeky high schooler, I always get excited the first time something actually works. It has always felt like magic. Now that I’m older, I increasingly feel the pressure of showing my impact. After the initial euphoria passes…</description>
<content:encoded><![CDATA[<p>I love building new products. Ever since I was building junky web apps as a geeky high schooler, I always get excited the first time something actually works. It has always felt like magic. Now that I’m older, I increasingly feel the pressure of showing my impact. After the initial euphoria passes, I now immediately measure the metrics that represent success. Something that has been bothering me lately is that regardless of your methodology (waterfall, agile, scrum, burndown, trello anarchy, etc), I never hear others talk enough about product success metrics.</p>
<p>When I joined HubSpot I learned from many others about behavioral analytics. Sadly, I find myself constantly fighting responses when I speak with friends in the industry such as:</p>
<ul>
<li>“We forgot to add tracking”</li>
<li>“We want to ship it and see how it does”</li>
<li>“We don’t have any specific goals for this release other than to improve the design”</li>
<li>“What should we measure?”</li>
<li>“We can’t afford to use behavioral analytics, it’s too expensive”</li>
</ul>
<p>This is how I want to react every time I hear one of those answers:</p>
<p><a href="https://www.danwolch.com/wp-content/uploads/2017/12/mad_panda.gif"><img class="aligncenter size-full wp-image-483" src="https://www.danwolch.com/wp-content/uploads/2017/12/mad_panda.gif" alt="A guy in a panda suit breaks a computer on someone's desk" /></a></p>
<p>Just kidding. I am always asking questions to understand the rationale so I can try to help add perspective.</p>
<p>These are the tough questions I want to ask in response:</p>
<ul>
<li>What’s more expensive? A behavioral analytics system or shipping the wrong features / wasting the time of your product and engineering team?</li>
<li>If you hear feedback from a couple of customers, is that representative of all users?</li>
<li>How do you know that the users are actually doing what they say they’re doing?</li>
<li>Do you think you’ll get a team’s best work if the only goal is to release their work?</li>
<li>What do you think will garner more resources in the future? “We improved the experience, just look at it!” vs. “I increased conversion rates of signup to value by 10%, with an expected lift in revenue of Y”.</li>
</ul>
<p><a href="https://www.danwolch.com/wp-content/uploads/2017/12/tough_question.gif"><img class="aligncenter size-full wp-image-486" src="https://www.danwolch.com/wp-content/uploads/2017/12/tough_question.gif" alt="" /></a></p>
<hr />
<p>I don’t think you need to spend weeks off in a corner crunching numbers to come up with the answers to these questions. My suggestion is to spend 30 minutes thinking about a goal, why you’re working on something, and then a simple mechanism to measure success.</p>
<p>I push teams to answer these questions:</p>
<ol>
<li>What represents success for this release/feature?</li>
<li>What is the current baseline?</li>
<li>What is the hypothetical ceiling of improvement?</li>
<li>Given the baseline and ceiling, how much do you think you can improve the metric?</li>
<li>What will be the mechanism to track success/failure?</li>
<li>When should you evaluate progress?</li>
</ol>
<p>You don’t have to be super fancy and <a href="https://www.danwolch.com/2015/04/an-insiders-look-at-hubspot-sidekicks-growth-approach/">build Excel models</a>, but at least spend 15-30 minutes thinking through the basics for a new feature. Regardless if you’re building something brand new or iterating on an old feature, I always think it’s worth considering the above questions.</p>
<p>As the saying goes, “if you can’t measure it, you can’t improve it”.</p>]]></content:encoded>
</item>
<item>
<title>Segment Your User Base: Depth of Engagement</title>
<link>https://www.danwolch.com/2017/12/segment-your-user-base-depth-of-engagement/</link>
<guid isPermaLink="true">https://www.danwolch.com/2017/12/segment-your-user-base-depth-of-engagement/</guid>
<pubDate>Sat, 30 Dec 2017 18:31:28 +0000</pubDate>
<category>Analytics</category><category>Entrepreneurship</category><category>Growth</category><category>Product Design</category>
<description>If you haven’t read Jonathan Hsu’s 8 part Medium series on Social Capital’s diligence process , add it to your reading list. I didn’t immediately grok all of the concepts in the post, but it has had an incredible impact on how I look at product metrics. It appears it’s a big part of their recent…</description>
<content:encoded><![CDATA[<p>If you haven’t read <a href="https://twitter.com/jonathanhsu">Jonathan Hsu’s</a> 8 part Medium series on <a href="http://www.socialcapital.com/">Social Capital’s</a> <a href="https://medium.com/swlh/diligence-at-social-capital-part-1-accounting-for-user-growth-4a8a449fddfc">diligence process</a>, add it to your reading list. I didn’t immediately grok all of the concepts in the post, but it has had an incredible impact on how I look at product metrics.</p>
<p>It appears it’s a big part of their recent announcement of how they are able to <a href="https://techcrunch.com/2017/10/25/social-capital-has-started-investing-in-startups-sight-unseen/">fund early-stage companies</a> focused exclusively on their metrics.</p>
<p>One of the concepts that struck me was the <a href="https://medium.com/swlh/diligence-at-social-capital-part-5-depth-of-usage-and-quality-of-revenue-b4dd96b47ca6">depth of engagement</a>. It shows you how engaged different portions of your user base are. You don’t need a ton of fancy data science techniques to get a glimpse into what your user base is doing. All you need a fairly straightforward SQL query to get you started.</p>
<p>It starts with a fairly simple concept: how many users are active for 1 day in the past month? How many are active for 2 days in the month? It’s really simple to generate a histogram (this is fake data) that looks like this:</p>
<p><a href="https://www.danwolch.com/wp-content/uploads/2017/12/Pasted_Image_12_30_17__9_17_AM.png"><img class="aligncenter size-full wp-image-477" src="https://www.danwolch.com/wp-content/uploads/2017/12/Pasted_Image_12_30_17__9_17_AM.png" alt="Count of Users by Days Active" /></a></p>
<p>In this fake example there are 100k monthly active users (MAUs) in this hypothetical product. I think this is very telling and interesting from a strategy and operational perspective, but there’s a different view that I now prefer. I prefer to look at this chart on a percentage basis (the % of MAUs), and look at it cumulatively. This is what it looks like:</p>
<p><a href="https://www.danwolch.com/wp-content/uploads/2017/12/Pasted_Image_12_30_17__9_18_AM.png"><img class="aligncenter size-full wp-image-478" src="https://www.danwolch.com/wp-content/uploads/2017/12/Pasted_Image_12_30_17__9_18_AM.png" alt="CDF of Monthly Active Users by Days Used" /></a></p>
<p>How to read this chart: 33% of the MAUs are active for a single day of the month. It may be the first day of the month or the last, but the people that fall into this bucket were only active for a single day in the month. 53% of the MAUs were active for 2 or fewer days - you add up the 33k and the 20k from the histogram to get the 53%. In Jonathan’s example there’s a little bit of a spike of users that are active every day of the month - in a bunch of the examples I’ve seen in the B2B space there’s a nice healthy bump around 20 days, which makes sense when you consider that B2B apps are most likely used <i>every business day</i>, rather than every day.</p>
<p>This is a powerful way to slice up your install base very quickly. I push for taking the MAU install base and slicing it up into types of users. Here’s a hypothetical set of groupings:</p>
<ul>
<li>Low engaged users (66%): 3 days of activity or less</li>
<li>Medium engaged users (14%): 4-10 days of activity</li>
<li>Highly engaged users (10%): 11+ days of activity</li>
</ul>
<p><a href="https://www.danwolch.com/wp-content/uploads/2017/11/Pasted_Image_11_24_17__10_33_PM-1.png"><img class="aligncenter size-full wp-image-464" src="https://www.danwolch.com/wp-content/uploads/2017/11/Pasted_Image_11_24_17__10_33_PM-1.png" alt="" /></a></p>
<p>There are a bunch of plays that I could see happening for each of these buckets:</p>
<ul>
<li>Sales: I could see sales following up with customers that fall into the highly engaged bucket. If they’re free, I could see them seeing value in paid tiers of your product. If they’re already paid customers, they are probably the most likely bucket to see value in additional paid options.</li>
<li>Services: I could see customer success reaching out to the low engaged bucket to understand why they aren’t using the tool more frequently. In a B2B company where customer success is focused on retention, this is an area of high potential churn.</li>
<li>Product: I could see the product team looking to build features that address the missing functionality users need to use it more. They could also work on retention hooks that pull users back into the product / get them to see more value in the tool.</li>
<li>Marketing: I could see the marketing group targeting users based on the bucket they fall into and how they might see value from additional features.</li>
</ul>
<p>If you're interested in doing this yourself, check out <a href="https://github.com/danwolch/JupyterNotebooks/blob/master/MAU-CDF/MAU%20Depth%20of%20Engagement.ipynb">this Jupyter notebook</a> for sample code.</p>]]></content:encoded>
</item>
<item>
<title>How to quickly format retention data in less than 5 minutes to maximize learning</title>
<link>https://www.danwolch.com/2016/07/how-to-quickly-format-retention-data-in-less-than-5-minutes-to-maximize-learning/</link>
<guid isPermaLink="true">https://www.danwolch.com/2016/07/how-to-quickly-format-retention-data-in-less-than-5-minutes-to-maximize-learning/</guid>
<pubDate>Mon, 18 Jul 2016 12:48:10 +0000</pubDate>
<category>Analytics</category><category>Entrepreneurship</category><category>Growth</category><category>Startups</category>
<description>Formatting a retention data set is critical whether it’s for yourself or in a situation like a job interview. Once you’ve asked all of the questions necessary to understand the data set, you should format it to maximize your ability to analyze it. Here’s my step by step process: Export the raw data…</description>
<content:encoded><![CDATA[<p>Formatting a retention data set is critical whether it’s for yourself or in a situation like a job interview. Once you’ve asked all of the questions necessary to understand the data set, you should format it to maximize your ability to analyze it. Here’s my step by step process:</p>
<h3>Export the raw data from your analytics system</h3>
<p>It should look like the below. The cohorts are in the first column, the size is next, and then the number from the original cohort that retained in each subsequent period.</p>
<p><img class="aligncenter size-full wp-image-431" src="https://www.danwolch.com/wp-content/uploads/2016/07/retention-1.png" alt="retention-1" /></p>
<h3>Create another table that computes the percentage values of the original cohort size</h3>
<p><img class="aligncenter size-full wp-image-432" src="https://www.danwolch.com/wp-content/uploads/2016/07/retention-2.png" alt="retention-1" /></p>
<h3>Add a conditional formatting element to show the size of the cohorts over time (conditional formatting -&gt; data bars)</h3>
<p><img class="aligncenter size-full wp-image-429" src="https://www.danwolch.com/wp-content/uploads/2016/07/retention-3.png" alt="retention-4" /></p>
<h3>Apply conditional formatting to the table that contains the percentages. It should now look like this:</h3>
<p><img class="aligncenter size-full wp-image-430" src="https://www.danwolch.com/wp-content/uploads/2016/07/retention-4.png" alt="retention-3" /></p>
<h3>Adding summary rows</h3>
<p>Then I create two new rows at the bottom of the percentage table. The first is the average of each column, and the second is the percentage decrease for each additional week.</p>
<p><img class="aligncenter size-full wp-image-428" src="https://www.danwolch.com/wp-content/uploads/2016/07/retenion-5.png" alt="retenion-5" /></p>
<p><img class="aligncenter size-full wp-image-427" src="https://www.danwolch.com/wp-content/uploads/2016/07/retention-6.png" alt="retention-6" /></p>
<h3>Wrap it up</h3>
<p>Now you have a nicely formatted retention table that shows you:</p>
<ol>
<li>The size in cohorts over time</li>
<li>At a glance how your cohorts retain over time</li>
<li>Where there are good pockets and bad pockets of retention</li>
<li>The average of cohort retention over time</li>
<li>Which weeks have the biggest drops in retention</li>
<li>Whether your retention levels off over the long term</li>
</ol>
<p>Where there are many more graphs you could create off of this data set, I think this sets the right foundation for how to quickly look at the data and answer some important questions.<br>
Are there other ways you visualize this information? Do you recommend doing this another way or formatting it differently? Let me know in the comments below.<br>
Disclaimer: all of the data in these screenshots was made up for this example.</p>]]></content:encoded>
</item>
<item>
<title>The Retention Questions You Should Be Asking in a Job Interview</title>
<link>https://www.danwolch.com/2016/07/the-retention-questions-you-should-be-asking-in-a-job-interview/</link>
<guid isPermaLink="true">https://www.danwolch.com/2016/07/the-retention-questions-you-should-be-asking-in-a-job-interview/</guid>
<pubDate>Fri, 15 Jul 2016 02:17:23 +0000</pubDate>
<category>Analytics</category><category>Entrepreneurship</category><category>Growth</category><category>Startups</category>
<description>In my experience, job applicants rarely ask the right questions when faced with a retention exercise. You can create a retention chart for anything, but I think these are the questions you simply have to ask : What do the cohorts measure? What is the criteria for retention (the % of the cohort that…</description>
<content:encoded><![CDATA[<p id="722f" class="graf--p graf-after--h3">In my experience, job applicants rarely ask the right questions when faced with a retention exercise. You can create a retention chart for anything, but I think these are the questions you simply <em class="markup--em markup--p-em">have to ask</em>:</p>
<ol class="postList">
<li id="bef6" class="graf--li graf-after--p">What do the cohorts measure?</li>
<li id="6ec0" class="graf--li graf-after--li">What is the criteria for retention (the % of the cohort that returns)?</li>
<li id="db3d" class="graf--li graf-after--li">How can I segment the retention data?</li>
</ol>
<p id="da55" class="graf--p graf-after--li">There are many follow up questions you should be asking based on the answer.</p>
<h4 id="d082" class="graf--h4 graf-after--p">Question 1: What do the cohorts measure?</h4>
<ul class="postList">
<li id="09ba" class="graf--li graf-after--h4">Is it any People? Companies? Revenue? People using it at a company? Is it a subset of any of those concepts?</li>
<li id="4805" class="graf--li graf-after--li">If it’s people — what kind of people? Is it people who did some action? Example: is it people who signed up for a product? Is it people who saw some value from your product? Bought a product? What is the trend of the cohorts over time? What could affect that? How do you expect the numbers to change over time?</li>
</ul>
<h4 id="129f" class="graf--h4 graf-after--li">Question 2: What is the criteria for retention?</h4>
<ul class="postList">
<li id="71cf" class="graf--li graf-after--h4">How is retention measured? If it’s people, what action do they need to take to be counted as having been retained? Why was that chosen? Why is it important?</li>
<li id="6589" class="graf--li graf-after--li">If it’s revenue, how is it measured?</li>
<li id="0001" class="graf--li graf-after--li">If it’s an attribute of a person or a company (maybe number of people active), how is that measured? Why was that chosen? How is it important to the business?</li>
<li id="e307" class="graf--li graf-after--li">Does it level off? If you have a budget to acquire people in the cohorts, how long must they stick around in order to sustain a profitable business?</li>
<li id="c23d" class="graf--li graf-after--li">How does the data change over time? Are there patterns that you would expect to see, or cliffs where things drop off?</li>
<li id="21ff" class="graf--li graf-after--li">Do you expect to see patterns horizontally (step function changes from one cohort to another), vertically (time barriers where cohorts worsen or improve), or diagonally (holidays, press spikes, re-engagement campaigns)?</li>
</ul>
<h4 id="3c53" class="graf--h4 graf-after--li">Question 3: How can I segment the retention data?</h4>
<ul class="postList">
<li id="d67c" class="graf--li graf-after--h4">Are there pockets in the data that are better or worse than the overall average?</li>
<li id="5cb0" class="graf--li graf-after--li">Is there a feature that results in better retention?</li>
<li id="95fc" class="graf--li graf-after--li">Is there a platform (ex: Android, iOS) that is better than another one?</li>
<li id="11a7" class="graf--li graf-after--li">Is there a cohort acquisition source that performs better?</li>
<li id="bbcc" class="graf--li graf-after--li">Is there a geography that performs better in retention?</li>
<li id="e647" class="graf--li graf-after--li">Is there a cohort attribute that results in higher retention? Age / sex / profession of people? Size of company? Industry of company?</li>
</ul>
<p id="e3f5" class="graf--p graf-after--li graf--last">If you’re doing a retention exercise in an interview, you don’t even really need to look at the data, you could just ask questions the whole time.</p>]]></content:encoded>
</item>
<item>
<title>Identify users with the most valuable feedback</title>
<link>https://www.danwolch.com/2016/07/identify-users-with-the-most-valuable-feedback/</link>
<guid isPermaLink="true">https://www.danwolch.com/2016/07/identify-users-with-the-most-valuable-feedback/</guid>
<pubDate>Thu, 14 Jul 2016 01:28:39 +0000</pubDate>
<category>Analytics</category><category>Entrepreneurship</category><category>Growth</category><category>Startups</category>
<description>In my time as a product manager, I was constantly reminding myself to talk to customers more. It might have been to talk about existing features, something under development, or customer pain and processes for product research. It was easy in the beginning, because we knew most of the people using…</description>
<content:encoded><![CDATA[<p id="0622" class="graf--p graf-after--h3">In my time as a product manager, I was constantly reminding myself to talk to customers more. It might have been to talk about existing features, something under development, or customer pain and processes for product research. It was easy in the beginning, because we knew most of the people using the tool as we worked on the initial version. Even as we got bigger, my feelings usually boiled down to these four words: talk to customers more. <span class="markup--quote markup--p-quote is-other" data-creator-ids="83a3e9964193 anon d2de0f91cf1 8b7f021f652c c06857d7433">I think a critical skill, however, is learning how to talk to the <em class="markup--em markup--p-em">right customers</em>.</span></p>
<p id="6800" class="graf--p graf-after--p">As I worked on the HubSpot sales products and we grew it to hundreds of thousands of active users, I quickly realized I couldn’t speak to everyone. I needed to be strategic about who I reached out to, and the type of feedback I was looking for. It’s a dangerous path to go down, because you can end up wasting time by over-analyzing your data and getting into analysis paralysis. Even worse, in my opinion, is taking the existing feedback as representative of your user base, and only solving for the loudest segment of the customers or the customers that are most convenient to interact with.</p>
<p id="3750" class="graf--p graf-after--p">I want to share the process that <a class="markup--user markup--p-user" href="https://medium.com/u/cae0f48dccf6" data-href="https://medium.com/u/cae0f48dccf6" data-anchor-type="2" data-user-id="cae0f48dccf6" data-action="show-user-card" data-action-type="hover">Brian Balfour</a> showed me. It’s fairly easy (and inexpensive!) to identify who you should reach out to, and collect their feedback.</p>
<h4 id="2f5a" class="graf--h4 graf-after--p">Step 1: Identify who you want to speak with</h4>
<p id="01a3" class="graf--p graf-after--h4"><span class="markup--quote markup--p-quote is-other" data-creator-ids="56a13635d5">Are you working on <a class="markup--anchor markup--p-anchor" href="https://www.danwolch.com/2015/06/the-metric-watched-by-top-startup-growth-teams/" rel="nofollow" data-href="https://www.danwolch.com/2015/06/the-metric-watched-by-top-startup-growth-teams/">activation</a>?</span> If so, you want to target people who sign up but don’t really get started or see value. If you’re working on <a class="markup--anchor markup--p-anchor" href="https://www.danwolch.com/2015/04/the-hard-secret-about-optimzing-week-1-retention/" rel="nofollow" data-href="https://www.danwolch.com/2015/04/the-hard-secret-about-optimzing-week-1-retention/">retention</a>, you need to dig into why someone would start to use it but end up quitting your product. Not sure which one you should be solving for? <a class="markup--anchor markup--p-anchor" href="https://www.danwolch.com/2015/04/an-insiders-look-at-hubspot-sidekicks-growth-approach/" rel="nofollow" data-href="https://www.danwolch.com/2015/04/an-insiders-look-at-hubspot-sidekicks-growth-approach/">It depends</a>.</p>
<h4 id="90c5" class="graf--h4 graf-after--p">Step 2: Find those people</h4>
<p id="7835" class="graf--p graf-after--h4">Any good behavioral analytics system will allow you to look at the number of events that someone has done over time. Let’s say we want to find users who start to use the product, but then stop. Most analytics systems will tell you the raw number of times an event happened, or the unique users that did it. Here’s a sample from the <a class="markup--anchor markup--p-anchor" href="http://amplitude.com/" rel="nofollow" data-href="http://amplitude.com">Amplitude</a> demo for when someone plays a song:</p>
<figure id="52ca" class="graf--figure graf-after--p">
<div class="aspectRatioPlaceholder is-locked">
<div class="aspectRatioPlaceholder-fill"></div>
<div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="0*G6TUdBJOVTuh_LQp." data-width="896" data-height="433" data-action="zoom" data-action-value="0*G6TUdBJOVTuh_LQp." data-scroll="native"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" src="https://www.danwolch.com/images/medium/0*G6TUdBJOVTuh_LQp.png" data-src="https://www.danwolch.com/images/medium/0*G6TUdBJOVTuh_LQp.png" /></div>
</div>
</figure>
<p id="f4f4" class="graf--p graf-after--figure">The graph above is great for evaluating trends, but the goal is to speak with individual users about their experience. You need to go a level deeper and visualize this data on an individual user level. You should be able to get it by the user’s email. Once you have that, export it to Excel so you can play with it more closely.</p>
<p id="253c" class="graf--p graf-after--p">For the next images, imagine I exported data that has the number of events someone performed on a daily basis for my app’s most important events. I then would create a pivot table:</p>
<figure id="fe7d" class="graf--figure graf-after--p">
<div class="aspectRatioPlaceholder is-locked">
<div class="aspectRatioPlaceholder-fill"></div>
<div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="0*nzYATZsX1ud30Z7t." data-width="781" data-height="546" data-action="zoom" data-action-value="0*nzYATZsX1ud30Z7t." data-scroll="native"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" src="https://www.danwolch.com/images/medium/0*nzYATZsX1ud30Z7t.png" data-src="https://www.danwolch.com/images/medium/0*nzYATZsX1ud30Z7t.png" /></div>
</div>
</figure>
<p id="bf96" class="graf--p graf-after--figure">This pivot table has a list of email addresses in the first column, alongside the number of times an event happened per day. You could do the same on an hourly / daily / weekly / monthly basis, depending on what makes sense for your app.</p>
<p id="3f6e" class="graf--p graf-after--p">Next, I typically do some more filtering to evaluate who I could speak with. I set up this filter to find the people that weren’t active on 6/18, but were active on 6/16 or 6/17. I expect people to use my app every day, and I am shocked when they don’t. I’m curious to know why they didn’t use it.</p>
<figure id="7d43" class="graf--figure graf-after--p">
<div class="aspectRatioPlaceholder is-locked">
<div class="aspectRatioPlaceholder-fill"></div>
<div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="0*gooxAyFgbRrqpY_c." data-width="1029" data-height="586" data-action="zoom" data-action-value="0*gooxAyFgbRrqpY_c." data-scroll="native"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" src="https://www.danwolch.com/images/medium/0*gooxAyFgbRrqpY_c.png" data-src="https://www.danwolch.com/images/medium/0*gooxAyFgbRrqpY_c.png" /></div>
</div>
</figure>
<p id="981b" class="graf--p graf-after--figure">You could spend a lot of time doing this type of analysis. I’d try to limit yourself to less than thirty minutes of playing with a spreadsheet like the above. I’d bucket your search into a couple of categories:</p>
<p id="bb8d" class="graf--p graf-after--p">Super active users:</p>
<ul class="postList">
<li id="74e5" class="graf--li graf-after--p">They use the crap out of your product, consistently. I’d be curious to speak with them to understand what they like about your product and why it’s so valuable to them.</li>
</ul>
<p id="fa96" class="graf--p graf-after--li">Drive by users:</p>
<ul class="postList">
<li id="c376" class="graf--li graf-after--p">People who check out your application quickly and then leave, never to return. What was their impression? Why didn’t they stick around? If you’re using a product like <a class="markup--anchor markup--li-anchor" href="http://fullstory.com/" rel="nofollow" data-href="http://fullstory.com">Fullstory</a>, are you able to see what they did in your product?</li>
</ul>
<p id="1446" class="graf--p graf-after--li">Engaged people who quit</p>
<ul class="postList">
<li id="96fc" class="graf--li graf-after--p">I’d look for people who used it for a minimum of some period (a month? Multiple weeks?) and then stopped using it. These people presumably understand at least a portion of your product, but then took action to stop using it.</li>
<li id="b048" class="graf--li graf-after--li">As you can see in the screenshot, I added a column where I computed the number of days someone had performed an action. If done over weeks / months, this is helpful to quickly find the users who were long term users.</li>
</ul>
<h4 id="b452" class="graf--h4 graf-after--li">Step 3: Reach out to users</h4>
<p id="125c" class="graf--p graf-after--h4">This should produce some users that you want to speak with. Now comes the fun part! I took the list of emails, and I send them an email soliciting feedback. This is where I hear a ton of complaints from product managers like “I don’t have enough people to email” or “people never click through to the survey.”</p>
<p id="03fe" class="graf--p graf-after--p">I typically get 10–20% response rates on the emails that I send out. My secret is that I send out the emails from my Gmail account. I BCC lists of users and when I contacted them so I have a record and don’t email people multiple times. This works for multiple reasons:</p>
<ol class="postList">
<li id="4183" class="graf--li graf-after--p">It ends up in their inbox, not the promo inbox</li>
<li id="33f0" class="graf--li graf-after--li">It feels more personal, there’s no professional email template</li>
<li id="93d0" class="graf--li graf-after--li"><strong class="markup--strong markup--li-strong">One final key</strong>: they only have to respond to give you feedback. Nobody wants to click on a link to fill out a survey.</li>
</ol>
<p id="cbb3" class="graf--p graf-after--li">Here’s the email that I send out:</p>
<figure id="5494" class="graf--figure graf-after--p">
<div class="aspectRatioPlaceholder is-locked">
<div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="0*mc9mmAsUnZEDfr4l." data-width="635" data-height="279" data-scroll="native"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" src="https://www.danwolch.com/images/medium/0*mc9mmAsUnZEDfr4l.png" data-src="https://www.danwolch.com/images/medium/0*mc9mmAsUnZEDfr4l.png" /></div>
</div>
</figure>
<p id="b618" class="graf--p graf-after--figure"><span class="markup--quote markup--p-quote is-other" data-creator-ids="c06857d7433">Nobody wants to click on a link to fill out a survey, even if it’s a one question survey.</span> I often get back soliloquies from users with incredibly valuable feedback. I’m grateful, and I also reply back to the emails multiple times doing a typical <a class="markup--anchor markup--p-anchor" href="https://en.wikipedia.org/wiki/5_Whys" rel="nofollow" data-href="https://en.wikipedia.org/wiki/5_Whys">five whys analysis</a>. This is another reason why it’s superior to embedding a google form into an email.</p>
<h4 id="2bc4" class="graf--h4 graf-after--p">Step 4: Collect / Analyze the feedback</h4>
<p id="950c" class="graf--p graf-after--h4">If you choose to send out this survey to a large group of people, it’ll quickly become difficult to report off the trends and high level information. This is where I use <a class="markup--anchor markup--p-anchor" href="http://zapier.com/" rel="nofollow" data-href="http://zapier.com">Zapier</a>.</p>
<p id="ed40" class="graf--p graf-after--p">I connect the Gmail and Google Docs zaps like this:</p>
<figure id="db67" class="graf--figure graf-after--p">
<div class="aspectRatioPlaceholder is-locked">
<div class="aspectRatioPlaceholder-fill"></div>
<div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="0*7yUYWdvXDh4HciXM." data-width="949" data-height="557" data-action="zoom" data-action-value="0*7yUYWdvXDh4HciXM." data-scroll="native"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" src="https://www.danwolch.com/images/medium/0*7yUYWdvXDh4HciXM.png" data-src="https://www.danwolch.com/images/medium/0*7yUYWdvXDh4HciXM.png" /></div>
</div>
</figure>
<p id="4e99" class="graf--p graf-after--figure">I filter the responses to the survey into a custom label so it doesn’t overload my inbox. I use Zapier to pull the responses into a Google Spreadsheet, so I can easily read them and bucket the responses:</p>
<figure id="809f" class="graf--figure graf-after--p">
<div class="aspectRatioPlaceholder is-locked">
<div class="aspectRatioPlaceholder-fill"></div>
<div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="0*6MoJuKv-nLvuTfGS." data-width="1141" data-height="584" data-action="zoom" data-action-value="0*6MoJuKv-nLvuTfGS." data-scroll="native"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" src="https://www.danwolch.com/images/medium/0*6MoJuKv-nLvuTfGS.png" data-src="https://www.danwolch.com/images/medium/0*6MoJuKv-nLvuTfGS.png" /></div>
</div>
</figure>
<p id="e65d" class="graf--p graf-after--figure">You can see that I have manually gone through and added a feedback bucket for each of the responses. I try to bucket reasons in a handful of categories, and look for common language patterns for how people describe problems. That allows me to create reports for development teams that look like the following:</p>
<figure id="c39e" class="graf--figure graf-after--p">
<div class="aspectRatioPlaceholder is-locked">
<div class="aspectRatioPlaceholder-fill"></div>
<div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="0*vKHR6IOVRy80oUjN." data-width="1600" data-height="1200" data-action="zoom" data-action-value="0*vKHR6IOVRy80oUjN." data-scroll="native"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" src="https://www.danwolch.com/images/medium/0*vKHR6IOVRy80oUjN.png" data-src="https://www.danwolch.com/images/medium/0*vKHR6IOVRy80oUjN.png" /></div>
</div>
</figure>
<p id="4724" class="graf--p graf-after--figure">The value isn’t in doing this with free or low friction tools — the value is in the insight you get into your users and what they love or hated about your product. I’m sure that there are fancy tools that help with this type of analysis, but the bottom line is that you don’t have an excuse for not doing this type of process. It works incredibly fast, produces results, and is free (other than your existing analytics system). I like this because it gets you really close to your users and their behavior, and allows you to quickly get your hands dirty and get some actionable feedback.</p>
<p id="001c" class="graf--p graf-after--p">How could this process be better? How do you find and the solicit feedback from the users that will have the biggest impact on your company? Let me know through a comment, or drop me an email (it’s on my <a class="markup--anchor markup--p-anchor" href="https://www.danwolch.com/" rel="nofollow" data-href="http://danwolch.com">personal blog</a>).</p>
<p id="22c9" class="graf--p graf-after--p graf--last">Thanks to <a class="markup--user markup--p-user" href="https://medium.com/u/384fbd10daa" data-href="https://medium.com/u/384fbd10daa" data-anchor-type="2" data-user-id="384fbd10daa" data-action="show-user-card" data-action-type="hover">Magdalena Georgieva</a>, <a class="markup--user markup--p-user" href="https://medium.com/u/d2de0f91cf1" data-href="https://medium.com/u/d2de0f91cf1" data-anchor-type="2" data-user-id="d2de0f91cf1" data-action="show-user-card" data-action-type="hover">Lars Osterberg</a>, and <a class="markup--user markup--p-user" href="https://medium.com/u/cae0f48dccf6" data-href="https://medium.com/u/cae0f48dccf6" data-anchor-type="2" data-user-id="cae0f48dccf6" data-action="show-user-card" data-action-type="hover">Brian Balfour</a> for reading drafts of this post.</p>]]></content:encoded>
</item>
</channel>
</rss>
