• Founders Should Write the Check for All Expenses

    For as long as possible, in an early-stage startup, one of the founders should write the check for any expenses of the company. That includes payroll, vendors, SaaS subscriptions, professional services, and how much you’re paying accountants and bookkeepers (whom you may incorrectly think are looking out for the company’s cash).

    The reason this is so important is that expenses tend to grow very rapidly as the company grows. Left unchecked, you can get surprised by large bills and overpay for a long time. Every dollar going out is a dollar less in runway.

    It takes money to grow, but startup failure is nearly always due to running out of money. Shouldn’t you keep an eye on that?

    See also:


  • Getting to 1,000 Clicks per Month in Google Search

    My personal site now gets 1,000 clicks per month from Google searches. It took two and half years of consistently adding content nearly every day to get to this point. There are 884 pages indexed by Google and 186 that are not (for mysterious reasons). It takes ~24k impressions to deliver 1,000 clicks. The majority of the content comes from my published notes rather than longer form content like blog posts or essays.

    It’s kind of incredible how much content is needed to generate a comparatively small amount of traffic through SEO. This could be because the things I write about tend to be fairly niche and far ranging in topic.

    See also:


  • Using Grammarly With Emacs

    There’s now an official API for Grammarly and a language server. That means we can use eglot to get Grammarly in Emacs buffers. Here’s the setup which mostly works.

    Update: Grammarly announced they are discontinuing the API so this won’t work after January 10th, 2024. There are no good replacements. If I find one, I’ll add it here.

    You can get an Grammarly API client ID by creating an app here.

    Build the Grammarly VSCode extension:

    git clone git@github.com:znck/grammarly.git
    cd grammarly
    # Install pnpm if you don't have it installed already
    npm install -g pnpm
    # Build the extension and language server
    pnpm build
    

    Wrap the node based language server in a script:

    #!/bin/sh
    node /{PATH TO REPO}/grammarly/extension/dist/server/index.node.js --stdio
    

    Add it to the path or copy it to a global bin:

    cp /{PATH TO REPO}/grammarlylsp /usr/local/bin/grammarlylsp
    # Make it executable
    chmod +x grammarlylsp
    

    Configure eglot to use it when in markdown mode:

    (defclass eglot-grammarlylsp (eglot-lsp-server) ()
      :documentation "Grammarly Language Server.")
    
    (cl-defmethod eglot-initialization-options ((server eglot-grammarlylsp))
      "Passes the initializationOptions required to run
       the server."
      `(:clientId "{GRAMMARLY API CLIENT ID HERE"))
    
    (add-to-list 'eglot-server-programs
                 `(markdown-mode . (eglot-grammarlylsp ,(executable-find "grammarlylsp"))))
    

  • Successful Organizations Don't Suffer Fools

    Managers are essential to scaling a successful organization but have a large blast radius if things go wrong.

    The best organizations don’t suffer fools. The center of gravity (culture and decision making) is with individual contributors. This works because ICs are better evaluators of a manager than other managers or leaders, making it more obvious when it’s not working out.


  • Thinking Better Thoughts

    I remember when I first started working at Stripe I felt like the dumbest person in the room. I was amazed at how smart everyone seemed and the writing…gosh, the writing! If I wanted to be like that too, something needed to change.

    At first I thought I needed to improve my critical thinking. Looking for a solution, I poured over mental models and frameworks.

    It didn’t really help though. I can hang my thoughts off of a neat model but can still get away with sloppy thinking—just packaged in a smarter looking format.

    Turns out, what I’m really trying to do is ‘think better thoughts’.

    (As an aside, it’s wild that humans can even have this kind of metacognition!)

    I don’t want to be smarter, I want to be more creative, reason about problems clearly, and draw upon useful knowledge. Better thinking is a skill I can take steps to develop, being smart is merely a judgment (and a lousy one at that).

    How do you think better thoughts?

    One of my favorite Paul Graham-isms has to do with finding startup ideas. The best way to find amazing startup ideas is to become the kind of person who has amazing ideas.

    As annoying as it sounds, the only surefire way to have better thoughts is to be the kind of person who has better thoughts. Afterall, identity is a powerful motivator and improving thinking is a collection of habits and behaviors.

    To me, that’s reading better books and writing things down.

    Read better books

    (I’m going to focus on non-fiction books here due to their practicality in thinking better thoughts, but of course there fiction books which apply.)

    It’s not like I read one book and suddenly think better, but reading increases the cardinality of thoughts I can have. Reading helps me think “wider” and combine more ideas—an important element of creativity and discovery. Thinking wider leads to compounding benefits as more ideas become available like an ever expanding pallet.

    Reading books about thinking was surprisingly helpful. The Clock of the Long Now helped me think about long term thinking and deep time. The Beginning of Infinity helped me explore epistemology and how to not fool myself. The Minto Pyramid Principle helped me think about writing and how to explain things to others effectively.

    Reading books opens up new pathways follow your curiosity. Those new pathways lead to other books to read and more ideas to think about. For example, The Beginning of Infinity led to thinking about consciousness which led to reading I Am a Strange Loop and physics.

    Not just any book will do. I feel that “better books” are ones that are relevant to your interests but slightly off the beaten path. A simple heuristic is to look for canonical books in the field if inquiry that gets mentioned often by people working in the field but are seldom actually read.

    Write things down

    There are many benefits to writing and it gets even better when I write about what I’m reading. I take notes to clarify my understanding of the ideas I find interesting. I think about what I’ve read more if I’ve written anything about it. It sharpens the ability to express ideas to others.

    This last point proves to be another important part of thinking better thoughts—writing grows knowledge and enables others to add to it. Human knowledge is meme replication so ideas need to be effectively replicated. This is critical for making progress as a group whether you are working on a team or building a company.


    Now that I’ve written this down, the through-line here is that cultivating curiosity is a useful strategy for thinking better thoughts. Reading books and writing naturally leads to more curiosity.

    The difference between “go read these books about philosophy, it’s good for you” and “why does Godel’s incompleteness theorem keep coming up in these other books, what did he find” are huge. One feels like homework, the other feels like discovery.


  • The Jump to Remote Work Universality

    Remote work has not yet made the jump to universality. We’re still in the phase of “specialized work objects” which are a combination technology to perform the work, jobs that can be performed remotely, and businesses that can operate anywhere.

    What needs to be true to achieve remote work universality?

    Technology to perform the work We already have this with networked computers and the internet. Access is widely available (though not ubiquitous) and software allows millions of people to do their job.

    Jobs that can be performed remotely Some jobs are not possible to be done remotely, though I would argue this is more of an extension of the technology problem. Over time more jobs will be possible to be done remotely through automation, robotics, or applied AI.

    Businesses that operate anywhere There are myriad rules and regulations that are different in every location. Compliance has no universal object that enables them to operate anywhere (though that’s what we are working on at Mosey).


  • Run an AWS ECS Task From the Command Line

    To run a one-off ECS task from the aws CLI in Fargate you need to specify the subnet, set assignPublicIp to enabled (otherwise it will fail to pull the container image), and optionally include overrides to run the command you want.

    Example:

    aws ecs run-task\
    --cluster foo\
    --task-definition bar\
    --count 1\
    --launch-type FARGATE\
    --network-configuration '{"awsvpcConfiguration": {"subnets": ["subnet-123456"], "assignPublicIp": "ENABLED"}}'\
    --overrides '{"containerOverrides": [{"name" : "MyTask", "command" : ["python", "example.py", "arg1_here"]}]}'
    

  • Designing for Non-Experts

    Building tools to help users that are not experts in the thing they are using the tool to do presents unique design challenges. You can’t assume prior knowledge. You must provide a sense of progress towards mastery even though the subject matter might be unfamiliar. You need to simplify without being overly reductive. You need to identify the unknown-unknowns without being overwhelming.

    A tool that enables non-experts to become experts is incredibly valuable especially when the expertise is difficult or expensive to acquire on one’s own.

    See also:

    • No-code tools built for a citizen developer
    • Mosey helps anyone manage multi-state employment and tax compliance without needing to be a lawyer or accountant

  • Remote Work Requires Trust

    Some of the biggest criticism of the remote work movement is that people aren’t actually doing work. There are several flavors of this: working in your pajamas, not doing real work, or, the most sinister, that the company culture will suffer. This fails closer inspection immediately.

    All of these are a euphamisms for “I can’t see you working so work isn’t happening”. Unfortunately, this is a common fallacy, particularly for managers that need a sense of control. This position reveals a major failure of management—lack of trust.

    Tell me you micro manage your employees without telling me you micro manage your employees.

    All working arrangements require trust regardless of whether it is in-person or not. Remote work exacerbates this problem and forces managers to confront their parochial errors about how work actually happens and how to measure progress. Remote teams need to be more deliberate about everything, not the least of which because managers can’t rely on surveillance.


  • Broken Escalators Are Still Stairs

    Like the Mitch Hedburg joke, “when escalators break they become stairs—sorry for the convenience” reminds us about the importance of designing systems that fail gracefully. Escalators can still be used even when their function no longer works unlike elevators where you get stuck until it’s fixed.

    What are some other examples of systems that still work?

    See also: