• One of One Software

    I would guess that a significant amount of software is written for one person and we should celebrate it more.

    Most software engineers tend to write for other people. They hope to create a popular open source library. They’re working on their startup idea. Maybe it’s a matter of industry norms i.e. pretending that the next engineer reading your code is an axe-wielding murderer.

    Why not write one of one software? Written just for you, to do exactly what you want, without consideration for someone else. What if we didn’t place such a high premium on popularity and scale?

    I imagine there are many other kinds of software that would be created that aren’t today. It would be more fulsome and go deeper into the problem instead of a shallower Pareto optimal of building for other people. It would be limited by the author’s time and ability so the shape of it might look very different—a greater emphasis on combining things that already exist and smaller in scope.

    I imagine the ceiling for one-of-one software is significantly higher. For one, there is no faster feedback loop than the one you have with yourself and so you could rapidly iterate. With sufficient skill coding becomes the most convenient option and software becomes a malleable material for making what you want.

    What are some examples of one-of-one software you’ve written?

    See also:

    • A simple example is my Emacs config which is a thousand lines of code that will only ever be executed on my CPU
    • I built org-ai and an emacs integration just for chatting with my notes

    Published

  • Format Code Like Prose

    Writing code is also writing for other people. We use many conventions in written communication to help with readability. Ever sit down to read someone else’s code and it’s giant wall of procedural statements for 100 lines straight? Imagine reading a paragraph that goes on for 100 lines.

    I like to format code like prose. Statements in a long function that complete an idea should be grouped together visually—think of it as a paragraph and add some newlines for the reader to take a breath. Write linearly so it’s easy to read from beginning to end (you don’t read a book by jumping around back and forth between pages). Organize hierarchically from most general to specific (e.g. the last line is generally expected to be the return value so use early returns for edge cases rather than the main case).


    Published

  • State Agencies Are Eventually Consistent

    It always seems to take awhile to get resolve an issue with a state agency. They might send you a letter that you owe them taxes. You might respond to said letter and pay the taxes. You might then receive another letter…for the same taxes you already paid.

    Why is that?

    The way to think about state agencies and—by proxy—your tax accounts, is that they are eventually consistent. Changes can happen to the balance of your account, but what you observe (e.g. a letter) might not accurately reflect the current balance of your account. It’s not just balances—pretty much any information that changes will take time to settle into the right places.

    Part of this is run-of-the-mill bureaucracy, but these are also large scale organizations and with distributed systems. (If you think about it, even moving papers around a building or two is a network which comes with network faults). Without eventual consistency, they would be unable to serve as many users and handle the complexity in which they serve them.


    Published

  • You Don't Know There Is a Compliance Problem Until After It's a Problem

    One of the many challenges of staying compliant is that the feedback loop can be incredibly slow. By the time you find out there is a problem, it might be months after it became a problem. For example, if there is a payroll report that was not filed in Q3, you might not receive a letter about the failure to file (and penalty) until Q1 of next year.

    One of the reasons for the slowness is the reliance on snail mail. It can take weeks to post the mail then more time to deliver it and yet more time for someone to check it.


    Published

  • Physical Mail Is Essential to Staying Compliant

    Sometimes the only way to know there is a problem is by receiving a letter in the mail from a state agency. This makes mail essential to staying compliant—you can’t fix the issue if you don’t know about the issue.

    Unfortunately, mail is difficult to manage for multi-state businesses. They need to consistently use a mailing address everywhere they register. They need to make sure they actually check the mail. They need to make sure the right mail gets to the right person to take action.


    Published

  • Favor Full Time Employees Over Part Time Contractors

    In the early days of a startup, hiring the early team is one of the biggest challenges. It can be tempting to hire contractors and part-time workers to get some help in the short term.

    This is not a good idea because they won’t have skin in the game. Part-time employees won’t have enough time to take over any important responsibilities leaving you to do them. You won’t control the schedule of independent contractors so it’s more difficult to plan and execute. Part-time workers and contractors can also leave suddenly which is disruptive and generates more work to replace them.

    Full time employees care more. They’ve hitched their career prospects to your startup. By taking added risk, they have more to lose if things don’t go well. This is an important advantage of early-stage startups—the most effective people care a lot.


    Published

  • Migrating From Docker Desktop to Colima on an M1 MacBook

    These days colima is a viable alternative to Docker Desktop on M1 Apple silicon. The main issue I have migrating is the speed of file system syncing which become apparent when working on frontend React with hot reloading.

    First install colima:

    brew install colima
    

    Then create a profile:

    colima start myprofile --edit
    

    Run the virtual machine:

    colima start
    

    Run docker as usual:

    docker compose up
    

    Published

  • Managerial Capitalism Decouples Ownership and Control

    The classic model of capitalism (bourgeois capitalism), in which the proprietor of the business fully owns and controls the business, was replaced by managerial capitalism where managers, despite owning small amounts of the company, exhibits full control over the business.

    As a result of the massive scale of modern enterprises, it was inevitable that a managerial class are needed. The upshot is that highly skilled managers can operate increasingly large and complex businesses. The downside is that managerial capitalism takes less risks and, as a consequence, new things don’t get built.

    See also:

    • Baumol’s cost disease shows how management salaries and productivity are also decoupled
    • At worst, managerial capitalism is a negative art—significant gains come from avoiding risk rather than taking it for higher possible gains

    Published

  • How to Write Software Fast

    There is a noticeable difference between the speed of the most productive software engineers I’ve worked with and the slowest. What do they do that others don’t? Is it possible to learn how to be faster?

    Speed is easy to dismiss as unimportant for knowledge work (thinking is often the limiting factor), but that we can’t go faster or trying to wouldn’t be valuable.

    Reduce friction to thinking

    Software engineering is often a ‘shots on goal’ endeavor—the more attempts you can make in the same amount of time, the more progress you will make.

    It should be easy to write some code and run it. How much friction exists in your setup that makes it difficult to run code? Tiny pieces of automation and muscle memory play a factor (e.g. checkout branch, open a file, execute just the code you are working on, stubbing out data, etc.).

    Reps not years of experience

    Solving problems quickly benefits from having seen and solved many problems, but don’t conflate ‘seen many things’ as ‘number of years of experience’. You’ve probably worked with people that have decades of experience that are below average in productivity.

    The way to get experience is to build many things. I don’t know of any shortcuts to learning by doing other than to have side projects and really try to build them out.

    Be decisive

    When faced with a new problem, you can cut down on time by doing a quick breadth-first search (what solutions are available) then being decisive about a path to go down. So much time is lost by not being decisive.

    Execute quickly and leverage your tools

    Here’s where being in the top percentile of proficiency in your local development environment and programming language pays off. Code is very easy to change and you don’t need to be perfect until you hit production. Being really fast at expressing the solution will help you iterate through each sub problem quickly. The ability to think through code looks effortless from the outside because the distance between what’s in your head and what gets implemented is so small.

    A good heuristic for when you’ve reached this kind of proficiency is when others comment about feeling nauseous watching you code.

    See also:


    Published

  • G&A Roles at an Early Startup

    You don’t need full-time G&A roles as your first 10 hires in an early stage startup. There is not enough work at that stage and you are better served outsourcing these roles or doing it yourself. For example, you can hire an external bookkeeper but run payroll yourself using easy self-serve tools like Gusto or Rippling, you can hire a lawyer to write contracts but handle payments yourself using Stripe.

    It is very tempting to hire for G&A roles because it feels like “real businesses” have them. While true, the early days of a startup have more important priorities like building the product and finding the first few customers, every dollar and each hire is crucial. That’s why founders generally prefer software tools to give them additional leverage to inexpensively cover more ground until it makes sense to build out the function.


    Published

  • How to Know When a New Hire Isn't Working Out

    The easiest way to know that a new hire isn’t working out (and not fool yourself in the process) is to have a plan before they are hired. A job description and 30/60/90 plan are important tools to clarify what you expect this person to do and the key milestones to get there. Without them, you will confuse yourself and it’s unfair to the people you hire—feedback will feel arbitrary and unfair.

    When the new hire onboards, use the 30/60/90 to anchor all feedback. Assess their progress by sharing written feedback and make adjustments you both agree to. If they are not hitting their goals or it’s obvious they will be unable to take over a key responsibility of their role, it’s time to part ways.

    How do you evaluate a job role you’ve never managed before?

    Often times at a startup, you will be hiring people that you do not have any background in or prior experience managing. Rather than try to derive the job from first principles talk to 3-5 experts in the area about what you think you need and what they believe a great person in that role would look like. You can stop when you start hearing the same thing from multiple people.

    Use this information to inform recruiting (job description, what recruiters should screen for, what profiles to target), interviewing (key areas to evaluate in interviews), and onboarding (30/60/90 plan).


    Published

  • Turner's Frontier Thesis

    A country with a frontier is shaped by it. It favors people with rugged individualism because common services are not readily available without an existing economy in place. Positive-sum interactions in settled areas are required because people always have the option to leave. Finally, people seeking high variance opportunities will follow the frontier in search of outsized gains.

    Eventually, the frontier dissipates as it becomes settled and formalized. At some point you don’t need Lewis and Clark, you need a town to trade goods and a courthouse to adjudicate laws.

    The frontier thesis is particularly appealing for explaining American culture and industry. We often refer to new areas of business as a frontier and it’s not wrong—it’s unregulated with high variance outcomes that appeals to a different kind of person (with crooks and bandits along the way). Eventually the frontier becomes settled and other kinds of people are needed to make it prosper.

    See also:


    Published