<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Writings — Benjamin Day Smith</title>
    <link>https://www.benjamindaysmith.com/writings/</link>
    <atom:link href="https://www.benjamindaysmith.com/writings/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Writings by Benjamin Day Smith — composer, musician, data scientist</description>
    <language>en-us</language>
    <lastBuildDate>Mon, 13 Jun 2022 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Product Onboarding New Users: Measuring the Promise</title>
      <link>https://www.benjamindaysmith.com/writings/product-onboarding-new-users-measuring-the-promise/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/product-onboarding-new-users-measuring-the-promise/</guid>
      <pubDate>Mon, 13 Jun 2022 00:00:00 GMT</pubDate>
      <description>What does a new user think that your product, or any product, promises to do for them? On a recent multi-state drive I had the opportunity to listen to hours of radio advertisements (thanks to my 6th grader’s insistence on top-40 stations only) and got to hear many “promises.” “We’ll give you cash back on gas purchases,” “We will protect your privacy when you go online,” and “Find the lowest prices on a new car.” However, what the marketing team thinks is the promise is often not what I, the consumer, understand it to be. In buying our mini-van we didn’t need features or lowest prices, we needed reliability, confidence in the safety of the vehicle (precious cargo onboard!), and enough inner capacity to easily pack everything we could need for a weekend trip to the relatives or camping. We ended up paying more for the vehicle that satisfied, and delivered on, the promises that we were looking for.</description>
      <category>Product-Led Growth</category>
      <category>Frameworks</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Motivation</strong>: every product promises the new buyer something about how it is going to help them make progress in their lives. What is it going to fix or help or change that is it going to be so valuable that you should use it and buy it? As a data scientist I want to be able to quantify that promise, in terms of measurable actions and outcomes, and then assess the progress users of a product are making towards that promise. "Onboarding" a new user to the product and getting them to the value and the progress they are trying to make, and then understanding the steps and the time it should take.</p><h2 style="white-space:pre-wrap;">The Promise</h2><p class="" style="white-space:pre-wrap;">What does a new user think that your product, or any product, promises to do for them? On a recent multi-state drive I had the opportunity to listen to hours of radio advertisements (thanks to my 6th grader's insistence on top-40 stations only) and got to hear many "promises." "We'll give you cash back on gas purchases," "We will protect your privacy when you go online," and "Find the lowest prices on a new car." However, what the marketing team thinks is the promise is often not what I, the consumer, understand it to be. In buying our mini-van we didn't need features or lowest prices, we needed reliability, confidence in the safety of the vehicle (precious cargo onboard!), and enough inner capacity to easily pack everything we could need for a weekend trip to the relatives or camping. We ended up paying more for the vehicle that satisfied, and delivered on, the promises that we were looking for.</p><h3 style="white-space:pre-wrap;">Examples</h3><p class="" style="white-space:pre-wrap;"><strong>Slack</strong>: I was brought on to Slack via collaborators in a research group, and was 'onboarded' through needing to communicate with many coworkers in remote settings. There's an anecdote about that Slack knows when you've adopted their product when you've sent your <em>X</em>-th message (<em>X</em>=30? 100?). However, this is what their front page is promising today (June 2022), and my critique would be that they could work on their <em>product positioning</em>:</p>
</div>




















  
  






  
       <figure><a href="https://slack.com" ><img src="https://www.benjamindaysmith.com/images/posts/da2e493e-89dc-4b30-9615-fd0259b4be89/Slack.png" alt=" Primary Call-to-action (CTA) on Slack's homepage, June 2022 "/></a><figcaption>Primary Call-to-action (CTA) on Slack's homepage, June 2022</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">I don't think I'm trying to level up my teamwork (at least that's not language that resonates with me), I'm just trying to stay in close, less-formal than an email, communication with my coworkers!</p><p class="" style="white-space:pre-wrap;"><strong>Carvana</strong>: recently I had a car to sell and I was getting low-ball offers from the dealers. I'd seen Carvana trucks driving on the highway with messages telling me it was easy and they were straight shooters (aka trustworthy). I went to their site, found the 3rd CTA on the page was for me. 2 minutes and they'll come pick it up, I don't have to spend time on the phone and worry about taking it somewhere? The beginning (get the offer) and the end (handing off the car) were the most stress inducing parts for me, and they were promising a low-stress option (the offer was great, by the way, and they delivered on the stress-free sale all the way. Would recommend 5 out of 5!)</p>
</div>




















  
  






  
       <figure><a href="https://carvana.com" ><img src="https://www.benjamindaysmith.com/images/posts/f97df0aa-b467-44a0-8c70-de2d023e0672/carvana.png" alt=" The "Sell" CTA on Carvana's homepage, June 2022 "/></a><figcaption>The "Sell" CTA on Carvana's homepage, June 2022</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Boardable</strong>: I am always happy to lay a critical eye on my own company's product and chide my coworkers, so let's add it to the mix here. This is the product that I need to measure the "promise" and onboarding success of users and customers, so knowing the ins and outs of how the product is positioned and how the team thinks about its value propositions is foundational to this endeavor.</p>
</div>




















  
  






  
       <figure><a href="https://boardable.com" ><img src="https://www.benjamindaysmith.com/images/posts/8593f6c9-d803-4d97-a44b-6a1623d14e63/boardable-friction-to-focus.png" alt=" Positioning message featured on Boardable.com, June 2022 "/></a><figcaption>Positioning message featured on Boardable.com, June 2022</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Boardable is a Board Management portal, originally positioned as a "Board Engagement" solution. "From Friction to Focus" appears to be the primary promise, and internally we often discuss it as reducing the chaos of managing many people that are often geographically dispersed, where the primary competition is "digital duct-tape" (aka a mix of Dropbox, Google Drive, Zoom, email, Survey Monkey, and personal calendars). In this case we can't measure it as X messages sent, or 1 car sold, because "reducing friction" or "obtaining focus" is nebulous and probably means many things to many different people.</p><h2 style="white-space:pre-wrap;">How do we measure it?</h2>
</div>




















  
  





<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Retained</strong>: to complete this analysis we need a working definition of what qualifies an active, successfully onboarded user, and the definition can be refined later. We need enough data points (enough users) to assert confidence in the results, so one approach could be something like "the most active Y% of users that gives us at least N users." Measuring "active" as logins per month, or some other generic metric, is sufficient. Another, which I use, is "all active users with a 6+ month tenure", where 'active' is more than 1 log in every month.</p>
</div>




















  
  





<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">If you can identify a set of retained customers we can theoretically work backwards to finding the "onboarded to the promise" metrics. What did these retained (presumably happy with the product) users do in their first 90 days?&nbsp;</p><p class="" style="white-space:pre-wrap;">But where does onboarding start, one might ask? Don't over think it! I'd start from the first time they created an account or installed and opened the app. If you have enough samples (accounts) then idiosyncratic behaviors and gaps between getting started and onboarding all the way will wash out over the whole data set. Remember, we're comparing across a breadth of long-term, retained users who we can hypothesize have successfully found the promise in the product (as they understand it) or else why are they still actively using it?</p>
</div>




















  
  



<div data-preserve-html-node="true" style="background-color:lightblue; text-align:left; vertical-align: middle; padding:20px 20px;"> <strong>Why 90?</strong> Why not some other arbitrary number, like 62? 
<p data-preserve-html-node="true">First, it's a convenient approximation of 3 months, and thus easy to communicate, and is used commonly across the industry as a benchmark for successful onboarding, making it easy to compare across different authors. Theoretically, if a user hasn't adopted regular usage of your product within 90 days of picking it up they probably won't. Unless they come back to try again at some point down the road, but then they're really starting over and experiencing your product again for the first time. 
</p><p data-preserve-html-node="true">Conversely, if they become a weekly or daily active user 90 days is not too long and not too short to surmise their longterm retention. Rule of thumb: the bulk of software users try an app or a product for less than 5 minutes and then leave, so if they're coming back over a 3 month period they can be usefully analyzed as a case of successful adoption.
</p></div>


<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">When looking at a particular action (sending a message, scheduling a meeting, uploading a document, etc.) active users did during their first 90 days we typically find a distribution with a long one-sided tail. Most of these happy, retained users found the promise with a smaller amount of activity, a few really got into it and did our thing lots and lots of times, and some probably didn't do this particular action</p>
</div>




















  
  






  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/7d7f262f-d1ed-46d1-8d41-0f61ea38529d/Boardable-Document-Onboarding-Usage.png" alt=" How many accounts (vertical) uploaded how many documents (horizontal) in their first 90 days using Boardable? "/><figcaption>How many accounts (vertical) uploaded how many documents (horizontal) in their first 90 days using Boardable?</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">One of the primary features of the Boardable platform is cloud-based document storage, helping users consolidate their board related materials ("from friction to focus"). In the first 90 days (see histogram graph) lots of active users uploaded fewer than 100 documents but a smaller number of users went on to multiple hundreds. Because of this long tail (the highly active users) an average will skew to the high side (<em>average</em>=71).&nbsp;</p><p class="" style="white-space:pre-wrap;">As a number to assess the onboarding achievement of new customers a goal post of 70 is unreasonable, requiring the new user to upload 3 documents every 4 days. We know from customer and prospect interviews that users upload documents at two times: a tranche of organizational policy type documents when they first start, and then a set of reports and materials around each monthly/quarterly/yearly board meeting. Clearly some customers were very active in their first three months, but many others had far fewer documents to store and share. To obtain a more realistic goal post for onboarding assessment we could trim the long tail first, based on some percentage, or take the median of the set. In this case <em>median</em>=32.</p>
</div>




















  
  



<div data-preserve-html-node="true" style="background-color:lightblue; text-align:left; vertical-align: middle; padding:20px 20px;"> <strong>Why 90 days?, part 2.</strong>
<table data-preserve-html-node="true" border="0">
  <tbody><tr data-preserve-html-node="true">
      <td data-preserve-html-node="true">As a sanity/gut check let us look at this same user group and how quickly they uploaded documents, taking the median at 30, 45, 60, 90, and 120 days. It charts as an impressively linear trend. These all paint a picture that is understandable and would smooth out to around 1 document per 3 days for a successfully onboarded customer. I would surmise a successful user has figured out the nuances of document storage after around 5-10 documents (including creating folder structures), and is "activated" by 12-14 (the first 30 days). By 90 days and 30 documents we can hypothesize that a user is comfortable navigating the storage system and uploading and deleting documents.</td>
  </tr>
 </tbody></table>
</div>


<div class="sqs-html-content" data-sqsp-text-block-content>
  <h2 style="white-space:pre-wrap;">How Fast?</h2><p class="" style="white-space:pre-wrap;">What is an ideal speed to get a customer to this onboarding success mark of 32 documents? How quickly are they getting to this "promised land" of product value? We've looked across all long-term active, healthy customers and found that the median account uploads 32 documents in their first 90 days. However, some will hit 32 in their first week, and some will take longer than 90 days.</p><p class="" style="white-space:pre-wrap;">We con do the same thing, counting the days between all of these user's first document and their 32nd document. It has a very similar distribution with some users taking 90+ days (forming another long tail) and some getting there in a couple days. Taking the median gets us: 60 days!</p><h2 style="white-space:pre-wrap;">Conclusion</h2><p class="" style="white-space:pre-wrap;">From this analysis I can report that a good sign of long-term health for a Boardable customer account is uploading around 30 documents within their first 3 months. We can understand this 'story,' if you will, as a proof point that the new customer is "reducing friction" (a promise) and finding value in the platform by storing and sharing their materials and documents. Certainly if a user has not uploaded any documents in their first 90 days they have not found value there, and if they exceed the 30 document mark then we can deprioritize outreach to them and focus on the ones that may need more resources, training, or support.</p><p class="" style="white-space:pre-wrap;">Secondly, while 30 in 3 months is the rule of thumb, the median long-term successful customer actually gets there in 2 months. That would be a helpful expectation to set both with the customer and internal teams to proactively work towards more accounts reaching the land of product promise!</p><p class="" style="white-space:pre-wrap;">Finally, this analysis should be repeated for every potential primary activity that ties to the promise and product value propositions. At Boardable this includes: meetings scheduled and held, agendas assembled and published, discussions started and replied to, and more. Each of these primary actions is charted out with onboarding milestones at 30, 60, and 90 days, which inform a very robust process to ensure as many customers as possible realize the promise and make the progress they are hiring Boardable for.</p>
