• Migrations Are Mini Rewrites

    As software grows, patterns and practices naturally evolve. Inevitably, someone comes to the conclusion that a change should happen and code should be migrated to the new thing.

    While many agree full rewrites are a bad idea, migrations tend to slip under the radar.

    Migrations are mini rewrites and the same caution should be applied.

    When you think of migrations as rewrites, you think about the problem differently. Rewrites are an exercise in chunking. The total cost of ownership is not just adding it the first time, but updating all other places for consitency, fixing bugs introduced along the way, and maintaining the new thing forever. Unfortunately, many large scale codebases end up with tech debt because of half completed migrations (probably several because a migration are needed to fix the other partial migration!).

    You’ll often hear justifications like, “We can do this gradually” and, “We’ll add this to new code first.” All lies we tell ourselves to do the thing we want.

    What can you do about it?

    Approach the migration as if it needs to happen all at once in one effort or not at all. This pierces the illusion that future us will have the time and focus to complete the work present us doesn’t do (experience would suggest this is never true unless you absolutely have to).

    Don’t accept installment plans, pay the whole thing up front or move on because worse is better.

    See also:


  • We've All Been Marl

    Marl is the marginal user. The one who represents the broad base of users that drive most product decisions to the lowest common denominator. Attention is short. Intolerance for change is high. When you ask why they dumbed down your favorite consumer app into a sugar coated dopamine factory, it’s probably because of Marl.

    We’ve all been Marl at one point in time or another.

    The thing people forget is that we are all Marl. The things we think couldn’t possibly apply to us, what we think is designed for a mindless scrolling drone, is us too. We are not always Marl and some might be more Marl than others, but we truly are that way some of the time.

    Read The Tyranny of the Marginal User.


  • It Only Takes Two to Make an Auction

    When it comes to selling an asset, it’s helpful to remember that it only takes two people to make an auction. Auctions result in higher sales prices as it’s not just the value of the thing being purchased, but the dynamics of winning. In the sale of a company for example, it’s not just about buying the company but preventing the other party from getting it.

    What’s the lesson? Creating an auction for an asset is clearly better and all you need is two interested parties which is a low enough number that it is always worth the effort.

    See also:


  • No Next Step, No Deal

    In sales, it’s easy to mislead yourself into thinking a sales deal is on track when it’s not. A simple way to know that it’s not is to ask yourself if there is a clear next step that both parties have agreed to. Without it, you won’t close the deal and if you do, it’s probably a nothing sale.

    Agreeing to a next step can be as simple as deciding whether to move forward with your solution by the end of next week. There is a clear action and deadline that makes it easy to agree. It also keeps the door open for the lead to ask for more materials or proactively raise that there is someone else you need to meet with.

    (I didn’t come up with this but I can’t find the source of where I found it).

    See also:


  • Directly Responsible Individual

    A DRI is a commonly used organizational pattern where one person is directly responsible for the overall outcome of an initiative. This avoids many pitfalls like a tragedy of the commons where responsibility is shared amongst everyone and therefore everyone loses all accountability.

    It’s challenging but rewarding. This model relies on individual contributors that have the skills to successfully lead, project manage, communicate, and be effective outside of their own domain. For example, a backend engineer might be the DRI for a product feature that includes UI design and frontend work even though they themselves are not a designer or a frontend engineer. The key is being able to extract the best result from others and work through them.

    In my career, I’ve worked with this “DRI model” for many years with mixed results. As a manager, I’ve had to intervene in projects going off the rails (delegation not abdication). The most common complaint I’ve heard about being a DRI is that larger initiatives require project managementβ€”widely undervalued by engineersβ€”and needs a lot of coaching and help.


  • Programmatic SEO Is a Numbers Game

    Being able to programmatically generate content for search engine optimization is only useful if you have a lot of keywords you can target (thousands) and pages you can generate to rank for them.

    For example, Zapier found that they could target long-tail of search engine keywords in the pattern of “{software 1} {software 2} integration”. This is tightly linked to their product which is important so they can convert visitors searching for it. It also means they can a high volume of clicks from each page. Let’s say they have 100 integrations, that means they can generate ~10,000 pages (each combination) and, if each page generates 100 clicks per month, that’s 1,000,000 clicks.

    When choosing the best SEO strategy, you can do a Fermi estimate to figure out if your business is going to get enough clicks to make it worth investing in programmatic SEO.

    See also:


  • How to Track Two Timezones on a Watch With a Dive Bezel

    You can use a watch with a dive bezel to track two timezones at onces without a GMT hand. This works because dive bezels typically have markers for every 5 minutes and, since time is base 12, you can calculate the second timezone with simple division.

    How does it work?

    Turn the dive bezel so that the nib is on the timezone offset hour marker. For example, if you are on Pacific time and you also want to track Eastern time, rotate the bezel so the nib so is on the 3 o’clock marker.

    To read the time in the second timezone, look at the hour hand to find the hour marker (as usual), find the corresponding minute located on the dive bezel, then divide by 5. Read the minutes as normal and you have the hour and minutes of the second timezone!


  • How to Take Smart Notes (Literature Notes)

    A book by SΓΆnke Ahrens about taking notes to improve productivity and writing which is incredibly convincing but extremely impractical in describing what to actually do.

    Writing smart notes explains a system for note taking using the following process:

    1. Read and then rewrite the interesting parts of what you read as short literature notes (not quotes, highlights, or margin scribbling)
    2. Write down ideas and short notes as fleeting notes and review them within a day (keep project notes separate)
    3. Review and turn the literature notes and fleeting notes into permanent notes
      • Permanent notes should not be a reminder of the thoughts or ideas but the actual thing written down
      • The goal of a permanent not is to maximize the utility within your slip-box (the collection of other permanent notes)β€”doing this forces you to think about it in relation to other notes which further increases understanding and leads to new ideas or questions
    4. Use the act of writing permanent notes to find interesting new questions to answer and to source material for writing new works

    While it may sound like a lot, making a habit of writing permanent notes adds up. Luhmann’s slip-box contained 90,000 notes but that’s only six notes a day from when he started until the day he died.

    See also:


  • Don't Step Into Someone Else's Frame

    When negotiating, it’s important to control the frame in which the conversation is happening. The frame constrains what kinds of ideas can be explored and the rules that govern evaluating them. When you step into someone else’s frame in a negotiation, you become bound to the constraints they set.

    For example, in a sales call, you might be speaking with a customer about pricing. They might ask why you are charging per employee and what the value is. By responding directly to this question, you inadvertently accept it’s frame (incremental value per employee) and the ideas you share to justify value now need to fit within that frame or it won’t make sense.

    In the example situation, if you feel like your position is weaker in that frame, it would be better to pop up a level and establish a new frame that plays to your strengths. “Pricing this way enables us to provide $THING_THEY_WANT for a fraction of the cost of $ALTERNATIVE”.

    See also: