Irrational Exuberance logo

Irrational Exuberance

Archives
Subscribe
May 7, 2025

Public company comparables. @ Irrational Exuberance

Hi folks,

This is the weekly digest for my blog, Irrational Exuberance. Reach out with thoughts on Twitter at @lethain, or reply to this email.


Posts from this week:

- Public company comparables.
- How to filter out old email from inbox


Public company comparables.

A few years ago I wrote about reading a Profit & Loss statement, which is a foundational executive skill. I also subsequently wrote about ways to measure your engineering organization. Despite having written those, I still spend a lot of time wondering about effective ways to represent an engineering organization to your board of directors.

Over the past few years, one of the most useful charts I’ve found for explaining an R&D organization is a scatterplot of R&D spend as a % of margin versus YoY growth of last twelve months (LTM) revenue. Unlike so many other measures, this is an explicit measure of your R&D organization value as an investment relative to peer organizations.

Until recently, I assumed building this dataset required reading financial filings but my strategic finance partner at Carta, Tyler Braslow, pointed out that you can get all of this data for the tech section from Meritech Analytics, for free.

The image shows a webpage for Meritech Analytics, which offers a public software benchmarking solution with features for analyzing SaaS company metrics. It includes options to sign up or explore features, and provides tools like regression analysis for users.

When you login to Meritech, you’re dropped into a table of public company comparables for tech companies. This is the exact dataset I’d been looking for to build this chart.

The image displays a table from the Meritech Software Index showing various metrics such as market cap, enterprise value, and percentage price changes for different companies like Adobe and AppLovin. It also includes averages (mean and median) for these metrics over specified periods.

After logging in, you can then copy the contents of that table into a Google Sheets spreadsheet or Excel, or whatever you’re most comfortable with.

The image shows a spreadsheet from Google Sheets titled “PublicComps,” displaying financial data for various companies, including columns for price changes, market capitalization, enterprise value, and several valuation metrics. The data is presented with calculations for mean and median values across the companies listed.

Within that sheet, the columns you care about are:

  • % YoY Growth LTM Rev (column Q for me) – how much “last twelve months revenue” has grown year over year, as a percentage
  • % LTM Margins for R&D (column U for me) – how much R&D spend is as a percentage of last twelve months margin
  • LTM Revenue (column O for me) – although I don’t show this in the scatterplot, I find this one useful for debugging outlier values

Hiding the other columns gives you a much simpler table.

The image is a table listing companies along with their Last Twelve Months (LTM) Revenue, Year-over-Year (YoY) Growth percentage, and LTM R&D margins. Notably, Adobe has the highest LTM Revenue at $21,505 with an 11% YoY growth and 14% R&D margin.

From that table, you’re then able to build the scatterplot. Note that being “higher” means your R&D spend as a percentage of LTM margin is higher, which is a bad thing. The best companies are to the bottom and to the right; the worst companies are to the top and to the left.

The scatter plot displays the relationship between R&D Spend as a percentage of margin and Year-over-Year Revenue Growth, with data points clustered mostly in the 10%-30% range for both axes. Each point is labeled with a percentage representing the R&D Spend as a percentage of margin.

With this chart as a starting point, you can then plot your company in and show where you stand. You could also show how your company’s position in the chart has evolved over time: hopefully improving. Finally, you might want to cull some of these data points to better determine your public company comparables. The Meritech dataset has 106 entries, but you might prefer a more representative thirty entries.


How to filter out old email from inbox

Every few years I take a pass at reducing the chaos in my personal inboxes. There are simply too many emails to deal with, and that generally leads to me increasingly failing to follow up on important email.

Up to this point, my strategy has largely been filtering out emails that I never want to read. But there’s another category of email which is stuff I often want to read when it’s fresh, but never want to read after it’s fresh. For example, calendar reminders, some mailing lists, some news letters, etc.

I decided to figure out how I could setup a system where I could mark a number of things as “filter three days after receipt”. This is a nice compromise, because I do want to see those things, but I don’t want to have to remember to archive them after the fact.

You can write a search query for this in GMail:

from:(calendar-notification@google.com) older_than:3d

However, if you try to create a GMail filter using that, it turns the older_than:3d into a fixed point in time rather than doing what you want.

The image shows a Gmail search filter setup, looking for emails from “calendar-notification@google.com” that are older than three days and have a size greater than a specified amount, dated within one day of May 3, 2025. Options to filter by attachments and exclude chats are available, with “Create filter” and “Search” buttons at the bottom.

It seems that this is unsolvable within GMail itself. However, some quick searching suggested it was possible to create a Google App Script to solve this, and asked Claude to write the script for me.

Following those instructions, I went to script.google.com, which I have not gone to in many years. I edited the generated script from Claude to use the tag “TempMsg”, to archive messages (as originally it had those commented out), and to limit itself to the first fifty items matching that tag. You can find the full code in this gist.

This image provides instructions on setting up a Google Apps Script to filter Gmail messages with a tag older than three days. It includes steps for opening Gmail settings and creating a new script project.

I attempted to run this as is, and got an error message that I needed to grant permissions. That requires three clicks within the Google Scripts UI.

The image shows a Google Apps Script interface where a user is adding the Gmail API service to a project. Red arrows highlight the action of selecting the Gmail API from a list of services and the “Add” button.

This also requires approving the somewhat scary message that I trust myself.

The image displays a warning that Google hasn’t verified a specific app, advising users not to use it until the developer verifies it with Google due to its request for sensitive account information. Users have the option to return to safety or proceed with caution if they trust the developer.

From there I tried to run this script, and it failed because the TempMsg tag doesn’t exist in my inbox.

The image shows a script written in JavaScript for Google Apps Script, designed to filter Gmail messages older than three days with a specific label. The execution log indicates that the label “TempMsg” was not found during the script’s execution.

So I went ahead and created that tag, and setup some filters to assign that tag to certain email senders.

This image shows the Gmail filter creation settings page, where emails from “calendar-notification@google.com” are set to be labeled as “TempMsg.” Options for other actions like skipping the inbox, marking as read, or forwarding are available but not selected.

After that, I was able to run the script and it worked properly. Note that I convinced myself that it was failing for a bit, because it doesn’t remove messages from the past three days. That is exactly how it’s supposed to work, but I would run it and then see messages with the tag there and think it was failing. Woops.

After convincing myself it was working, I added a periodic trigger to run this.

This image shows a Google Cloud Platform interface for adding a time-driven trigger to run the function “filterOldGmailMessages” daily between midnight and 1am, with immediate failure notifications.

I now have this running on a daily basis, and it’s given me a nice new tool for managing my email a bit better. After verifying it, I also used the tag manager to “hide” this tag in the inbox, so I don’t have to see the TempMsg tag everywhere. If I ever need to debug things, I can always make it visible again.


That's all for now! Hope to hear your thoughts on Twitter at @lethain!


This email was sent to *|HTML:EMAIL|*
why did I get this?    unsubscribe from this list    update subscription preferences
*|LIST:ADDRESSLINE|*

*|REWARDS|*
Don't miss what's next. Subscribe to Irrational Exuberance:
https://lethain...
https://www.lin...
Bluesky
Twitter