</div>




















  
  



<hr />


  
      <a href="https://www.benjamindaysmith.com/" ><img src="https://www.benjamindaysmith.com/images/posts/168a55cb-a2df-424a-bbcf-382f94bf5fe5/Smith-Headshot.jpg" alt=""/></a>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use <a href="https://www.benjamindaysmith.com/contact/">Contact</a> me to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Measuring the Right Things, pt. 1: What do people click on?</title>
      <link>https://www.benjamindaysmith.com/writings/measuring-the-right-things-pt-1-what-do-people-click-on/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/measuring-the-right-things-pt-1-what-do-people-click-on/</guid>
      <pubDate>Tue, 07 Jun 2022 00:00:00 GMT</pubDate>
      <description>People do not use our products and software in the way that we, the designers and builders, initially expect. In analyzing how web pages are used I wanted a quick way to determine what people are actually clicking on. We have web analytic tools that tell us total page views, link clicks, and form submissions, but is there more we should be looking for? And I had a hunch that users might be clicking on non-interactive elements, expecting something to happen, and experiencing more confusion than joy.</description>
      <category>Frameworks</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><em>It's not always what we expect.</em></p><p class="" style="white-space:pre-wrap;"><strong>Motivation</strong>: people do not always use our products and software in the way that we, the designers and builders, expect. In analyzing how web apps and pages are used I wanted a quick way to determine what people are actually clicking on. We have web analytic tools that tell us total page views, link clicks, and form submissions, but is there more we should be looking for? Are they clicking where we want, in the sequence we want? And I had a hunch that users might be clicking on non-interactive elements, expecting something to happen, and experiencing more confusion than joy.</p><h2 style="white-space:pre-wrap;">Catching all the Clicks</h2><p class="" style="white-space:pre-wrap;">The first step is to capture every click on our pages, even if it's on a non-interactive element. We should not assume that everyone recognizes our link colors and button design. Using <a href="https://heap.io">Heap</a> on the primary website at my company, <a href="https://boardable.com">Boardable.com</a>, it is a matter of minutes to setup a "Click Any" event to catch every click on the site. I am a big proponent of Heap for this reason: after it has been installed it auto-captures <em>every</em> user interaction, even if you don't know if you will ever need it. Months after a product change we can come back, define new events, and Heap will have all of the historical usage and analytics within seconds. In this case it is especially valuable because it will auto-capture clicks on any element in the page, regardless of interactivity. I set up the event like this, and added "Filter Results" criterion to limit to a single page (https://boardable.com/academy):</p>
</div>




















  
  






  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/7e0f9b2e-2739-4357-99ae-be35971d60eb/click_any_event_definition.png" alt=" "Click Any" event definition in Heap. "/><figcaption>"Click Any" event definition in Heap.</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">This will pull up every click or tap on anything on the specified domain (boardable.com), while matching the path "/academy" to isolate for a single page. As of February 2022 <a href="https://boardable.com/academy">this page's</a> design looks like this:</p>
</div>




















  
  






  
      <img src="https://www.benjamindaysmith.com/images/posts/8a081f9d-dc2d-4738-b94a-d32dbc7baf7a/boardable_academy.png" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Going to Heap's app again, we can setup a report that gives us all clicks on this page over the last 30 days, broken out by Target Text (what was in the button, link, or text that the person interacted with). This is the Report definition:</p>
</div>




















  
  






  
      <img src="https://www.benjamindaysmith.com/images/posts/750f52b5-50b1-4b15-b26e-861142d109e2/click_any_target_text_graph.png" alt=""/>
  




  
      <img src="https://www.benjamindaysmith.com/images/posts/b21b516e-ccc2-4bed-a693-050dad07c030/click_any_academy_text.png" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">On my site this produces a list like the one on the right (from most frequent to least, the top 9 results shown here).</p><h2 style="white-space:pre-wrap;">Clicking the Right Things</h2><p class="" style="white-space:pre-wrap;">The first several can be seen as the primary CTAs on the page ("Board Member Academy"), indicating interaction with elements that were intended by the designers ("Meetings," "Rollout," and "Advanced" are below the fold). However, what is the long string starting with "Boardable Basics Quick-start ..."?</p><p class="" style="white-space:pre-wrap;">It turns out a significant number of site visitors click on the header text and sub-title on the page, which are not interactive elements. It is just text and does not take the browser anywhere. However, you can quickly see why: the text style is different (especially the lighter blue subtitle), it is prominently placed, and could easily be understood as a link to more content. 'Yes! I came here for the basics and I want a quick start, let's go!' This is definitely an opportunity to get visitors to something about "Boardable Basics" or a "Quick-start" guide, since visitors are already clicking on it.</p><p class="" style="white-space:pre-wrap;">As you might anticipate next, the "Video Tutorials" inverted white text header also receives a lot of clicks but is not actually a link.</p><h2 style="white-space:pre-wrap;">Clicking None</h2><p class="" style="white-space:pre-wrap;">What about non-textual interactive elements? Or visitors clicking on non-interactive, non-textual elements?</p><p class="" style="white-space:pre-wrap;">Indeed, in this report the top grouping has a Target Text value of None, accounting for 12.5% of all clicks (over a 30 day period). Heap will also provide Target ID, Tag, and Class, and in this case Tag gives the most complete view:</p>
</div>




















  
  






  
      <img src="https://www.benjamindaysmith.com/images/posts/617e1608-64f1-4fe9-8aae-e2f8f60804c3/image-asset.png" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">One third are clicking on &lt;button&gt; tags (good!), one third are clicking on &lt;img&gt; tags (many of which may not be links), and the rest are on other graphical or input elements. Considering the large number of image-based buttons on the page, we can hypothesize that visitors are engaging with those as designed. </p><p class="" style="white-space:pre-wrap;">The primary opportunity for improvement indicated here would be to ensure that every image &lt;img&gt; on the page is also a link (taking the visitor to the same content as the nearest CTA). For example, the large "Boardable Academy" mortarboard hat logo is non-interactive and does nothing, but it could link to the same page as the smaller Board Member Academy button next to it.</p>
</div>




















  
  





<div class="sqs-html-content" data-sqsp-text-block-content>
  <h2 style="white-space:pre-wrap;">Empty Folders</h2><p class="" style="white-space:pre-wrap;">A very similar discovery showed up when following the same process with Boardable's web application (as of writing anyone with a valid email address can signup for a <a href="https://boardable.com/start-today/">free trial here</a>. Go check it out.)</p><p class="" style="white-space:pre-wrap;">Using a "Click Any" event in the app and then breaking them out by Target Text again provided some anomalous results. Fortunately, most of the list of top-50 clicked elements across the product fit with the prominent interaction points as designed by the developers. However, here is an example of an unexpected bread-crumb that lead to product insight and usability improvements.</p><p class="" style="white-space:pre-wrap;">In the list of document related content one thing people click on is not a button:</p><ul data-rte-list="default"><li><pre><code>documents/folder: Save      </code></pre></li><li><pre><code>documents/folder: Select File  </code></pre></li><li><pre><code>documents/folder: Submit  </code></pre></li><li><pre><code>documents/folder: This folder is empty  </code></pre></li><li><pre><code>documents/folder: Upload File</code></pre></li></ul><p class="" style="white-space:pre-wrap;">Four of these are clearly actions a user can take, but "This folder is empty" is not an action, it is a declarative statement. Where is it, and why or what are users expecting it to accomplish?</p><p class="" style="white-space:pre-wrap;">As of writing (February 2022), the page in question is the view of a new folder in Boardable's Document portal:&nbsp;</p>
</div>




















  
  






  
      <img src="https://www.benjamindaysmith.com/images/posts/90692253-590a-42b8-be4d-5ccfcde33801/empty_folder.png" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">It was a matter of a few minutes comparison with similar tools (Dropbox, Google Drive, etc.) to reveal that "this folder is empty" is commonly the drag-and-drop upload interaction element in other products. We can hypothesize that users familiar with these other tools are expecting to initiate an upload process and proceeding to select a file by clicking on the message (and, again, the visually distinct nature of that text on the page is could be a cue to interactivity, which would be misleading).</p><p class="" style="white-space:pre-wrap;">In both of these cases we were able to find these opportunities for improvement by looking at what users actually clicked on, rather than assuming users are clicking on what we want them to. I can set up funnel conversion metrics on uploading documents, or consuming "Quick-start" material, but if users are getting stuck trying to find the interactive elements I am already starting at a disadvantage.</p><p class="" style="white-space:pre-wrap;">Am I measuring the right things? I think I am 2 steps closer. And I am going to keep on searching, digging, and questioning the assumptions I can uncover, that is for sure.</p>
</div>




















  
  



<hr />


  
      <img src="https://www.benjamindaysmith.com/images/posts/f0ca92e0-4d69-4893-9c9d-96d33a14476c/Smith-Headshot.jpg" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use <a href="https://www.benjamindaysmith.com/contact/">Contact</a> me to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Best Practices in Data Pipelines</title>
      <link>https://www.benjamindaysmith.com/writings/best-practices-in-data-pipelines/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/best-practices-in-data-pipelines/</guid>
      <pubDate>Mon, 23 May 2022 00:00:00 GMT</pubDate>
      <description>The methodology of pulling data out of one software system (via some sort of application programming interface or API) and putting it into a database or other system is commonly referred to as an Extract-Transform-Load (ETL) process. There is also advocacy for ELT patterns (transforming last), but regardless of the location of the T I’ve found that the E and L parts are the most critical. In terms of operational efficiency and the need for constant maintenance, the acquisition of data (E) and storage (L) have to be bug free and running cleanly.</description>
      <category>Frameworks</category>
      <category>SaaS</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Motivation</strong>: in modern businesses we increasingly have data in many different systems and services, and getting it all into a central location ("warehouse") or getting all the parts to talk together is a very viable career and full time job. In order to do wizard data science work we need the freshest data from all sources, aligned ideally in a single location, and this is typically done with data pipeline tools and scripts. Through trial and error I've learned a lot about building these pipelines, and these are some notes what has worked best, and how I'll "get it right" from the outset the next time!</p><h2 style="white-space:pre-wrap;">ETLs</h2><p class="" style="white-space:pre-wrap;">The methodology of pulling data out of one software system (via some sort of application programming interface or API) and putting it into a database or other system is commonly referred to as an Extract-Transform-Load (ETL) process. There is also advocacy for ELT patterns (transforming last), but regardless of the location of the T I've found that the E and L parts are the most critical. In terms of operational efficiency and the need for constant maintenance, the acquisition of data (E) and storage (L) have to be bug free and running cleanly.</p><p class="" style="white-space:pre-wrap;">There are a plethora of companies that provide E(T)L services, but being at a scrappy startup, and never finding a cost-effective solution that fit my specific needs, I jumped right in to build my own. When I built out my first ETL jobs it made sense to modularize the process, and make extensive use of interfaces in Python. The three parts of any ETL job are:</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">Get some data (Extract): most commonly via a rest API, graphQL, or SQL from another database. I want all the details of these fetching processes, handling error responses, timeouts, etc. hidden from the code managing the data job for a specific system. An interface to the Extract module will take the type of call, the host endpoint, the authentication keys, and any source specific keyword arguments. It will then return a list of data records retrieved (typically JSON dictionaries).</p></li><li><p class="" style="white-space:pre-wrap;">Check the quality of the data and pull out the parts we want (Transform in the most minimal sense). This is the part I still have to write in a custom way for each new API I go up against. How is pagination handled? Can the most recently updated records be requested or is there another sorting mechanism? Are the records under a "data" key in the dictionary? Finally, I convert it into a pandas DataFrame to pass off to the final step.</p></li><li><p class="" style="white-space:pre-wrap;">Push the results into a warehouse (Load): again, I want a single call through another interface that handles the vagaries of authentication, formatting, and loading the data into whatever destination we are heading for. The nuances of Redshift vs Postgres 14 vs MySQL 8, setting up SSH tunnels, and cleaning up connections can all be handled in this separate module. It should take my DataFrame and return a success indicator of some kind.</p></li></ul><h2 style="white-space:pre-wrap;">Clean Up Script</h2><p class="" style="white-space:pre-wrap;">Starting at the end, I put this as boiler plate in every script, and even if it's not needed it provides a place to put clean-up code in the future. I have this line at the end of every main function:</p>
