• VirtioFS Cuts Vite Reload Speed in Half

    I use a docker container to build a fairly large hugo static website and vite to build some javascript. The reload time from saving a file and vite reloading the browser was exceeding 8 seconds. Enabling VirtioFS as the file sharing service (Docker Desktop -> Settings -> “Choose file sharing implementation for your containers”) compared to gRPC FUSE, speeds up builds 2x for me. That’s because hugo rebuilds every file every time it’s run which needs to be sync’d to the container before it’s picked up by vite and reloading the browser.

    Nice!


  • Remove Low-Velocity Work to Improve Overall Velocity

    In Double your productivity without more work or stress, the author makes the argument that the way to increase overall velocity is to decrease the amount of low-velocity periods of work. That’s because high average velocity (e.g. being “more productive”) is bounded by low-velocity activities over time.

    For example, say you want to average 60 mph over a 60 mile journey. If the first 30 minutes you go 30 mph, it’s not possible to average 60 mph by going faster over the second half of the trip.

    While working faster is a multiplier on the high-velocity work, the best bet is not to go faster but to eliminate low-velocity activity like email, meetings, scheduling, etc. that drag down your average velocity.


  • Differences Between California and New York

    Some anecdotes as I readjust to life on the east coast.

    When moving from San Francisco to New York City, the difference between movers was distinct. The foreman in NYC was intense, highly caffeinated, freaked out about parking the truck, and repeated the same line about how I’m responsible for trash about ten times. The SF foreman…literally high.


  • I Was a Non-Technical Product Manager Once

    A common question in product management that always seems to come up is some flavor of: should product managers be technical?

    My first job out of college was as a product manager working on B2B software. I was not technical. If you asked me back then, I would say it wasn’t an impedement.

    Along the way I changed my mind.

    I learned to code and that made me better at product. I started a company and that made me better at product. I did sales and that made me better at product.

    It’s not the technical bit that makes you better—there are plenty of engineers that are not good at product!

    Learning new areas like engineering, sales, operations etc. makes you more efffective. It increases your ability to reason about different problems. It’s increases your ability to work with different people, customers, and teams. It increases the set of solutions you can apply that is calibrated to reality.

    So, should product managers be technical? Yes, but I think we get too caught up in the coding part that we forget it’s really about growing knowledge.


  • Alex Hormozi - 13 Years of Brutally Honest Business Advice Notes

    Notes on the video 13 Years of Brutally Honest Business Advice. I reworded and modified things to make sense to me.

    1. Sell to the rich Don’t sell to the poor because you need to deliver a very large ratio of value to money. Rich people spend more to get less value. Start with the rich and then, eventually when the product/service is so good, sell to the mass market (poor).

    2. Priorities make problems easy Most entrepreneurs don’t run their business without priorities and so they have make very little progress. Setting good priorities makes the most important problems to solve obvious and helps others get things done.

    3. Raise your standards You need to be aware of what the best looks like and continue to raise the bar. For example, always hire someone better than you at the job will ensure the company gets better with each new person not worse (Peter Principle).

    4. Lots of rules means you have dumb people This one is really a sub-item of the previous. A sign you have the wrong people is you have to write down obvious rules for people to follow. You shouldn’t be spending your time doing that and should instead hire better people.

      (I dislike the oversimplification of “dumb” vs “smart”. It’s much better to think about this as “skill fit” rather than a judgment of intelligence.)

    5. Get better not bigger Getting bigger, hiring more, spending more, etc. can cover up many problems. Focus should actually be on getting better and constantly learning and adjusting. You’ll get bigger as a result.

    6. Let fires burn You need to spend you time on the things that move the business forward and that’s impossible to do if you have to be the one to always solve every problem.

    7. Brand is the most valuable thing you can own Brand is the durable way to get more out of all your marketing efforts. It’s built over a long period of time by making good associations between ideas and companies. Most of what we see this days is personal brand bootstrapping a company brand.

    8. Understand inputs and outputs of your business Get to the lowest level of detail about what is holding back the business and fix that then the next thing.

    9. Stop looking for hacks The problem with hacks is that they work for a time and then they don’t so you have to find the next thing and the next. The best strategies often don’t change like having really valuable content and product.

    10. The best people cost more but are worth it Good people pay for themselves in the amount of impact they have. There are many arbitrage opportunities with talent but people don’t recognize it because they cost more.

    11. The obvious thing is the main problem The main problem with the business is often the work you are avoiding not the hundred other things you think you need to do. Usually it’s the thing isn’t good enough.


  • Professional Services Spend Is Double Software Spend

    According to the Bureau of Economic Analysis, the contribution to US GDP in Q1 2024 of professional services industries was more than double that of information industries (which includes softare publishing).

    That means, technological advancements in artificial intelligence could be a larger disruption than the entire SaaS industry. At least Bessemer seems to think so in their State of Cloud 2024.

    From the report BEA report:

    In 2024Q1, Professional and business services nominal value added was 12.9 percent of GDP and increased to $3,654.1 billion.

    Professional and business services (PROF) is an aggregate of professional, scientific, and technical services (54); management of companies and enterprises (55); and administrative and waste management services (56).

    In 2024Q1, Information nominal value added was 5.4 percent of GDP and increased to $1,523.9 billion.

    Information (51) includes publishing industries, except internet (includes software) (511); motion picture and sound recording industries (512); broadcasting and telecommunications (513); and data processing, internet publishing, and other information services (514). Establishments produce and distribute information and cultural products, as well as data or communications, and process data.


  • Using Org-Roam as a CRM

    Using org-mode and org-roam can make a rudimentary CRM system for logging interactions with people, companies, or any other contact.

    Capturing associations

    1. Create a file for each entity (use org-roam and a capture template to automate it)
    2. Insert a link to the entity (org-roam-node-insert) in tasks, meetings, or any other notes to make the association with that entity
    3. Visit the entity file and view backlinks (org-roam-buffer-toggle) to see all related items

    Adding more CRM functionality to org-mode

    Now that there is a rudimentary CRM, we can use org-roam’s database to build more functionality.

    • Check-in with contacts: Use the list of backlinks sorted by date to see who you haven’t talked to in awhile.
    • Get a list of tasks waiting on a contact: Use backlinks that have a status of WAITING to bring up at the next meeting.
    • Adapt at mentions for org-mode to quickly tag contacts to make associations
    • Create a capture template for each kind of contact (company, person, etc.) to store standardized properties like company name and website

    See also:


  • Box Centered Does Not Equal Visually Centered

    A problem that crops up often in web design is centering. No not how to center a div, but how to visually center an element vertically. This is different than merely centering vertically using flex or grid because when you have elements like a top nav that takes up space, the vertically centered element will appear too low on the screen even though it is technically correct (50% of the parent element).

    Is there a reliable way to solve this problem without having to remember to offset everything by some amount?


  • Async Work Is Doing More Things in Parallel but Slower

    Working asynchronously is an important reason why remote teams work. However, it can devolve into anti-patterns.

    For example, writing a brief and then sharing it for review but not waiting for all feedback will over-emphasize comments by the first to review (an organizational availability bias?). Sometimes the mere presence of other comments in a document is enough to disuade someone from adding their feedback, incorrectly assuming someone else already covered what they would have said.

    What can remote teams do about this?

    There are a few practices async teams can adopt to avoid these pitfalls.

    First-to-review bias can be mitigated by seeking targeted feedback at the same time as sharing it broadly.

    For example, in Slack say:

    “Here is the brief on {THING AND LINK} for review.

    {LIST OF PEOPLE} can you please provide feedback on {LIST OF AREAS ACCEPTABLE FOR FEEDBACK} by {WHEN YOU NEED IT}?”

    Organizationally, help people understand that async means more work gets done in parallel but more slowly. It can take time to wait for the right collaborators and to get the right feedback. Asnyc should not be used as a shortcut to speed things up (like accepting the first feedback and moving on as in the earlier example).

    (This idea was borrowed from something I heard Alex Norcliffe said.)

    See also:


  • UI Requires Deductive Reasoning

    Using a UI is a form of deductive reasoning that takes effort. You need to build out a plan on how to get what you intend. You need to follow interaction patterns you’ve seen before. You need to have built an intuition for where to look and where to go. You need motor skills to engage in just the right way to induce the transition of the state machine.

    Generative AI tools can decrease effortful UI by inverting this pattern—start with what you intend and offload the work of figuring out how to get there.

    As an industry, I think we are only just starting to build the intuition of where to tastefully apply AI. One heuristic is to look for oportunities in your product that require a lot of UI or tacit knowledge and imagine how this effort could be replaced with AI.

    (From conversations with Michael Pons)


  • Low Bitrate Audio Codec

    Low bitrate audio codecs are primarily used for downscaling audio for slower internet connection speeds and supporting older devices. They can handle high rates of packet loss while still sounding natural. For example, Opus 1.5 still sounds good at 6 kb/s and narrowband sampling rate (8 kHz compared to 48 kHz).

    Project Organization Open source
    Lyra Google Yes
    Mlow Facebook No
    Opus Xiph Yes

  • Using AI Tools at Work

    I recently shared some observations about trying to use generative AI tools at work and shared the experience on LinkedIn.

    As an experiment, the Mosey team paid for a bunch of generative AI tools (Slack AI, Notion AI, OpenAI, GitHub Copilot) and tried to incorporate them into our everyday work.

    Here’s what we found.

    Summaries, while boring, are extremely useful. Slack recaps help everyone maintain “ambient awareness” of other projects without getting overwhelmed. It helps that our communication norms default to in-public and in-channel (not DMs).

    The barriers to trying new things with AI are so low you can just “play with it” really quickly. Small prototypes that previously felt like a lot of work can be spun up in hours—a signup spam detector, generating configuration data, analyzing a report, a classifier for mail—all started with a one-off prompt to see what happens.

    AI tools excel at making sense of unstructured data like text but don’t yet work well for getting answers from more structured data (multiple API calls, translating into SQL queries, etc.). This exposed the need for more internal tools like full-text search where you more or less know what you want and have knowledge of how to find it. You can’t always sprinkle AI on it and make it work.

    Data silos blunt AI. Notion has all of our briefs, processes, and notes but there’s no way to have Slack bring in that context when using it’s AI features. (Update: this is now in beta!). The same applies to other hubs of communication like email and HubSpot. This will become the operating system’s job (see Apple Intelligence).

    The out-of-the-box stye of most LLMs is really bad for business writing. You have to prompt very carefully to not end up sounding like a vapid, jargon filled mess. It’s such a caricature of corporate speak that would be really funny if it wasn’t so sad.

    Using AI tools in the team’s day-to-day sparked more ideas about where to apply AI to more processes. This is a self-reinforcing loop where the team tries more things, gets promising results that encourage trying yet more things.

    I personally believe that the ability to get good results from okay generative AI tools will become a career-building skill that will eventually be required. I’ve received positive feedback from the team about being able to learn this new skill together and on the job.


  • Anxiety Doesn't Give You an Edge

    I hear it often enough that it seems like a commonly held belief that anxiety somehow improves performance at work and gives one an edge. I believed it too, but with the help of therapy, I came to realize it’s not true. If anything, this belief makes us worse at a lot of things—not the least of which is feeling okay.

    Where does this belief come from?

    One reason is that we try to reduce anxiety with activity. Doing a lot of things makes it feel under our control. It’s easy to see how the association between “doing a lot of stuff all the time” and “my anxiety increases my performance” happens.

    Another reason is that constantly worrying about different scenarios, helps anticipate situations before they happen. Constantly thinking about what could happen makes it feel like we are prepared and therefore in control. It’s easy to see how the association between “worrying about stuff all the time” and “my anxiety increases my performance” again happens.

    The downside of this belief is that it leads to doing the wrong things and burning out. It’s hard to see clearly when one’s judgement is clouded with constant worrying and anticipation. It’s hard to focus on the most important things when one’s time is filled with endless busy work. Stress and anxiety are cumulative and so, continuing this pattern is how one burns out.

    If depression is living in the past and anxiety is living in the future, what’s missing is obviously the present! By treating anxiety and letting go of the notion that it gives you an edge, we are better able to focus on the present. Focus is hugely important to performance (maybe the most important?), especially today when everything is constantly competing for your attention.

    See also:


  • How to Measure the Health of a Startup

    Here are the most useful metrics I’ve found for running a startup. These should be measured and reviewed regularly. The metrics that matter most the ones that raise questions and drive useful discussions. Try to avoid difficult to calculate metrics that are hard to build an intuition about (people don’t expect much from simple ideas).

    MRR growth: You need to grow 6% monthly in order double revenue in a year. Of course, time is a factor, so venture-backed businesses need to be mindful of the time to the first $1MM of ARR.

    Churned revenue: Monthly revenue churn is a headwind that slows growth and makes it difficult to sustain growth. High churn is also a signal that something else is going on which needs immediate attention.

    Runway: By calculating burn rate each month you can estimate how much time you have before the business runs out of cash. Many important decisions need to be made with this in mind such as layoffs, seeking an aquisition, or spending to grow faster.

    GTM efficiency: Net magic number breaks my rule a bit about avoiding complicated metrics, but it’s easy to reason about once it’s measured—for each dollar spent on marketing, how much revenue is it expected to return. A number less than 1.0 is bad (magic vending machine business model), a positive number greater than 1.0 is good, and multiples means you should spend more to grow faster.

    Engineering velocity: By far the easiest number to track for engineering health is the number of commits to the main branch every week. There shouldn’t be a target set (Goodhart’s law) but if the number goes down (or up), it’s useful for the team to ask what’s going on so they can make adjustments if needed. It should also generally increase as more engineers are added to the team although sub-linearly as the company and codebase gets more complicated.

    Defect rate: This will depend on the product, but having a way to know if delivery of the product is getting better or worse will help spot issues early. I’ve seen this measured as the number of bugs reported or count of a specific process that fails.

    Support SLA met: No one wants to wait a long time when they need help. Tracking support SLAs weekly gives early warning if the team is falling behind or if there is a larger issue brewing that needs immediate attention.

    Onboarding cycle time: Time to value is important because attention spans are short and failure to onboard is the leading cause of customer churn. This is even more important if there is an upfront implementation needed to adopt the product (what does customer success do at a startup?).

    Talk to customers: I was tempted to put CSAT on this list, but it doesn’t quite capture whether or not you are doing a good job solving your customer’s problem. If a lagging indicator is churn, then a leading indicator is simply talking to your customers regularly.