</div>




















  
  



<pre><code>import common.cleanup</code></pre>


<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">With a simple cleanup.py in a /common directory. At first it was empty, but has become a powerful aid as the EL landscape became more complex. Cleaning up temporary files, closing any SQL or SSH connections, etc. can all be taken care of in one place.</p><h2 style="white-space:pre-wrap;">created_at &amp; updated_at</h2><p class="" style="white-space:pre-wrap;">This is more of a database management idea, but including timestamp columns for each entry created_at and updated_at times should be the default for every table. I have it written into the load modules to add those columns on any DataFrames headed for the warehouse, and check to update the updated_at entries on any UPDATE SQL calls.</p><p class="" style="white-space:pre-wrap;">In addition to querying for the most recent data for analysis, it is also incredibly helpful in identifying stale data or cases where jobs failed silently. If we're expecting every table to have at least some updated records every day it's a quick matter to check for tables with old maximum updated_at dates and locate the failing job.</p><h2 style="white-space:pre-wrap;">Soft Delete</h2><p class="" style="white-space:pre-wrap;">Another database idea: in many cases hard deleting data is necessary, to keep only the up-to-date, current state of data. However, soft-deletion should be kept in mind whenever possible. This is a process of keeping a "deleted_at" column in the table and performing something like:</p>
</div>




















  
  





<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">HubSpot (a CRM I've worked with extensively) includes just such an indicator with most of the data object types that can be fetched via their API. However, the bulk endpoints only return non-deleted records, so for a while I was confused why deleting things in the web app did not change the corresponding records in our warehouse. It turns out one has to request EACH record individually to get the deleted status. 🤦🏼‍♂️</p>
</div>




















  
  



<p><code>UPDATE my_table SET deleted_at = NOW() WHERE ...</code> fill in your criteria. Un-deleting becomes possible, and old entries can be retrieved later if needed.</p>



<div class="sqs-html-content" data-sqsp-text-block-content>
  <h2 style="white-space:pre-wrap;">Logging</h2>
</div>




















  
  



<p>First, get hip to the logging module in Python, and make liberal use of <code>logging.debug()</code> and <code>logging.error()</code> calls. Include the kwarg <code>exc_info=True</code> in any call to get call stack details in the log.</p>



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Look at configuring Logging to write to a directory. I use a TimedRotatingFileHandler configured instance to make the files manageable over months.</p><p class="" style="white-space:pre-wrap;">Log every call, every request, every result. I have found this immensely valuable in both assessing the inefficiencies of my data scripts, but also in finding breaks and showing my work to others across the business.</p><p class="" style="white-space:pre-wrap;">Given a single interface method for the Extract stage, it's robust to place a decorator function around it to capture:</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">Calling function name and module name</p></li><li><p class="" style="white-space:pre-wrap;">Length of arguments (will catch length of query or curl request)</p></li><li><p class="" style="white-space:pre-wrap;">Time of initiation</p></li><li><p class="" style="white-space:pre-wrap;">Execution time</p></li><li><p class="" style="white-space:pre-wrap;">Returned data size</p></li></ul><p class="" style="white-space:pre-wrap;">This can be cached and pushed to a warehouse logging table on job cleanup!</p><p class="" style="white-space:pre-wrap;">The code I have in production is patterned like this:</p>
</div>




















  
  





<div class="sqs-html-content" data-sqsp-text-block-content>
  <h2 style="white-space:pre-wrap;">Never Fail</h2><p class="" style="white-space:pre-wrap;">The EL job itself cannot error out part way through. Jobs failing makes the possibility for gaps, duplicates, and erroneous entries shoot up dramatically. It makes a mess and is hard to clean up. Obviously careful but frequent use of try/except/finally blocks is critical, and getting the nesting right is important (do we try-wrap each individual call or the request pagination loop as a whole? what do we do with partial results? Etc.) Response codes 400+ won't necessarily break the script, but need to be handled and logged too.</p><p class="" style="white-space:pre-wrap;">When something fails we want to note what failed (the query or request that failed should be logged in its entirety), what the error messages were (lots of logging.error()), and what we're doing about it (throwing away the partial results? Trying again? Moving on to the next job?).</p><p class="" style="white-space:pre-wrap;">In order to never fail I've become increasingly fond of making any non-numeric data into text (VARCHAR, in the postgres world). This requires a lot of casting to use the data, but it ensures the EL jobs perform with a much higher reliability. I've lost far too much time cleaning up after someone has managed to put text into what should have been a number or date property, causing the database to reject the entire Load. Instead of relying on the system (CRM, billing, BI, whatever) to enforce data types, we just absorb it all, complete the Load, and worry about checking for empty or wrong-type data when we're analyzing or building reports.</p><p class="" style="white-space:pre-wrap;">At some point I'll have an entire post about the number of different ways one can cast a text entry to a timestamp in SQL. Who knew there were so many ways to skin the proverbial cat?</p><h2 style="white-space:pre-wrap;">Reporting</h2><p class="" style="white-space:pre-wrap;">Once everything is logged I think about ETL reporting in two ways, for me and for everyone else.</p><p class="" style="white-space:pre-wrap;">For me: I look at daily and weekly views of how much data is going where, which calls are most frequent, which sources take the longest, on and on. How are the ETL jobs performing? Which ones are the most efficient and which ones could use better optimization? Also, if something breaks I turn to my ETL warehouse logs to find the source, the scope, and the fix.</p><p class="" style="white-space:pre-wrap;">For others: ideally the data is shipped around behind the scenes, under the hood, and no one else needs to be aware and fully cognizant of how it all works. However, it takes a significant amount of work to get the engine humming smoothly and showing this work as valuable is necessary to getting support and recognition of the job. It may not be especially tangible, but reporting high level metrics of how much data is shipped each night, how many database calls, etc. gives some notion of how many gears and motors and drive belts are spinning away keeping data up to date and centralized.</p><h2 style="white-space:pre-wrap;">De-duplication</h2><p class="" style="white-space:pre-wrap;">Often we have data with a unique id key for the table (such as Contact ID, Account ID, event ID) and if the record changes we want to update the entry and keep a single row for each ID value. Some databases will help enforce this, but AWS Redshift does not. Here's the bit of SQL I use to perform a de-duplication job on a table (note: relies on accurate "updated_at" timestamps to identify the most recent of each duplicate entry):</p>
</div>




















  
  



<pre><code>CREATE TABLE {{table_name}}_duplicates AS
    SELECT * FROM (
        SELECT
            {{id_column}},
            "updated_at",
            ROW_NUMBER() OVER (PARTITION BY {{id_column}}
                ORDER BY "updated_at" DESC) AS dupcnt
        FROM
            (SELECT * FROM {{table_name}} ORDER BY "updated_at" DESC)
    )
    WHERE
        dupcnt &gt; 1;</code></pre>


<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">We're creating a temporary table containing any duplicate entry IDs and their updated_at timestamps. (Replace the handle bar {{}} variables with your actual table and id names.)</p><p class="" style="white-space:pre-wrap;">Finally, we use the temporary table to delete the old, duplicate entries from the original table:</p>
</div>




















  
  



<pre><code>DELETE FROM 
    {{table_name}}
USING  
    {{table_name}}_duplicates" t2
WHERE 
    t2.updated_at = {{table_name}}.updated_at 
    AND t2.{{id_column}} = {{table_name}}.{{id_column}}</code></pre>
<hr />


  
      <a href="https://www.benjamindaysmith.com/" ><img src="https://www.benjamindaysmith.com/images/posts/40d420db-5ad4-4a52-9da3-3a8f90d4b280/Ben-headshot.png" alt=""/></a>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use <a href="https://www.benjamindaysmith.com/contact/">Contact</a> me to get in touch. I welcome thoughtful responses and constructive critique.<br></p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Product-Qualified Lead (PQL) Scoring - Part 2: Delivering Value</title>
      <link>https://www.benjamindaysmith.com/writings/product-qualified-lead-pql-scoring-part-2-delivering-value/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/product-qualified-lead-pql-scoring-part-2-delivering-value/</guid>
      <pubDate>Wed, 09 Feb 2022 00:00:00 GMT</pubDate>
      <description>Visualizing all of the user actions that go into the score in terms of their predictive importance can be a very helpful way to breakdown the model and communicate its function with other teams. Plotting each action in a 2D field where Necessity and Sufficiency form the axis gives a view of the relative predictive value of each observable element. I used a dashboarding tool to make an interactive chart that allows filtering by product area, and selecting individual bubbles to see metric details.</description>
      <category>Frameworks</category>
      <category>Product-Led Growth</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Motivation</strong>: while building and maintaining a Product-Qualified scoring system (see <a href="https://www.benjamindaysmith.com/writings/product-qualified-lead-pql-scoring/">Part 1</a>) for several years, I have learned a lot about its day-to-day use across many teams. These are some thoughts on where to take the basic PQL model, what questions to ask, and where it can deliver impact across a SaaS business. At a future point I'll put together a Part 3: what PQL can't tell you and where it breaks when bent too far.</p><p class="" style="white-space:pre-wrap;">Questions in this post:</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">What is in the score? Which parts of the product have the highest sufficiency for indicating conversion?</p></li><li><p class="" style="white-space:pre-wrap;">How are active accounts (open trials, freemium) performing? Which ones show high likelihood of conversion?</p></li><li><p class="" style="white-space:pre-wrap;">How are the active accounts obtaining their score? Both, which areas of the product are delivering across the board, and what are individual accounts doing to score higher?</p></li></ul><h2 style="white-space:pre-wrap;">Understanding the Score</h2><p class="" style="white-space:pre-wrap;">Visualizing all of the user actions that go into the score in terms of their predictive importance can be a very helpful way to breakdown the model and communicate its function with other teams. Plotting each action in a 2D field where Necessity and Sufficiency form the axis gives a view of the relative predictive value of each observable element. I used a dashboarding tool to make an interactive chart that allows filtering by product area, and selecting individual bubbles to see metric details.</p><p class="" style="white-space:pre-wrap;">As <a href="https://www.benjamindaysmith.com/writings/product-qualified-lead-pql-scoring/">described in Part 1</a>, required actions are at the bottom (fully necessary), and the bubbles rise up as they become less necessary. I have labeled the vertical axis "Required &lt;&gt; Predictive" to translate this concept. Sufficiency forms the horizontal axis ("Path to Buying"), with insufficient actions on the left side and moving right as sufficiency increases. The dense cluster in the lower left are the least predictive (necessary but not sufficiency), while the bubbles in the upper right are most predictive (not necessary but sufficient). Pointing the non-technical teammate to these quadrants and providing a "hands on" method to explore the product areas has proven very helpful in building trust in the model.</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/fd0340f3-7267-40e8-9816-caff1dc689cf/pql_bubbles.png" alt=" Actions that make up a PQL score plotted against Necessity and Sufficiency. "/><figcaption>Actions that make up a PQL score plotted against Necessity and Sufficiency.</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Bubbles</strong>: what to do with size? In this case I decided to use the size of each action-bubble to indicate confidence (based on data volume). Actions that are almost never done and we have very little data on are small, while actions that are done by nearly every account are the largest. As new features are released we can see in the bubble size how reliable they are, and move the discussion towards decision making and away from interrogating the model.</p><h2 style="white-space:pre-wrap;">Understanding Accounts</h2><p class="" style="white-space:pre-wrap;"><em>How do accounts gain their score?&nbsp;</em></p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/111ea206-427d-47ba-a817-3f82ff01e676/engagement_scores.png" alt=" Actions for each account grouped by degree of predictive value. "/><figcaption>Actions for each account grouped by degree of predictive value.</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Rolling up lots of actions to a single score can enable automations and sales efficiencies, but not all scores are created equal. Is an account doing a low-score action many times, or a high-score action once? To catch this notion broadly, I broke the actions down into 5 color-bands according to their predictive value (black=required/necessary, yellow=predictive/sufficient) for plotting purposes, and then charted the incremental score amounts for each active account. The resulting bars (one for each account) provide an at-a-glance look at what accounts are doing, in terms of "activation." (in this case I found it interesting that a few lower scored accounts had significant amounts of orange, while a few higher scored accounts had very little orange/yellow.)</p><p class="" style="white-space:pre-wrap;">While there are clear patterns in the ratios between color sections in each account, there are a few interesting variants where some lower scored accounts have disproportionate amounts of orange, and a few higher scored accounts have very little orange/yellow. This leads to our next opportunity for analysis: what are those out of sequence accounts (with more orange/purple than the neighboring bars) doing in the product?</p><p class="" style="white-space:pre-wrap;">My model has grown to include over 500 observable product actions (from logging in to starting a Support chat to joining a video call), and attempting to read an event log transcript for an account is too opaque to quickly assess what an account is doing. Using the PQL scoring model we can break down each active account and each element that gives them some amount of score, and sum these up according to product-area (as determined by our team: Home, Documents, etc.) In addition to a dashboard to plot these amounts for each account, this now allows us to translate the visual into a quick textual description of the score.</p>
</div>

























  
      <img src="https://www.benjamindaysmith.com/images/posts/ef8b512d-d5e2-4c9a-9da5-9ebe1be6c289/one_account_pql.png" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Signals</strong>: once we can see the primary areas accounts are activating in, we can setup a little algorithm to write out a human-readable summary of what each account did (this idea was inspired by the great products from <a href="https://madkudu.com">MadKudu.com</a>. I created an action statement for each product area, then took the most important lines to create a text snippet that could be seen at a glance on each account's CRM record. For example:</p><blockquote><p class="" style="white-space:pre-wrap;">Added 4 new users.<br>1 New user logged in.<br>Visited for 8 sessions.<br>Scheduled 3 Meetings.<br>Uploaded 4 Documents.<br>Created 1 Agenda.</p></blockquote><h2 style="white-space:pre-wrap;">Understanding Product</h2><p class="" style="white-space:pre-wrap;"><em>How is each area of the product performing in producing PQL value?&nbsp;</em></p><p class="" style="white-space:pre-wrap;">In addition to slicing active account scores by PQL elements, we can also look at the product overall and ask: which areas of the product are most effective in "activating" users? I have found that some areas of the product at Boardable, while showing as highly valuable in predicting conversion (high sufficiency, low necessity) are done very infrequently and very few accounts get that far into the product. At the same time, across the breadth of less predictive elements some are performed far more often than others. By breaking down any set of scores (I like to take 30 day cohorts at a time) in total by product area, we can see how the parts of the product are performing in delivering Product-Qualification value. I find this especially useful to inform new product development discussions, as well as providing insight into the impact of new releases and feature updates.</p>
</div>

























  
      <img src="https://www.benjamindaysmith.com/images/posts/5745d02b-dd43-4f11-9284-a08721b7bee4/product_area_pql.png" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <h2 style="white-space:pre-wrap;">Impacts</h2><p class="" style="white-space:pre-wrap;"><strong>Sales</strong>: given the underlying premise of predicting conversion the PQL score is clearly indicated as a tool for Sales. It has proven powerful at Boardable both in the hands of people working to close deals, and to drive behavioral-based automation. Accounts that are not showing "activation" can be sent more general nurture material, while highly engaged accounts are better targets for specific product messaging. By breaking down what individual accounts have done, product "walkthroughs" can be crafted and delivered to steer these activated users into finding increased value.</p><p class="" style="white-space:pre-wrap;"><strong>Support</strong>: as a tool to give a broad-strokes picture of how engaged an account is, the PQL score can be useful to include on account records used by support personnel. Is this person asking this question with a very low PQL score, indicating they are a very light user? Or is this highly scored person asking with a lot of product knowledge, because the 30th document they uploaded hit a bug? This little bit of insight can give your team more of the user's background when picking up a support ticket (see: PQL Signals, above).</p><p class="" style="white-space:pre-wrap;"><strong>Going past conversion</strong>: while the model is built on pre-conversion correlations, it continues to deliver insight into account health post-conversion. Every user is on an onboarding journey with your product, and some may develop extensive usage knowledge prior to buying while others buy in anticipation of learning to use it. In B2B SaaS often a couple users will make the acquisition ("hire" the product) but then have a cohort of teammates that onboard later, at their own individual speeds. The areas of the product identified by our PQL model at Boardable align very closely with our onboarding milestones and "account health" scores, post-conversion. For example: uploading their first document is a key indicator of Product-Qualification and a significant initial milestone on the onboarding path.</p><p class="" style="white-space:pre-wrap;">PQL scoring has proven to be a great tool, but it also has many limitations and there are many things it cannot tell us (or leads to assumptions that may not be true). In Part 3 (tbd) I'll share my thoughts and experiences on the dangers of trying to use this particular hammer on things that turn out not to be nails!</p>
</div>






















<hr />


  
      <img src="https://www.benjamindaysmith.com/images/posts/168a55cb-a2df-424a-bbcf-382f94bf5fe5/Smith-Headshot.jpg" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use <a href="https://www.benjamindaysmith.com/contact/">Contact</a> me to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Product Usage: Discovering Habits, Part 1</title>
      <link>https://www.benjamindaysmith.com/writings/product-usage-discovering-habits-part-1/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/product-usage-discovering-habits-part-1/</guid>
      <pubDate>Sat, 29 Jan 2022 00:00:00 GMT</pubDate>
      <description>Habit loops can be understood as patterns of usage that emerge when users come back to our app over and over again and find value in the solution it provides. I dig into understanding and measuring habits, and explain an analytical model that uncovers “habit signals” in product usage data. Being able to measure the habits from the product perspective (“which parts of the product deliver the most value to users?”) as well as the user perspective (“which users have developed the strongest habits?”) is immensely valuable in growing a SaaS product.</description>
      <category>Frameworks</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><em>How do you measure product usage habits?</em></p><p class="" style="white-space:pre-wrap;"><strong>Motivation</strong>: for the "service" aspect of SaaS products to be significant users need to find value in an app and develop habits of usage. In the Product-Led Growth world we talk about habit loops, and the triggers that bring users back to our app over and over again. I wanted to understand and measure habits, and hit upon an analytical model that uncovers "habit signals" in product usage data. Being able to measure the habits from the product perspective ("which parts of the product deliver the most value to users?") as well as the user perspective ("which users have developed the strongest habits?") is immensely valuable in growing a SaaS product. &nbsp;</p><p class="" style="white-space:pre-wrap;">Successful software products are acquired by people for regular use. My phone is full of apps that I have picked up because they do something for me (provide directions, tell me the temperature outside, play music), and because it is actually full (64GB is not enough anymore) I have to remove the least used, least useful apps in order to add new ones. From the perspective of the teams building those apps they see me along a journey:</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;"><strong>Acquisition</strong>-I make the choice to delete an unused app and install their new one. I have been "acquired" as a new user.</p></li><li><p class="" style="white-space:pre-wrap;"><strong>Activation</strong>-I begin to explore the product and look for value, and I will keep it if I come to some feeling about how it is useful to me. What job is it going to do for me? When I figure that out I'm not an "activated" user of the product.</p></li><li><p class="" style="white-space:pre-wrap;"><strong>Retention</strong>-I come back again and again, and form habit loops around the product. If I use it enough a lot of the taps and clicks I do will become habitual. I couldn't tell you where the feature I use is (on a menu somewhere), but I can find and use it while having a conversation and making lunch for my kids.</p></li></ul>
</div>
























<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Conversion</strong> to a paid account is not important in trying to assess the health of a user base, from a usage perspective. In the user's experience having to go from a free trial or freemium to paid is friction, and if they have not formed any habits purchasing is speculative. If they do not quickly realize the value your product provides them they will churn. See my <a href="https://www.benjamindaysmith.com/writings/product-qualified-lead-pql-scoring/">predictive Product-Qualified Lead scoring model</a> for a conversion oriented product analysis.</p>
</div>
























<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Here I want to focus on <strong>retention</strong>, and go beyond Monthly, Weekly, Daily Active Users (MAU, WAU, DAU) and the common retention curve graphs. These are common SaaS performance metrics, but in order to meaningfully drive growth we need to dig deep and figure out what users are coming back to do over and over (the "use" aspect of "user"!) We are not random in how we use products, and after an exploratory phase (when we figure out what a product does) we use them to <em>do things </em>(where "doing" is understood to have a functional as well as emotional and social components). This post will start with assumption that we have users of a product already and we want to understand their habits, and what they actually do when they pick up our app every day or week (then as a next step we could use that knowledge to encourage new users in similar directions, or focus the efforts of our product and development team). How habits are formed is a fascinating topic as well (see <a href="https://www.nirandfar.com/how-to-trigger-product-usage-that-sticks/">this post</a> for a good discussion of habit formation around software products).</p>
</div>






















<hr />

<div class="sqs-html-content" data-sqsp-text-block-content>
  <h2 style="white-space:pre-wrap;">Defining Habits</h2><p class="" style="white-space:pre-wrap;">From Oxford Languages:</p><p class="" style="white-space:pre-wrap;"><strong>Habit</strong>: <em>a settled or regular tendency or practice, especially one that is hard to give up.</em></p><p class="" style="white-space:pre-wrap;">From <a href="https://www.merriam-webster.com/dictionary/habit">Merriam-Webster</a>:</p><p class="" style="white-space:pre-wrap;"><strong>Habit</strong>:<em> a usual way of behaving: something that a person does often in a regular and repeated way.</em></p><p class="" style="white-space:pre-wrap;">From <a href="https://en.wikipedia.org/wiki/Habit">Wikipedia</a>:</p><p class="" style="white-space:pre-wrap;"><strong>Habit</strong>:<em>&nbsp;is a routine of&nbsp;behavior&nbsp;that is repeated regularly and tends to occur&nbsp;subconsciously.</em></p>
</div>






















<hr />

<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">A habit, if viewed externally, appears as a reoccurring pattern, often with some notion of "automatic" and without explicit intention. Pattern itself is a reoccurrence of consistent elements over a space or time (Wikipedia: "<em>A pattern is a regularity in the world...the elements of a pattern repeat in a predictable manner</em>"). If we think about habits in our daily lives they can be described, typically, as a sequence of events that define this pattern:</p><p class="" style="white-space:pre-wrap;"><em>Example</em>: I drink 2 cups of hot tea every morning. I go to the kitchen, I pick up the kettle, I walk to the sink, I fill up the kettle (often, even if it already has enough water), I take it to the stove, put it on the front-left burner, turn the element on to max, walk to the shelf and take my favorite ceramic mug, put the mug on the counter, open the jar of tea bags, take one bag, put it in the mug, wait for the water to boil, and on and on.</p><p class="" style="white-space:pre-wrap;">I do this same sequence of actions almost subconsciously every morning. Someone viewing me everyday would be able to ascertain the "pattern" after they saw it repeated several times over several days. We could then say: Ben is a retained user (he is DAU of tea kettles), and has a strong habit-loop around tea making. [Interestingly, there is a lot of debate around whether we can self-report habits, since they are often stimuli based responses performed unintentionally. So this external observer is necessary, and in this case my family confirms my tea drinking habit. 🫖]</p>
</div>
























<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Sequential dependency</strong>-the precise order of actions in a habit is often not as significant as the co-occurrence of the actions. I can put the tea bag in my mug before I turn the kettle on, or after I've already poured the boiling water in the mug. The habitual pattern involves both actions but they can happen in a variety of orders. The common approach to catching this in Machine Learning is to count the number of occurrences of an action (also called a "feature") within a "sample" of the pattern. We can then compare distances between vectors of features to determine similarity and look for clusters of patterning.</p>
</div>
























<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Habits in software usage follow the same patterning paradigm, and with the right processing can be discovered and used for a variety of business decisions and tasks (lead qualification, opportunity identification, onboarding performance, account health and churn risk, etc.) For example: once we have analyzed for and identified a few primary habit patterns product users have formed, we can compare new users and watch as their usage settles into the same patterns. If their usage remains chaotic (incoherent, in a sense) then they aren't likely to be interested in purchasing. If they match the patterns of long-term users we can start making assumptions about their likelihood to cancel or churn (from a usage perspective). Additionally, we can test hypotheses on where the value in the product really is, and what keeps people coming back to use it again and again.</p><p class="" style="white-space:pre-wrap;"><em>Example</em>: I am a DAU of Spotify for listening to music. I open the app on my phone, I tap the Home button, and look at my 6 most recently played playlists. If one of those seems interesting I tap it, select Play or Shuffle-play, wait until I hear music, and turn my phone off. If I am looking for something new I start scrolling down, viewing all the recommendations, or use the search function until I arrive at a suitable selection. There are many other features and actions I can take in the app, but I only use a handful and a typical "session" for me involves 2-6 taps or clicks before I have obtained the value I am seeking: music to accompany working or cooking or driving.</p><p class="" style="white-space:pre-wrap;">In part 2 (TBD!) I will describe how to pre-process user data and perform a pattern analysis, identifying "habit signals" that can give us deeper insights into how people use a product and which feature combinations are most critical in delivering value. I will get into figuring out how users are using the product, which features are really valuable, and what habits we can see them building around the product that make it sticky.</p>
</div>






















<hr />


  
      <img src="https://www.benjamindaysmith.com/images/posts/6280b808-2efb-41de-a7ef-1b08f998c72a/11350914_1147799065233796_9204357832085048762_n.jpg" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use <a href="https://www.benjamindaysmith.com/contact/">Contact</a> me to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Product-Qualified Lead (PQL) Scoring</title>
      <link>https://www.benjamindaysmith.com/writings/product-qualified-lead-pql-scoring/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/product-qualified-lead-pql-scoring/</guid>
      <pubDate>Tue, 25 Jan 2022 00:00:00 GMT</pubDate>
      <description>This post walks through how to build a “product qualifying” model to identify which users of your product are most likely to buy. For explanations of why this is a great idea, and you should already be doing it, see this excellent article from Madkudu, or the Product-Led Growth book .</description>
      <category>Frameworks</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Motivation</strong>: this post walks through how to build a "product qualifying" model to identify which users of your product are most likely to buy. For explanations of why this is a great idea, and you should already be doing it, see <a href="https://blog.madkudu.com/accelerate-saas-sales-behavior-based-conversions-part-23/">this excellent article</a> from Madkudu, or the <a href="https://productled.com/book/">Product-Led Growth book</a>. At some point I'll write up a more expository post on my theory-of-the-case and experience using this technique in SaaS for the last 3 years. At <a href="http://boardable.com">boardable.com</a> we saw a 7.5x increase in conversion for our product-qualified leads after building this system out! See <a href="https://www.benjamindaysmith.com/writings/product-qualified-lead-pql-scoring-part-2-delivering-value/">Part 2</a> for a discussion of building insight tools to use the PQL scores across a SaaS business.</p><h2 style="white-space:pre-wrap;">Ingredients</h2><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">Auto-captured page views, clicks, form submits, the activity of users in your product, with a unique identifier for each account.</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;"><a href="https://heapanalytics.com">Heap</a>, Mixpanel, Pendo and others provide the service. For thoughts on which things in your product are the most relevant to track: stay tuned!</p></li></ul></li><li><p class="" style="white-space:pre-wrap;">Definition of "conversion." What is the first destination you would like to get customers to? Usually this is paying you in some way (subscribing, buying, etc.)</p></li><li><p class="" style="white-space:pre-wrap;">Definition of "dropped off." How do you know when a user is not going to convert (pay you)? If you have a time-limited trial you can use the end of the trial (with a sufficient time delay to ensure they do not reactive or convert a few days later). If it is in an endless free product something like "30 days of not logging in" works well for "dropped off."</p></li><li><p class="" style="white-space:pre-wrap;">Conversion baseline: over the time period you are analyzing, what is your overall conversion rate? Baseline = converted accounts / (dropped off + converted) accounts.</p></li></ul><h2 style="white-space:pre-wrap;">Preparation</h2><p class="" style="white-space:pre-wrap;">Collect all of the auto-captured data for users who converted and those who dropped off. Depending on how much data you have specifying a certain time period is helpful, say the 180 days from 30 days ago and back. Ignore any data from users that converted before this time period, or who are still active but not converted (these are the ones we will "score" at the end).</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">We want to put together a table where each row is a unique account and each column is a different event (page view, button click, etc.), and for each account we have a count of how many times that account did that event. For now we only need 0 or 1 (didn't do the action, did the action), but having counts can enrich it later.</p></li></ul>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/f13c78c3-7e92-44d2-8c66-b144040a7b9d/Screen-Shot-2022-01-25-at-3.23.27-PM.png" alt=" Table of actions completed by unique users. "/><figcaption>Table of actions completed by unique users.</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">See the end of this post for how to implement this on a database containing data sync'd from Heap. If you have data from another system the SQL should be reasonably modifiable to accomplish the same thing.</p></li></ul><h2 style="white-space:pre-wrap;">Theory</h2><p class="" style="white-space:pre-wrap;">What we are looking for are actions in the product that indicate adoption, that the user is an "activated" user and is likely to upgrade to a paid account (or if we have packaged it well then they will see the value in the paid access). The nuts-and-bolts actions that we can auto-capture roll up to activities that make the product useful, like sending messages, adding friends, or putting items in a cart. Once we have the event tables filled out (see above), we leverage the logical relationships of <a href="https://en.wikipedia.org/wiki/Necessity_and_sufficiency">necessity and sufficiency</a> to form the building blocks for this model.</p><p class="" style="white-space:pre-wrap;"><strong>Necessity</strong>: a necessary condition is one that must true in order for another to also be true. When talking about product actions this can be understood as required events. If the only way to click the 'buy' button is to sign up for an account then the 'sign up' action is necessary for 'buy.' Everyone who clicks 'buy' will have already completed 'sign up.'</p><p class="" style="white-space:pre-wrap;"><strong>Sufficient</strong>: a sufficient condition implies another, but is not required. At Boardable 'delete document' is a sufficient condition for 'upload document' (you can't delete something that is not there), but if someone hasn't deleted anything they may or may not have already uploaded something.</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/8259706d-b860-4032-b80b-2d9ef67f5674/PXL_20220124_210708970.jpg" alt=" Necessary action: all converted users did the action. "/><figcaption>Necessary action: all converted users did the action.</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">A fully necessary action is one that all converted users completed. It is a required action, like signing up or entering a payment method, indicating progress towards conversion but with little predictive value. In set terms: all converted users are a subset of all users who completed the action.&nbsp;</p><p class="" style="white-space:pre-wrap;">Rather than simply look at "how many people do the action and convert?", we instead look at the conversion population in the field of users that either did the action at least once, or never did it (see next image, the bounds of the paper represent all users in our specific time period). This catches people who maybe never saw the feature in the product and were unaware it was a capability.&nbsp;</p><p class="" style="white-space:pre-wrap;">How the converted circle sits across the did-the-action/did-not-do-the-action field gives us a picture of necessity. To the degree that the conversion bubble sits in the "action" side it is necessary, and if the bubble sits in the "no action" side it is completely unnecessary.</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/ffd427cc-7b2e-4f89-92e0-20f6eb37d552/PXL_20220124_211350920.jpg" alt=" Set of users that converted are split into ones that did the action and the ones that did not. "/><figcaption>Set of users that converted are split into ones that did the action and the ones that did not.</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <h3 style="white-space:pre-wrap;">Necessity</h3><p class="" style="white-space:pre-wrap;">To calculate necessity we look at how many accounts converted without doing the action. If no one converts without doing the action we can assert that it is a necessary step on the path to converting (such as selecting a payment method).</p>
</div>






















<p><strong>How many users ...</strong></p>
<table>
<thead>
<tr>
<th style="text-align:left"></th>
<th style="text-align:left">Converted</th>
<th style="text-align:left">Dropped Off</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">did action</td>
<td style="text-align:left">A<sub data-preserve-html-node="true">c</sub></td>
<td style="text-align:left">A<sub data-preserve-html-node="true">d</sub></td>
</tr>
<tr>
<td style="text-align:left">did not</td>
<td style="text-align:left">N<sub data-preserve-html-node="true">c</sub></td>
<td style="text-align:left">N<sub data-preserve-html-node="true">d</sub></td>
</tr>
</tbody>
</table>

<p><em>Baseline = (A<sub data-preserve-html-node="true">c</sub> + N<sub data-preserve-html-node="true">c</sub>) / (A<sub data-preserve-html-node="true">c</sub> + A<sub data-preserve-html-node="true">d</sub> + N<sub data-preserve-html-node="true">c</sub> + N<sub data-preserve-html-node="true">d</sub>)</em></p>
<p><em>Nec = N<sub data-preserve-html-node="true">c</sub> / (A<sub data-preserve-html-node="true">c</sub> + A<sub data-preserve-html-node="true">d</sub> + N<sub data-preserve-html-node="true">c</sub> + N<sub data-preserve-html-node="true">d</sub>)</em></p>
<p><em>N = Nec / Baseline = N<sub data-preserve-html-node="true">c</sub> / (A<sub data-preserve-html-node="true">c</sub> + N<sub data-preserve-html-node="true">c</sub>)</em></p>



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">At the limits, <em>N = 0</em> when no one has converted and skipped this action (making it fully necessary), and <em>N = 1 </em>when everyone who has skipped this action converted (making it unnecessary).</p><h3 style="white-space:pre-wrap;">Sufficiency</h3><p class="" style="white-space:pre-wrap;">To obtain sufficiency we look at everyone who did the action and ask "how many accounts that did the action converted?" This can be plotted as a ratio of "Did Action" samples in the field of converted vs. dropped off users. If this ratio is higher than the baseline overall conversion rate then we have a valuable action!</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/fd3ce30b-3de3-4a19-b604-19bf1a8b35c3/PXL_20220124_210309959.jpg" alt=" All users who did the action split into those that went on to convert vs those that dropped off. "/><figcaption>All users who did the action split into those that went on to convert vs those that dropped off.</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">To the degree that the action bubble sits in the converted side it is sufficient and we could say "doing action X implies conversion," but not "everyone who converted did action X." Once we know how many of the "did the action" users converted vs failed we have a useful calculation of "sufficiency":</p>
</div>
























<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><em>S</em> = <em>Ac / (Ac + Nc)</em> is incorrect, stated as "out of all the users that converted, how many did this action?" This is a Necessity calculation, again.</p><p class="" style="white-space:pre-wrap;">In this formulation, <em>S = 0 (Ac ~ 0)</em> only when no one does the action and converts (aka it's a conversion killer action, the "cancel now" button), and <em>S = 1 (Nc ~ 0) </em>when it is a necessary action (everyone that converts does the action), which we already capture above.</p>
</div>






















<p><em>S = A<sub data-preserve-html-node="true">c</sub>
/ (A<sub data-preserve-html-node="true">c</sub> + A<sub data-preserve-html-node="true">d</sub>)</em> where <em>A<sub data-preserve-html-node="true">c</sub>+A<sub data-preserve-html-node="true">d</sub> &gt; 0</em></p>



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">At the limits, <em>S = 0</em> when everyone who does the action drops off (<em>Ac</em> approaches 0), and <em>S = 1</em> when everyone who does the action converts (<em>Ad</em> approaches 0).</p><p class="" style="white-space:pre-wrap;">We can now define 3 categories of actions:</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">Necessary but not Sufficient (<em>N ~ 0, S ~ 0</em>): required actions, indicating average conversion if a user does the action, and very low chance if they don't do it (account creation, selecting payment, etc.)</p></li><li><p class="" style="white-space:pre-wrap;">Necessary and Sufficient (<em>0 &lt; N &lt; 1, 0 &lt; S &lt; 1</em>): actions that indicate engagement. Low chance of conversion if the user hasn't done it, and a high chance if they do.</p></li><li><p class="" style="white-space:pre-wrap;">Sufficient but not Necessary (<em>N ~ 1, 0 &lt; S &lt; 1</em>): more users that do these actions end up converting than not, but they are not required. These are the most interesting.</p></li></ul><h2 style="white-space:pre-wrap;">Application</h2><p class="" style="white-space:pre-wrap;">I have had great success splitting actions into these 3 categories (along the lines of the '<a href="https://blog.madkudu.com/accelerate-saas-sales-behavior-based-conversions-part-23/">Activation, Engagement, Acceleration' framework described by Madkudu</a>), and then creating a "score" for each active account. I worked out a formula that combines both the <em>N &amp; S</em> calculations to create a single estimate of the Product-Qualifying value for each action, and then sum these values to create an account's Product-Qualified Lead score.</p><p class="" style="white-space:pre-wrap;">Finally, all active accounts are broken down into Low, Medium, and High PQL groups in order to deliver targeted messaging and automation routing.&nbsp;Continue on to <a href="https://www.benjamindaysmith.com/writings/product-qualified-lead-pql-scoring-part-2-delivering-value/">Part 2</a> of this post series for more on delivering value across teams using PQL scores.</p><h2 style="white-space:pre-wrap;">Code</h2><p class="" style="white-space:pre-wrap;">The following breaks down the calculations in SQL sub-queries (this is Redshift SQL, a variant of PostgreSQL). The data it operates on consists of:</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">."Users" table with a unique entry for each individual user, containing</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">"user_id": a unique identifier</p></li><li><p class="" style="white-space:pre-wrap;">"trial_ends_at": a custom property that indicates the date the user's free trial ended. We only want events that happened during each user's free trial, not things they do after converting.</p></li><li><p class="" style="white-space:pre-wrap;">"plan": a custom property that indicates the user converted to a paid account. Change this to whatever you have that indicates conversion.</p></li></ul></li><li><p class="" style="white-space:pre-wrap;">An event table, "sign_up_complete" in this example. The event table has 2 data points we need:&nbsp;</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">"user_id" that matches the unique identifiers on the users table</p></li><li><p class="" style="white-space:pre-wrap;">"time" when the event took place</p></li></ul></li></ul>
</div>






















<hr />


  
      <img src="https://www.benjamindaysmith.com/images/posts/40d420db-5ad4-4a52-9da3-3a8f90d4b280/Screen-Shot-2021-07-14-at-3.16.33-PM.png" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use <a href="https://www.benjamindaysmith.com/contact/">Contact</a> me to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>If (only) I&#39;d Never Played a Piano</title>
      <link>https://www.benjamindaysmith.com/writings/if-only-id-never-played-a-piano/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/if-only-id-never-played-a-piano/</guid>
      <pubDate>Sun, 23 Jan 2022 00:00:00 GMT</pubDate>
      <description>When do we let our perceptions of the limitations of our tools (the apps we use, the vehicles we drive, the mobile devices we carry, the models and frameworks we employ), prevent us from exploring their full range? Of thinking beyond the constraints we impose on ourselves before we even get started?</description>
      <category>Reflections</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <h3 style="white-space:pre-wrap;"><em>A brief treatise on the advantages of knowing nothing</em></h3><p class="" style="white-space:pre-wrap;">The first electronic music synthesizer I saw was in college, in a course I took in the studios at Ithaca College. These early synths powered up with an empty 'patch,' and required extensive programming and wiring to create any sound. Once we had created our own 'patches' the interface used to play the synth was a keyboard. A piano-style keyboard with plastic black and white keys.</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/0f27fbec-365f-4f44-b29a-02bd445076d7/roland_jd_800.jpeg" alt=" Roland JD-800 Synthesizer, one of the instruments I worked with at Ithaca College. "/><figcaption>Roland JD-800 Synthesizer, one of the instruments I worked with at Ithaca College.</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <h3 style="white-space:pre-wrap;">Playing Piano</h3><p class="" style="white-space:pre-wrap;">As we received our first assignment to create a piece of music with the synths, our professor asked us to split into three groups:</p><ol data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">All the skilled pianists; if you could play anything by a classical master from memory you were here. This was a small group.</p></li><li><p class="" style="white-space:pre-wrap;">Anyone who had taken piano lessons, or "knew enough to be dangerous." I was in this group!</p></li><li><p class="" style="white-space:pre-wrap;">Piano, what? If you didn't know the difference between black and white keys this was you. I was so excited not to be in the newbie group.</p></li></ol><p class="" style="white-space:pre-wrap;">The professor proceeded to dismiss the first group: "I'm not worried about you. You know how keyboards are used in western music and you have the technical skill to execute whatever you want to play."</p><p class="" style="white-space:pre-wrap;">Then he dismissed the third group: "I'm not worried about you either. These keys? They're just buttons. Push them. Don't worry about how pianos are played, instead explore the sounds you get from your own individual approach. There's no wrong way to make music here."</p><p class="" style="white-space:pre-wrap;">Finally, he kept the second group over: "You are going to be the most challenged. You see a piano, when in fact they're just buttons. You've been told how to play the piano, so you will approach it like a piano. Yet, you don't have the mastery to make your fingers do everything you can think of. Your creativity is already confined by what you think the keyboard can do, and what your hands don't have the training to do."</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/9a9ee3da-ce46-4f02-a3d6-7d2d86403c53/IMG_515AE9CD5D65-1.jpeg" alt=" Keyboard skill vs. creativity of output. In this conception low and high skill enables higher creativity, while middling skill depresses it. To obtain the highest creativity either skill has to be maximized or minimized. "/><figcaption>Keyboard skill vs. creativity of output. In this conception low and high skill enables higher creativity, while middling skill depresses it. To obtain the highest creativity either skill has to be maximized or minimized.</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <h3 style="white-space:pre-wrap;">The Valley of Mediocrity</h3><p class="" style="white-space:pre-wrap;">At the end of the project, when everyone presented their pieces, it bore out almost exactly like he had said from the start.&nbsp;</p><p class="" style="white-space:pre-wrap;">The output from the piano-proficient students was evident: they had lots of piano-isms, lots of notes, tended to be faster and very showy.&nbsp;</p><p class="" style="white-space:pre-wrap;">The pieces from the third group were distinct as well: they were crazy, they were chaotic, they were creative and there was no influence of the keyboard-nature of the interface. They could have been using any bunch of buttons or other input device.</p><p class="" style="white-space:pre-wrap;">And the work of the middle group, including my own contribution I'm afraid, was as constrained as predicted (*cough* <em>lame</em>). Some broken chords, halting rhythm, simplistic little melody fragments, or in one case a full-blown song melody (picture: picking out the notes from a Disney theme song on the piano by ear). The pieces may have had some element of creativity underlying them, but then had been forced through conceptions of how keyboards should be approached, and executed terribly. One could hear the "sit up tall, two hands on the keyboard" tension more than one could hear the creative flow of musical expression.</p><h3 style="white-space:pre-wrap;">Boxed In</h3><p class="" style="white-space:pre-wrap;">Years later I would learn the concept of affordances in interfaces, and still continually wonder: when are I/we in that middle group?</p><p class="" style="white-space:pre-wrap;">The middle group was unable to get beyond their perceptions of the limitations of the interface (keyboards play notes, they play chords, they're played with two hands) and get to creative exploration of the whole range of possibilities (press them, smash them, roll a bottle over them). I could not see past the regular ordering of alternating whites and blacks (and years of piano teachers correcting my etudes) and thus my ability to create music was boxed in. I wanted to be in the masterful, first group, when the most creative work came from the unconstrained explorers in the third group.&nbsp;</p><p class="" style="white-space:pre-wrap;">When do we let our <em>perceptions</em> of the limitations of our tools (the apps we use, the vehicles we drive, the mobile devices we carry, the models and frameworks we employ), prevent us from exploring their full range? Of thinking beyond the constraints we impose on ourselves before we even get started?</p><p class="" style="white-space:pre-wrap;">If only I could have forgotten how to play the piano for a semester and known nothing of the conventions of keyboards! My creations in that class would most certainly have been different (better? Maybe not, but different for sure).</p>
</div>

























  
      <img src="https://www.benjamindaysmith.com/images/posts/6280b808-2efb-41de-a7ef-1b08f998c72a/11350914_1147799065233796_9204357832085048762_n.jpg" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use Contact to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>The First Form on the Internet</title>
      <link>https://www.benjamindaysmith.com/writings/first-form-on-the-internet/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/first-form-on-the-internet/</guid>
      <pubDate>Sat, 22 Jan 2022 00:00:00 GMT</pubDate>
      <description>We live in a world of HTML and interactive web pages and apps, but how often do we stop and think about how quickly it is changing, and how little we really understand how it impacts how we buy and sell stuff?</description>
      <category>Reflections</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <h3 style="white-space:pre-wrap;"><em>Brief Reflections on the Brevity of the Web</em></h3><p class="" style="white-space:pre-wrap;"><strong>Motivation</strong>: I was buried deep in the minutia of measuring the impact of a change in the software I was working on, and suddenly thought "where is the retired professional I can ask about how they did this?" Where is the retired software Product Analyst that spent their entire career on cloud based mobile apps? Well, they don't exist! It is both humbling and exciting to realize how new all this is, and while it feels established and understood, there is so much we don't know. So much we can learn.</p>
</div>






















<hr />

<div class="sqs-html-content" data-sqsp-text-block-content>
  <h3 style="white-space:pre-wrap;">The First Forms</h3>
</div>
























<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">When was the first web form put up on the internet? We live in a world of HTML and interactive web pages and apps, but how often do we stop and think about how quickly it is changing, and how little we really understand how it impacts how we buy and sell stuff?</p><p class="" style="white-space:pre-wrap;">While the first web browsers became publicly available around 1990, the first "sites" were static pages. The original HTML spec didn't include any of the "form" input type tags. It wasn't until 1993 that forms start appearing on pages. As of writing that makes the ability for websites to have fillable forms 28 years old. While we have decades, centuries of study on how to best design paper forms and how people use them, the web form is effectively a blip on the time line. We barely have time for Human-Computer Interaction practitioners to assemble and distribute insights into our behaviors before a disruptive innovation changes what we all do again!</p>
</div>

























  
       <figure><a href="https://res.cloudinary.com/ventureharbour-com/images/w_768,h_669,c_scale/dpr_auto/dpr_auto/f_auto,q_auto/v1597143999/VentureHarbour/crop/crop-png?_i=AA" ><img src="https://www.benjamindaysmith.com/images/posts/f2af6e6c-576a-4af9-9217-4a5ce57a5919/image-asset.png" alt=" One of the first forms on the internet, circa 1993. https://www.ventureharbour.com/the-evolution-of-web-forms/ "/></a><figcaption>One of the first forms on the internet, circa 1993. https://www.ventureharbour.com/the-evolution-of-web-forms/</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">But to access those early pages you had to have a dial-up modem that used your land-line phone connection, which was the only phone for the entire household (in the US mobile adoption wouldn't reach 85% saturation until 2008 (<a href="https://www.pewresearch.org/internet/fact-sheet/mobile/">https://www.pewresearch.org/internet/fact-sheet/mobile/</a>). At my house the internet connection was billed by the minute, equivalent to long-distance calls, and I repeatedly got in trouble with my parents for running up the internet bill! Broadband access was at 50% in 2000 in the US and only reached the 80% range in 2012. You could have the fanciest web site with a paid marketing budget, but until 10 years ago most Americans would not have access to find it.</p><p class="" style="white-space:pre-wrap;">The ability to effectively market a product on the Internet, and use the Internet as a primary method to reach buyers, is younger than my 6th grader! Search Engine Optimization (or SEO), the practice of carefully tweaking web pages to get ranked as high as possible in search results (and a critical job in online marketing), only became a going concern in the late 90s with the rise of Google (<a href="https://www.bluefrogdm.com/blog/a-brief-history-of-seo">https://www.bluefrogdm.com/blog/a-brief-history-of-seo</a>). In most of the "careers" that Americans talk about, and are taught at colleges and trade schools, we have a previous generation of practitioners to learn from. Yes, all careers are evolving in the age of Info Tech, but anything that is entirely Internet centric is entirely new. It's very exciting, and we just don't know where it will go!</p><h3 style="white-space:pre-wrap;">Software-as-a-Service (SaaS)</h3><p class="" style="white-space:pre-wrap;">Remember when "buying software" involved a stack of discs or DVDs that provided a tangible product you could hold in your hands? I knew I owned my copy because I had a shelf of discs I could touch. In the 90s it was inconceivable that one would buy software and have it delivered 'over the air,' let alone that one would pay a subscription fee for it. As recently as 2014 I received a weighty stack of discs with half a terabyte of software that took a day to install (only 8 years ago!).</p><p class="" style="white-space:pre-wrap;">The first company that is frequently cited is Salesforce which proved the viability of <a href="https://www.process.st/history-of-saas/">Software-as-a-Service by the early 2000s</a>. Sometime around 2010 the market found a tipping point and SaaS becomes the dominant form of software development and delivery. I remember as one-by-one all of the professional software packages I owned converted from the DVD stack to a cloud based recurring subscription model. Particularly notable was the move of the Adobe Creative Suite to "Creative Cloud" in 2012/13. Did I "own" my copy any more? Did I ever, really, or was the ephemerality of software always destined to find this more ideal mode of distribution and possession?</p><h3 style="white-space:pre-wrap;">Hiring Software: Jobs to be Done</h3><p class="" style="white-space:pre-wrap;">If Software is a service industry then I no longer "buy" my apps, I "hire" them to provide a service (<a href="http://www.relativimpact.com/downloads/Christensen-etal-Jobs.pdf">C. Christensen formulates this in his "Jobs to be Done" theory</a>). I hire a music app to recommend new songs and set a good mood while I wash the dishes. I hire a map app to reliably get me where I'm going. I hire a suite of professional music recording apps, integrations, and plug-ins to enable my creative music making. And if any of them do a crummy job I "fire" them and find a replacement.</p><p class="" style="white-space:pre-wrap;">Not even 10 years ago (definitely younger than my 6th grader) does SaaS become the way apps are marketed and sold. With anything this revolutionary and different, how much do we still have to learn? A year feels like an eternity in this space, but looking back, we are in exceedingly novel and untrodden land. It feels like a wildly disruptive innovation could be around the corner at any moment. Whatever it is (VR? Ubiquitous smart watches? IoT?) It will provide even more new territory to explore, and opportunity for new products and solutions.</p><p class="" style="white-space:pre-wrap;">Through all of the brief history of consumer software the one constant has been <strong>us</strong> (yes, "software" has been around a few decades longer, but remember when "user interface" was a pretty novel concept? <a href="https://en.wikipedia.org/wiki/WYSIWYG">WYSIWYG editors</a> have only been mainstream for about 2 decades). </p><p class="" style="white-space:pre-wrap;"><strong>People</strong>. We might spend a lot more time on our smart phone browsing social feeds than we could 20 years ago, but the underlying struggles we experience in our lives are not dramatically changed. We have the same fundamental issues (food, shelter, climate between ±40° C) that humans have always had. Maybe we can transpose our need for community to a distributed network of remote interest groups, but our social nature has always been with us. Now we have new things, SaaS and web forms, to try and address our common trials and tribulations.&nbsp;</p><p class="" style="white-space:pre-wrap;">And who knows, maybe we'll make some beautiful things, learn more about ourselves, and transformationally address some of our societal challenges along the way. We can always hope!</p><p class="" style="white-space:pre-wrap;"><em>January, 2022</em></p>
</div>

























  
      <img src="https://www.benjamindaysmith.com/images/posts/40d420db-5ad4-4a52-9da3-3a8f90d4b280/Screen-Shot-2021-07-14-at-3.16.33-PM.png" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use Contact to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Best Practices in Product Experimentation</title>
      <link>https://www.benjamindaysmith.com/writings/best-practices-in-product-experimentation/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/best-practices-in-product-experimentation/</guid>
      <pubDate>Mon, 17 Jan 2022 00:00:00 GMT</pubDate>
      <description>Experimentation helps us get a clearer understanding of how users find value in our product, what our users’ needs are, and how we can best help them address those needs through our product. We want to understand the good and the bad, the positive and the pain as best we can so that we can keep improving our product and increasing the impact we have through growing our customer base.</description>
      <category>Frameworks</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><strong>Motivation</strong>: originally written in May, 2020 to help myself and the Growth team at <a href="https://boardable.com">Boardable</a> put together a road-map of product experiments that would optimize the user experience, and in particular the first-time experience and leading the new user to the value in our solution. This is based on a lot of different sources and learnings I've garnered from other books, sites, and podcasts. Extra shout out to <a href="https://www.reforge.com/growth-series">Reforge.com</a> and their excellent courses on Product-Led Growth and product experimentation.</p>
</div>






















<hr />

<div class="sqs-html-content" data-sqsp-text-block-content>
  <h2 style="white-space:pre-wrap;">Seeing Clearly</h2><p class="" style="white-space:pre-wrap;">Experimentation helps us get a clearer understanding of how users find value in our product, what our users' needs are, and how we can best help them address those needs through our product. We want to understand the good and the bad, the positive and the pain as best we can so that we can keep improving our product and increasing the impact we have through growing our customer base.</p><h3 style="white-space:pre-wrap;">Themes</h3><p class="" style="white-space:pre-wrap;">In order to keep building towards 'big wins,' experiments should be set up to address one big theme (or several if the team has enough capacity to run several overlapping themes). The danger is that many, disconnected experiments cannot build on one another and will not paint a clear picture of how we are increasing growth. Focusing on one problem area helps Growth teams keep driving towards collective, bigger wins that can clearly show team success.</p><h3 style="white-space:pre-wrap;">Winning</h3><p class="" style="white-space:pre-wrap;">Any experiment that gives us insight into our users and our product is a success. The only 'failures' are inconclusive or badly executed tests. If we test a hypothesis and find out it is conclusively wrong we can learn and create better hypotheses!</p><p class="" style="white-space:pre-wrap;">A good experiment involves 4 steps:&nbsp;</p><ol data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">Developing a Hypothesis,&nbsp;</p></li><li><p class="" style="white-space:pre-wrap;">Defining a Minimal Viable Test (MVT),&nbsp;</p></li><li><p class="" style="white-space:pre-wrap;">Analysis, and&nbsp;</p></li><li><p class="" style="white-space:pre-wrap;">Concluding and Communicating.</p></li></ol><h3 style="white-space:pre-wrap;">Assumptions</h3><p class="" style="white-space:pre-wrap;">What is the one underlying assumption that must be true for your hypothesis to be true? Or, what is the one underlying assumption that if false makes everything else meaningless? Drive towards that assumption, because it is more likely to provide the level of insight that leads to 'big wins.' Lean into an inquiry model like the 5 Whys to dig deeper. Having clarity on the assumptions that underlie any hypothesis is critical to building a robust system of experimentation that can lead to meaningful improvements.</p><h3 style="white-space:pre-wrap;">Developing Hypotheses</h3><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;"><strong>Start from a problem</strong>. With a clear problem statement, brainstorm and develop best bet hypotheses to address it. Big problems (we are losing a lot of free trial users before subscribing), can be broken down into smaller problems (lots of users are leaving after 1 session; it's taking users too long to find value; too many users do not know what the product really does before signing up). If the problem statement has many issues combined, break it down into sub-problems. For each hypothesis keep the problem in focus and work from there with the goal of creating the highest value experiments.</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">Starting from a thing we know we can do will always be messy to test and prove, and increases the chance to be inconclusive. Be careful of starting from 'this will be easy to do' and working backwards to a problem. Similarly with measurement: 'this is easy to measure' and working backwards to a problem is likely to miss the real problems that need to be solved.</p></li></ul></li><li><p class="" style="white-space:pre-wrap;"><strong>One Solution for One Problem</strong>. A testable hypothesis should have 1 problem statement, and 1 hypothesis statement. Many hypotheses can be formed around 1 problem, and each will indicate separate tests. The problem and hypothesis need to be rooted in evidence (observations or data). The hypothesis should state an <strong>action</strong> to take, how it <strong>addresses the problem</strong>, and the positive <strong>result</strong>.</p><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">An example problem: "We see that 60% of people that start trial sign ups do not complete them."&nbsp;</p></li><li><p class="" style="white-space:pre-wrap;">An example hypothesis: "Reducing the number of steps in the sign up process will make it quicker for people to sign up and increase the number of complete sign ups."</p></li><li><p class="" style="white-space:pre-wrap;">The null hypothesis we are trying to reject: "The number of steps in the sign up process do not significantly impact the sign up completion rate."</p></li></ul></li><li><p class="" style="white-space:pre-wrap;"><strong>Aggressively test the problem</strong>. A gentle test is more likely to be inconclusive and thus a waste of time and effort. We need to balance this with the potential risk, while being as aggressive in our tests as we can in order to discover the biggest wins.</p></li><li><p class="" style="white-space:pre-wrap;"><strong>Value</strong>. How significant an impact will solving this problem have, potentially? If it will only increase X by 1 or 2 it may not be worth the time and effort, but if it increases X by 50% or 200% it could be worth a lot of investment and risk.</p></li><li><p class="" style="white-space:pre-wrap;"><strong>Measurable</strong>. Do we have the tools ready to measure the impacts of the test, and can they be measured with an appropriate investment of effort? Can we be really confident that what we measure will be accurate? (For example: Google Analytics only catches 95% of traffic, at best, so it introduces 5% error in everything we measure there.)</p></li><li><p class="" style="white-space:pre-wrap;"><strong>Trade-off metrics</strong>. Are there any potential negative impacts of carrying out this experiment? For example: making the trial sign-up process much easier will increase new sign-ups, but might increase the number of inactive trials (because casual users will be signing-up more frequently).</p></li><li><p class="" style="white-space:pre-wrap;"><strong>Null hypothesis</strong>. In statistics we never prove our hypothesis conclusively (there's always a chance that some unknown other forces caused the differences that we see during our experiment), but we can often reject the Null Hypothesis: that our problem and our test are unrelated. For example a null hypothesis might be: there is no correlation between the text of the free trial sign-up buttons and the number of sign-ups. If we observe a strong correlation we can show that the null hypothesis is disproven.</p></li></ul><h3 style="white-space:pre-wrap;">Defining a Minimal Viable Test</h3><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">How minimal is minimal enough, but not so minimal that it is ineffective? We want to invest the optimal amount of time and energy in the test, but not any more than we need to (hence 'minimal'). The danger here is that we make it too light, without enough impact, to see any change. (The "a bigger button" type is rarely going to have the desired magnitude of impact.)</p></li><li><p class="" style="white-space:pre-wrap;">Consider how it fits with other active or planned tests, and ensure that it does not conflict (in terms of influencing the data of other tests).</p></li><li><p class="" style="white-space:pre-wrap;"><strong>Prioritize</strong>. Once defined, prioritize amongst all currently possible MVTs. Which one on the table is likely to give us the quickest, most valuable win? Is there an order to MVTs that will have the most impact (such as fixing problems that are earlier in the user experience to get more users further into the product where other tests can then have more impact)?</p></li><li><p class="" style="white-space:pre-wrap;">Use <a href="https://www.experimentcalculator.com/"><span style="text-decoration:underline">ExperimentCalculator.com</span></a> to get an idea of how many people/sessions will need to be sampled and how long the experiment will need to run.</p></li></ul><h3 style="white-space:pre-wrap;">Analysis</h3><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;"><strong>One success metric</strong>. Pick one metric that will determine success. Any number of other metrics can also be watched for potential insight, but a clear single point will indicate if the test was conclusive.</p></li><li><p class="" style="white-space:pre-wrap;">In small tests looking for the chosen metric to move in the right direction can be sufficient, but in other cases calculate statistical confidence and significance before closing the test and drawing conclusions.</p></li></ul><h3 style="white-space:pre-wrap;">Deciding and Communicating</h3><ul data-rte-list="default"><li><p class="" style="white-space:pre-wrap;"><strong>Decide</strong>. Based on the chosen success metric, decide to close the experiment at the point that a conclusion can be reached. Then make a clear conclusion: was the test conclusive, and if so, did the test move the metric in a positive or negative direction? Additional observations can be attached to this conclusion (if other metrics moved in similar or opposite directions).</p></li><li><p class="" style="white-space:pre-wrap;"><strong>Communicate</strong>. The team needs to be proactive in communicating successes and successful test conclusions internally, to other teams, and the company. What we do is not obvious and clear to everyone and they will not see our outcomes in their day to day work. It is up to us to share what we are learning with the people who can benefit the most from it!</p></li></ul><h3 style="white-space:pre-wrap;">On the Dangers of Inconclusivity</h3><p class="" style="white-space:pre-wrap;">In terms of the momentum of the team, and growing a culture of experimentation, inconclusive results can be very harmful early on. Inconclusive tests are par for the course, but without conclusive up/down results it is hard to communicate impact. And it is easy to become disheartened without clear impact. From experience, in order to build a 'test first' muscle, impacts and 'wins' are needed. See above on testing aggressively, and driving towards positive/negative outcomes that are conclusive. </p><p class="" style="white-space:pre-wrap;">Inconclusive results are like coloring in the background first, they're useful in eventually seeing the entire picture, but coloring in the primary character first is much more fun and encouraging! Any 5 year old will confirm as much. 🙂</p><p class="" style="white-space:pre-wrap;"><em>May, 2020</em></p>
</div>






















<hr />


  
      <img src="https://www.benjamindaysmith.com/images/posts/f0ca92e0-4d69-4893-9c9d-96d33a14476c/Smith-Headshot.jpg" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use Contact to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>The ASP&#39;s Sting: What Average Sale Price Won&#39;t Tell You</title>
      <link>https://www.benjamindaysmith.com/writings/the-asps-sting-what-average-sale-price-wont-tell-you/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/the-asps-sting-what-average-sale-price-wont-tell-you/</guid>
      <pubDate>Wed, 12 Jan 2022 00:00:00 GMT</pubDate>
      <description>The ASP is a very common performance metric for many types of businesses, where the prevailing notion is that higher ASP is better. If the unit economics stay the same this is born out: selling 10 cars at $20K is better than selling 10 cars at $15K, for the revenue of the business. Finding ways to drive ASP higher and higher seems like an obvious conclusion, if you want to increase your overall revenue. But is it actually “ average ”?</description>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><a href="https://corporatefinanceinstitute.com/resources/knowledge/finance/average-selling-price-asp/">Average Sale Price (ASP)</a>: <em>the average of all net sale prices, for a given product, over a period of time.</em></p><p class="" style="white-space:pre-wrap;">The ASP is a very common performance metric for many types of businesses, where the prevailing notion is that higher ASP is better. If the unit economics stay the same this is born out: selling 10 cars at $20K is better than selling 10 cars at $15K, for the revenue of the business. Finding ways to drive ASP higher and higher seems like an obvious conclusion, if you want to increase your overall revenue. However, the "average" is meant to describe a random set of observations (originally, the position of a star) to assess the most likely center of the thing being observed. </p><p class="" style="white-space:pre-wrap;">But is it actually "<em>average</em>"? Are sale prices really random?</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/c5d925e4-24df-444e-8eb4-fa33fc8b10d1/increase_avg.png" alt=" Original distribution of sales (black) versus a distribution with a higher ASP (red) but less total revenue, due to missing lower end (left side). "/><figcaption>Original distribution of sales (black) versus a distribution with a higher ASP (red) but less total revenue, due to missing lower end (left side).</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Raising the average of a group of numbers presents 2 straight forward methods:</p><ol data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">Add more numbers (more sales) to the high end, or</p></li><li><p class="" style="white-space:pre-wrap;">Remove numbers from the low end.</p></li></ol><p class="" style="white-space:pre-wrap;">The second is the most problematic because the ASP will go up (yay!) but the rate in increase over all sales will decline (boo!). Selling 7 cars at $20K is not as good as 10 cars at $15K, in terms of total sales. See the previous image, where the average of the red curve (dotted line) is higher than that of the original black curve, but the area under the curves (representing total sales) is much smaller.</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/6b643b66-0567-44db-9a0e-3f91aadf5c45/outlier_avg.png" alt=" One extreme outlier (small blue bar, right) pulls the mean to the right (red dashed line), but the median sale price remains the same (blue bar, left side) "/><figcaption>One extreme outlier (small blue bar, right) pulls the mean to the right (red dashed line), but the median sale price remains the same (blue bar, left side)</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Another way to fool oneself into thinking an average is moving is to have a few values that are really, really far away from the mean. This would be selling 9 cars at $15K and 1 at $150K (ASP = $28.5K). The single outlier drags the average up, but by definition "outliers" are rare and not a regular observation in the typical population. This is a case where calculating an average is not appropriate, because the outlier (the Ferrari) isn't part of the usual set (a lot of Toyotas).</p><p class="" style="white-space:pre-wrap;">The clue that would tip us off is that the Mean Sale Price (MSP) would stay at $15K, while the Average Sale Price would jump to $28.5K. Relying on the MSP will be more reflective of what's actually in the data.</p><h3 style="white-space:pre-wrap;">Problem 3: Multi-modal data</h3><p class="" style="white-space:pre-wrap;">Perhaps sales are not 'normally' distributed, meaning they don't stack up in a nice bell-curve. At <a href="https://boardable.com">Boardable</a> we sell 3 different levels of access at different price points, which can then be increased (buy more licenses) or decreased (discounts or special offers). This causes the spread of sale prices to clump around the 3 entry price points, making a tri-modal&nbsp; distribution. Fitting these sale points into a single average gives us misleading results, because the data is not normally distributed:</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/b90fe535-333f-40f1-a667-44313e1f9736/3-modes-bad-fit.png" alt=" Three different price points, resulting in three groups, are fit into a single ASP [simulated data] "/><figcaption>Three different price points, resulting in three groups, are fit into a single ASP [simulated data]</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">In 'averaging' terms we are looking at 3 different populations, the entry level buyers, the mid-tier buyers, and the premium buyers. In many cases this basic split also reflects the types of buyers and what they're looking for in our product, and gives us more insight into how each 'package' is performing. See the next image, where each group is fit with its own average:</p>
</div>

























  
       <figure><img src="https://www.benjamindaysmith.com/images/posts/92145f06-9de3-4cb4-91aa-d3cc411d3576/3-modes.png" alt=" Three different price points fit with three different ASPs [simulated data] "/><figcaption>Three different price points fit with three different ASPs [simulated data]</figcaption></figure> 
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <h2 style="white-space:pre-wrap;">Solutions</h2><ol data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">Test for normality. At its simplest, load all your values into a spread sheet and look for a histogram chart. Eyeball it. If it looks like a bell or a mountain (see images on this post): go for it, ASP will be reflective of what's actually happening.</p></li><li><p class="" style="white-space:pre-wrap;">If it looks like multiple hills: cool! Figure out how to split it out into separate groups (populations) and determine what causes the clumping. Did they buy at a different time? Different packages? More or fewer add-ons or services? Is discount strategy identifying price sensitive populations? This is where insights will be uncovered.</p><ol data-rte-list="default"><li><p class="" style="white-space:pre-wrap;">Then, it may be appropriate to have multiple ASP values that you track. Does each package move differently, based on business decisions or market conditions?</p></li></ol></li></ol>
</div>
























<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><em>January, 2022</em></p>
</div>






















<hr />


  
      <img src="https://www.benjamindaysmith.com/images/posts/f0ca92e0-4d69-4893-9c9d-96d33a14476c/Smith-Headshot.jpg" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use Contact to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Who is Ben Talking to?</title>
      <link>https://www.benjamindaysmith.com/writings/audience/</link>
      <guid isPermaLink="true">https://www.benjamindaysmith.com/writings/audience/</guid>
      <pubDate>Tue, 04 Jan 2022 00:00:00 GMT</pubDate>
      <description>Why am I writing this, and who is it for? Is it for you? After a stimulating conversation with friends or coworkers or family, I often find myself with many additional thoughts and questions about models and frameworks and logical problems. Given the strictures of time and the pressures of practical topics often these paths of greater depth and finer granularity are relegated to ink marked pages of small notebooks on my night stand. These posts will serve as a more visible and accessible rendition, while the self-induced pressure of thinking (nay, daring to hope) that someone else might read them is immensely helpful in instigating a fuller, more coherent formulation.</description>
      <category>Reflections</category>
      <content:encoded><![CDATA[<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;"><em>Why am I writing this, and who is it for? Is it for you?</em></p><p class="" style="white-space:pre-wrap;">After a stimulating conversation with friends or coworkers or family, I often find myself with many additional thoughts and questions about models and frameworks and logical problems. Given the strictures of time and the pressures of practical topics often these paths of greater depth and finer granularity are relegated to ink marked pages of small notebooks on my night stand. These posts will serve as a more visible and accessible rendition, while the self-induced pressure of thinking (nay, daring to hope) that someone else might read them is immensely helpful in instigating a fuller, more coherent formulation.</p><p class="" style="white-space:pre-wrap;">While I primarily intend this as a searchable archive of my own, I have some thoughts about the "who" of my many hatted selves I am variously addressing or arguing with throughout. Perhaps you are similar enough to one or more of these such that the verbiage arranged in these missives may be both intelligible and relevant to your thinking.</p><h3 style="white-space:pre-wrap;">Product People</h3><p class="" style="white-space:pre-wrap;">These are a many chapeau'd crew indeed, ranging from Product Managers to Analysts to Statisticians and Data Scientists. Anyone who is obsessed with building things and making them the best they can be. I have worked in many of these roles, in addition to UI/X design and software engineering, and think a lot about the shared language between these roles and disciplines and the assumptions that such work stands on. What are the edges of a "product" and how do we think about products in relation to one another? What is "better" and for whom? Many of my posts come from this world, and are mostly rooted in the world of software and connected systems.</p><h3 style="white-space:pre-wrap;">Data Scientists, Machine Learners</h3><p class="" style="white-space:pre-wrap;">Under my Publications you can find my academic research work on connectionist ML models, Genetic Algorithms, and the like. These posts are intended for an entirely different audience and perspective, translating and synthesizing the precise and exclusive language and ideas of the academic domain into the language I would use in a daily conversation. Additionally, I intended to dig into some models and theories that I'm working on (with math and code examples).</p><h3 style="white-space:pre-wrap;">Future Me</h3><p class="" style="white-space:pre-wrap;">Let's face it, at the core I'm writing and posting these because I feel compelled to put my thoughts down in text, to construct some sort of logical structure and argument that is too complicated to do in a single statement. I am my own audience, and I see these positions standing on each other to build towards a larger narrative whole. Keeping them all in one place is necessary in order to put the capstone into the bridge under construction.</p>
</div>






















<hr />


  
      <img src="https://www.benjamindaysmith.com/images/posts/168a55cb-a2df-424a-bbcf-382f94bf5fe5/Smith-Headshot.jpg" alt=""/>
  



<div class="sqs-html-content" data-sqsp-text-block-content>
  <p class="" style="white-space:pre-wrap;">Dr. Ben Smith is a Data Scientist and thinker, fascinated by the appearance of computers in our daily lives, creativity, and human struggles. He has had the privilege to think, learn, and write at the University of Illinois, the National Center for Supercomputing Applications, the Cleveland Institute of Art, Case Western Reserve U., IUPUI, and at Boardable: Board Management Software, Inc. </p><p class="" style="white-space:pre-wrap;">If you have feedback or questions please use Contact to get in touch. I welcome thoughtful responses and constructive critique.</p>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>
