<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>zeptonaut</title>
    <link>https://www.zeptonaut.com/</link>
    <description>Recent content on zeptonaut</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 01 Aug 2023 15:00:00 +0000</lastBuildDate><atom:link href="https://www.zeptonaut.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Building as a search algorithm</title>
      <link>https://www.zeptonaut.com/building-as-a-search-algorithm/</link>
      <pubDate>Wed, 23 Apr 2025 10:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/building-as-a-search-algorithm/</guid>
      <description>Finding the best place to build a castle.</description>
      <content:encoded><![CDATA[<p>Some people eat too much junk food. Others bite their nails. My guilty habit is investing hundreds of hours of work into things that never work.</p>
<p>Flash back to my first few years at Google: the road to success was clear. I’m handed a project, build it real nice-like, and collect warm belly rubs from the senior engineers.</p>
<p>Eventually I reached the esteemed level of senior engineer and I  became responsible both for <em>executing</em> a vision and finding a good one in the first place.</p>
<p><em>All of a sudden, building hard things wasn’t enough. Hard things only counted when they made an impact.</em></p>
<p>At least for me, “finding what’s worth building” has proven a much stickier problem than the actual building itself. The majority of my career in the last 7 years &ndash; at Google, and eventually at startups &ndash; has hinged on that problem.</p>
<p>I’d be lying if I said that transition has been smooth.</p>
<p>Thankfully for everyone reading, I just watched an astonishingly excellent video from an indie video game developer named Jonas Tyroller about just this subject. In that video, he clearly lays out many of the truths I myself have had to learn through blood, sweat, and coffee. Watching that video felt as if he personally reached through the screen, caressed my cheek, and whispered “you’re a total idiot” to me-from-seven-years-ago.</p>
<p>Jonas is an independent game developer who’s been making games and releasing videos for 11 years. That means there’s full documentation of his journey going from making games that look like this:</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3418"
         style="aspect-ratio: 3418 / 1872"
         
           src="https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-old.jpeg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>To games that look like this:</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3418"
         style="aspect-ratio: 3418 / 1798"
         
           src="https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/building-as-a-search-algorithm/images/jonas-new.jpeg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>Importantly for us, he’s not just talented at making games but also incredibly thoughtful about the way in which those games are made. (Note to the reader: these two facts are probably related.)</p>
<p>Fundamentally, his lesson is this: game development requires a good <em>search algorithm</em>. For the less computationally-minded, a search algorithm is just a plan you can follow to find the best option given your limited point of view. Looking for the deepest point in a lake? Want to find the best path from your house to the grocery store? Need to find the best fishing spot in town? These are all <em>searches</em>, and a search algorithm gives you a set of steps to find the best &ndash; or at least a very good &ndash; answer.</p>
<p>The key tension in search algorithms is that you’re weighing time spent <em>exploring options</em> versus time spent <em>actually doing the damn thing</em>: after all, any time spent scouting fishing spots is time spent not fishing.</p>
<p>Jonas has devoted an enormous amount of effort to “searching for fun games” and offers some genuinely terrific insights that are applicable both to his own domain of making games and my personal domain of “finding useful things to build”.</p>
<h1 id="go-wide-first-then-narrow">Go wide first, then narrow</h1>
<p>Start by entering an “exploration phase” where you’re trying lots of very different ideas by building really crummy prototypes that test just a single thing. In this phase, your primary goal is to test very different hypotheses and gather samples about which seem most promising.</p>
<p>He uses the analogy of “finding the deepest spot in the lake” &ndash; if you only ever test one small area of the lake, why should you have any conviction you’re in the right spot? Instead, you want to make big jumps between your samples. Your early prototypes should be very different from each other.</p>
<p>Only once you’ve sampled lots of different ideas should you start to reduce the size of your jumps and start moving into real work on a single project.</p>
<h1 id="dont-get-stuck-at-a-local-maximum">Don&rsquo;t get stuck at a local maximum</h1>
<p>Local maxima are an inherent challenge in any search algorithm. What’s a local maximum? Imagine that you’re fishing in a nice pond, but there’s a river absolutely teeming with salmon just over the hill: you’re at a *local *maximum because anywhere you look from your current perspective is worse, but there’s a <em>global</em> maximum that’s far better out of your immediate field of vision.</p>
<p>The key suggestion that Jonas makes to avoid local maxima is to look for and frequently take opportunities to inexpensively make <em>big jumps</em> in your search, even after you’ve “chosen your pond”. As a concrete example from the “building companies” world, it may turn out that the chat interface you’ve built for your video game may be a much better business than the video game itself: this is more or less the story of Slack. It certainly took resources for the team to explore this route, but they weren’t starting from scratch and the exploration of applying their existing infrastructure to a new domain paid off. They had reached a local peak with their video game, but a much larger peak was just out of sight.</p>
<h1 id="make-exploration-cheap">Make exploration cheap</h1>
<p>You have two goals when exploring: be <em>fast</em>, and be sorta accurate. <em>Speed</em> is more important than accuracy.</p>
<p>The key to prototyping quickly is to <em>only prototype one thing at a time</em>. Prototypes must be built with the intention of being thrown away. The point that Jonas makes is that if you’re prototyping art (in my world, design/branding) and gameplay (functionality) at the same time, you’re not prototyping at all: you’re just building the stupid thing. That’s far too slow. Instead, prototype each axis independently.</p>
<p>The goal of making prototypes cheap isn’t to “reduce time spent exploring” &ndash; instead, cheaper prototypes allow you to explore many more potential futures, improving your search.</p>
<p>Lastly, keep a list of things that you’d like to explore. When there’s downtime and you have extra staffing, get a teammate to explore one of those ideas.</p>
<h1 id="spend-more-time-exploring-and-less-time-iterating-on-bad-ideas">Spend more time exploring and less time iterating on bad ideas</h1>
<p>The ultimate message is that people often spend far too much attention iterating on the little things and far too little on finding the bigger truths.</p>
<p>Prototype; learn; evaluate; repeat. That’s how you can find the best plot to build your castle.</p>
<p>(You can find a link to Jonas’s original video <a href="https://www.youtube.com/watch?v=o5K0uqhxgsE&amp;t=1239s">here</a>.)</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>The ACE technique for starting new things</title>
      <link>https://www.zeptonaut.com/posts/ace-technique/</link>
      <pubDate>Tue, 01 Aug 2023 15:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/ace-technique/</guid>
      <description>Building healthy habits without hating every minute of it.</description>
      <content:encoded><![CDATA[<p>If you’re like me, you often find yourself in situations where you’ve identified good long-term goals but find it daunting to take short-term actions toward those goals.</p>
<blockquote>
<p>“I want to get in better shape, but the idea of getting up an hour earlier for the rest of my life sounds terrible.”</p>
</blockquote>
<blockquote>
<p>“I know I need to talk to my customers, but I don’t want to spend the rest of my life writing cold emails.&quot;</p>
</blockquote>
<p>In your head, you can viscerally understand the sacrifices of doing the right thing. In contrast, the long-term results seem vague, theoretical, and distant. How do you muster the motivation to get started?</p>
<p>One useful mental trick I’ve found in this situation is something I call the <strong>ACE technique</strong>. There are three simple steps:</p>
<ul>
<li><strong>Advice</strong>: imagine you&rsquo;re giving advice to someone else in your position. What are the concrete next steps you’d recommend they take?</li>
<li><strong>Commit</strong>: identify how long each day you feel comfortable taking your own advice. I usually find 30 minutes or an hour is good. Some activities also have a natural “increment” that you can use as your commitment, like “I will send one cold email to a potential customer every day.”</li>
<li><strong>Exit ramp</strong>: give yourself an exit ramp by identifying a date when you’ll reevaluate your commitment. This date needs to be soon enough where the commitment feels like a sacrifice but doable. “I’ll get up early to exercise for two weeks: if I want to stop after that, it’s okay.” Put this date on your calendar so you don’t miss it.</li>
</ul>
<p>If you&rsquo;re anything like me, you&rsquo;ll find it <em>significantly</em> easier to take the right next steps because you&rsquo;re not committing to that decision forever.</p>
<p>This technique takes advantage of the fact that the idea of doing something is often scarier than the reality. By the time you reach your exit ramp, you often find yourself saying things like “I can’t do this forever, but I can do it for another two weeks.” Once you’ve stacked a few of those commitments together, you’ve started to build a habit so the activity requires less motivation to sustain.</p>
<p>If you reach your exit ramp and want to give up: that’s okay! A genuine willingness to reassess or postpone work towards your goal is what makes this technique work. Put another date on the calendar to reevaluate if you can fit the goal into your life.</p>
<p>There are times in life when it’s genuinely impossible to take steps towards long-term goals: you just had a baby, or your parents are sick and you need to take care of them, or you’re moving, or you’re wrapping up your thesis. During those times, take solace in the fact that you have a date on the calendar when you can reassess what feels right. When the time is right, this technique can help you take the right first steps.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Maybe just use Rails</title>
      <link>https://www.zeptonaut.com/posts/maybe-just-use-rails/</link>
      <pubDate>Fri, 28 Jul 2023 08:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/maybe-just-use-rails/</guid>
      <description>The four million things you need to figure out when assembling your own tech stack.</description>
      <content:encoded><![CDATA[<p>Rails gets a bad rap from “real programmers”. In the seven years that I spent as an engineer at Google, I heard constantly about how Rails was “unable to scale” and not much else.</p>
<p>The concern about whether Rails can scale sort of makes sense at Google scale. From the announcement of a new Google product to the announcement of its cancellation six months later, this theoretical Google product can bask in the big G’s brand halo and benefit from the hordes of bloggers eager to share about all things Google. That drives traffic to the product and it would sure be nice if it didn’t collapse under the weight of interested passerby. Maybe it’s true: Rails may <em>not</em> be a good fit for Google scale traffic.</p>
<p>Yes, Shopify and GitHub and Twitter all made Rails work at massive scales. However, each ran into their own scaling issues that required skilled engineers to solve. There&rsquo;s no question that a web server running Rails won&rsquo;t match the peak throughput of one running similar code written in Go or Rust.</p>
<p>With all that being said, I was surprised when I left Google to find that the common wisdom among Google engineers also extended to engineers at early-stage startups operating with vastly different needs. Unlike at Google, speed of implementation and the ability to focus on the needs of the business were both far more important than the ability to scale for hypergrowth at a moment’s notice.</p>
<p>I think “shiny new thing” syndrome is at least partially to blame: Rails is out of favor and people want to try something new.</p>
<p>However, I think people often start down this path without thinking through what lies ahead. With that in mind, I&rsquo;ve assembled my own list of annoying questions:</p>
<h2 id="the-questions">The questions</h2>
<ol>
<li>What ORM are you planning to use to interact with your database?</li>
<li>What method of data exchange (e.g. REST, GraphQL) are you using to communicate between your frontend and backend?</li>
<li>If you’re planning to use GraphQL, how do you plan to address the N+1 query problem?</li>
<li>What library are you planning to use to translate your ORM records into your data exchange layer? How well maintained is that library?</li>
<li>How are you planning to store files in production?</li>
<li>How are you planning to store files locally during development?</li>
<li>How are you planning to send emails in production?</li>
<li>How are you planning to test email sends locally during development?</li>
<li>How are you planning to run jobs that need to happen at a specific time (e.g. a monthly billing job)?</li>
<li>How are you planning to run background jobs that need to happen off of the main web server thread?</li>
<li>What payment processor are you planning to use?</li>
<li>Do you need a library to integrate with that payment processor?</li>
<li>How do you plan to mock that payment processor for local testing and continuous integration?</li>
<li>How are you planning to handle authentication in production?</li>
<li>If you plan to use a third-party authentication provider in production (e.g. Auth0), are you planning to use that same authentication provider locally and in CI?</li>
<li>What are you planning to handle authorization (i.e. determining who can do what within your app and enforcing that)?</li>
<li>How will database schema migrations happen when schema changes occur?</li>
<li>How will data migrations happen when schema changes occur?</li>
<li>When your new code is deployed to a new environment (staging, production), how will you run those migrations automatically?</li>
<li>How do you check whether records in the database conform to business-logic constraints that can&rsquo;t be modeled as database constraints?</li>
<li>How do you insert seed data for testing changes locally?</li>
<li>How do you write code for one-off tasks that need to be manually executed?</li>
<li>How do you validate new records being saved to your database?</li>
<li>How the heck are you planning to test all of this?</li>
<li>What hosting providers are you planning on using?</li>
</ol>
<p>I don’t know about you, but I don’t <em>want</em> to think about most of that stuff. However, all of those questions merit technologically sound answers and I greatly appreciate that someone else has devoted years to answering them. These are not the exciting parts to me about a startup.</p>
<p>When you choose Rails as the backbone of your stack, you’re joining a community that has good answers to 80% of these problems. Stuff pretty much just works. When something does go wrong - and it will - you have the enormous benefit that someone has probably already succinctly described and solved your problem on the internet, only a Google search away.</p>
<p>In my experience, when you assemble your own tech stack &ndash; including at Google scale &ndash; the vast majority of your time gets sucked up by this 80% that you barely even have to think about with Rails. Despite this, the developer ergonomics of this self-assembled stack rarely match those offered by Rails. At least Google has the ability to throw teamfulls of handsomely paid engineers at the problem. You don’t.</p>
<p>Furthermore, instead of keeping a single dependency up to date, you&rsquo;re committing to keep 15 different dependencies up to date and hope that the maintainer of each cares enough about your particular stack to bother testing on it. If they didn&rsquo;t and something goes wrong, you’re in no man’s land. It can be frustratingly difficult to tell which piece isn’t playing along well with which other piece and “this other person has experienced this before but they’re using foo and we’re using bar, and does that matter?”</p>
<p>Look - <em>I get the appeal of assembling your own stack</em>. I&rsquo;m not some Ruby zealot: I sort of hate it as a language. I think it’s bizarre and unintuitive and easy to make mistakes in. I wish it were statically typed and I wish I were able to use the same language on both the backend and frontend. But striking out on my own feels like trying to build a lawnmower from Legos instead of buying a Honda: possible, but not recommended.</p>
<p>So if you feel yourself drawn by the siren’s call of assembling your own stack, reread that list above and be honest with yourself about whether you can assemble the pieces together into something that’s as coherent as Rails is off the shelf. Maybe you should just use Rails.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Catching mistakes earlier</title>
      <link>https://www.zeptonaut.com/posts/catching-mistakes-earlier/</link>
      <pubDate>Wed, 12 Jul 2023 08:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/catching-mistakes-earlier/</guid>
      <description>You don&#39;t need pixie dust (or LLM magic) to build your product faster.</description>
      <content:encoded><![CDATA[<p>Last week, I wrote some boring code to add a dropdown to a dialog. Everything looked great on my end, another engineer gave it the ol’ 👍 in code review, and I submitted the code before rewarding myself with a celebratory orange mocha frappuccino.</p>
<p>Three days later, our designer sent me a Slack message: “Your dialog is missing a heading. Mind fixing that?”</p>
<p>This is a (true and totally representative) example of one of the sneakiest problems I see slow teams down. A mistake that should have taken me one minute to fix at the source will now probably take 30 minutes to fix by the time that I stash my current work, create a clean workspace, remember and reopen the relevant files, make the changes, send them out for code review, get approval, wait for tests to finish, and submit the changes. Worse yet, the same pattern plays out on a larger stage with weeks of wasted effort on solving the wrong problems entirely.</p>
<p>Toyota gained a pristine reputation for value and reliability in the 1980s by fixing this exact problem on the automotive assembly line. A key tenet of their manufacturing process is that mistakes are <em>significantly</em> faster to fix when you catch them early. Want to make it take two hours to tighten a bolt? Slap an engine and a hood on top of it. Want to churn out high-quality cars quickly? Figure out how to catch your mistake closer to its source.</p>
<p>For software, here are some relevant questions to chew on:</p>
<p><strong>While coding (stop mistakes from reaching code review):</strong></p>
<ul>
<li>Do engineers and product designers regularly meet before implementation to make sure the scope is clear?</li>
<li>Do you have precommit hooks installed to help engineers remember any “quick but easy to forget” things to do before pushing their branch (e.g. formatting, linting, schema file generation)?</li>
<li>Are coding conventions enforced through linter rules instead of code review?</li>
<li>Do engineers regularly ask designers to their desk for quick, informal checks when they’re unsure about a particular design choice? (Sharing a local instance via ngrok is a good-but-not-perfect replacement for this.)</li>
</ul>
<p><strong>While reviewing code (stop mistakes from reaching QA):</strong></p>
<ul>
<li>Do you have comprehensive integration tests that cover most of your app’s behaviors?</li>
<li>Are your integration tests reliable?</li>
<li>Do your integration tests need to pass in order for a branch to be merged?</li>
<li>Are designers able to participate in the review process via review environments?</li>
<li>Are common “don’t-forget-tos” enforced via integration tests (e.g. updating schema files, formatting code)?</li>
</ul>
<p><strong>While prioritizing features (stop mistakes from reaching coding):</strong></p>
<ul>
<li>Has this feature been explicitly prioritized above other, still-unimplemented features?</li>
<li>Is there a clear system to convey prioritization to engineers?</li>
<li>Did engineers get to participate in scoping the issue?</li>
</ul>
<p>By catching mistakes earlier, you can restore your focus to where it belongs: getting that perfect sip of Frappuccino.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Venture money ain&#39;t free</title>
      <link>https://www.zeptonaut.com/posts/venture-money-aint-free/</link>
      <pubDate>Fri, 07 Jul 2023 08:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/venture-money-aint-free/</guid>
      <description>When is VC money helpful? When is it harmful?</description>
      <content:encoded><![CDATA[<p>Here’s a question: if you’re penniless and I hand you a $20 bill, how valuable is that money to you?</p>
<p>It would probably be pretty valuable &ndash; it might allow you to buy a blanket to sleep under or a warm meal to keep you full for the night.</p>
<p>Imagine instead that you have $10 million in liquid assets and I hand you a $20 bill: how valuable is that same bill now?</p>
<p>Probably… not at all. That money likely doesn’t allow you to do anything that you couldn’t have done before.</p>
<p>This difference illustrates the fact that even though $20 may have the same absolute value in two different people’s pockets, it has a <em>diminished marginal utility</em> in the richer person’s pocket. “Marginal utility” just means “how much additional happiness can this dollar purchase?”</p>
<p>This same dynamic has interesting consequences for the incentives of investors and founders.</p>
<h1 id="when-interests-align">When interests align</h1>
<p>One common reason that people start businesses is that they want to make money. Would-be founders can and certainly should have other reasons that they want to start a business, but I don’t think that Jeff Bezos or Mark Zuckerburg would have put in as much effort as they did without the potential of making a buck. Unfortunately, these businesses need a lot of money until they can turn a corner and start making a lot of money.</p>
<p>Thankfully, other groups want to make money too. Pension funds, endowments, and high net worth individuals already possess fistfulls of cash and sometimes have a fiduciary responsibility to grow that into entire armfulls of cash. They recognize that it’s lucrative to buy shares of new businesses being founded by promising teams. These entities give their money to venture capital firms and become “limited partners” of the venture capital fund. The VCs then seek out promising companies to invest in.</p>
<p>Importantly, the economics of venture capital rely on what’s known as <em>the power law distribution</em>. These funds are searching for whales: the single best investment in a VC’s portfolio is likely to outperform the rest of their portfolio combined.</p>
<p>Incentive-wise, if a VC doesn’t believe that an investment might be that single best result, <em>they’re obligated not to make the investment</em>.</p>
<p>Founders need money to start businesses: VCs need to invest that money to earn returns for their limited partners. This is the symbiotic relationship that makes the whole ecosystem spin.</p>
<h1 id="when-interests-diverge">When interests diverge</h1>
<p>Let’s turn the table back around and look at things from the founder’s perspective.</p>
<p>If a founder is ultimately able to sell their business for $100k, that’s significantly better than selling it for $10k. $1 million is significantly better than $100k. $10 million is better than $1 million. $100 million may be better than $10 million… but it’s certainly not 10 times better. I’m skeptical that $1 billion buys you <em>any</em> happiness that $100 million can’t &ndash; and heck, it may buy you some problems.</p>
<p>Somewhere between $1 million and $100 million, there starts to be a very steep drop-off in terms of “what can I actually do with this money in order to make my life better?” In other words, the marginal utility of the money starts to quickly diminish. Somewhere in that range is a number where you don’t have to work again, you can pay off your mortgage, you can send your kids to whatever school you want, you can live in a big enough house in whatever neighborhood you want, and you can pursue future goals without concern for money.</p>
<p>Therein lies the tension: for the founder, selling a business for $5 million is a life-changing win. For venture capitalists, a promising portfolio company selling for $5 million is like lighting a lottery ticket on fire. This fact shapes both the types of businesses that VCs fund and the paths they encourage those businesses to take once funded.</p>
<p>To founders who spend money, that money has diminishing marginal utility. To investors who view money as a rate of return on an Excel sheet, money has no diminishing marginal utility.</p>
<h1 id="thinking-about-expected-utility">Thinking about expected utility</h1>
<p>Venture capitalists should treat companies in terms of <em>expected value</em>: “if I invest this dollar in this company, what can I expect it to turn into 5-10 years from now?”</p>
<p>Because of the diminishing marginal utility of money, founders should probably treat the opportunity cost of starting a company differently. “If I work hard for 12-18 months to get this company off the ground, how much happiness/utility can I expect that work to bring me in the future?” Whatever the distribution of possible outcomes is, their choices should factor in that having $100 million in the bank provides about as much utility as having $10 million in the bank.</p>
<p>The good news is that if you understand the fundamentals of customer research, idea validation, sales, and marketing, there’s a pretty good chance that you can find some software that <em>should</em> exist and build it if you can rope in a similarly capable friend or two. There are reasonable $5-10 million business-to-business software ideas laying around in plain sight that have a ~20% chance of success. Many of these ideas can either be discarded or bumped up to a ~50% chance of success with less than 40 hours of work of well-executed customer conversations (see: <em>The Mom Test</em>). Furthermore, many of these businesses can be easily sold once they’re off the ground.</p>
<p>This type of business is what the software bootstrapping world is all about: find an unglamorous but meaningful B2B SaaS idea that’s been overlooked and turn that idea into something great.</p>
<p>However, herein lies the rub: investors care about the expected value of the investment. Founders probably care about the expected <em>utility</em> of their efforts. Founders would probably prefer “real possibility of a life-changing outcome” over “infinitesimal chance of becoming the next Bill Gates”.</p>
<h1 id="the-gap">The gap</h1>
<p>For bootstrapped businesses, there’s an undeniable and painful gap between “I have an idea that my initial conversations indicate could work” and “I have a functioning business”. Even if you have the necessary tools to get the business off the ground, it’ll likely be at least 12-18 months before that business is going to provide meaningful income.</p>
<p>I think this gap is one of the reasons that companies are often pushed towards the venture capital track: a small amount of startup capital is incredibly helpful to get off the ground, but once you’ve gotten on the investor-backed rocket it’s hard to eject.</p>
<p>In going down this route, the incentives of the business shift permanently towards “becoming huge”. You’ll be pressured to take on subsequent investment, attack larger-but-lower-likelihood-of-success problems and markets, and hire (and therefore manage) more. Because you’ll likely be pressured to hire more and move faster, chances are that you won’t have time to find the “right” employees that have an owner’s mindset about the business. Lower ownership employees lead to more time micromanaging and less time for strategic thinking.</p>
<p>Speaking from experience, “growing quickly” &ndash; particularly with lower ownership employees - skips right past the fun part of growing a business. You immediately have to spend more time thinking about “getting the right systems in place” rather than the probably-more-interesting questions like “where can I find more customers?”</p>
<p>Sprinkled on top is the fact that your company’s incentives inevitably shift towards pleasing investors over pleasing customers. <em>How can I best share updates with my investors? What types of metrics are other companies sharing in their pitch decks these days? What investors should I try to bring in for my next round of funding? When should I raise, and what terms are fair?</em> These are all hard questions that responsible venture-backed founders <em>must</em> think about that don’t have a damn thing to do with solving the core problems that provide value for customers.</p>
<p>That 12-18 month chasm of bootstrapped businesses is hard, but on the other side lies a company in which your attention can rest mostly on the inherent problems of the domain rather than the problems stemming from rapid artificial growth before product/market fit.</p>
<p>Speaking from experience: it’s <em>incredibly</em> hard to keep team morale and focus high in that time before a business finds its legs. On the off chance that you manage to hire a strong engineering team to build an MVP quickly, what do you do with them when you realize that your focus needs to shift outward towards talking with customers to better understand the domain? How do you keep them focused on the customer when the only “customers” are theoretical? I can’t say if “idle hands are the devil’s plaything”, but in my experience they’re certainly the plaything of company self-doubt &ndash; particularly by individuals who want to churn out steady, high-quality work. You can’t build or market or sell a product that you’re still trying to understand yourself. Navigating the time before product/market fit requires a kind of mental marathon that few people can or want to run.</p>
<p>In summary: I think venture capital is likely the only way to build a certain kind of massive business. However, there are lots of other types of businesses out there that require a lot lower risk tolerance, have a higher “expected utility” in terms of the money generated (if not absolute expected dollar returns, due to the power law distribution of returns), and frankly require a whole lot less bullshit.</p>
<p>The key to building these businesses is that you need to be more creative in how to bridge that pre-revenue gap: can you work nights and weekends? Can you raise funding based on early customer conversations from angel investors or friends and put sufficiently clear expectations on your future goals? Can you self-fund? These are worthwhile questions to ponder: venture capital certainly isn’t free capital and you should understand the cost before you accept it.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Adding a sense of urgency to negotiations</title>
      <link>https://www.zeptonaut.com/posts/adding-urgency/</link>
      <pubDate>Thu, 23 Feb 2023 10:16:09 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/adding-urgency/</guid>
      <description>How to speed up negotiations without looking like a total jerk.</description>
      <content:encoded><![CDATA[<p>Negotiations are ubiquitous when building new things. This is unfortunate for me: I loathe negotiations.</p>
<p>This ubiquity exists almost regardless of the context in which you&rsquo;re building:</p>
<ul>
<li>New companies have to convince external customers they&rsquo;re worth talking to, close the sale, hire new employees, and raise funds from investors</li>
<li>A new internal team has to find new internal clients for their product, justify capital investment from executives, and request resources from other teams</li>
<li>Builders looking for a new role have to move interviews along at a reasonable pace and negotiate their compensation</li>
</ul>
<p>What I&rsquo;ve learned the hard way is that the default speed of most negotiations is somewhere between &ldquo;glacier&rdquo; and &ldquo;tectonic plate&rdquo;. If you’re trying to get things done, this is a problem. The situation is also jarring in contrast with the years of education in which most professionals are trained, where natural deadlines are built into everything by way of semesters, exams, projects, and quizzes.</p>
<p>





<figure>
    <img alt="A turtle in the DMV saying &amp;ldquo;Things sure do move slowly around here&amp;rdquo;"
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4729"
         style="aspect-ratio: 4729 / 4496"
         
           src="https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/turtle-in-dmv.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>To prevent negotiations from yawning into infinity, you have to find real ways to introduce some urgency into the equation.</p>
<p>One technique that I&rsquo;ve used to great effect in the past  is something I like to call &ldquo;FRESH urgency&rdquo;. FRESH stands for <strong>F</strong>irm, <strong>R</strong>easonable, <strong>E</strong>xternal, <strong>S</strong>pecific, and <strong>H</strong>opeful.</p>
<p>Take the following email as an example:</p>
<blockquote>
<p>Hi Joe,</p>
<p>Just wanted to follow up: I’m nearing the end of a few different interview slates and I’d hate to miss out on what might be a mutually great fit just because the timelines don’t work out.</p>
<p>Do you have any time tomorrow to talk about next steps?</p>
<p>Sarah</p>
</blockquote>
<p>I’d like to highlight a few things about this email:</p>
<ul>
<li><strong>It’s firm.</strong> It&rsquo;s not overly apologetic: it&rsquo;s just transparent and communicative.</li>
<li><strong>It’s reasonable.</strong> The suggested timeline is reasonable given the lightweight request. The heavier the request, the more notice is required.</li>
<li><strong>It cites an external factor as the reason for the urgency.</strong> By shifting responsibility to a pesky external factor as the reason for the urgency, it casts the sender in a much better light.</li>
<li><strong>It’s specific.</strong> The other party knows exactly what the sender is requesting.</li>
<li><strong>It’s hopeful and it focuses on the benefit to the other person.</strong> The message makes it clear that the sender is just trying to reach a mutually beneficial conclusion: they&rsquo;re not just sending the email for themself.</li>
</ul>
<p>There’s a very real question of “does the external factor have to be true?”. I try to stay mostly on the side of “yes”, but fully admit that the line is blurry.</p>
<p>There’s an adjacent question of “can the external factor exist for the sole reason of creating urgency”?” and <em>here</em> I say absolutely &ldquo;yes&rdquo;. Go ahead: schedule a caterer just to tell a customer that you need their response on attending by a specific date. Make up a business trip just so that you can say “I actually happen to be in San Francisco next week - want to meet up then?”. (Okay, that one’s a little bit of a white lie, but it passes muster for me.)</p>
<p>I had a conversation with a startup CTO this week who told me a (potentially apocryphal) story of the startup Zenefits. Supposedly when they were onboarding their first customers, they added an onboarding fee for their service for the express purpose of telling customers that they had an onboarding opening next week and could <em>waive</em> the fee if the sales lead was willing to take over that onboarding slot.</p>
<p>Often the person on the other end of the negotiation needs to be able to justify to others why your thing takes priority. By giving a reason to point at, you’re helping both sides get the deal over the finish line.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>How employees can get burned in acquisitions</title>
      <link>https://www.zeptonaut.com/posts/burning-employees/</link>
      <pubDate>Tue, 14 Feb 2023 16:02:29 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/burning-employees/</guid>
      <description>Outcomes for employees in middling acquisitions depend heavily on the character quality of the executive team.</description>
      <content:encoded><![CDATA[<p>Back in November, another company seriously considered acquiring our startup. As the CTO, I was thoroughly grilled about all of our technical assets and liabilities.</p>
<p>The most prominent lesson I took away was “nothing is real until the ink is dry”: the cash offer for the acquisition was withdrawn about three weeks after it was verbally made. Overnight, we went from adjusting spreadsheet numbers in search of an equitable split to discussing our favorite flavors of ramen.</p>
<p>My second biggest lesson was that I should never, ever work at or invest in a startup where I don’t trust the executives &ndash;  even if others urge that doing so might make me fistfuls of cash. There are too many opportunities for bad execs to burn just about anyone that touches their startup.</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4552"
         style="aspect-ratio: 4552 / 3574"
         
           src="https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/whats-for-dinner.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>Thankfully, this wasn’t a concern this time around: I trust Curtis Wiklund (the founder of Channels) immensely and he repeatedly proved worthy of that trust. However, it seems worth sharing some ways I learned that you <em>can</em> be burned as an employee during an acquisition.</p>
<p>Acquisitions are typically announced in the press with headlines like “Dropbox sells for $50 billion”. The reality is more complicated.</p>
<p>For illustrative purposes, let’s consider a fictional HotStartup that raised $5M. Let’s say that this money was raised by selling 20% of the company in a single round of financing, placing the post-money valuation of the company at $25M.</p>
<p>Those cash investors are almost always given <em>preferred</em> shares in the company. This is in contrast with the <em>common</em> shares given to employees in the form of stock options.</p>
<p>Those preferred shares also come with a term known as a <em>liquidation preference</em>. This is a multiplier (usually somewhere from 1-2x) that specifies the return that preferred shareholders are entitled to receive before common shareholders receive <em>any</em> money. This is critical: in the event of an acquisition, investors’ cash is valued above employees’ work.</p>
<p>Preferred shareholders also reserve the right to convert their preferred stock to common stock, forgoing their liquidation preference. You can expect them to do so if it’s beneficial to them. If an investor invested $1M at a 1x liquidation preference and received 10% of the company, then they’ll keep their preferred shares with the liquidation preference unless the exit is for more than $10M, at which point they’ll convert their preferred stock to common and instead take 10% of the acquisition amount.</p>
<p>Particularly for small acquisitions, liquidation preferences play an outsized role in determining how much money flows through to common shareholders and therefore how much employees (the common shareholders) get paid. Compare the following two outcomes for our hypothetical acquisition with different liquidation preferences:</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3547"
         style="aspect-ratio: 3547 / 2862"
         
           src="https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/different-liquidation-prefs.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>In the first example, a CEO with 50% of common shares rides away in a Ferrari. In the second, they ride away on their rusty Huffy bike.</p>
<p>Astute readers will notice that while a liquidation preference is meant to reduce risk for investors, it can also skew incentives in a way that hurts those same investors. In the above scenario where common shareholders receive no money from the acquisition, why on Earth would the executives from the company pursue that acquisition? The startup is sitting on an asset potentially worth millions of dollars with literally no incentive to sell that asset. Acquisitions require tons of work and stress: furthermore, they often require the executive team from HotStartup to work at the likely-not-very-entrepeneurial AcquiringCo for a year or more after the acquisition (via lock-up agreements).</p>
<p>The executives at HotStartup have two main ways to resolve this incentive misalignment:</p>
<ul>
<li>They can renegotiate the liquidation preference so that more of the acquisition proceeds flow through to common shareholders, of which they presumably own lots</li>
<li>They can request a management pool be allocated to key executives responsible for the acquisition. This is basically a bonus pool paid out to the executives <em>before</em> any preferred or common shareholders are compensated for their stock.</li>
</ul>
<p>Any agreement needs to be approved by the board (or investors if no board exists), but the board is often faced with a “take it or leave it” offer. This is particularly true at low exit prices where the company might otherwise just shut down.</p>
<p>Management pools may seem borderline ethical at first glance, but they can make a lot of sense. Much of our acquisition&rsquo;s value hinged on the tech transfer, which in turn depended heavily on me as CTO. Because of this, I&rsquo;d be required to sign a lock-up agreement. However, I didn&rsquo;t hold nearly enough common shares to have the acquisition outweigh my &ldquo;next best alternative&rdquo; (going to work at another company). A management pool could help bring those two in line so that an acquisition was as beneficial to me as it was to the other stakeholders.</p>
<p>The last lever available in the offer is the team&rsquo;s compensation package at AcquiringCo after the acquisition. An acquirer could save money by making a lowball offer for HotStartup with an overly-generous salary for the CEO once he&rsquo;s at AcquiringCo. This is effectively bribing the decision maker to reduce the payout to the other stakeholders. In this situation, the burden is on the CEO to negotiate for a larger acquisition price for all shareholders, even knowing that it may mean less total compensation for themself.</p>
<p>To be clear: <em>management pools, generous executive compensation packages, and renegotiation of liquidation preferences can all be useful tools in structuring acquisitions</em>. The goal is to reach an overall package where everyone feels that the acquisition is worth the opportunity cost.</p>
<p>However, particularly in &ldquo;middling outcome acquisitions&rdquo;, there&rsquo;s often not enough pie to go around for everyone to get fat. Because executives wield most of the decision-making power in these negotiations, they&rsquo;ll have every opportunity to push the acquisition in extreme directions that benefit themselves and hurt employees.</p>
<p>Specifically, they can:</p>
<ul>
<li>Negotiate with the board for an outsized management pool instead of a lower liquidation preference knowing that the management pool impacts their compensation disproportionately (hurting employees)</li>
<li>Negotiate with AcquiringCo for a lower acquisition price in exchange for a higher compensation package post-acquisition (hurting both investors and employees)</li>
</ul>
<p>In these acquisitions, liquidation preferences play an outsized role. Because of this, it’s worth asking about the liquidation preferences for current investors when joining a startup. Furthermore, it&rsquo;s critical when joining a startup that you have faith in the leadership team: upon an exit, they’ll have every opportunity to burn you.</p>
<p>If you’re interested in learning more, I’d heartily recommend reading <em><a href="https://tools.ltse.com/funding-your-startup-a-founders-guide-to-liquidation-preferences-e7db39469463">The Holloway Guide to Equity Compensation</a></em>. The Long-Term Stock Exchange also has <a href="https://tools.ltse.com/funding-your-startup-a-founders-guide-to-liquidation-preferences-e7db39469463">an excellent article on liquidation preferences</a>. I read most of the former when I first joined Channels and what I learned proved invaluable over the past few months.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Getting people to care about what you&#39;re building</title>
      <link>https://www.zeptonaut.com/posts/supercharge-your-work-through-marketing/</link>
      <pubDate>Tue, 07 Feb 2023 11:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/supercharge-your-work-through-marketing/</guid>
      <description>How can you let others know about your work without irritating them immensely?</description>
      <content:encoded><![CDATA[<p>Engineers tend to think of marketing sort of like cleaning sewage: probably necessary, but best done by someone else and at a safe distance.</p>
<p>In my opinion, this is because most people confuse “marketing” with “marketing done poorly”. The word &ldquo;marketing&rdquo; brings to mind a flood of Facebook invites to their high school acquaintance&rsquo;s essential oils party.</p>
<p>





<figure>
    <img alt="A notifications pop-up saying &amp;ldquo;You&amp;rsquo;ve received 475 invitations to an event from High School Shill."
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="2543"
         style="aspect-ratio: 2543 / 1550"
         
           src="https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/facebook-notification-shill.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>In contrast, I’ve come to think of marketing a little like grease on a machine: if you can see it oozing out, you’re probably using it wrong.</p>
<p>To reset, let’s flip the narrative a bit: as an engineer, your job is to build something that others can benefit from. Along the way, you probably learn things that others can benefit from. Unfortunately, approximately 100% of the population doesn’t know about all the cool things you’ve done and learned at the end of your work day.</p>
<p>Regardless of how amazing that creation or lesson is, <em>in many cases it doesn’t matter unless you can convince other people that it matters</em>. Marketing is just the process of finding the people that would find your work useful and convincing them of its usefulness.</p>
<p>Consider: the Instagram cofounders could have created the exact same app and it would have faded into irrelevance had they not had a real strategy to convince people to try it.</p>
<p>Marketing is frankly an uphill battle. People are bombarded with junk every day and their brain is hardwired to filter out 99.9% of it. Because of that, marketing requires a deep empathy for your audience and understanding how you fit into <em>their</em> lives rather than the other way around.</p>
<p>Do you find lots of advertising annoying? Do you get pissed off when people spam self-promotional links on LinkedIn or Reddit?  That’s great! That means that you’re highly sensitive to bad marketing.</p>
<p>In my experience, this is where most engineers’ relationship with marketing ends. “Ugh,” they say. “Marketers are the worst.” Instead of digging deeper, they speak of their work only in hushed tones to their coworkers and expect it to speak for itself, despite its lack of lips.</p>
<p>This is a mistake: people need to know your thing exists to find it useful. Instead of giving up, start paying closer attention to what things have wormed their way into <em>your</em> brain that you consider useful and how you became aware of those things. Through doing so, you can build a catalog of “brain hacks to get people to care about what you’re doing”. That catalog? That’s your catalog of marketing techniques.</p>
<p>





<figure>
    <img alt="A graph where the efficacy of marketing decreases linearly with the visibility of it."
         title="The line definitely continues below y=0 here."
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="2741"
         style="aspect-ratio: 2741 / 2214"
         
           src="https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/visibility-vs-efficacy.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    <figcaption>The line definitely continues below y=0 here.</figcaption>
</figure>

</p>
<p>Did you listen to a presentation at a conference on all the ways someone attempted to solve a particular problem before they got it right, and what they learned? <strong>They were marketing.</strong></p>
<p>Did you get an email from someone asking if you could discuss a particular problem you&rsquo;re facing that they’re trying to solve? <strong>They were marketing.</strong></p>
<p>Did someone reply to a forum post you made with a detailed answer and a link to an even more detailed answer offsite? <strong>They were marketing.</strong></p>
<p>All of these people were marketing because doing so greatly amplifies the reach - and therefore impact - of their work.</p>
<p>I see that skeptical look on your face. “But Charlie!”, you say. “I work on the internals of a product that already has customers! People benefit from the work that I do without me having to market it!”</p>
<p>That may be true, but then marketing becomes critical in other ways. Almost by definition, this type of work can easily go unnoticed by others in your organization. The more visible your work is to others by default, the less you have to work at marketing. But that implies a converse: the <em>less</em> visible your work is to others by default, the more important it is for you to market that work.</p>
<p>If you work on the guts of something, then you should probably be marketing the bejeezus out of your work internally. Then everyone will realize that you deserve that promotion instead of Jim Bob, who watches three hours of YouTube at his desk every day but boy is his feature visible in the product.</p>
<p>





<figure>
    <img alt="Jim Bob&amp;rsquo;s office with a &amp;ldquo;Do Not Disturb&amp;rdquo; sign on the door."
         title="Jim Bob: best known for his implementation of the &lt;blink&gt; tag."
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3653"
         style="aspect-ratio: 3653 / 3569"
         
           src="https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/jim-bob-busy.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    <figcaption>Jim Bob: best known for his implementation of the &lt;blink&gt; tag.</figcaption>
</figure>

</p>
<p>Still convinced marketing is fluff? In that case, I’ll pose this question: do you think that Stack Overflow became a success because it was such a great product? Don’t get me wrong: it was a good product, and it got a lot right over the alternatives at the time. However, it’s also no coincidence that the two founders of Stack Overflow were <em>two of the most popular software bloggers at the time making a product for programmers</em>. They both had incredible marketing channels for the target audience of their startup. There was incredible founder/market fit.</p>
<p>Furthermore, how do you find Stack Overflow answers most of the time? If you’re like me, the answer is “It’s one of the first few results on Google”. Stack Overflow is <em>excellent</em> at SEO and helping people find the answer to a problem they’re actively trying to solve. In fact, some of their core community policies exist explicitly to improve SEO marketing: <a href="https://stackoverflow.blog/2010/11/16/dr-strangedupe-or-how-i-learned-to-stop-worrying-and-love-duplication/">they encourage duplicate questions with different wordings</a> because it covers a wider array of phrases that someone might use to search for an answer.</p>
<h1 id="so-how-do-you-market-effectively">So how do you market effectively?</h1>
<p>I find the following questions to be really helpful when putting together a marketing strategy:</p>
<ol>
<li>Who are you trying to make aware of your work?</li>
<li>Where do those people gather?</li>
<li>What are the norms about acceptable ways to communicate in that gathering place?</li>
<li>What do you want them to know about your work?</li>
<li>What is your target audience trying to achieve? Why should they care?</li>
<li>How can you demonstrate value immediately?</li>
<li><strong>Where’s the overlap?</strong></li>
</ol>
<p>To risk pandering to my fellow engineers: you know that part of Star Wars where Luke is flying his X-wing through the trench on the Death Star? That’s like marketing: there are a million ways for it to go wrong and success is when your message <em>just</em> sneaks in that 2 meter wide exhaust port. One meter off to the left or right and people’s marketing alarms sound and they think “Ugh! I hate marketers.”</p>
<p>These may seem like really basic questions to ask, and they are! But almost all people still get them wrong. Here are a few examples of marketing gone awry in various ways.</p>
<p>Someone might launch their new health startup targeted at doctors on ProductHunt, despite no doctor ever having visited ProductHunt in the history of ever. This is a mistake as old as time: confusing where you hang out with where your target audience hangs out. Remember: <em>who are you trying to make aware of you, and where do those people gather?</em></p>
<p>Someone might post their new startup launch newsletter on the /r/startups subreddit with a title of “Check out my new newsletter, <em>Launched With Laura</em>!” You’re getting closer now: you’re at least in the same neighborhood as your target audience. Unfortunately, while your newsletter may rock, your marketing skills still need improving: people want to open threads that bring <em>them</em> value, not threads that bring <em>you</em> subscribers. Remember: <em>what are the norms about acceptable ways to communicate in that gathering place? How can you demonstrate value immediately?</em></p>
<p>





<figure>
    <img alt="A picture of the Launched With Laura landing page with zero subscribers."
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3195"
         style="aspect-ratio: 3195 / 2297"
         
           src="https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/launched-with-laura.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>Now suppose that <em>Launched With Laura</em> is a newsletter about the history of successful software-as-a-service launches and someone asks a question on the /r/startups subreddit about “How do I launch this product I’ve built?”. You could respond with a comment to this thread saying:</p>
<blockquote>
<p>It sounds like you would really enjoy my newsletter, <em>Launched With Laura</em>! Subscribe here.</p>
</blockquote>
<p>This is approaching good marketing: you’ve nailed lots of things and may very well get some new subscribers out of your reply, but in my experience you won’t get many. You’re asking someone who lacks proof of your genius to fill out a form &ndash; a tough sell. But you’re getting much, much closer!</p>
<p>Instead, suppose that you reply with the following:</p>
<blockquote>
<p>Based on my own experience, the best way to develop a launch strategy is to learn from the successes (and failures) of other companies. For example, I know that ExampleX shared a similar target customer with you and found a lot of success by cold emailing the Chief Revenue Officers of hospital systems and including a forecast of the expected integration ROI.</p>
<p>I actually did a case study on ExampleX’s launch a few weeks ago on my newsletter, <em>Launched With Laura</em>: you can get access to that (and 50+ others) if you subscribe here.</p>
</blockquote>
<p>Boom! That’s marketing. (Specifically, this &ldquo;provide-utility-without-clicking-link&rdquo; technique is often called &ldquo;zero click marketing&rdquo;.) You identified your target audience, what they’re trying to achieve, what value you can offer, and how you can show that value immediately. That’s extremely targeted and I would frankly be shocked if you <em>didn’t</em> get a subscriber out of that &ndash; your marketing efforts made it through the Death Star exhaust port.</p>
<p>“Bah”, you think, “replying to a single person is so unambitious! Why bother?”</p>
<p>Well, it’s important to consider that there are far more lurkers reading threads than there are people asking questions. For these public one-on-one interactions, the audience is almost always bigger than it seems and you often get bonus authenticity points with others for caring enough to respond thoughtfully to a 1:1 question.</p>
<p>There’s some &ldquo;marketing technique spectrum&rdquo; that exists with one side containing a huge audience with wildly differing interests (think: the Superbowl) and the other side containing tiny audiences with very similar and predictable interests (think: Laura&rsquo;s Reddit thread). I find that engineers almost always err too far on the side of large audiences. Unwittingly, they choose a 0% conversion rate of a large audience over a 30% conversion rate of a much smaller audience. My advice is the same as the inimitable Paul Graham: <a href="http://paulgraham.com/ds.html">“do things that don’t scale”</a> and hold off on trying to do outreach to big audiences until you’ve first nailed your messaging at the tiniest of scales, like a single comment thread. You might be surprised at how much can learn from and grow your audience.</p>
<p>For the sake of your mental wellbeing and marketing stamina, my parting wisdom is to track and celebrate the small wins when it comes to marketing. I think that we’re all so used to seeing the staggering numbers associated with late-stage exponential growth that we’re conditioned to believe that anything less than massive, instantaneous success is a failure. I push hard in the opposite direction: I’ve set up Zapier to send me a text message every time my blog gets a new subscriber and it genuinely thrills me. Whatever a “sale” means for your thing - a new subscriber, a new demo request, a view of your presentation - I’d encourage you to find creative ways to amplify the feeling of that win.</p>
<p>Good luck out there Red 5: give ‘em hell.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>How to find your blind spots</title>
      <link>https://www.zeptonaut.com/posts/find-your-blind-spots/</link>
      <pubDate>Mon, 30 Jan 2023 11:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/find-your-blind-spots/</guid>
      <description>You probably aren&#39;t qualified to dissect your own failures because you&#39;re the idiot who screwed everything up.</description>
      <content:encoded><![CDATA[<p>Anyone who knows me can vouch for my tendency to frenetically pick up and drop hobbies. I’ve found two benefits of this:</p>
<ul>
<li>No one’s ever intimidated by you because your next embarrassment is right around the corner</li>
<li>By starting out mediocre at so many things, you notice similarities in how to improve &ndash; at least up until somewhere in the middle of the bell curve</li>
</ul>
<p>One striking similarity is how many skills have a saying among the experts akin to “the key to drawing well is learning to see well.” I’ve heard variations of this phrase used for chess, cooking, and programming.</p>
<p>The root of these sayings is that humans are just <em>awful</em> at debugging why things really go wrong. Unfortunately, this ability is absolutely crucial to improving at things. In my experience, the most pernicious bias at play is the tendency to immediately blame failures on the most <em>proximal</em> (closest) cause of a problem rather than searching harder for the most important cause. For example, a chess player may blame a blunder on a careless tactical mistake when in reality their poor opening led them into a situation in which <em>some</em> mistake was inevitable. I’ve written about my own experience with this phenomenon in <a href="https://www.zeptonaut.com/posts/rocket-league-and-root-cause-misattribution/">Rocket League and Root Cause Misattribution</a>.</p>
<p>To get better at debugging failures, you need to develop a better understanding of what’s happening under the scenes, thereby separating the <em>inputs</em> of the activity from the <em>outputs</em> - a win or a loss, a good painting or a bad one. Without this understanding, your only validation that you performed well is success, which is a regrettably noisy and lagging indicator. It’s entirely possible to play a good game of chess that you lose. It’s also possible to play a bad game of chess that you win. Success is an even worse measure for endeavors like engineering, where a result may arrive only after months, years, or decades of work. To improve rapidly, you need to consciously seek out shorter feedback cycles.</p>
<p>Across domains, I’ve found that experts almost always find these shorter feedback cycles by breaking the larger skill down into “minigames” with clearer objectives. This is what I call “vision”: being able to peek under the surface of an activity to recognize the minigames being played and when each is applicable. Improving your vision allows you to identify which minigame your ultimate failure can be attributed to and focus your improvement efforts.</p>
<p>A decent start to a list of “minigames” for an amateur sketcher might be:</p>
<ul>
<li>Do I have the right shapes for the items in the scene?</li>
<li>Are these items positioned correctly relative to another?</li>
<li>Are the items’ relative sizes correct?</li>
</ul>
<p>In my experience, “reaching the next level” in a skill usually means adding one or two new minigames to your arsenal while making only modest improvements in minigames that you’re already aware of. In contrast, I find that most people <em>think</em> that the path to improvement lies solely in building upon minigames they know. This difference can lead to significant frustration because “what got you here won’t get you there”.</p>
<p>I regularly see junior software engineers make this mistake: after landing their first “real” job, they’ll seek to reach the next level by trying to learn how to solve trivial Leetcode problems faster. They’d almost always be better served by “going deep” and closing some foundational gap they see between themselves and the more effective senior engineers. The number of those gaps may seem daunting, but the gains compound. Leetcode may have gotten you the job, but it almost certainly won’t help you make more of an impact in your role.</p>
<p>In my opinion, identifying which minigames you should be focusing on at which skill level is the most important value a good coach can provide. Whenever you fail, you almost certainly could have done <em>something</em> better along some axis that you already know about: you could have worked another hour per day or been more (or less) responsive to email. You could have played a better chess opening or seen some tactic. You’re human. Furthermore, if you were failing, chances are you were under some amount of pressure that caused you to make tradeoffs.</p>
<p>A good coach or mentor can provide the superior vision to help you find the ultimate cause of your failure rather than just the most proximal one. Furthermore, that coach can help you identify which minigame you need to improve at and find good resources to do so.</p>
<p>When seeking out a good coach, it’s not sufficient to find someone that’s an expert at the activity. In the chess world, Magnus Carlsen may be the world chess champion but he seems like he’d be a pretty miserable chess coach: he’s notoriously unenthused about explaining his reasoning to others. John Bartholomew, on the other hand, is a very-good-but-not-great chess streamer who’s gifted at explaining how he makes decisions each step along the way. Given the choice between each player as a coach, I’d choose John every time.</p>
<p>Recently, many of the best “coaches” I’ve found are actually content creators: listening to them is like eavesdropping on a conversation between people far, far smarter than I am. The <em>Acquired</em> podcast has taught me more about “big tech strategy” and venture capital than working in big tech ever did. Rob Walling&rsquo;s <em>Startups Like the Rest of Us</em> has proven similarly useful for learning how to launch bootstrapped businesses. John Bartholomew was a wonderful chess coach even though I just watched his YouTube channel. This is a huge benefit to the information age: you can get access to some of the best coaches in the world without changing out of your sweatpants.</p>
<p>Given the number of successful professionals that credit a mentor they <em>actually</em> talk to for their success, I wish I had better advice about how to find one. I’ve struggled with this myself, but I suspect the right person would be invaluable. Until that time, I’ll just remain thankful that we live in the age of YouTube and podcasts.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Customers extrapolate from quality</title>
      <link>https://www.zeptonaut.com/posts/customers-extrapolate-from-quality/</link>
      <pubDate>Thu, 22 Sep 2022 15:08:45 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/customers-extrapolate-from-quality/</guid>
      <description>How do you strike a balance between getting customer feedback quickly and shipping something mediocre?</description>
      <content:encoded><![CDATA[<p>By the fifth time we sent our demo to customers, we knew what to expect.</p>
<p>Early on, we identified the “main page” of our application that most prospective customers would care about when they saw our product. However, there were also the hundred other features and screens that were begrudgingly necessary but no one would think twice about: ways for users to change their email address and password, workflows for customers to create new posts on that main page, workflows to edit existing posts, notification systems to alert subscribers of new posts. We put in the time to build the main thing well, and then we spent at least as much time building the small annoying things.</p>
<p>We use a tool called FullStory that allows us to see how users interact with our site. Every time we sent the demo to a customer, they looked at the “main page” for about 20 seconds. <em>Then they closed the demo.</em> They’d shoot back an email along the lines of, “This looks great! Let’s meet next Tuesday to talk more.”</p>
<p>During later conversations with those prospective customers, we’d discover that they were making the entire purchase decision based on the sliver of the product they saw. They just assumed that the rest existed and was built to the same quality bar.</p>
<p>The lesson was stark: <em>customers will extrapolate from the quality of what they can see</em>.</p>
<p>If you build a big crappy product, people will assume you’re capable of building a bigger crappy product. If you build a small excellent product, they’ll assume you’re capable of building a bigger excellent product and may want to join you on the ride. People are constantly bombarded with new things trying to enter their lives: something needs to be remarkably good to warrant a try. The way to move fast but still pass that filter is to build something remarkably good and remarkably small.</p>
<p>There’s a reason that people can’t wait for the next Pixar movie, but mostly ignore 95% of other movies that come out: Pixar’s output volume is low, but their work is remarkable and consistently worth paying attention to. Similarly, when building a product, you should ask yourself: “What can I cut so that I can make the important parts remarkably good?”</p>
<p>In that spirit, it’s critical to identify:</p>
<ul>
<li>Who makes the decision about whether to use this product?</li>
<li>What parts will they be looking at when making that decision?</li>
<li>How can I avoid building as much of the other stuff as possible?</li>
</ul>
<p>Startups need to move quickly to find customers and <em>prioritization is the single most important part to moving quickly</em>.</p>
<p>A few nuggets to help with this prioritization:</p>
<ul>
<li>Build an FAQ page with entries for how to do all of the things you didn’t build. For each entry, just say “Reach out to <a href="mailto:support@example.com">support@example.com</a> for help doing this.” It’s important that you be responsive to that inbox, but the emails you receive there can help inform you which of the features you skipped should be built first.</li>
<li>Early customers are surprisingly accepting of the limitations of an early product that’s great at one particular thing. See: “Instagram only lets you post square pictures.”</li>
<li>When possible, use high-quality off-the-shelf solutions that require only small amounts of customization. For your homepage, you can use a good-looking Webflow template, strip out what you don’t need, and ship something that looks good in half a day.</li>
<li>Avoid cargo-culting things that “real companies do” but don’t affect whether customers will purchase your product. Your company doesn’t need a website unless potential customers will actually look it up. Your website doesn’t need a team page unless potential customers care who the team is.</li>
</ul>
<p>It’s not an exaggeration to say I could have saved literally years of effort by building less before selling. If you can use prioritization to spend less time building and more time finding and talking to customers, you’ll put your company in a much better position to succeed.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>No distribution, no dice</title>
      <link>https://www.zeptonaut.com/posts/no-distribution-no-dice/</link>
      <pubDate>Wed, 07 Sep 2022 14:21:47 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/no-distribution-no-dice/</guid>
      <description>You should be putting at least as much emphasis on early distribution as early product.</description>
      <content:encoded><![CDATA[<p>One of the biggest changes in how I evaluate startup ideas in the last ten years is that I now place at least as much emphasis on a good distribution strategy as I do a good product.</p>
<p>Distribution is just company-speak for “how do you get new customers?”.</p>
<p>The ideal and most common answer to this question is “people love it so much that they talk about it”, but founders often give little thought as to why people are talking about the company or eager to try it. Unfortunately, most products that people use - even great ones - don&rsquo;t prompt them to gush about the experience to their friends.</p>
<p>An interesting and frustrating trait shared by good distribution strategies is that they’re highly tailored to the products themselves. For example, let’s look at distribution strategies for three very viral consumer companies:</p>
<ul>
<li><strong>Facebook</strong> relied on Mark Zuckerberg’s access to house mailing lists at Harvard and students’ curiosity about what other students were up to. <a href="https://www.theatlantic.com/technology/archive/2019/02/and-then-there-was-thefacebookcom/582004/">The most common “use” of early Facebook was to check other people’s relationship statuses</a>, which has obvious utility on a college campus</li>
<li><strong>Instagram</strong> made it easier to take good pictures on bad phone cameras by applying a filter. Although your filtered photo was uploaded to Instagram, one of the main draws at launch was the ability to share an (Instagram-marked) image to other social media sites like Twitter and Facebook - where your friends actually were. People on those networks would wonder  “what’s that mark on the image” and become Instagram-curious</li>
<li><strong>Discord</strong> knew it was entering an already-crowded voice chat space with Teamspeak. However, the team recognized that they could leverage new technology (WebRTC) to make a browser-based voice chat client (whereas Teamspeak required a download) and bet big on that low onboarding cost. They then used Reddit to target players of specific games and make Discord popular among players of those games, knowing that it would spread due to its multiplayer nature</li>
</ul>
<p>When the distribution strategy is poorly tailored to the product, the result is often that the user feels spammed  (see: Clubhouse spamming you with notifications to invite your friends). When the distribution strategy is well tailored to the product, it almost feels like a  feature (see: Gmail slowly allowing early customers to invite friends while in private beta).</p>
<p>If you’re not already subscribed, subscribing to the <a href="https://www.first1000.co/">First 1000 newsletter</a> is a great way to build a personal playbook of successful early distribution strategies. In short, the newsletter describes how each company it profiles acquired its first 1000 customers. This is useful because the likelihood that a given distribution strategy will work for any startup is low, but the likelihood that some already-used distribution strategy will work for a startup is much higher.</p>
<p>Sometimes, a good distribution strategy relies on adding a missing cofounder or equity partner to your team. This can particularly be the case if your product will rely on &ldquo;big sales&rdquo; that require significant trust or if your product exists in a market where there are natural &ldquo;hubs&rdquo;. As an example, recruiting a few well-known food bloggers as equity/distribution partners for your new meal planning app could make a substantial difference.</p>
<p>To be clear, I’m not saying a good distribution strategy is an excuse for a poor product. Even if you get your product into people’s hands, a poor product creates too strong of a headwind for meaningful growth. However, I do think that a good distribution strategy should be put on the same pedestal as high product quality and that most inexperienced founders put far too much early effort into product and not enough on distribution.</p>
<p>Similarly, I think that your distribution strategy should be developed and tested alongside your product, not after it. A few useful questions to ask yourself when developing this strategy are:</p>
<ul>
<li>How are you going to get your first 5-10 customers?</li>
<li>How are you going to grow from 5-10 customers to 50-60 customers?</li>
<li>Are there any other successful companies that share your target customer? How did they grow?</li>
<li>How are new customers finding out about your product?</li>
<li>Once you’ve saturated a single market (geography, vertical, etc.), how do you gain a foothold in a new market?</li>
<li>How can you gather more information about your distribution strategy before you need to use it?</li>
</ul>
<p>(These numbers are for consumer applications: for B2B applications, you might want to cut them by 5x given the generally-larger customer lifetime value.)</p>
<p>Each of those answers - especially the early ones - should have simple, realistic answers. If any of them seem incredibly daunting, chances are that you have a tough slog ahead. In that case, “can I sell this thing” is probably a bigger existential risk to your company than “can I build this thing”. You should spend more time brainstorming and testing different distribution strategies <em>before</em> sinking significant time and money into building a product.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>What my toddler taught me about management</title>
      <link>https://www.zeptonaut.com/posts/toddlers-management-and-the-illusion-of-choice/</link>
      <pubDate>Wed, 03 Aug 2022 14:40:54 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/toddlers-management-and-the-illusion-of-choice/</guid>
      <description>Toddlers provide the perfect environment to learn about human nature because they&#39;ll throw stuff at you when you make them mad.</description>
      <content:encoded><![CDATA[<p>Raising a toddler has taught me a surprising amount about management.</p>
<p>I realize that probably sounds condescending, but I actually don’t mean it to be at all.</p>
<p>Toddlers are humans showing the first inklings of social behavior. However, unlike adults, they have no shame in showing you how they truly feel, usually by yelling at you or throwing stuff. This tightens the feedback loop when you’re trying to figure out how they tick.</p>
<p>One such insight I gained from my toddler: a few years ago when I was first named a tech lead at Google, I wasn’t given much training. However, I knew that I was supposed to let the engineers on my team choose the projects they worked on. The rationale here seemed sound: people are going to be more effective working on projects they’re personally interested in.</p>
<p>So I gave clarity on an overarching goal for our team and let the other engineers choose projects that brought us closer to that goal, providing input when asked.</p>
<p>To put it succinctly, chaos ensued. The new engineers on the team lacked the necessary context required to choose good projects and our team fell short of its goals.</p>
<p>Furthermore, even <em>they</em> were frustrated: they lacked the context to pick right-size projects and would instead end up with too-difficult ones. This led to a lack of incremental wins and ultimately burnout.</p>
<p>In response, I swung the pendulum the other way: <em>“this is what you’ll be working on”</em>, I proclaimed. The result was equally uninspiring: the engineers ended up working on projects that they didn’t feel interested or invested in.</p>
<p>This was frustrating to me: I tried both approaches and neither worked well. What else could I do?</p>
<p>Now that I&rsquo;m a parent, I can see my mistake clearly. My toddler responds… poorly to commands. He has little sense of what needs to get done in a day, yet has a desperate need to feel control over that day. Complicating matters, if he detects even a whiff of a command he’ll push hard in the opposite direction. Newton’s third law in action.</p>
<p>Here’s the parenting trick: present two or three options that you’d be equally happy with them choosing and let them decide. A few examples you’ll hear often at my house:</p>
<ul>
<li>Do you want to eat grapes or strawberries for lunch?</li>
<li>Do you want to go upstairs to get changed now or in a minute?</li>
<li>Do you want to go to the park with the broken slide or the park with the bumblebee?</li>
</ul>
<p>Using this same principle, engineering managers can let the engineers with the necessary context mostly dictate the set of projects for the team. Then, when a junior engineer needs more work, you give them a few right-size options, some pros and cons of each, and let them decide between those options. </p>
<p>They end up with right-ish difficulty projects that provide meaningful opportunities for growth, but maintain that important sense of ownership over their work.</p>
<p>Now as these junior engineers grow, it’s critical to allow them to propose projects of their own. Doing so builds useful skills in scoping, planning, and technical communication. However, relying on this “illusion of choice” for a while gives them an opportunity to build context and confidence.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Where are good startup ideas born?</title>
      <link>https://www.zeptonaut.com/posts/good-startup-ideas/</link>
      <pubDate>Fri, 22 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/good-startup-ideas/</guid>
      <description>How do you come up with a startup idea that&#39;s both ambitious and tractable?</description>
      <content:encoded><![CDATA[<p>Once upon a bubble, founders coveted their startup ideas like winning lottery tickets.</p>
<p>Since then, the landscape has inverted and the common wisdom is that “ideas are worthless and execution is everything”. This is, of course, complete malarky: Elon wouldn’t be Elon if he had chosen to build an iPhone app that reminds you to feed your dog.</p>
<p>The obvious truth is that a good startup idea is a necessary but not sufficient ingredient for success in the startup journey. A poorly thought-out idea is like starting a trip without a route: there’s a chance that you’ll be happy about where you end up, but you’re also not doing yourself any favors.</p>
<p>Coming up with a good startup idea is a three step process. You need to find a problem, find a way in which technology can help solve that problem, and then analyze your solution to see if you can build a good business around it. When it invariably turns out that your idea sucks, there’s a fourth step where you soak that idea with gasoline and light it on fire.</p>
<p>Find a problem. Find a solution. Analyze the business. That’s all that it takes. Now, you just have to do this over, and over, and over again until you stumble across a few ideas that make you wonder, “Huh &ndash; could that actually work?&quot;</p>
<p>





<figure>
    <img alt="A fire."
         title="Your keepsake box for your roommate&#39;s app ideas."
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="1800"
         style="aspect-ratio: 1800 / 1600"
         
           src="https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/2022-04-21-pit_of_no_return.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    <figcaption>Your keepsake box for your roommate&#39;s app ideas.</figcaption>
</figure>

</p>
<p>Creating startups and shaping the future is an inherently creative process. It turns out that discarding promising raw material until you find something interesting is very common among creative endeavors. Ken Burns, the famous American documentarian, uses a beautiful phrase to describe the importance of unused ideas: “honoring the negative space of creation”. In his words, “It takes 40 gallons of sap to make one gallon of maple syrup.” He was alluding to the fact that every second of used footage in his documentaries corresponds to 40 seconds of promising but unused footage.</p>
<p>For startups, this might mean that you can expect to come up with 40 startup ideas to find one that’s promising. Actually, you’re not Ken Burns. Let’s make it 80.</p>
<p>Of the skills that you need to find a good startup idea, the best one to learn first is probably the one that you <em>use</em> last in the process: analysis. After all, it doesn’t make much sense to set out on an elephant hunt if you don’t even know what an elephant looks like. So without further ado:</p>
<h1 id="what-makes-a-good-business">What makes a good business?</h1>
<p>





<figure>
    <img alt="A giraffe in crosshairs."
         title="An elephant hunt nears its unfortunate end."
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="1538"
         style="aspect-ratio: 1538 / 1668"
         
           src="https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/2022-04-21-giraffe_crosshairs-1.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    <figcaption>An elephant hunt nears its unfortunate end.</figcaption>
</figure>

</p>
<p>Entire volumes have been written about this: I’m not going to rewrite them poorly here.</p>
<p>Wait &ndash; actually I am. Here&rsquo;s my short, short version of what makes a good software business:</p>
<ol>
<li>Is there a real, pressing problem?</li>
<li>Does your business solve the problem in a significantly better way than the alternatives?</li>
<li>Do you have a realistic plan to grow your business?</li>
<li>Is the total addressable market large enough?</li>
<li>Once your business starts to succeed, is there something that will prevent competitors from just copying you?</li>
</ol>
<p>If the answer to any of those is “no”, it’s probably not a good idea.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>Bear in mind that the above list certainly isn’t comprehensive. Theranos answered “yes” to all of these, but failed because the thing couldn’t actually be built. WeWork answered “yes” to all of these, but failed because there weren’t real economies of scale. If your idea answers “yes” to all of those questions but requires a billion dollars to get off the ground with no intermediate validation that might be used to secure funding, you have &ndash; you guessed it &ndash; a bad idea.</p>
<p>My advice to help develop your sense of what makes a good startup:</p>
<ul>
<li>Listen to the <em>Acquired</em> podcast. In each episode, they dig into how a company was built and then assess the company’s prospects going forward. This podcast has been immensely helpful for me in evaluating the prospects of growth and late stage startups.</li>
<li>Read <em>The Lean Startup</em> by Eric Ries. While it’s fiercely debated whether this book’s frugal prescription is actually realistic nowadays, I still think that it’s a great tool to get you into a mindset of scrappily evaluating startup ideas.</li>
<li>Read Paul Graham’s essays on his website. (I recommend <em>Do Things That Don’t Scale</em> as a first read.) Paul Graham was a founder of the YCombinator accelerator and has mentored many successful startups in their early stages.</li>
<li>Read Andrew Chen’s book <em>The Cold Start Problem</em>. Andrew Chen took his experience on the growth team at Uber and as a VC at Andreesen Horowitz and wrote a wonderful primer on how to kickstart marketplace businesses.</li>
<li>Read Andrew Chen’s blog, which is similarly insightful.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></li>
<li>Read Hamilton Helmer’s <em>7 Powers</em>, which is an incredibly useful framework for assessing whether companies are likely to eventually get their profits competed away.</li>
</ul>
<p>At some point while doing these things, you might realize that you have the vocabulary to describe exactly why your roommate’s app idea is so terrible. That’s probably a good sign.</p>
<p>Equipped with your new superpowers of analysis, you can move on to understanding:</p>
<h1 id="how-does-software-solve-problems">How does software solve problems?</h1>
<p>Your goal here should be to develop some sort of Swiss Army knife of “how does software provide value in the world”. A few examples:</p>
<ul>
<li><em>Software can aid with discovery</em> (Airbnb, Google, Uber): Take an activity that people are doing or would like to do and help find other people that want to participate in that activity.</li>
<li><em>Software can be a trusted 3rd party</em> (Airbnb, Wise, Uber, Kickstarter): By acting as the trusted broker between two other parties, you can facilitate exchanges that might otherwise be too risky to take place.</li>
<li><em>Software can provide something faster or cheaper than non-tech-enabled competitors</em> (Gusto, Vouch)</li>
<li><em>Software can centralize a hard process that lots of companies are already doing poorly on their own</em> (Plaid, Stripe, Vanta): Lots of companies can pool resources through yours to do something hard well instead of each company competing in a silos to see who can do that thing least poorly.</li>
</ul>
<p>The same resources I listed in the previous section should go a long way towards helping you develop a sense of how software solves problems. The key here is that, as you hear smart people dissect different businesses, you should start to notice patterns in how those businesses provide and capture value. The more concisely you can use words to describe those patterns, the more effective your brain will be at using those patterns to solve new problems.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></p>
<p>If you know how software provides value, then you just have to:</p>
<h1 id="find-a-problem">Find a problem</h1>
<p>There are obviously no hard rules about “how to find interesting problems”, but a few things that I’ve found very helpful in the past are:</p>
<ul>
<li>Reading a book about an unfamiliar field</li>
<li>Reading books that take place in different worlds (science fiction / fantasy)</li>
<li>Become deeply integrated into a technology/culture “wave”</li>
<li>Traveling to new places</li>
<li>Going to a conference for an unfamiliar field (I haven’t done this myself, but have heard it recommended by others)</li>
</ul>
<p>Looking at these, there’s a clear pattern: innovation is almost always the result of applying techniques from one domain to solve problems in another. It’s a little more like “domain arbitrage” than it is coming up with something new: you’re just assembling familiar components in unfamiliar ways.</p>
<p>There are pitfalls to this approach, though. Trying to solve a problem in a field you’re not yet familiar with is also a recipe for falling prey to the Dunning-Kruger effect, where you’re overconfident in your ability to solve a problem precisely because you know so little.<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> Because of this, it’s important to approach any problem you stumble upon with a great sense of humility and an earnest desire to learn. Only after you’re knowledgeable about the problem should you feel vaguely qualified to build a solution.</p>
<p>Tons of startup ideas revolve around using technology to solve problems that have existing but maybe suboptimal software solutions. In my opinion, this is one of the toughest ways to build a business.</p>
<p>To illustrate why this might be hard, imagine that you sell shovels in a frontier town. Because you&rsquo;re the only seller in the market, you just have to let people know you exist in order for your business to take off. If you sell shovels in Farmville, USA between the Tractor Supply and the Home Depot, your shovels are going to have to be God’s gift to digging in order to attract customers. Even then you may find yourself in a hole that’s hard to escape.</p>
<p>It’s also entirely possible to build a successful new product ignoring all of this advice: as an example, I don’t think there was any particular reason why Webflow couldn’t have been built 5 years earlier. However, this approach is certainly harder. Vlad Magdalin, the founder of Webflow, had to found the company three times and work for over 10 years to crack the formula for no code website building. Heck, just look at the Hey.com and Superhuman teams trying to break into the email space with (what I believe) are two really interesting products. In both cases, it took talented teams years of building before they had something with even the minimum expected feature set to put in front of customers. And it’s not yet clear whether those teams will ultimately succeed.</p>
<p>A good startup idea can act as a strong tailwind to your startup, amplifying all of fundraising, hiring, and selling that will be necessary to grow. If you&rsquo;re going to put years of your life into making your startup idea a reality, why not do so with the wind at your back?</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>#5, &ldquo;Is there something that will prevent competitors from just copying you?&rdquo;, is probably negotiable as long as you keep your ambitions modest enough to fly under the radar.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>If you can get past the full screen, unclosable “Please subscribe!” message, there’s actually good content there. Good luck.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p>This process of “consolidating lots of information into concise patterns” is often called “building mental models”. The efficacy of mental models is what separates experts in a field from novices &ndash; whether that field be chess or chemistry. The Barbara Oakley&rsquo;s course <a href="https://www.coursera.org/learn/learning-how-to-learn"><em>Learning How to Learn</em></a> has a ton of great information about this process and I highly recommend it if you’re interested.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4" role="doc-endnote">
<p>In a surprising reversal of stereotypes, I actually find programmers to be much <em>more</em> susceptible to this bias than MBAs.&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></content:encoded>
    </item>
    
    <item>
      <title>Why is selling software so weird?</title>
      <link>https://www.zeptonaut.com/posts/selling-software-is-weird/</link>
      <pubDate>Wed, 13 Apr 2022 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/selling-software-is-weird/</guid>
      <description>Building software looks a lot like building a house, but selling the two couldn&#39;t be more different.</description>
      <content:encoded><![CDATA[<p>If you squint enough, building software looks a lot like building a house.</p>
<p>In both cases, you start with a problem and Frankenstein together various components using rules of thumb until you have something that looks like a solution.</p>
<p>Because the crafts look so similar, you&rsquo;d be forgiven if you thought the business models behind building software and houses were similar. They couldn&rsquo;t be more different.</p>
<p>When you’re building a house, you have a pretty good idea of how many people that house will impact. The market has already demonstrated that they’ll pay for a roof and a walk-in shower and a state of the art heated toilet seat. If you erect a sturdy 4 bedroom, 2 ½ bathroom house with these amenities in a desirable neighborhood, you can rest easy knowing that you’ll be able to sell it.</p>
<p>This is not how software works.</p>
<p>The main problem here is that houses and software have wildly different marginal costs. If I build a house and my neighbor really likes it and wants to live in a house that’s exactly the same, it will cost them almost as much to build as it cost me. Sure, they might be able to save a few thousand dollars on architectural fees, but they’ll still need wood, wires, and boatloads of time from skilled plumbers, electricians, and carpenters to assemble those raw materials into something resembling a house. Marginal cost is just the cost to produce one more unit of something - in this case, one more house.</p>
<p>Contrast this with software, which lives in the realm of often-near-zero marginal costs. I can’t make a living building Zoom for someone because Zoom already did that. The marginal cost to Zoom of onboarding a new customer is almost zero, whereas the fixed cost to me of recreating Zoom is astronomical.</p>
<p>Building houses is a great business because those high marginal costs for each new house are paid to you. The work you do correlates pretty linearly with the value you provide, providing you with a steady stream of income and feedback that the thing that you’re doing is actually useful. The trade-off is that it’s hard to gain much <em>leverage</em> in your work, with leverage meaning something like “how much impact can I have for every hour I work”. Whether you work on a small project with a small impact with a small team or a big project with a big impact with a big team, the amount of impact per person might vary by 1x or 1.5x or even 10x, but the physical nature of the work makes it hard to stretch the impact much beyond that.</p>
<p>Software is a great business because, if you can build something that’s useful and provides $10/month of value to someone, it’ll probably cost you a lot less than $10/month to provide that value to a second person. Multiply that by 1,000 and you’re getting paid to do a full time job, even if you only work 5 hours per week. Multiply that by 10,000 and you can retire in a few years. It’s an extremely high leverage business.</p>
<p>This makes software a weird anomaly. Paging back through history, there have been very few opportunities for near-zero marginal cost goods. Probably the closest parallel to present day software in history is publishing companies, where additional prints are cheap compared to the cost of creating the content in the first place.</p>
<p>Unfortunately, there are three significant downsides to software’s low marginal cost structure:</p>
<p>First is that software takes a lot of time to write up-front. By the time you’ve signed up your first customer at $10/month, there’s a good chance you’ve spent 100s or 1000s of hours writing that software. Low volume software is not a good business to be in.</p>
<p>The second downside of the “high-leverage” software model is that unless you aggressively seek out feedback, you’ll probably realize that your software sucks only <em>after</em> you’ve built it and can’t find a customer. The digital nature of software makes it <em>extremely</em> easy to ignore pesky distractions like customers right up until the moment you need their money to buy that expensive Icelandic yogurt you love.</p>
<p>The third downside is that, unless you can differentiate your product from what already exists, it’s going to be hard to find a foothold in the market. Given how many software products already exist, that’s a high hurdle to clear.</p>
<p>The distribution of “value created by people building new houses” is probably some sort of a normal distribution that’s anchored in the cold-hard reality of the physical world:</p>
<p>





<figure>
    <img alt="a normal distribution of value created versus probability of outcome"
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="2100"
         style="aspect-ratio: 2100 / 1950"
         
           src="https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_new_home.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>There&rsquo;s almost no one in this distribution creating zero value, but there&rsquo;s also almost no one creating hugely lopsided value.</p>
<p>Compare this with &ldquo;value created by people building new software&rdquo;:</p>
<p>





<figure>
    <img alt="very left-skewed distribution of value created versus probability of outcome, with a few outliers on the far right"
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="2100"
         style="aspect-ratio: 2100 / 1813"
         
           src="https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/2022-04-12-impact_of_new_software.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>Here, you have the vast majority of people building new software creating no value, some people creating a modest amount of value, and a few people creating <em>tons</em> of value. This is what&rsquo;s known as a power law distribution: a very small number of outliers account for the vast majority of the impact.</p>
<p>If you&rsquo;re building software - particularly <em>new</em> software that hasn&rsquo;t already found a market -this underscores the importance of being good at what you do: if you&rsquo;re just average (or more precisely, just median), you&rsquo;re creating zero value.</p>
<p>This is also why this blog focuses on how to build <em>successful</em> software: for each few percentile you move to the right on that curve of outcomes, the value you&rsquo;re creating increases exponentially. To achieve this, you need to not only build high quality software but also understand adjacent ideas like identifying promising distribution channels, soliciting and incorporating customer feedback, and building defensible moats around your business.</p>
<p>These are the things that can transform a “software engineer” into “someone who can solve problems using software”. The latter is a heck of a lot more fun.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Blockchains will maybe not destroy the planet</title>
      <link>https://www.zeptonaut.com/posts/blockchains-will-maybe-not-destroy-the-planet/</link>
      <pubDate>Fri, 18 Mar 2022 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/blockchains-will-maybe-not-destroy-the-planet/</guid>
      <description>Cryptocurrency may be destroying the planet, but it could also help save it.</description>
      <content:encoded><![CDATA[<p>Today is March 18, 2022 and by now, you&rsquo;ve probably formed <em>some</em> opinion about cryptocurrencies and NFTs. (Together, I&rsquo;ll lazily refer to these technologies as &ldquo;blockchains&rdquo;.)</p>
<p>To be very, very clear, there&rsquo;s a <em>lot</em> not to like about blockchains: it&rsquo;s estimated that Bitcoin - the most popular blockchain -  uses about half a percent of the world&rsquo;s energy: the same as the country of Finland. If you&rsquo;re in the camp of &ldquo;this thing is fairly useless&rdquo;, then the horrific externalities of Bitcoin mining clearly outweigh the minuscule benefits.</p>
<p>For the past few months, I&rsquo;ve been trying to suppress my own quickly-formed negative opinions about blockchains. For the next three minutes, I&rsquo;d ask you to do the same: fear not, you can pick your opinions back up at the bottom of the post.</p>
<p>You can basically think of blockchains as &ldquo;a distributed database on a bunch of people&rsquo;s computers&rdquo;. To answer &ldquo;are blockchains harmful to the environment&rdquo;, let&rsquo;s look at how much energy each blockchain uses to save something new to that database - commonly known as a transaction.</p>
<p>The Crypto Carbon Ratings Institute found that Bitcoin used a staggering 17.2 megawatt hours of energy to perform a single transaction. That is&hellip; alarming.</p>
<p>However, that number is highly blockchain-specific. Ethereum, the second most popular blockchain, uses about 1000x less energy per transaction with a still-much-too-large 37.6 killowatt hours of energy per transaction. That equates closely with an amount of energy that the EPA says equates to a gallon of gasoline (33.7 kWh). Ethereum is also working hard to migrate to a new technology that&rsquo;s about 2,000x more energy efficient.</p>
<p>Solana, a newer blockchain that&rsquo;s growing quickly in popularity, uses 10,000x less energy per transaction than Ethereum - only .17 Wh per transaction. That equates to about half a Google search (0.3 Wh) or leaving an LED light bulb on for one minute. In a year, Solana uses about as much energy as 1000 U.S. households. That&rsquo;s still something, but it&rsquo;s squarely in the realm of &ldquo;we accept that useful and ethical things can use this much energy&rdquo;.</p>
<p>The important takeaway from these numbers is that high energy use may be an inherent part of some blockchain <em>implementations</em> - like Bitcoin - but it&rsquo;s not an inherent part of the underlying <em>idea</em> of blockchains. The two can be separated. The details matter tremendously here: there&rsquo;s a 100,000,000x difference (8 orders of magnitude) between the energy requirements for a Bitcoin transaction and a Solana transaction.</p>
<p>To say &ldquo;blockchains use too much energy&rdquo; is a little like saying &ldquo;Amazon employees have amassed too much wealth&rdquo;: are you talking about Jeff Bezos or Joe the warehouse picker?  The imagined relative wealth disparity between those two ($179B vs. $1,769) is the same as the difference in energy consumption between Bitcoin and Solana transactions. The details are paramount.</p>
<p>Bitcoin&rsquo;s energy usage is a big problem, especially because cryptocurrencies are self-perpetuating in nature: the current Bitcoin miners and token holders have an enormous incentive to maintain the status quo. If there&rsquo;s a way to reduce Bitcoin&rsquo;s environmental impact, it&rsquo;s certainly above my paygrade.</p>
<p>But as someone evaluating whether Solana, for example, might be useful to solve real problems in the world, Bitcoin&rsquo;s energy costs are irrelevant. The two come may come from the same ancestor, but they&rsquo;re worlds apart.</p>
<p>With that being said, I agree that just because blockchains aren&rsquo;t <em>bad</em> doesn&rsquo;t make them necessarily <em>good</em>.</p>
<p>The reason I&rsquo;m interested in blockchains is that they&rsquo;ve created a scenario where enormous pools of resources have been amassed to do something (consume computational resources and therefore energy) that normally costs money. The Bitcoin community has poured millions and millions of dollars into finding more efficient ways to do that thing. And they&rsquo;ve done so not out of the goodness of their hearts, but because they&rsquo;re incentivized to.</p>
<p>If you care about the climate and this doesn&rsquo;t pique your interest, it should: if it were possible to tweak the incentive structure of a blockchain such that the thing that people are aligned to do is &ldquo;capture carbon&rdquo; instead of &ldquo;use energy&rdquo;, then you would have effectively created an economy around carbon capture that doesn&rsquo;t rely on governments to enact carbon taxes. (Regardless of whether you think governments enacting carbon taxes is <em>the right thing</em>, I expect that we can at least all agree that it&rsquo;s an enormous hurdle worth avoiding if the end result is the same.)</p>
<p>In my opinion, some of our society&rsquo;s biggest problems come down to situations where an individual&rsquo;s incentives are misaligned with the greater good: providing affordable health care and better education, combating climate change, and building more affordable housing represent different flavors of this same problem.</p>
<p>I won&rsquo;t tell you that &ldquo;blockchains are the solution to all of these problems&rdquo; because I frankly don&rsquo;t know if they are. However, blockchains do have incentive-aligning traits that make them an interesting tool worth learning about.</p>
<p>My big ask: if you find yourself in a conversation where the other person bemoans the environmental impact of blockchains, cryptocurrency, or NFTs, tell them it&rsquo;s a little more nuanced and point them my way.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Dreams and risks</title>
      <link>https://www.zeptonaut.com/posts/dreams-and-risks/</link>
      <pubDate>Tue, 08 Mar 2022 05:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/dreams-and-risks/</guid>
      <description>In order to get investors and other employees on board, it pays to be clear-headed about the exact ways in which you&#39;re delusional.</description>
      <content:encoded><![CDATA[<p>When a new company gets started, there&rsquo;s usually some big dream in mind. &ldquo;Open a 5 star resort on the moon!&rdquo; &ldquo;Make a brain implant that teaches dogs to talk!&rdquo;. Dream big, folks.</p>
<p>That destination is just that, though: <em>a destination</em>. There are a whole slew of hurdles that stand in the way of that company and its dazzling future. If you&rsquo;re evaluating the merit of investing your time or money in a company, it&rsquo;s often useful to ask yourself &ldquo;What things do I need to believe in order for this investment (of time or money) to not make me look like a big fat idiot in the future?&rdquo;</p>
<p>Take Google, for example. When they were grad students at Stanford, Larry Page and Sergey Brin codeveloped the PageRank algorithm to better rank search results on the internet, eventually dropping out to found Google. In order to believe that PageRank could form the basis of a successful company, you had to believe:</p>
<ol>
<li>The algorithm generated meaningfully better search results than the existing search engines could</li>
<li>The algorithm could actually be implemented and run at &ldquo;web scale&rdquo;. (Admittedly a lot smaller in 1998 than today.)</li>
<li>The algorithm wouldn&rsquo;t just be copied by the existing search engines behemoths like Yahoo or Alta Vista. (<a href="https://patents.google.com/patent/US6285999B1/en">Thankfully, a patent on the algorithm helped out here.</a>)</li>
<li>More and more people would use Google because it was a better search engine</li>
<li>That better search engine could be successfully monetized and turned into a good business</li>
<li>The money generated from successful monetization and the data generated from increased usage of the search engine could then be used to produce a meaningfully better search engine, feeding back into step 5
categories:</li>
</ol>
<p>If you&rsquo;re starting a company, there&rsquo;s a good chance that you need to get buy-in from both potential hires and potential investors. Coming up with an accurate list of &ldquo;beliefs&rdquo; or &ldquo;hypotheses&rdquo; to be tested is a great first step towards getting that buy-in: it at least shows others that you&rsquo;re realistic about the challenges you face.</p>
<p>If you have some pedigree, a cofounder, a decent tech-enabled business idea, a vague notion of how to bring that idea to fruition, and the knowhow to pitch that idea, then your company is probably worth on the order of a couple hundred thousand dollars these days. Congratulations!</p>
<p>However, maybe more importantly, you now have some very concrete steps to increase that valuation. The reason that your company is worth what it is instead of the gazillion dollars that it would be worth if all those hypotheses were true is that the company&rsquo;s value is discounted to account for the key risks you face.</p>
<p>To increase your valuation, you just have to take the easiest hypothesis to test and prove it. Going back to the Google example, if Larry and Sergey indexed a single &ldquo;segment&rdquo; of the web like stanford.edu, they have the opportunity to reduce the risk for two of the hypotheses:</p>
<ul>
<li>They proved they have the know-how to build a version of Google that runs at sub-web scale</li>
<li>They can do some very basic testing where they ask 20 people which search results they prefer for a Stanford-related query, Google or Alta Vista?</li>
</ul>
<p>This certainly doesn&rsquo;t guarantee the success of their company, but it&rsquo;s likely enough to drive up their valuation significantly - say, from $200,000 to $1 million.</p>
<p>With that higher valuation, they can seek outside investment in their company, selling 20% of the company to raise $200,000.</p>
<p>With those funds, they could:</p>
<ol>
<li>Acquire additional hardware, prove that the algorithm can work at web scale, and release a beta version of the search engine</li>
<li>Hire a patent attorney to help them file for a patent on their algorithm</li>
</ol>
<p>&hellip; and now the company is really off and running. They&rsquo;ve greatly reduced or eliminated many of the early-stage existential risks to the company  (hypotheses 1-3) and are in a great position to test their growth strategy (hypothesis 4).</p>
<p>They&rsquo;ve also provided enough signal to unlock a new tier of investors and early-stage employees by demonstrating that the company has a real shot at success: it wouldn&rsquo;t be stretch to say that nowadays such a company might be able to raise $10 million in funding.  The later hypotheses are obvious harder to test, but thankfully the company has more human and capital resources at its disposal to test them. It can now sell the same portion of the company that it sold before (20%) but for much more money ($2 million instead of $200,000).</p>
<p>With that capital, they can hire someone with better knowledge of how advertisers allocate their resources and build an effective advertising business to help them monetize searches. They can also hire someone knowledgeable about growing startups to help identify obstacles that are hindering growth.</p>
<p>In the end, this method of company building looks a little like this:</p>
<p>





<figure>
    <img alt="Diagram of company building"
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3046"
         style="aspect-ratio: 3046 / 1614"
         
           src="https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/2022-03-09-screen-shot-2022-03-09-at-12-16-44-pm.png?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>One of the reasons that this framework is effective is that there&rsquo;s often a gaping chasm between &ldquo;What&rsquo;s the next easiest hypothesis to test?&rdquo; and &ldquo;What should I do next that makes this company look more like a real company?&rdquo;. Early-stage investors tend to care a lot more about the former than the latter: &ldquo;making a company look real&rdquo; by renting an office and paying for health insurance is easy given sufficient resources, but you&rsquo;ll inevitably run aground if you try to scale a company built on flawed underpinnings.</p>
<p>Another reason that this framework is effective is that investors <em>always</em> want to know &ldquo;Why is this money going to help you succeed?&rdquo;. This plan ensures you have a clear answer: &ldquo;file for a patent&rdquo;, &ldquo;buy hardware to bring our prototype from Stanford-scale to web-scale&rdquo;, etc.</p>
<p>By systematically identifying the hypotheses that underpin your company, proving those hypotheses, and leveraging the resources unlocked from that newly reduced risk profile, you should hopefully be able to build that 5 star resort on the moon while not looking like a big fat idiot. Happy launch day!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>That code&#39;s going to get run like three times</title>
      <link>https://www.zeptonaut.com/posts/you-re-probably-overbuilding-when-testing-out-ideas/</link>
      <pubDate>Tue, 01 Mar 2022 05:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/you-re-probably-overbuilding-when-testing-out-ideas/</guid>
      <description>Seriously - just do the thing manually until it becomes painful.</description>
      <content:encoded><![CDATA[<p>If you’ve ever worked on a new tech product, feature, or service, the following scenario will probably sound familiar to you:</p>
<blockquote>
<p><strong>Shepherd:</strong> “I’m sick and tired of always having to be the one that brings the cows in from pasture. I wish I could get someone else to do that.”</p>
<p><strong>Friend:</strong> “Maybe you could call and ask Anna and Joe’s daughter if she’s willing to help out a few times per week.”</p>
<p><strong>Shepherd:</strong> “No no, I want to solve this problem for others too. Let’s build a mobile marketplace that matches up shepherds with people willing to help them take care of their animals.”</p>
<p><strong>Friend:</strong> “I don’t know, seems a little overcomplicated to me. Can’t you just pin up a job posting at the tavern asking if anyone’s willing to help bring the cows in, then call around and ask a few other shepherds if they’re willing to help chip in if the new hire brings their cows in too?”</p>
<p><strong>Shepherd:</strong> “No no no, I want to fix this for everyone. I want to start something. We’ll get flooded with requests from other people and won’t be able to keep up unless we automate this thing.”</p>
<p>… and so on.</p>
</blockquote>
<p>By the end of this, the shepherd has spent a year hiring a team to build out a slick mobile application that matches up shepherds with people that will help them… and there are 10 shepherds who know about it, but 80% of them don’t use it because it doesn’t really match what they need. The shepherd has only talked to 2 of those people, and he’s not really sure <em>why</em> it doesn’t match their needs, but it sure is frustrating.</p>
<p>I would say this describes about… 99% of the new products or features that I write. I’m the shepherd here.</p>
<p>My new rule of thumb is that, until proven otherwise, I assume that all code for new products will get executed many, many fewer times than can possibly justify automating the task.</p>
<p>My pitch to the shepherd here: text a few of your friends, find people that want help, find someone who’s willing to help. Get out a pen and paper and figure out how to split the helper’s schedule. Text out the schedules to your friends. Rinse and repeat, get feedback on why your schedules are rotten, fix them. If you start to feel like sending a particular type of text is really repetitive and a giant waste of your time, <em>then</em> maybe it’s time to automate it.</p>
<p>Zipping back to the present, I genuinely believe that experienced engineers from big tech companies make <em>worse</em> technical decisions in early-stage products than people who have no idea what the heck they’re doing. We have so many preconceived notions of what counts as “real engineering” because it’s required to scale successful services (fancy databases, backends running in the cloud) that we completely forget that 99% of new services aren’t successful. For new things, you should be spending more time figuring out how to <em>not</em> build things (e.g. faking automated services through manual work) than you spend actually building them. Only automate processes when the manual part gets painful.</p>
<p>In my experience, the real villain in this story is “friction” - basically, however much harder something is to use because you didn’t do it the “real” way. In the above story, it’d be easy to convince yourself that the reason that shepherds/helpers aren’t signing up is because there’s no website to do it at, or there’s too much delay in receiving their schedule because it’s not automated, or any other way that a multi-billion dollar marketplace might be better than you texting some friends.</p>
<p>However, I almost always find that:</p>
<ul>
<li>Especially among early adopters, friction is less of a deterrent than you probably think it is</li>
<li>Friction is more of a deterrent when you’re not talking directly to prospective customers, which you probably should be at the start</li>
<li>While friction can be a deterrent, it can be mitigated by being upfront with customers about the early state of your product and making up for a poor quality product with customer service that’s drastically better than what they’d receive elsewhere</li>
<li>Friction can be greatly reduced through manual work (e.g. responsive texting / emailing)</li>
</ul>
<p>The problem is that, in rare cases, friction actually <em>is</em> a deterrent that prevents you from meaningfully testing your product. But that&rsquo;s the exception, not the rule.</p>
<p>The seminal article on this whole space is Paul Graham&rsquo;s <a href="http://paulgraham.com/ds.html" title="Do Things that Don't Scale"><em>Do Things that Don&rsquo;t Scale</em></a> <em>-</em> if you build new things and haven&rsquo;t read it, it&rsquo;s definitely worth a read. However, I read that article when it came out and still made all the mistakes that it warns against. Repeatedly. Builder beware.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Never reach out twice with the same value proposition</title>
      <link>https://www.zeptonaut.com/posts/never-reach-out-twice-with-the-same-value-proposition/</link>
      <pubDate>Fri, 25 Feb 2022 05:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/never-reach-out-twice-with-the-same-value-proposition/</guid>
      <description>If you&#39;re going to show up uninvited to someone&#39;s inbox, make sure to bring an hors d&#39;oeuvre.</description>
      <content:encoded><![CDATA[<p>When I joined Channels two years ago, I knew next to nothing about sales. Now, I know just just the <em>teensiest</em> bit more than that. Basically everything that I&rsquo;ve osmosed (osmoted? osmoosed?) has been from our company&rsquo;s founder, Curtis Wiklund. <a href="https://curtiswiklundphoto.com/weddings/">He and his wonderful wife Jordin are incredibly talented</a> and ran a successful photography business together for years before he founded Channels. It turns out that operating your own small business is a great motivator to develop sales skills.</p>
<p>One basic lesson that he&rsquo;s taught me is to <em>never reach out twice with the same value proposition.</em></p>
<p>To illustrate what I mean, imagine you receive this email from an interior decorator you&rsquo;ve considered working with:</p>
<blockquote>
<p>Dear Jenny,</p>
<p>I was reaching back out to you to ask if you&rsquo;d had any further chance to consider working together. I have lots of happy clients and would love to work with you to craft your perfect home.</p>
<p>Thanks,<br>
George</p>
</blockquote>
<p>That&rsquo;s a very polite email! Thanks George.</p>
<p>Unfortunately, that email probably doesn&rsquo;t meaningfully alter your chances of hiring him beyond &ldquo;if I just forgot, maybe I&rsquo;ll follow up now&rdquo;.</p>
<p>Furthermore, you&rsquo;ll probably tolerate one or two of those emails before you wish George would shut it and go away.</p>
<p>That&rsquo;s fine, but George can do better. Now, how would you feel if you received this email instead?</p>
<blockquote>
<p>Dear Jenny,</p>
<p>Loved chatting with you the other day!</p>
<p>I&rsquo;m reaching back out because an upholstery brand that I think you&rsquo;d really love (<a href="http://www.hickorychair.com/" title="Hickory Chair">Hickory Chair</a>) is having their biggest sale of the year right now. I&rsquo;d be happy to stop by to see if any of their items might help solve that pesky living room seating issue you mentioned.</p>
<p>As an example, here&rsquo;s a piece I thought you might like:</p>
<p>





<figure>
    <img alt="A picture of a couch"
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="1684"
         style="aspect-ratio: 1684 / 1100"
         
           src="https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/2022-02-25-screen-shot-2022-02-25-at-2-00-55-pm.png?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>Thanks,<br>
George</p>
</blockquote>
<p>Now I don&rsquo;t know about you, but I&rsquo;m <em>much</em> more likely to reach out to schedule a meeting after that second email. It&rsquo;s polite, recognizes that George listened during the last meeting, and offers a meaningfully different value proposition than he put forth in your initial meeting.</p>
<p>Assuming that George&rsquo;s barometer of what appeals to you is correct, he can probably reach out with <em>many</em> more of those emails before you get annoyed. They&rsquo;re thoughtful and likely take him more effort to craft than it takes you to read them: it&rsquo;s a little like having a free personal content curator working just for you.</p>
<p>It takes real effort to find that new value proposition. Often, it requires some combination of passive effort (keeping your eyes open for something that matters to that person) and active effort (passing along that new value proposition when you find it). However, it&rsquo;s that very effort that demonstrates to the recipient that you care and makes the pitch much more effective.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>How to find founder/market fit</title>
      <link>https://www.zeptonaut.com/posts/push-your-unfair-advantages/</link>
      <pubDate>Thu, 24 Feb 2022 05:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/push-your-unfair-advantages/</guid>
      <description>You don&#39;t have to fight fair when starting a company: choose a customer base where you already have a leg up.</description>
      <content:encoded><![CDATA[<p>When Whitney Wolfe founded the dating app Bumble in 2014, she returned to her alma mater of Southern Methodist University and signed up as many of her former sorority sisters as possible for her app. Her thesis was that a dating app that put power in the hands of women would be appealing to sorority sisters and that a pool of sorority sisters on the app would help drive interest from others.</p>
<p>When Mark Zuckerburg started Facebook, he was a student at Harvard that made a social website for other students at Harvard. Only after reaching a critical mass of Harvard students did he expand the site to other elite universities, where the site benefitted from the halo effect of already having succeeded at one of the most prestigious universities in the world.</p>
<p>The restaurant reservation startup Tock (recently acquired by Squarespace) was cofounded by Nick Kokonas, the co-owner of probably the most prestigious restaurant group in Chicago. He was able to bootstrap the platform with his own restaurants and benefit from the halo effect of those restaurants as he recruited others onto the platform.</p>
<p>What do each of these stories have in common?</p>
<p>In each of these, the founder of the startup pushed an unfair advantage to gain market insight and distribution for their startup. If you or I were to try and compete with that founder given an equally good product and market insight, we almost certainly would have failed because we lacked the key advantage that they leveraged.</p>
<p>Some unfair advantages are obvious (owning the most prestigious restaurant in Chicago) while others are less so (being a former sorority sister). However, it&rsquo;s critical to have a good fit between the product you&rsquo;re trying to bring to market and the advantages you have. Otherwise, you&rsquo;ll be on equal footing with your competitors and your chance of succeeding falls dramatically.</p>
<p>People often discount their own unfair advantages because they just feel like uninteresting characteristics or pieces of backstory. However, it&rsquo;s this very fact that makes these advantages so powerful: they&rsquo;re such an innate part of &ldquo;who you are&rdquo; that it&rsquo;d take another person years or decades to try to mimic those advantages.</p>
<p>Furthermore, people often further discount those unfair advantages that seem unrelated to entrepreneurship and startups. I&rsquo;d posit those &ldquo;unrelated&rdquo; advantages are <em>the most important</em> ones to leverage because it&rsquo;s less likely that another startup founder has already moved into the space. It takes an incredible level of technical prowess and market insight to start a successful API-only software product in 2022 because the overlap between entrepreneurs and software engineers is massive. On the other hand, if you&rsquo;re a stay at home mom that has unique insight into challenges that other stay at home moms might face, there&rsquo;s probably a lot more problem space left to explore.</p>
<p>Too often, startup founders try to compete on equal footing instead of moving to areas where they have the high ground. Identifying those areas and integrating them into your startup&rsquo;s story can dramatically improve your ability to gain traction as a company.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>The fabled grand slam project</title>
      <link>https://www.zeptonaut.com/posts/the-fabled-grand-slam-project/</link>
      <pubDate>Tue, 22 Feb 2022 05:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/the-fabled-grand-slam-project/</guid>
      <description>At a certain point in your career, &#34;doing what you&#39;re told&#34; goes from being an asset to a liability.</description>
      <content:encoded><![CDATA[<p>When I was in college and for the first too-many years of my career, I imagined that professional programming worked a little like this:</p>
<ul>
<li>Your boss tells you to write a service or feature that does X</li>
<li>You work really hard and make something that does X well</li>
<li>Your work makes the world better and you&rsquo;re rewarded for it</li>
</ul>
<p>This was stupid. This is not at all how software engineering works.</p>
<p>&ldquo;Obviously useful&rdquo;, grand slam projects like this are rare enough that most of them have already been finished. If your boss was so sure that this project was one of them, it probably would have been done long ago.</p>
<p>Software engineering, unlike food service, law, nursing, or dry cleaning is <em>not</em> a service industry. In each of these industries, the utility your work provides to the world has some rough correlation to the effort you expend. A great nurse or lawyer will certainly have a much higher <em>coefficient</em> for how much utility they create per unit of their time. However, the two are usually still correlated and there&rsquo;s a cap as to how much utility they can provide with their time.</p>
<p>Contrastingly, software is a product-driven business: you can work really hard on a product, but if no one uses it, then - pardon the French - you&rsquo;ve wasted a shit load of your time.</p>
<p>To exacerbate this, software has a high upfront cost to write but often has almost no marginal cost to add a customer. This means that, unless you&rsquo;re careful, there will be huge sunk costs by the time you realize something isn&rsquo;t useful.</p>
<p>The obvious <em>upside</em> to this model is that if you can actually write software that&rsquo;s useful, it can provide a terrific amount of utility to the world.</p>
<p>My advice to my younger self: you may be handed projects, but the project specifications will be wrong in 50 ways that no one knows yet. This is not your boss&rsquo;s fault: the hard part of software isn&rsquo;t writing the code, it&rsquo;s figuring out what the software should do in the first place. Knowing how to write the code is just table stakes for the real job.</p>
<p>As soon as you acquire those basic engineering skills, start focusing on understanding how to validate your product ideas, work closely with customers to refine them, and get buy in from others to work on them. This is a completely different and frankly much more valuable and difficult skillset than software engineering. Find and study the experts in the field like Paul Graham, YC Startup School, Eric Ries, and Peter Thiel. The whole field is as much black magic as it is engineering, but there are still very real principles to be learned.</p>
<p>Past a certain point, these skills are as useful at a large company as they are at a startup. You can receive a few promotions at a large company just by doing the right engineer-y things that look right, but at some point you&rsquo;ll be expected to create something that <em>matters</em> and no one really cares how hard you worked on it if it doesn&rsquo;t provide utility.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ludwig&#39;s journey to 1,000 views</title>
      <link>https://www.zeptonaut.com/posts/ludwig-s-journey-to-1000-views/</link>
      <pubDate>Thu, 06 Jan 2022 05:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/ludwig-s-journey-to-1000-views/</guid>
      <description>Getting the word out about your startup is hard work: why not skip some of it?</description>
      <content:encoded><![CDATA[<p>Last month, the streamer who goes by the handle &ldquo;ludwig&rdquo; on Twitch left the platform for YouTube gaming. Ludwig was one of the most popular streamers on Twitch, with over 3 million followers on the platform.</p>
<p><a href="https://www.youtube.com/watch?v=Ip2trao6dYw" title="https://www.youtube.com/watch?v=Ip2trao6dYw">In one of his early YouTube videos</a>, Ludwig took on a seemingly pretty easy challenge: start a new, anonymous YouTube channel and get 1000 views on a video.</p>
<p>However, anyone that&rsquo;s ever created anything online knows just how difficult this challenge is. The vast majority of blog posts, videos, and songs online sit quietly, with a few people at most ever seeing them.</p>
<p>Ludwig ultimately succeeded in his challenge: the video he created centered around another popular Twitch streamer, MrBeast, and how he employed the &ldquo;random person bursting through the front door&rdquo; trope from 90s sitcoms to keep his Twitch channel interesting &ndash; think Kramer in Seinfeld or the roommates from Friends rudely bursting through the front door of their neighbor&rsquo;s apartments.</p>
<p>After Ludwig created the video this, he posted it into MrBeast&rsquo;s Twitch chat, trying to get MrBeast to open the video on-stream, which would then cause his followers to view the video too. To increase the likelihood of this happening, Ludwig:</p>
<ul>
<li>Posted the video at a time when MrBeast was transitioning between topics</li>
<li>&ldquo;Boosted&rdquo; the post in the chat by attaching a $50 &ldquo;tip&rdquo; to the post, which ensured that the comment wouldn&rsquo;t be drowned out by other &ldquo;free&rdquo; posts to the chat</li>
<li>Ensured that the thumbnail and title of the video were chosen specifically to appeal to MrBeast&rsquo;s vanity</li>
</ul>
<p>All of this succeeded: MrBeast opened the video on-stream and his viewers followed. Ludwig&rsquo;s video ultimately received over 11,000 views and yielded 150 new subscribers to his channel, putting him solidly in the camp of &ldquo;having more subscribers than 99% of other YouTubers&rdquo;.</p>
<p>I think this story is interesting because it illustrates the problem with what many people intuitively want to believe: <em>build something great and people will come</em>. As inspiring as <em>Field of Dreams</em> was, it was frankly full of crap on this account. If you build something great <em>and</em> you work your butt off to get people to come, then you have a real shot at making something new.</p>
<p>Thankfully, I&rsquo;ve learned a few rules over the past few years at a startup about how to build your own distribution: I&rsquo;ll share them in the next post.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>I hope distributed is not the new default</title>
      <link>https://www.zeptonaut.com/posts/i-hope-distributed-is-not-the-new-default/</link>
      <pubDate>Thu, 15 Apr 2021 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/i-hope-distributed-is-not-the-new-default/</guid>
      <description>I miss people. :-(</description>
      <content:encoded><![CDATA[<p>It&rsquo;s in vogue to say that COVID-19 has changed the nature of work forever and that many of us won&rsquo;t be going back to the office.</p>
<p>Having worked for years on Google Chrome, which is a globally distributed team, let me just say: I sure <em>hope</em> we&rsquo;re going back to the office. I also hope that the office looks a little bit different for most people.</p>
<p>I&rsquo;ll be the first to admit that an office-only culture is problematic. Even when I worked on office-first teams at Google, I was always afforded the flexibility to work from home for appointments or frankly if I just didn&rsquo;t want to put on pants for the day.</p>
<p>It&rsquo;s also not in anyone&rsquo;s best interest to commute an hour and a half to work each way, like I&rsquo;ve had some friends do in the valley. Offices force you to be located in a particular location which may put stress on your budget or lifestyle. (See: the children per family in San Francisco or New York.)</p>
<p>However, even the fiercest distributed team advocates agree that an office provides some benefits that are difficult to replicate on a distributed team. I want to dig into some of those benefits.</p>
<h2 id="its-easier-to-initiate-outside-of-work-experiences">It&rsquo;s easier to initiate outside of work experiences</h2>
<p>In my time at Google, I found that having experiences with coworkers from <em>outside</em> of a work settings would significantly strengthen the relationship with those coworkers.</p>
<p>At Google Chicago, we had a yearly two day team ski trip. I found that I was always more thankful for who I worked with after that ski trip than before. If a conflict arose with those coworkers, I found myself naturally more willing to &ldquo;assume positive intent&rdquo;.</p>
<p>While it&rsquo;s certainly possible to boot up Among Us during work or schedule Zoom lunches between random teammates, the set of remote bonding activities is significantly more limited than the set of in-person bonding activities. Furthermore, the spontaneous and critically important break-outs (small conversations) that happen at team off-sites or conferences are near impossible to replicate over any remote tool I&rsquo;ve used.</p>
<p>One question that I&rsquo;ve used in planning my own team bonding activities is &ldquo;how different is this context from what we usually do together?&rdquo;, with the belief that something completely different gives you a better opportunity to see different facets of your coworkers. There&rsquo;s not much hope for the answer to that question on remote teams: the activity will probably include the same glowing rectangle you spend the rest of your day looking at.</p>
<p>Zapier, a great distributed company, famously has quarterly offsites for its teams where everyone meets in person to replicate this effect. However, I highly suspect that most big companies won&rsquo;t make any such effort to do this. Even if they do, once budgets get stressed, it seems likely this will be the first &ldquo;perk&rdquo; to go: its benefits are hard to quantify and it certainly <em>seems</em> frivolous to the short-sighted.</p>
<h2 id="it-encourages-the-spontaneous-collision-of-people-and-ideas">It encourages the spontaneous collision of people and ideas</h2>
<p>Steve Jobs famously proposed a Pixar headquarters with all restrooms located in the central lobby in order to force people together and encourage chance encounters.</p>
<p>While working from home certainly increases the amount of control that people have over their day, it does so at the cost of essentially all of these chance encounters.</p>
<p>Despite my best efforts at scheduling random meetings, all of the most authentic connections I&rsquo;ve made since transitioning into the Ann Arbor startup world stem from the coworking spaces that I was in for two months pre-pandemic. The quality of connections in the year since have been significantly lower: Zoom calls with strangers always feel transactional, whereas running into someone at a lunch table doesn&rsquo;t.</p>
<h2 id="it-gets-you-out-of-the-house">It gets you out of the house</h2>
<p>When I lived in Chicago, I tracked my steps and found myself regularly getting 10-15,000 steps per day without any effort on my part. Walking was a key part of any transportation strategy, which made me healthier and happier.</p>
<p>I later moved home to the much less walkable Detroit and found that my default step count plummeted to 4-6,000 steps per day.</p>
<p>My point here is that while there will always be exceptions, healthy defaults are <em>incredibly</em> important in shifting human behavior.</p>
<p>Getting out of the house and into a setting with other human beings builds a heck of a lot more socialization into your day than sitting at home in your office. While it&rsquo;s certainly possible that some people working from home will choose to socialize more, I predict that the majority of people will socialize less as they have fewer opportunities to meet and talk with people built into their days.</p>
<h1 id="integrated-beats-segregated-every-time">Integrated beats segregated, every time</h1>
<p>I suspect that some of the above problems with remote work will have much better mitigation strategies five years from now than they do now. However, it&rsquo;s likely that combating these problems will require a whole suite of tools that, at best, provide a vague approximation of the benefits of a great office.</p>
<p>As we all know, it&rsquo;s certainly possible to build a mediocre office-only culture. And, in my opinion, it&rsquo;s better for a mediocre culture to be remote than in an office: at least you can work in your pajamas.</p>
<p>However, I would argue it&rsquo;s much harder to build a <em>great</em> distributed culture than it is to build a great one that includes an office. It requires incredible amounts of work to mitigate the problems inherent to remote teams and I suspect that almost all companies will fail to put in the effort.</p>
<p>Lastly, I think it&rsquo;s going to be near impossible for employees to win back the &ldquo;concession&rdquo; of an office from a company once it chooses to go remote. Doing so feels a little bit like your kids asking for a really fancy backyard treehouse: sure it&rsquo;d be neat, but we just don&rsquo;t have the money for that sort of thing.</p>
<p>Personally, I hope to always be on a team where in-person interaction comprises a significant chunk of work.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>For low motivation days</title>
      <link>https://www.zeptonaut.com/posts/for-low-motivation-days/</link>
      <pubDate>Mon, 12 Apr 2021 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/for-low-motivation-days/</guid>
      <description>How to get things done when your browser keeps navigating itself to Hacker News.</description>
      <content:encoded><![CDATA[<p>Motivation and focus sometimes take vacation on days when we can&rsquo;t.</p>
<p>Today is one of those days for me, so I thought I&rsquo;d jot down some strategies I&rsquo;ve developed over the years to deal with these sorts of days.</p>
<h1 id="make-a-list-of-what-you-want-to-get-done">Make a list of what you want to get done</h1>
<p>First on that list should be &ldquo;Make a list&rdquo;. Check it off when you&rsquo;re done making your list.</p>
<p>Your goal for the day should be to go out and collect checkboxes for that list. Given that what you <em>want</em> to do is lay on your couch and watch a movie, every checkbox that you collect is a victory.</p>
<p>If one of these tasks has ambiguity such that you aren&rsquo;t forced to think through the exact steps involved, it needs to be removed and replaced with multiple, more specific tasks. For example, &ldquo;Get life insurance&rdquo; doesn&rsquo;t count as a task if you don&rsquo;t know what insurance company to call or the exact policy you want to set up. &ldquo;Ask on Facebook for references for reputable life insurance providers&rdquo;, &ldquo;Call Mom and Dad about how to choose a life insurance policy&rdquo;, and &ldquo;Call Auto Owners Insurance at 234-567-8910 to start life insurance policy&rdquo; is a much better set of tasks.</p>
<p>For more about this strategy, see my previous post: <a href="https://www.zeptonaut.com/posts/the-pomodoro-technique/"><em>The Pomodoro Technique in practice</em></a><em>.</em></p>
<h1 id="set-a-timer-and-a-modest-goal">Set a timer and a modest goal</h1>
<p>Pick one of the easier tasks on your list, set a timer for 5 or 10 minutes, and focus only on getting the task done. Yes, I know the Pomodoro Technique usually calls for 25 minute blocks, but we&rsquo;re not mentally ready for that.</p>
<p>If you get it done, regardless of whether the timer has gone off, cross off the item and reward yourself with time spent doing something you enjoy or are satisfied by. Go for a walk around the block, or make your bed, or go eat a banana.</p>
<p>When choosing rewards, it&rsquo;s critical that you pick one with an intrinsic end. If you check Facebook or Reddit, or start reading a book, or play a video game, there will be a huge temptation to continue doing that thing right past the point you intended stopping at.</p>
<p>In my opinion, it&rsquo;s also important that the thing not be <em>too</em> much fun. I find that the more I enjoy the &ldquo;break&rdquo; activity, the less I want to get back to work.</p>
<p>Lastly, I find that it really helps if the reward involves me getting out of my work chair. I don&rsquo;t sit back down in the chair until I have a clear plan for what I&rsquo;m going to do: I pick a next task, pick a duration to focus on it for, and then sit back down.</p>
<p>If you feel able, increase the length of timer you set a little each time you sit back down. However, if you don&rsquo;t feel able, that&rsquo;s okay: in the long run, it&rsquo;s much more important that you get back into the groove of setting goals, reaching them, and rewarding yourself than it is how quickly you ramp up.</p>
<h1 id="livestream-your-work">&ldquo;Livestream&rdquo; your work</h1>
<p>Another trick that I sometimes use to get work done is to &ldquo;livestream&rdquo; what I&rsquo;m doing. I&rsquo;ll start up Loom and explain every step of what I&rsquo;m doing as if I have an audience listening.</p>
<p>This probably seems (and looks) strange, but I find that I get many of the same benefits from this that I might get from teaching a subject: by explaining my actions like I&rsquo;m teaching someone else, I hold myself more accountable to staying focused.</p>
<p>(Fun fact: this is also the primary reason that I write a blog. Forcing myself to write about a subject helps me develop clearer thoughts around it.)</p>
<h1 id="be-proud-of-yourself">Be proud of yourself</h1>
<p>What you do on the hardest days is what distinguishes you as a professional from the amateurs. Take some time to be proud of yourself: this is an incredibly tough challenge and you deserve serious kudos.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Tock and the ORD Camp playbook</title>
      <link>https://www.zeptonaut.com/posts/tock-and-the-ord-camp-playbook/</link>
      <pubDate>Thu, 01 Apr 2021 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/tock-and-the-ord-camp-playbook/</guid>
      <description>One engineer&#39;s clever trick to make himself a hub of the most interesting people in Chicago.</description>
      <content:encoded><![CDATA[<p>Yesterday, Squarespace acquired the restaurant services startup Tock for $400MM.</p>
<p>Tock is really interesting to me because it&rsquo;s the first startup that I&rsquo;ve <em>felt</em> go all the way from founding to exit. The CTO, Brian Fitzpatrick (&ldquo;Fitz&rdquo;), and the original director of engineering, Robin Anil, both worked at Google Chicago at the same time that I was there. Fitz was the site lead for a time and Robin was a staff software engineer on my ad forecasting team while I was more junior. I knew Robin a lot better than I knew Fitz, but I know both well enough to know that they were superstars: Robin was an amazing engineer, and Fitz was an amazing engineering manager and networker.</p>
<p>From my understanding, Tock was conceived as a parternship between Fitz and Nick Kokonas to polish and productionize  the reservation system that Kokonas had built internally for his 3 Michelin star restaurant Alinea.</p>
<p>Tock&rsquo;s core product insight was that restaurant reservations were broken. Reservations were free to make for potential visitors but carried a very real opportunity cost for restaurants, who might turn away walk-ins or <em>real</em> reservations in favor of an earlier-made reservation who never intended to show up.</p>
<p>Tock solved this problem by making diners prepay at least a portion of the bill up-front: the diners then had something to lose by not showing up, and the restaurants got paid regardless. In short, it aligned the interests of the restaurants and the diners and, in doing so, made the restaurant ecosystem healthier.</p>
<p>This company is a great example of a common startup playbook: you find someone thoughtful who has deep insight into a specific vertical (restaurants), give them superpowers through technology (by partnering with a former Google site lead), and see what happens.</p>
<p>There&rsquo;s a saying that goes something like &ldquo;Most innovation happens from mapping concepts from one domain onto another domain&rdquo;, and I think that certainly applies to Tock.</p>
<h1 id="how-can-we-reproduce-this-kind-of-innovation">How can we reproduce this kind of innovation?</h1>
<p>The tricky thing about this form of innovation is that it doesn&rsquo;t happen by default. Restauranteurs mostly associate with their employees and other restauranteurs. Engineers at Google mostly associate with other engineers from Google.</p>
<p>It seems like the ideal thing to do here is to take a whole bunch of really smart people doing interesting things in their respective fields, put them in a giant lottery ball tumbler, spin it around a few times and see what ideas and relationships pop out.</p>
<p>Interestingly, this is exactly what Fitz has been doing for years with <a href="https://ordcamp.com/">ORD Camp</a>.</p>
<p>I&rsquo;ll cherry-pick the camp&rsquo;s description from their website:</p>
<blockquote>
<p>ORD Camp is a two day, invitation-only, gathering of – 350 hand picked attendees. It’s a time to collect together the best minds in the midwest and beyond, to spark new ideas and spread old ideas. People from many different fields, many different walks of life, get together and share, teach, and learn about uniquely interesting topics</p>
</blockquote>
<p>Sound familiar?</p>
<p>Interestingly, the one problem with ORD Camp&rsquo;s invite-only nature is that it doesn&rsquo;t generate a heck of a lot of value for you unless you&rsquo;re invited. However, by founding ORD Camp, Fitz basically made <em>sure</em> he was invited and was a central node in this network that would hopefully produce a lot of cross-pollination between fields. Pretty genius in my opinion.</p>
<p>Every year, ORD Camp would seek out volunteers from Google Chicago to help out with the conference. It&rsquo;s a major regret of mine that I was too busy hitting the local bars on Friday night to take the time to volunteer and see how the camp worked up close: I heard amazing things about the conference from the people who did help out.</p>
<p>With that being said, I think Fitz&rsquo;s ORD Camp playbook is a good one for anyone trying to innovate: become a central node in a network of people doing really interesting things by being the person that brings them together.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Rocket League and root cause misattribution</title>
      <link>https://www.zeptonaut.com/posts/rocket-league-and-root-cause-misattribution/</link>
      <pubDate>Mon, 22 Mar 2021 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/rocket-league-and-root-cause-misattribution/</guid>
      <description>People naturally tend to blame the most proximal cause of failure, but the reality is usually more complicated.</description>
      <content:encoded><![CDATA[<p>Last Thursday, I was playing a video game I like called Rocket League.</p>
<p>Now I&rsquo;m terrible at Rocket League. When I first started playing, I was automatically placed into the competitive tier somewhere between &ldquo;toddler&rdquo; and &ldquo;arthritic senior&rdquo;.</p>
<p>However, I do somewhat diligently try to get better. Recently, I&rsquo;ve found that my biggest problem is that I just can&rsquo;t make the sort of finesse plays that my opponents can. The shots that I needed to make were just a little bit harder than what I was capable of making reliably. I&rsquo;d miss often, get scored on, and lose about as many games as I won.</p>
<p>I did some of the drills that the game offers in order to improve these skills, but the learning curve is steep and I found progress to be glacial.</p>
<p>Before cozying into my recliner on Thursday to start playing, I happened across a video called <a href="https://www.youtube.com/watch?v=T_PAkuWBZWE&amp;t=778s">The Rotation Mistakes of Every Rank in Rocket League</a>. My main takeaway from the video was that many people at my skill level (gold) just try to chase the ball around like a bunch of overzealous schoolkids rather than giving their teammates some space. This puts them too close to the ball to play well and removes their ability to defend their goal</p>
<p>In the next few games, I tried to stay further away from the ball and noticed an <em>immediate</em> improvement in what I was able to contribute. Instead of having to make finesse plays in tight spaces crowded with teammates and opponents, I had plenty of time and space to make easy shots because no one was near me.</p>
<p>What I had initially read as &ldquo;get better at making tricky plays&rdquo; was actually &ldquo;position yourself better so that you don&rsquo;t <em>have</em> to make tricky plays&rdquo;.</p>
<h1 id="a-rocket-league-fable">A Rocket League fable</h1>
<p>My main point here is that root cause misattribution is <em>really</em> easy. What can feel like dead obvious problems - being tight on money, or dinner taking too long to make at home, or having too much of your time occupied by code reviews - can all be second order effects of more distant problems.</p>
<p>Often, it&rsquo;s tempting to think that the only way to address a problem is by fixing its most proximal manifestation - in the Rocket League case, I figured that I needed to just get better at making tough shots.</p>
<p>However, it&rsquo;s often <em>easier</em> to make a small amount of progress on a more distant problem than significant progress on a proximal one. The reason that an effective coach can be great is that someone with more distance and experience than you can watch you work and look for these deeper problems.</p>
<p>It can definitely be worth the time to put yourself in reverse, get some distance, and see if you&rsquo;re missing something important on the field.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Pay attention to time between wins</title>
      <link>https://www.zeptonaut.com/posts/pay-attention-to-time-between-wins/</link>
      <pubDate>Mon, 15 Mar 2021 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/pay-attention-to-time-between-wins/</guid>
      <description>Allowing engineers on your team to go too long without concrete progress can initiate a vicious cycle.</description>
      <content:encoded><![CDATA[<p>One metric that I&rsquo;ve come to realize is important in management is what I like to call <strong>time between wins</strong>.</p>
<p>Time between wins is just the amount of time in between someone successfully wrapping up one piece of work and wrapping up the next piece of work.</p>
<p>This metric is important because, in my opinion, one of the strongest contributors to burnout is when the relationship becomes murky between the effort you put in and the results you get out.</p>
<h1 id="the-burnout-cycle">The burnout cycle</h1>
<p>The burnout cycle that I&rsquo;ve experienced myself and seen happen to other engineers is as follows:</p>
<ol>
<li>An engineer takes ownership of a complex project and is excited about the challenge</li>
<li>Because the project is complex, the number of tasks required to finish starts to grow quickly</li>
<li>As the number of tasks grows, the total amount of work done remains high but the average pace per &ldquo;branch&rdquo; of the project decreases because the engineer is spread thin. At this point though, the engineer is still feeling good about the project, if a little overwhelmed.</li>
<li>As the pace slows on each branch, they remain open for longer and longer. The engineer starts to lose the feeling that their effort brings them meaningfully closer to their ultimate goal. <strong>This is a dangerous place to be.</strong></li>
<li>Days start to slip away. What happened to today? This week? How does it take three days to reply to a relatively simple comment on a code review? &ldquo;What&rsquo;s wrong with me?&rdquo; The engineer starts to feel bad about their work and they dread showing up to work, feeding into a negative feedback loop.</li>
</ol>
<h1 id="how-can-this-be-avoided">How can this be avoided?</h1>
<p>As a manager, you&rsquo;re the lifeguard on duty looking out for this anti-pattern.</p>
<p>This is where time between wins is important. Time between wins is a simple metric to tell you &ldquo;has this person had any success we were able to celebrate recently?&rdquo;.</p>
<p>What&rsquo;s a healthy amount of time between wins?</p>
<p>In my opinion, somewhere between a couple of hours and a couple of days. Less than that and it&rsquo;s unlikely that the task is large enough to feel meaningful. Greater than that and, in my experience, that relationship starts to feel fuzzy between effort and success.</p>
<h1 id="how-can-a-manager-help-decrease-time-between-wins">How can a manager help decrease time between wins?</h1>
<p>As a manager, you certainly can&rsquo;t just hit the &ldquo;easy win&rdquo; button when someone&rsquo;s time between wins starts to exceed your target threshold. You often lack the context to help the project along meaningfully and doing so would likely be construed as micromanaging, anyhow. So what can you do?</p>
<h2 id="ensure-tasks-are-properly-scoped">Ensure tasks are properly scoped</h2>
<p>The most meaningful way that you can help is to make sure that tasks are well-scoped. Task scoping is mostly arbitrary, anyhow: you could have a task on your list of &ldquo;Rewrite front-end in TypeScript&rdquo; and it&rsquo;s certainly a well-defined task, but if it takes three months it&rsquo;s certainly too large to not be broken up further.</p>
<p>You should help your teammate break down any task that&rsquo;s likely to take longer than a couple of days into smaller tasks. For my team, that generally means smaller GitHub issues. In each of those issues, you can say something like &ldquo;Blocked by X&rdquo; and then basically make the larger issue a list linking out to many smaller issues.</p>
<h2 id="ask-that-the-owner-delegate">Ask that the owner delegate</h2>
<p>Another empowering way to help decrease time between wins is to essentially make the issue owner a temporary team lead themselves. Are there any well-defined pieces that don&rsquo;t require too much context ramp-up that can be handed off? If so, ask if you can take them yourself or delegate them to a teammate, accelerating the progress on the overall issue.</p>
<p>In my experience, it requires more prodding than you might expect to get someone to hand off subtasks. Doing so can feel like admitting weakness or failure. As a manager, you need to convince them that it&rsquo;s neither and that delegation is a demonstration of leadership.</p>
<h2 id="pair-program">Pair program</h2>
<p>Decreasing time between wins is, in my opinion, one of the great benefits of pair programming (in addition to knowledge sharing).</p>
<p>Paired tasks often take more than half the time they would have take if tackled alone, so from a &ldquo;pure efficiency&rdquo; perspective, pairing rarely seems worthwhile. However, you get to celebrate the win with someone else, making it sweeter. Furthermore, the win is shared by multiple people. In other words, you&rsquo;re multiplying the emotional reward for the work, increasing morale.</p>
<h1 id="a-healthy-energized-attitude-towards-work">A healthy, energized attitude towards work</h1>
<p>Keeping time between wins low is a great way to help the people on your team enjoy a health, energized attitude towards their work. If they put in a full day worth of hard work on a worthwhile problem, it&rsquo;s your job to make sure they know that work is valued and fits into a larger effort.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>When hiring in secondary markets, seek out great teachers and avid learners</title>
      <link>https://www.zeptonaut.com/posts/in-secondary-markets-hire-teachers/</link>
      <pubDate>Wed, 23 Dec 2020 05:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/in-secondary-markets-hire-teachers/</guid>
      <description>In secondary markets where employees stay longer, you need to find engineers that learn quickly and can help others do the same.</description>
      <content:encoded><![CDATA[<p>Tobi Lutke is the CEO of Shopify, which is a hugely successful E-Commerce company based out of Ottawa, Canada.</p>
<p>I find him interesting for two reasons:</p>
<ol>
<li>He reasons from first principles about how to effectively build companies</li>
<li>He&rsquo;s built a wildly successful technology company in a secondary market (i.e. not Silicon Valley)</li>
</ol>
<p>As someone that&rsquo;s also trying to build a successful technology company in a secondary market (Ann Arbor), I&rsquo;m definitely interested in what Lutke has to say.</p>
<p>One such piece of advice that he offers could be paraphrased as:</p>
<blockquote>
<p>When hiring in secondary markets, choose employees with the assumption that you&rsquo;ll work together for at least 10 years.</p>
<p>That means that hiring based on the candidate&rsquo;s growth potential is much more important than in primary markets.</p>
</blockquote>
<p>This advice resonates with how I see people in Michigan view their jobs: generally, when they choose a job, they pick a job that they could see themselves working at for 5-10 years.</p>
<p>This contrasts sharply with Silicon Valley. If the average tenure at a company is two years, you can sure spend 5 hours each week mentoring Jill on how to better manage her team but gee whiz, by the time that actually starts to pay dividends she&rsquo;s moved on to the company next door.</p>
<p>I do think that his &ldquo;hire for growth&rdquo; advice - while not <em>wrong</em>  - is at least insufficient to be useful. What does it mean to hire for growth? Does this mean not to hire senior engineers?</p>
<p>In this post, I&rsquo;d like to carry forward Lutke&rsquo;s first principles reasoning in order to determine how you should hire differently in secondary markets.</p>
<h1 id="what-does-hiring-for-growth-mean">What does &ldquo;hiring for growth&rdquo; mean?</h1>
<p>I like to think of what a candidate offers looks something like a layered cake: from bottom to top, the layers are:</p>
<ul>
<li>Foundational character traits</li>
<li>Foundational technical skills</li>
<li>Professional technical skills</li>
<li>Professional social skills</li>
</ul>
<p>The lower the layer in the cake, the harder it is to change that aspect of the person.</p>
<p>Starting with the bottom:</p>
<p><strong>Foundational character traits</strong> include how well someone can teach others, whether they can write well, whether they try to avoid the same mistake multiple times, and how eager they are to learn new things.</p>
<p>These traits take years to take shape and are often the direct result of someone&rsquo;s upbringing and education. There&rsquo;s a good chance that if you hire someone with a gap in one of these skills, you&rsquo;re stuck with it.</p>
<p><strong>Foundational technical skills</strong> are the skills that someone needs before they can even really start grappling with the <em>real</em> skills that make them good at their job. For software engineers, you&rsquo;re probably looking at someone that can program well in at least one or two languages, understands what a unit test is and how to write it, knows the basics of databases and networking, etc.</p>
<p>These skills are <em>certainly</em> teachable (as demonstrated by many-a CS curriculum). However, they&rsquo;re wide-spanning enough that it likely takes years to learn them in a comprehensive way that ensures good coverage.</p>
<p>For example, when working on a project, it&rsquo;s hard to justify stopping in the middle to take a few weeks and go learn SQL. If you make a hire without foundational technical skills, you&rsquo;ll find that you&rsquo;re often faced with two choices when you encounter one of these gaps:</p>
<ol>
<li>Halt whatever you&rsquo;re working on and develop a plan to fill that knowledge gap</li>
<li>Do &ldquo;just enough to get by&rdquo; but never really fill the knowledge gap</li>
</ol>
<p>The first makes it hard to put this person on any sort of time sensitive project, while the latter never really addresses the problem.</p>
<p>That&rsquo;s why I think that foundational technical skills are a must-have, even when hiring for junior positions.</p>
<p><strong>Professional technical skills</strong></p>
<p>These are the skills that get &ldquo;layered on top of&rdquo; the foundational technical skills in order to really make someone effective at their job.</p>
<p>For software engineers, I consider these skills the ones that basically no CS undergraduate will have learned in school. These are things like how to effectively monitor code running in production, design an API, or scale a service as it gets more usage.</p>
<p>These skills are often learned through a combination of actually facing the problem and having someone else around that&rsquo;s faced it before and can help you learn how to solve it.</p>
<p>Additionally, the problems themselves are often ones that are hard to replicate in the classroom. For example:</p>
<ul>
<li>The solutions to these problems cost significant money (how to implement monitoring and APM services)</li>
<li>The problems only exist due to the volume of traffic that a service is receiving (how to effectively use a load balancer)</li>
<li>The problems only exist due to many engineers collaborating on a project (how to ensure consistent code styles and distribute knowledge of best practices)</li>
</ul>
<p>Junior engineers cannot be expected to have these skills.</p>
<p>Furthermore, because these skills are a result of facing the problem before and not all engineers specialize in all things, not all <em>senior</em> engineers should be expected to have these skills. However, senior engineers should be expected to have depth in <em>a few</em> of these areas and - if you&rsquo;re hiring well - at least one of those areas hopefully addresses a pain point that your team currently has.</p>
<p>Hiring this way allows senior engineers to be the mentor necessary to effectively bring junior engineers and other senior engineers &ldquo;up to their level&rdquo; in their respective area of expertise.</p>
<p><strong>Professional social skills</strong></p>
<p>These skills are layered on top of even the professional technical skills and are the ones that allow someone to coordinate a group of people to work together and grow as a team.</p>
<p>I don&rsquo;t have much insight to offer here: I&rsquo;m still learning.</p>
<h1 id="back-to-lutkes-advice">Back to Lutke&rsquo;s advice</h1>
<blockquote>
<p>In secondary markets, hire for growth potential.</p>
</blockquote>
<p>I&rsquo;d like to offer a corollary to this:</p>
<blockquote>
<p>In secondary markets, hire people who are both great teachers and avid learners.</p>
</blockquote>
<h1 id="why-great-teachers">Why great teachers?</h1>
<p>Being an effective teacher requires a high level of empathy with the audience along with communication skills that are very, very hard to teach. That&rsquo;s why I stuck it in the &ldquo;foundational character traits&rdquo; bucket above. It&rsquo;s very likely that if you hire a bad teacher, they&rsquo;ll remain a bad teacher.</p>
<p>The problem with this becomes apparent when you see what happens when you hire a bad teacher at each level:</p>
<ul>
<li>If you hire a senior engineer that&rsquo;s a bad teacher, they&rsquo;re unable to mentor the rest of the team in their domains of expertise. This means that you get minimal leverage on their skillset</li>
<li>If you hire a junior engineer that&rsquo;s a bad teacher, you&rsquo;re investing years of training into someone from whom you&rsquo;ll ultimately get minimal leverage from their skillset</li>
</ul>
<p>In computer science terms, hiring good teachers yields superlinear returns because you benefit from both the work they do and the increased level of productivity they help others reach.</p>
<p>Hiring bad teachers yields a linear return because you benefit only from the work they do.</p>
<h1 id="why-avid-learners">Why avid learners?</h1>
<p>Along with teaching, there&rsquo;s one other foundational trait that&rsquo;s critical when hiring in secondary markets: the person has to be an avid and effective learner. A strong growth mindset is critical.</p>
<p>If you think of someone&rsquo;s growth as a straight line, their attitude towards learning and their ability to effectively learn greatly influence the slope of that line. Finding effective learners is much more important when the time that the person will be spending with you is significant. In high-turnover primary markets, the skill change during the minimal time the employee spends with you is likely to be small regardless of their ability to learn, so you should hire them primarily based on their current abilities. This isn&rsquo;t true when hiring in secondary markets.</p>
<h1 id="summary">Summary</h1>
<ul>
<li>Carefully choose what foundational character traits you care about and figure out how to identify them in interviews.</li>
<li>In secondary markets, seek out great teachers and avid learners</li>
<li>Choose your foundational technical skills and figure out how to identify them in interviews.</li>
<li>Senior engineers should have depth in multiple areas, at least one of which will broaden the team&rsquo;s overall expertise.</li>
</ul>
<p>P.S. The startup I work at - <a href="https://channels.org/curtiswiklund">Channels.org</a> - is looking to hire a senior software engineer! You can find out more and apply <a href="https://angel.co/company/channels-org/jobs/1012413-lead-software-engineer">here</a>.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Becoming an expert #2: the learning cycle</title>
      <link>https://www.zeptonaut.com/posts/becoming-an-expert-2-the-learning-cycle/</link>
      <pubDate>Tue, 08 Dec 2020 05:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/becoming-an-expert-2-the-learning-cycle/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>When you start out at anything, you&rsquo;re probably really bad. Some people aren&rsquo;t, but those people are annoying so we&rsquo;ll ignore them.</p>
<p>Across most activities, we see the same cycle play out as people learn:</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="1470"
         style="aspect-ratio: 1470 / 614"
         
           src="https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/media/2020-12-08-learning_loop.png?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>Let&rsquo;s quickly zoom in on each step.</p>
<h1 id="do">Do</h1>
<p>This one&rsquo;s pretty obvious: you do the thing that you&rsquo;re trying to get good at. If you&rsquo;re like me, you probably start out doing something poorly, but hey, ya got out there kiddo and I&rsquo;m proud of you.</p>
<p>It&rsquo;s important while &ldquo;doing&rdquo; to find <em>some</em> way to record a transcript of what really happened - a video recording, audio recording, or whatever other format you need to get a ground truth account of what really transpired here. We&rsquo;ll use this to&hellip;</p>
<h1 id="analyze">Analyze</h1>
<p>This is where I - and many people - fall off the bandwagon.</p>
<p>In this phase, we look back at our &ldquo;ground truth&rdquo; with two goals in mind:</p>
<ol>
<li>To compare how we performed against some standards that we&rsquo;ve set for ourselves and see how the two compare. (We&rsquo;ll get to that in a second. For now, let&rsquo;s assume you have no standards)</li>
<li>To look for big problems in our &ldquo;doing&rdquo; where, even if we met our existing standards <em>perfectly</em>, we&rsquo;d still have performed poorly. We&rsquo;ll use those to revise and build our standards in the next step.</li>
</ol>
<p>What we&rsquo;re really looking for here is eureka moments where we see that problems we run into - that can feel unavoidable at the time - are often the result of earlier fixable mistakes.</p>
<h1 id="standardize">Standardize</h1>
<p>In this step, we take what we learned from our analysis and encode it into some sort of realistic ruleset that we can hold ourselves against in the future.</p>
<p>&ldquo;Realistic&rdquo; means that there can&rsquo;t be a bajillion items on this list: at most you should be adding one or two items from each analysis section. Better still is if you can revise an existing rule to be more accurate.</p>
<h1 id="practice">Practice</h1>
<p>The goal with practice is to narrow down the &ldquo;doing&rdquo; stage as much as possible to focus on getting &ldquo;reps&rdquo; in a particular area.</p>
<p>Practice is pretty draining, so I find it really helpful to set a visual timer (I like the <a href="https://www.google.com/search?q=time+timer&amp;oq=time+timer&amp;aqs=chrome.0.69i59j0i67i131i433i457j69i60j69i65j69i60j69i65l2j69i61.893j0j7&amp;sourceid=chrome&amp;ie=UTF-8">Time Timer</a>) for no more than 30 minutes and focus only on what I&rsquo;m practicing for that time period. After that, I&rsquo;ll walk away and do something else. If I try to practice for much longer than that, I find that I lose focus and start to fall into my old ruts again. It&rsquo;s much more important to practice regularly but avoid these ruts than it is to practice for a long time.</p>
<h1 id="-and-do-again">&hellip; and do again.</h1>
<p>With your new standards and skills in hand, it&rsquo;s time to get back to doing.</p>
<p>This time around, try to approach the &ldquo;doing&rdquo; while holding your standards in half of your brain while performing the activity with the other half.</p>
<p>What you&rsquo;re shooting for here is &ldquo;marginally better than the last time I did this thing&rdquo;. No trip through this loop yields significant results, but each leads to a little improvement that compounds over time.</p>
<h1 id="out-of-band-learning">Out-of-band learning</h1>
<p>Outside of this loop, it&rsquo;s sometimes necessary to do some out-of-band learning. This is when you read a book, talk to a coach, take a class, or watch a video.</p>
<p>I usually put too much hope in out-of-band learning. Frankly, if I&rsquo;m not already doing the things I <em>know</em> I need to be doing, then there&rsquo;s not a ton of sense in going off and learning new things that I should be doing. And yet.</p>
<p>The main goal of out-of-band learning is to help you improve your analysis skills. If you find yourself frequently unable to diagnose problems in why things went poorly in &ldquo;doing&rdquo;, it may be time to hit the books.</p>
<p>One of the hardest things about out-of-band learning is finding the right resources. A book aimed at advanced chess players will be worse-than-useless for beginners: it&rsquo;ll be discouraging and focus on fine details that won&rsquo;t really help beginners.</p>
<p>Similarly, I find coaches can sometimes be overly prescriptive or theoretical for my taste.</p>
<p>High quality out-of-band learning resources though can help give you ideas for what and how to practice as well as what themes to look for during analysis.</p>
<p>I don&rsquo;t have much guidance for how to find good resources - &ldquo;you&rsquo;ll know them when you see them&rdquo;.</p>
<p>The most helpful resource I used while improving at chess was John Bartholomew&rsquo;s YouTube channel. John has a clear love for the game of chess, has a sense of humor about his mistakes, and is great at identifying unifying themes that span games and are applicable for players of a given level. You can get an idea of his style <a href="https://www.youtube.com/watch?v=Ao9iOeK_jvU">here</a>.</p>
<h1 id="yikes-thats-a-lot-of-work">Yikes! That&rsquo;s a lot of work.</h1>
<p>The main problem with becoming good at something is that it&rsquo;s <em>hard</em>. That&rsquo;s why most people just reach a passable competence in most domains and stop progressing.</p>
<p>However, this cycle is significantly more effective than the &ldquo;do-do-do&rdquo; cycle that most people use once they reach a basic level of competence.</p>
<p>In the next post, I&rsquo;ll talk about some techniques that can be useful in sustaining this improvement for the long haul.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Becoming an expert #1: Experts and expertise</title>
      <link>https://www.zeptonaut.com/posts/experts-and-expertise/</link>
      <pubDate>Tue, 01 Dec 2020 05:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/experts-and-expertise/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>A few years ago, I spent about five months trying to improve at chess. In that time, I learned a lot about chess. More importantly, I learned a lot about how to systematically become more effective at something I care about.</p>
<p>In that time, my rating improved from about 1100 (the ~50th percentile of players on chess.com) to about 1400 (the ~75th percentile of players on chess.com). While neither is a particularly impressive rating, I&rsquo;m proud of the improvement and consider a 25 percentile improvement significant.</p>
<p>This post is the first in a short series where I&rsquo;m going to explore what I learned in this time: not about chess, but about what expertise is and how to gain it.</p>
<p>Today, I&rsquo;ll lay the groundwork for this series by answering two questions: <strong>what is expertise, and what makes someone an expert?</strong></p>
<p>I hope this series is useful for anyone that wants to be better at something than they are or has found that their improvement in a domain has stagnated.</p>
<h1 id="what-is-expertise">What is expertise?</h1>
<p>My definition of expertise draws heavily from the &ldquo;Learning How to Learn&rdquo; online course: <strong>expertise is a set of mental models that allow you to effectively perform a task.</strong></p>
<p>You can think of a mental model as just a way of &ldquo;compressing incoming information&rdquo; when looking at problems. By compressing the information, your brain can &ldquo;summarize&rdquo; what it&rsquo;s seeing and act on that summarized version of the information instead of the &ldquo;raw data&rdquo;. Later, you can use that extra brainpower to apply additional layers of mental models, further increasing your efficacy at the task.</p>
<p>For example, rather than remembering the speed limit on every single stretch of road, most people (in Michigan) know:</p>
<ul>
<li>If you&rsquo;re on a highway with a median, the speed limit is probably 70</li>
<li>If you&rsquo;re on a highway without a median, the speed limit is probably 55</li>
<li>If you&rsquo;re on a regular thoroughfare, the speed limit is probably 45</li>
<li>If you&rsquo;re in a neighborhood, the speed limit is 25</li>
</ul>
<p>In math, mental models tell you how to answer &ldquo;What is (x² - 1) times (y³ + 7)?&rdquo;. To the unfamiliar, the problem might look intimidating. Anyone that&rsquo;s taken algebra will immediately recognize that we&rsquo;re just multiplying two polynomials together and the problem can be solved using FOIL.</p>
<p>In both cases, mental models allow you to identify the pattern associated with the incoming information (&ldquo;I&rsquo;m on a highway without a median&rdquo;, &ldquo;I&rsquo;m multiplying two polynomials&rdquo;) which then map to problem solving techniques associated with this pattern (&ldquo;the speed limit is 55&rdquo;, &ldquo;I need to use FOIL&rdquo;).</p>
<h1 id="what-makes-someone-an-expert">What makes someone an expert?</h1>
<p>Experts have a set of mental models that allow them to be unusually effective at a given task.</p>
<p>As an example, the follow set of mental models might correspond to each chess rating:</p>
<ul>
<li><strong>600:</strong> You know how the pieces move</li>
<li><strong>800:</strong> All of the above, plus you recognize some common openings and have learned the first few moves of very common openings</li>
<li><strong>1000:</strong> All of the above, plus you know of and have practiced a few basic tactics (pinning, forking)</li>
<li><strong>1200:</strong> All of the above, plus you have a basic understanding of how to protect your king and what pawn structures you should try to avoid (backwards pawns)</li>
<li><strong>1400:</strong> All of the above, but your opening knowledge is deeper (generally can make it  7-8 moves into a game without getting lost)</li>
</ul>
<p>It&rsquo;s not that players that have a rating of 1400 are any smarter than players with a rating of 600. They&rsquo;ve just built more effective mental models that allow them to better approximate how to perform the task &ldquo;perfectly&rdquo;.</p>
<h1 id="how-do-i-become-an-expert">How do I become an expert?</h1>
<p>While I don&rsquo;t pretend to have all of the answers, the time I spent improving at chess taught me some useful lessons. Competitive games are great for understanding the &ldquo;meta&rdquo; of how to gain expertise because there are lots of people striving to do so and discussing their strategies. Unlike in many other domains in &ldquo;real&rdquo; life (e.g. driving), competitive games usually give clear feedback about who&rsquo;s better at the task.</p>
<p>I&rsquo;ll share more about what I learned in this series: if you want to follow along, feel free to subscribe below.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Be the team crier</title>
      <link>https://www.zeptonaut.com/posts/team-crier/</link>
      <pubDate>Fri, 23 Oct 2020 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/team-crier/</guid>
      <description>If you close an issue but not one else notices, does it really make a sound?</description>
      <content:encoded><![CDATA[<p>In January, I joined a VC-backed startup in Ann Arbor (Channels.org) as CTO and have  been managing our 5-person engineering team for about nine months now.</p>
<p>When I first jumped into this role, I assumed our team moving fast would cause us to <em>feel</em> like we were moving fast. I also assumed that this was so dumbfoundingly obvious that it felt idiotic to even say it out loud. After a great week, we&rsquo;d look back on the great work we did and feel encouraged by our speed.</p>
<p>However, over time I came to recognize that this wasn&rsquo;t actually true in two important ways.</p>
<h1 id="velocity-isnt-felt-equally">Velocity isn&rsquo;t felt equally</h1>
<p>On teams, it can be really hard to keep a pulse on what work is being done, especially if you&rsquo;re an individual contributor who&rsquo;s heads-down working on your own features. This is greatly exacerbated in remote teams like most have been forced to become due to COVID.</p>
<p>Our company&rsquo;s founder Curtis and I soon found that how we felt about a team member&rsquo;s contributions for a given week were less tied to those contributions than they were to how <em>close</em> we were to those contributions. Had we reviewed the code, or had someone else? Was the work easily visible in the frontend?</p>
<p><strong>Velocity isn&rsquo;t felt equally by all team members.</strong> Just because you feel like the team is moving fast doesn&rsquo;t mean that everyone else does.</p>
<h1 id="perception-of-velocity-affects-future-velocity">Perception of velocity affects future velocity</h1>
<p>The second thing I noticed was that the team seemed more focused and productive after I  sent out an email clearly summarizing what we&rsquo;d done in the previous week, even if I hadn&rsquo;t felt like the previous week wasn&rsquo;t a particularly productive one.</p>
<p>Sharing the highlights from the previous week immediately made people feel like we were moving faster: after all, a huge corpus of work just became visible. Once people felt like the rest of the team was moving faster, they felt increased pressure to be a good teammate and contribute more themselves. It feels great to be a valued member of a highly productive team; it feels crappy to be the only contributing member of an unproductive team.</p>
<p>Perhaps even more importantly, people felt like their contributions were noticed and appreciated. It should be no surprise that people do better work when they know that work will be recognized.</p>
<h1 id="be-the-team-crier">Be the team crier</h1>
<p>You know the <a href="https://en.wikipedia.org/wiki/Town_crier" title="town criers">town criers</a> that you can imagine hollering news in a medieval city square? As a team lead, you need to play a role sort of like that by regularly distilling and sharing your team&rsquo;s accomplishments.</p>
<p>For my team, this means sending out weekly or biweekly email updates calling out the great work that team members have done. As an added bonus, being the author of this email acts as a powerful lever about <em>which</em> tasks are highlighted. I can be sure to explicitly call out grungy but important work that might otherwise go unnoticed.</p>
<p>Writing all of this down feels almost silly because it&rsquo;s <em>obvious</em> that doing this is good. However, it&rsquo;s one of those obviously important things that&rsquo;s easy to forget about.</p>
<p>Note to self: be the team crier.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Organizing our team</title>
      <link>https://www.zeptonaut.com/posts/organizing-our-team/</link>
      <pubDate>Wed, 24 Jun 2020 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/organizing-our-team/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>In January, I left Google to work with my friend Curtis at a startup in Ann Arbor called Ploria. My role is Chief Technology Officer, which frankly didn&rsquo;t mean squat when I joined because there were only two of us working full time and leading a team of one developer doesn&rsquo;t take a heck of a lot.</p>
<p>However, we&rsquo;ve since added a few more full-time developers and now have a team of around 5 ½ working on our product. We noticed as we added more developers that miscommunication became more frequent and people no longer knew what each other were working on.</p>
<p>We&rsquo;ve tried a number of things to fix these problems and I thought it would be useful to quickly document what each was and how it worked.</p>
<h3 id="two-week-sprints">Two week sprints</h3>
<p>Date: April 13</p>
<p>The first thing that we put in place was two week sprints with a kick-off meeting on Monday. A sprint is just a period of time over which you commit to finishing a set of tasks. At the kick-off meeting, we discuss how much work we think each task planned for the sprint will be and then take turns claiming work that we&rsquo;d like to do.</p>
<p>The following Wednesday, we gather again to show off what we accomplished. We also talk about what went well during the sprint and what we can do better in future sprints.</p>
<p>As the CTO, my primary responsibility is to take people&rsquo;s feedback about what we can do better seriously. Taking the feedback seriously - especially when it&rsquo;s inconvenient to do so - encourages people to give feedback in the future, creating a virtuous cycle.</p>
<h3 id="status-hero">Status Hero</h3>
<p>Date: April 16</p>
<p>In order to better understand what each other are doing, we added Status Hero to our Slack. Status Hero asks people at the end of each day what they accomplished and how they&rsquo;re feeling.</p>
<p>Ultimately, we ended up ditching Status Hero in favor of frequently updating Slack statuses: more on that later.</p>
<h3 id="zenhub">Zenhub</h3>
<p>Date: April 17</p>
<p>Soon after installing sprints, we found that using Github project boards to manage them was getting unwieldy. Github lacks first class support for Story Points. Additionally, we felt that we needed a better understanding of how much work we had left until launch.</p>
<p>Zenhub acts as a Github project management tool, integrating into Github through a Chrome extension that adds UI elements to it. These UI elements include &ldquo;Release&rdquo;, &ldquo;Epic&rdquo;, and &ldquo;Story point&rdquo; fields on each issue.</p>
<p>Overall, we&rsquo;ve found Zenhub really helpful in organizing our work, although sometimes its burndown charts are less than useful due to scope changes for a given release or milestone.</p>
<h3 id="crushingit">CrushingIt</h3>
<p>Date: May 29</p>
<p>Even with all of the previous tools, we found it difficult to keep track of whether we were actually hitting the goals we set for ourselves each sprint. We were certainly getting lots done each sprint, but a lot of it was &ldquo;scope creep&rdquo; that we added after the sprint&rsquo;s start.</p>
<p>Additionally, we felt that Zenhub&rsquo;s board was demoralizing because it buried the things that you got done and showed you only what you had left to do.</p>
<p>To solve this, we created &ldquo;CrushingIt&rdquo; bot. CrushingIt is basically a Google Sheet that&rsquo;s hooked up to our Slack through Google App Script. At the start of each sprint, we add the tasks that we&rsquo;ve committed to finishing and, every time that someone marks one of their tasks as done, CrushingIt announces the completion to Slack and gives an overview of what&rsquo;s left.</p>
<p>We&rsquo;ve found this has three great side-effects:</p>
<ul>
<li>People have a better idea of what others are working on</li>
<li>It creates a public occasion to celebrate the completion of a task</li>
<li>Because the task list doesn&rsquo;t include scope creep tasks, we have a much better sense of when we finish the tasks we commit to each sprint</li>
</ul>
<p>Overall, the CrushingIt bot has been a tremendous success in improving our team&rsquo;s productivity.</p>
<h3 id="slack-statuses">Slack statuses</h3>
<p>Date: June 17</p>
<p>Eventually, we decided that Status Hero was more burden than help and we ditched it. To fill the gap that it left, we&rsquo;re trying to update our Slack statuses more often - sort of like the old AOL Instant Messenger away messages - to keep teammates up to date on what we&rsquo;re working on.</p>
<p>So far, it&rsquo;s working pretty well, although the jury&rsquo;s still out as to whether people will continue to be so diligent in updating these messages. Strangely enough, I think the fun of picking an emoji for your current work is a big plus and may help this stick.</p>
<h3 id="future">Future</h3>
<p>We still have lots of work left to do in the future. I fully expect that what works now for 5 ½ people won&rsquo;t work well for 10, 20, or 100 people.</p>
<p>Probably the biggest three pain points that I feel are:</p>
<ul>
<li>We don&rsquo;t have a clear enough accounting of how much work is left until important business milestones</li>
<li>We need better processes to ensure clean hand-offs between product/design and engineers</li>
<li>We need a way to quickly and thoroughly give story point estimates for issues. Doing it at the sprint kick-off takes too long and there&rsquo;s too much pressure to &ldquo;move on to the next task&rdquo;</li>
</ul>
<p>With that being said, I&rsquo;m optimistic that we can find ways to tackle these problems too!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>The Pomodoro Technique in practice</title>
      <link>https://www.zeptonaut.com/posts/the-pomodoro-technique/</link>
      <pubDate>Tue, 01 Oct 2019 04:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/the-pomodoro-technique/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>Soon after switching my major to computer science at Michigan State, I realized I was spending too much unproductive work time at my computer.</p>
<p>Sometimes after writing code for an hour, I&rsquo;d step away only to realize that I hadn&rsquo;t accomplished anything meaningful since I sat down.</p>
<p>Other times, I&rsquo;d quickly check the news while my code compiled. When I remembered to go back to work, I&rsquo;d find that the compilation finished ten minutes ago.</p>
<p>In short, I wasn’t focused enough.</p>
<p>A friend recommended I try out the Pomodoro Technique. Its prescription is simple: devote 100% of your focus to a clear task for a fixed amount of time, then take a break. Its name - the Pomodoro Technique - refers to the tomato-shaped kitchen timer the creator used to track his focus time as a student. (Pomodoro means tomato in Italian.)</p>
<p>Over the last ten years, I’ve implemented and dropped so many productivity habits that Erin (somewhat ironically) calls me a self-help junkie. Through that, the Pomodoro Technique has remained at the center of my productivity workflow. Above all, it’s effective at squeezing out the nebulous, unproductive middle ground that can unobtrusively slide between work and leisure.</p>
<p>If you’ve never heard of the technique before, perhaps this post can sway you to try it. Whether you’re a wee cherry tomato or an experienced beefsteak (is this metaphor working?), I hope this post helps you make the most of the Pomodoro Technique.</p>
<h1 id="so-what-is-the-_actual_-pomodoro-technique">So what is the <em>actual</em> Pomodoro Technique?</h1>
<p>Okay, I may have oversimplified above. The actual Pomodoro Technique is as follows:</p>
<ol>
<li>Choose a task to work on</li>
<li>Start a timer for 25 minutes</li>
<li>Devote 100% of your focus to completing the task. If you get distracted, jot down whatever distracted you for later and get back to work.</li>
<li>When the timer rings, take a 5 minute break. Add a tally mark on a piece of paper to indicate that you’ve completed one “pomodoro” (one block).</li>
<li>After every fourth block, take a longer 25 minute break.</li>
</ol>
<p>As with all techniques, though, the devil is in the details. Here’s what I’ve found.</p>
<h1 id="a-crisp-task-definition-is-critical">A crisp task definition is critical</h1>
<p>A “crisp task” is one that:</p>
<ul>
<li>Is accomplishable within a single block</li>
<li>Makes it excruciatingly clear what the action associated with the task is. <strong>Not crisp:</strong> “Decide on my future profession”. <strong>Crisp:</strong> “Come up with a list of five potential professions with 1-2 sentence descriptions of why each might be a good fit for me”</li>
</ul>
<p>I’ve found that time spent upfront clarifying the task pays outsized dividends when you get to work. I’ve also found it’s <em>much</em> easier to decide on a crisp task before you sit down at your desk.</p>
<h1 id="different-tasks-call-for-different-block-lengths">Different tasks call for different block lengths</h1>
<p>I usually work in either 25 minute or 50 minute blocks. The key decider of the block length is this question: “How likely am I to be going down a stupid path at the end of this amount of time, even if I’m 100% focused?” The more likely I am to be doing something stupid, the shorter the block needs to be. Otherwise, I’ll get tired and lose the mindfulness required to make good decisions.</p>
<p>For tasks like debugging a program, I <em>often</em> find I’ve gone down a stupid path at the end of even 25 minutes. This stands in contrast to writing, when I’m generally still humming along a good path at the end of 50 minutes. Writing in 25 minute chunks feels too choppy.</p>
<h1 id="if-you-fail-to-complete-the-task-within-a-block-strongly-consider-breaking-the-task-down-further">If you fail to complete the task within a block, strongly consider breaking the task down further</h1>
<p>These situations usually fall into a few categories:</p>
<ul>
<li>Type 1: I just need a minute or two more to finish the task. In this case, I’ll finish it before my break.</li>
<li>Type 2: The task was a little bit harder than I thought and I need another 10 or 20 minutes to finish it. In this case, I’ll take my break now and work on the task for another block.</li>
<li>Type 3: The task was much harder or more ambiguous than I thought. In this case, I find it’s incredibly important to break the task apart into something that’s less ambiguous and accomplishable in a single block.</li>
</ul>
<p>For me, there’s a huge temptation to say that a type 3 task is actually a type 2. To counteract this, I try to err on the side of breaking tasks apart: a too-small task is motivating, whereas a too-large task is daunting and can lead to procrastination.</p>
<h1 id="before-starting-your-break-set-a-timer-for-when-it-will-end">Before starting your break, set a timer for when it will end</h1>
<p>Otherwise, it can be too easy for a five minute break to stretch into a 15 (30, 45, &hellip;) minute break.</p>
<p>I like going for walks. Walks make Charlie happy.</p>
<h1 id="try-it-out">Try it out!</h1>
<p>There are still aspects of this technique I haven’t nailed down: how should  awkward chunks of time between appointments be handled? Should blocks be shorter at the beginning of the day when getting started is most daunting? If you&rsquo;re blocked on a task because someone isn’t responding, how long should you wait before switching tasks? These are all questions that still stump me.</p>
<p>It&rsquo;s certainly not a complete or perfect system, but it&rsquo;s the best one I&rsquo;ve found so far.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Episode 3: The one where I skip way ahead and start finishing a railing</title>
      <link>https://www.zeptonaut.com/posts/episode-3-the-stairs/</link>
      <pubDate>Mon, 04 Jun 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/episode-3-the-stairs/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>When Erin and I remodeled our condo from a loft into a two bedroom, we tore out the modern stainless steel railings that didn&rsquo;t match our new traditional aesthetic. We also had our painter paint the risers the same color as our trim, replaced the stair skirt with one that matched our new baseboards, and hired someone to refinish the treads to match the cherry floors in the rest of the house.</p>
<p>All of this transformed our stairs from looking like this:</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3036"
         style="aspect-ratio: 3036 / 4048"
         
           src="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20170911_084712.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="1536"
         style="aspect-ratio: 1536 / 2048"
         
           src="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_1473.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>to looking like this:</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3813"
         style="aspect-ratio: 3813 / 2860"
         
           src="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/MVIMG_20171221_105543.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3024"
         style="aspect-ratio: 3024 / 4032"
         
           src="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_220235.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>However, we never replaced the railing. After watching a few too many guests nervously butt-scoot down the stairs, we decided it was time to do so.</p>
<p>I wussed out on installing the banister myself and instead hired Macomb Stairs &amp; Millwork to do it. Within a month, they were able to fit us in. It took them about two hours and a lunch break to install the banister. Impressive.</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3024"
         style="aspect-ratio: 3024 / 4032"
         
           src="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_172423.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>Erin and I are thrilled with how it came out.</p>
<p>Unfortunately, Macomb Stair doesn&rsquo;t paint or stain banisters. We want to stain the handrail to match the floor but paint the newels (the thick vertical posts) white to match our trim. This would require two different contractors (a painter and a wood finisher) and would likely be close to as expensive as the banister itself. Because of this, I&rsquo;m going to tackle it myself.</p>
<p>I started by going to Woodcraft in Canton, where the clerk recommended using a gel stain on the handrail. The benefit of using a gel stain over a traditional stain is that gel stains are actually just colored varnishes that sit on top of the wood, whereas traditional stains soak into the wood. Poplar, which our bannister is made of, is notorious for accepting stain poorly, resulting in a splotchy look. Because gel stain just sits on top, though, it allows you to achieve a much more consistent color over woods that usually stain poorly.</p>
<p>The clerk recommended using the General Finishes Georgian Cherry gel stain. This stain matches the darker parts of our floor very well - too well, in fact. Our refinished treads are a little oranger than our floors and, because of that, the Georgian Cherry gel stain matches the old floors but doesn&rsquo;t quite match the new treads.</p>
<p>Here&rsquo;s a sample board that I stained with the Georgian Cherry stain with a backdrop of our stair treads. The left side of the board received one coat of gel stain and the right side two.</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4032"
         style="aspect-ratio: 4032 / 3024"
         
           src="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180604_192353.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>You can also see that there&rsquo;s a lot of variation in color on the side with one coat. I suspect that&rsquo;s because I was a little stingy with the pre-stain wood conditioner that&rsquo;s supposed to make the wood less porous, giving a more even finish.</p>
<p>To better match the color of the wood, I also picked up some mahogany gel stain which is a little oranger. I read online that you can mix gel stain colors and I tried a few different ratios of Georgian Cherry to Mahogany to find which matches best.</p>
<p>However, none of them looked right.</p>
<p>Refusing to accept defeat, I went to Home Depot and picked up two new gel stains: Minwax Cherrywood and Minwax Mahogany. I created a new poplar sample piece where I used the Minwax Cherrywood for most of the first coats and tried various other stains for the second coat.</p>
<p>This gave me this sample piece:</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4032"
         style="aspect-ratio: 4032 / 3024"
         
           src="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-3-the-stairs/images/IMG_20180609_145212.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>It&rsquo;s a little hard to see here, but there are five different sections with different stain combinations. From farthest to closest, they are:</p>
<ol>
<li>Minwax Cherrywood for both coats</li>
<li>Minwax Cherrywood first coat, General Finishes Georgian Cherry second coat</li>
<li>Minwax Cherrywood first coat, Minwax Mahogany second coat</li>
<li>Minwax Cherrywood first coat, General Finishes Mahogany second coat</li>
<li>Minwax Mahogany for both coats</li>
</ol>
<p>I think either 3) or 4) are close enough matches, but I ultimately chose 3) as the closest match because I thought the light cherry undertones peeked through a little more with the Minwax Mahogany than the General Finishes mahogany, which matched the stair treads slightly better.</p>
<p>So I finally have my color! Time to move forward with doing some real work. In the next installment, I&rsquo;ll prep and stain the railing.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Episode 2: The one where we rough the second bedroom in</title>
      <link>https://www.zeptonaut.com/posts/episode-2-the-second-bedroom/</link>
      <pubDate>Sun, 17 Sep 2017 08:11:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/episode-2-the-second-bedroom/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>When I last wrote, our second bedroom had a floor but not much else.</p>
<p>Here’s what our condo looks like, all the way from when we originally bought it until Friday night:</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120103.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3036"
         style="aspect-ratio: 3036 / 4048"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120140.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120153.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3036"
         style="aspect-ratio: 3036 / 4048"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120205.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120227.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120407.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120412.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3036"
         style="aspect-ratio: 3036 / 4048"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120501.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3036"
         style="aspect-ratio: 3036 / 4048"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170819_120547.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_101439.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3036"
         style="aspect-ratio: 3036 / 4048"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_174007.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184431.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170909_184502.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170910_181142.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3036"
         style="aspect-ratio: 3036 / 4048"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170915_213557.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>It was also looking likely that it would stay this way for a while. My Uncle Mike, who’s installing the second bedroom for us, was busy this weekend. I was busy for the next two weekends, and he was busy for the subsequent two. This meant that we wouldn’t get the second bedroom roughed in until late October. (For those like me that have no idea what “roughed in” means, it’s when the floor joists, plywood floor sheets, and wall studs are installed.)</p>
<p>This past week, I was worried about this. Most of the remaining projects, like the electrical work, installing drywall, painting, and installing trim on the second floor can only be done after the second bedroom is roughed in. To further complicate things, some of those jobs require coordination with contractors, which nudges the difficulty of their scheduling into “hellish” territory.</p>
<p>Take the electrical work, for example: we need an electrician to work on our condo twice before we’re finished. The first time he visits, the second bedroom needs to be roughed in but without drywall so that he can route the power through the studs without having to cut open and then patch drywall, which would be more time consuming and therefore expensive. The second time he visits, all drywall needs to be up but not painted so that he can do his finish work: cutting holes and placing the canisters for recessed lights, adding the switch covers, and so on. In total, he estimated this would take about a day and a half.</p>
<p>At the estimate, the electrician told me to call him when he could come out for his first visit. If I called him in late October, and it took a week for him to come in, and then we put up drywall, you can begin to see how vanishingly unlikely it was that we could hit our target move in date of early November.</p>
<p>So, you can imagine my relief when Uncle Mike texted me on Friday asking “What time in the morning”. I worried that if I acknowledged that I thought he was busy this weekend, he might agree that indeed doing <em>anything</em> sounded better than working on Saturday and instead decide to go to the park with his dog. So instead, I just replied “Is 9 too early? I’m not picky”, and we settled on that.</p>
<p>On Friday night, my Dad graciously helped me prepare for Uncle Mike coming on Saturday by ripping out the upstairs trim. One thing I’ve learned so far is that, if you’re relying on a skilled tradesperson with a tight schedule to help you out, try to do as much of the menial work beforehand as possible. It ain&rsquo;t glorious - boring cleaning and running around may not feel like real work - but much of it would take the skilled tradesperson as long as it’d take you, and their time is a heck of a lot more valuable.</p>
<p>So thankfully, Uncle Mike was able to start working shortly after he arrived yesterday morning and boy did he get a lot done. While I acted as an extra set of hands - holding the tape measure somewhere, moving materials, tearing out drywall that he cut, cleaning, keeping him well fed and hydrated - he roughed in the entire second bedroom. This includes a closet with a “step” in it, an idea I stole from our neighbors across the hall, giving a bigger closet and providing sufficient clearance while walking down the stairs. The amount of work that he got done in a grueling, 10.5 hour day was truly impressive, and Erin and I are incredibly appreciative of his work.</p>
<p>He also showed me how to cut trim with his miter saw and install it. I think I got the gist of it, but have no doubt that I’m going to run into some trouble based on his many sentences that started with “Obviously” or “You can see here” when in fact the point he was making didn’t seem obvious and in fact I couldn’t really see there. I asked lots of questions when they seemed important, but also realized that a lifetime’s worth of experience installing trim couldn’t be summarized in 45 minutes to a nincompoop who had never used a saw before. I figure that I’ll have to make some mistakes for myself before I can truly appreciate the more nuanced points, but I’m at least now confident that I can use the miter saw without losing fingers. I even managed to install the new casing on a door and a half and can already feel myself moving faster.</p>
<p>Lastly, my Dad stopped by to help even more. I’m going to try to paint our cabinets (more on that later), so he sanded down the doors of the cabinets we’re going to replace in order to give me a few to practice on. He also ripped up the hardwood floor covering half of our second bedroom and knocked out half of of a wall between the second bedroom and the stairwell, which will allow us to more easily install the new drywall.</p>
<p>Here are a few pictures from the day:</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_161300.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3036"
         style="aspect-ratio: 3036 / 4048"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193314.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193327.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193338.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="4048"
         style="aspect-ratio: 4048 / 3036"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_193351.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>





<figure>
    <img alt=""
         title=""
         
           loading="lazy"
           fetchpriority="high"
         
         decoding="async"
         width="3036"
         style="aspect-ratio: 3036 / 4048"
         
           src="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1800"
           srcset="https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=200 200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=300 300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=400 400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=500 500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=600 600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=700 700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=800 800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=900 900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1000 1000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1100 1100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1200 1200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1300 1300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1400 1400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1500 1500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1600 1600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1700 1700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1800 1800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=1900 1900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2000 2000w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2100 2100w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2200 2200w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2300 2300w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2400 2400w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2500 2500w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2600 2600w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2700 2700w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2800 2800w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=2900 2900w,
                    https://zeptonaut.imgix.net/posts/episode-2-the-second-bedroom/images/IMG_20170916_201435.jpg?fit=max&auto=format&q=80&w=3000 3000w"
         
         sizes="min(100vw, 600px)"
    />
    
</figure>

</p>
<p>All in all, we made a ton of progress, and I’m relieved that we’re able to call the electrician now to schedule a first visit. In the meanwhile, there are a lot of projects that I can make progress on - learning to use the paint sprayer, painting the cabinets and windows, priming the first floor walls, installing the first floor trim- that thankfully don’t rely on the second bedroom being installed.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Episode 1: The one where I start blogging mid-renovation</title>
      <link>https://www.zeptonaut.com/posts/2017-09-13-episode-1/</link>
      <pubDate>Wed, 13 Sep 2017 21:37:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2017-09-13-episode-1/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>In early August, Erin and I were thrilled to close on a condo in Midtown Detroit. We’d been looking for a two bedroom place for a while that was near to Children’s Hospital where she works and could fit our needs for the next few years.</p>
<p>One of our must-haves in our home was two bedrooms: in the short-term, we can use that second bedroom as a guest bedroom and office. In the long-term, we can turn it into a nursery for baby Andrews.</p>
<p>However, the home that we ultimately purchased was a spacious one bedroom, two floor loft. The reason for this is that the affordable options in the neighborhood were sparse and that I noticed in the walkthrough that this condo could be trivially converted into a two bedroom. Erin’s Uncle Mike, a lifelong carpenter, confirmed this in the second walkthrough and offered his help in the project. We now know that the reason for the easy conversion is that the condo was in fact originally a two bedroom before it was renovated by an architect into a hip loft. Well, we’re not hip, and what’s done be undone. Looking back, though, I do question my judgment in using the word &ldquo;trivially&rdquo; to describe any project as seemingly large as adding a second bedroom, even with the help of an experienced carpenter.</p>
<p>In addition to the structural changes, Erin and I wanted to make a number of updates that would make the condo better fit our style - somewhere between Erin’s traditional tastes and my contemporary ones. It’s plenty livable now, but we’re excited to have a home that we can make changes to, and many of these changes are a heck of a lot easier to make while we’re still living with her parents than after we move in.</p>
<p>So fast forward a month to now. I’ve done deep research on various topics - I know more about natural countertops than I frankly care to - and made some early decisions. We’ve also begun actual work on the condo in earnest, although that first hammer swing that took the condo from livable to &ldquo;under construction&rdquo; was admittedly gut-wrenching.</p>
<p>The short list of things we’ve actually accomplished:</p>
<ul>
<li>
<p>Chosen and met with a decorator, who’s helped us form a list of what we’d like to update before moving in</p>
</li>
<li>
<p>Selected new trim (baseboards, crow mouldings, and door casings) to install</p>
</li>
<li>
<p>Purchased that new trim and schlepped it to the condo</p>
</li>
<li>
<p>Ripped out the old quarter-rounds and baseboards</p>
</li>
<li>
<p>Received a paint estimate and booked a painter for late October / early November</p>
</li>
<li>
<p>Chosen an electrician and received an estimate on how much the wiring will cost for the second bedroom change</p>
</li>
<li>
<p>Bought some tools, like <a href="https://www.amazon.com/Fuji-2202-Semi-PRO-Spray-System/dp/B00D4NPMJE/ref=sr_1_15?ie=UTF8&amp;qid=1505352568&amp;sr=8-15&amp;keywords=paint+sprayer+hvlp">a professional paint sprayer</a> (which I’ll likely sell when I’m done), <a href="https://www.amazon.com/Bosch-ROS20VSC-Random-Sander-Carrying/dp/B00BD5G9VA/ref=sr_1_7?s=hi&amp;ie=UTF8&amp;qid=1505352600&amp;sr=1-7&amp;keywords=random+orbit+sander">a random orbit sander</a>, and <a href="https://www.amazon.com/BLACK-DECKER-BDEMS600-Detail-Sander/dp/B00OJWLNMO/ref=sr_1_4?s=hi&amp;ie=UTF8&amp;qid=1505352624&amp;sr=1-4&amp;keywords=detail+sander">a detail sander</a></p>
</li>
<li>
<p>Borrowed some other tools that I’ll need, like a miter saw, air compressor, and nail guns</p>
</li>
<li>
<p>Purchased the joists, 2x4s, plywood, drywall, etc. that’s required to convert the condo from a loft to a two bedroom</p>
</li>
<li>
<p>Schlepped those materials to the condo (thanks to the enormous help of my friends Andrew and Dan)</p>
</li>
<li>
<p>Built out a floor for the second bedroom (and by &ldquo;built&rdquo;, I mean “watched Uncle Mike build”). Ladder holding counts as work, folks.</p>
</li>
<li>
<p>Stripped the wall between the staircase and the upstairs down to its original studs, removing 4 inches or so of wall</p>
</li>
<li>
<p>Wrote a short post about what I accomplished so far</p>
</li>
</ul>
<p>This list pales in comparison to what we still have to do, though. To list a few of the biggies:</p>
<ul>
<li>
<p>Add studs for the wall and closet to the second bedroom</p>
</li>
<li>
<p>Install the drywall in the second bedroom (and the newly-created ceiling in the first floor)</p>
</li>
<li>
<p>Mud and sand that drywall</p>
</li>
<li>
<p>Refinish the stairs</p>
</li>
<li>
<p>Decide with our decorator on paint colors</p>
</li>
<li>
<p>Install all of the new trim</p>
</li>
<li>
<p>Paint all of the new trim</p>
</li>
<li>
<p>Order new, taller cabinet uppers</p>
</li>
<li>
<p>Paint all of the new and old cabinets</p>
</li>
<li>
<p>Paint all of the walls</p>
</li>
<li>
<p>Possibly move the washer/dryer from the walk-in closet of the master bedroom to the upstairs hallway, which will require moving a wall</p>
</li>
<li>
<p>Choose a new countertop for part of our kitchen</p>
</li>
<li>
<p>Rip out the old backsplash and install a new one</p>
</li>
</ul>
<p>Suffice to say, we have a long way to go.</p>
<p>So why start blogging about the experience now, part-way through the process? Honestly, the reason is purely a selfish one: in the few past home improvement projects I’ve done, I have a tendency to move too fast or too slow after the initial novelty of the project wears off. However, when I write something down for a broader audience, I trick my brain and end up holding myself to a higher standard. I hope that by publishing what I learn, I’ll push myself to move as quickly as possible and as slowly as necessary to do the job right.</p>
<p>In a future post, I’ll probably post some pictures of the place as well as some progress photos of the work I’ve done. I’ll save that for episode two, though.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Re: Retaining Walls, extra lane could be in works for I-94</title>
      <link>https://www.zeptonaut.com/posts/2016-11-15-about-i94/</link>
      <pubDate>Tue, 15 Nov 2016 14:25:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2016-11-15-about-i94/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>(This is a copy of the email that I sent to Eric Lawrence, author of the article linked to below.)</p>
<p>Hi Eric,</p>
<p>I&rsquo;m incredibly concerned about the $2.9B MDOT plans you wrote about in <a href="http://www.freep.com/story/news/local/michigan/detroit/2016/11/14/retaining-walls-extra-lane-i94-project/93798116/">Retaining walls, extra lane could be in works for I-94</a>.</p>
<p>MDOT&rsquo;s reason for widening the highway resonates well with common sense: if traffic is expected to grow, and the road is currently two lanes wide, then surely widening it to three lanes should help?</p>
<p>However, this ignores a well-known, subtle truth that many traffic engineers ignore known as &ldquo;induced demand&rdquo;. At its core, induced demand says that congestion effectively remains constant because, if you increase a road&rsquo;s throughput, people will drive more and ultimately make the road as congested as it was before.</p>
<p>The Texas Transportation Institute summarized the phenomenon well in <a href="http://www.daclarke.org/AltTrans/analysis.html">this study</a>:</p>
<blockquote>
<p><strong>Metro areas that invested heavily in road capacity expansion fared no better in easing congestion than metro areas that did not</strong>. Trends in congestion show that areas that exhibited greater growth in lane capacity spent roughly $22 billion more on road construction that those that didn&rsquo;t, yet ended up with slightly higher congestion costs per person, wasted fuel, and travel delay.</p>
</blockquote>
<p>Because of induced demand, planners in Great Britain are no longer allowed to justify new highways on the basis of reduced congestion. Confusingly, in Michigan they still are.</p>
<p>I&rsquo;m not suggesting that we let I-94 languish: if the road is in disrepair, then by all means it should be refinished. Perhaps it&rsquo;s necessary to redesign some of the (treacherous) entrance ramps for the freeway. But before we embark on a 17 year project that costs enough money to kickstart a real light rail system for Detroit, we should strongly consider evidence that suggests that the current plan won&rsquo;t have the desired effect.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Sharing work between computers with Git</title>
      <link>https://www.zeptonaut.com/posts/2015-7-27-sharing-work-git/</link>
      <pubDate>Mon, 27 Jul 2015 15:18:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2015-7-27-sharing-work-git/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>Since I&rsquo;ve started working more on <a href="https://github.com/google/trace-viewer/">Trace Viewer</a>, there have been plenty of times when I&rsquo;ve wanted to share work on a feature branch between my desktop and laptop before sending that work out to the world for code review.</p>
<p>I originally did this by pushing my feature branch to the project&rsquo;s public Git repo from one computer and fetching that branch from the other computer.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#75715e"># On my desktop, after making commits...</span>
git push origin my_feature_branch

<span style="color:#75715e"># Later, on my laptop...</span>
git fetch origin
git checkout -b my_feature_branch origin/my_feature_branch</code></pre></div>
<p>This is problematic, though, if the project you&rsquo;re working on doesn&rsquo;t like your ugly work-in-progress branches polluting its public repo.</p>
<p>The solution is to do this same push-fetch dance with a fork of the main repo instead of the main repo itself.</p>
<p>At a high level, here are the steps:</p>
<ol>
<li>Create the fork. In Github, you go to the project&rsquo;s page and click the &ldquo;fork&rdquo; button.</li>
<li>Add the fork as a remote repo on your desktop&rsquo;s repo.</li>
<li>Add the fork as a remote repo on your laptop&rsquo;s repo.</li>
</ol>
<p>In practice, it looks like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#75715e"># 1) Create the fork.</span>

<span style="color:#75715e"># 2) Add the fork as a remote repo on your desktop&#39;s repo.</span>
<span style="color:#75715e">#    Inside the my-repo project on your desktop...</span>
git remote add fork &lt;your_fork_url&gt;

<span style="color:#75715e"># 3) Add the fork as a remote repo on your laptop&#39;s repo.</span>
<span style="color:#75715e">#    Inside the my-repo project on your laptop...</span>
git remote add fork &lt;your_fork_url&gt;</code></pre></div>
<p>Replace <code>&lt;your_fork_url&gt;</code> with the SSH clone URL found on your fork&rsquo;s Github project page.</p>
<p>Now you can do things like:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#75715e"># In my-repo on your desktop...</span>
git checkout -b add_readme
echo <span style="color:#e6db74">&#34;This project loves Git!&#34;</span> &gt;&gt; README.md
git commit -am <span style="color:#e6db74">&#34;Adds to the README.&#34;</span>

git push fork add_readme

<span style="color:#75715e"># In my-repo on your laptop...</span>
git fetch fork
git checkout -b add_readme fork/add_readme
cat README.md
<span style="color:#75715e"># ...</span>
<span style="color:#75715e"># This project loves Git!</span></code></pre></div>
<p>You can do the same thing in the opposite direction, too.</p>
<p>Pretty nifty!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>The 7 Habits summarized</title>
      <link>https://www.zeptonaut.com/posts/2015-07-17-summary-7-habits/</link>
      <pubDate>Fri, 17 Jul 2015 12:36:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2015-07-17-summary-7-habits/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>I just finished reading <em>The 7 Habits of Highly Effective People</em> by Stephen R. Covey and thought it&rsquo;d be nice to have a short blog post to look back on to remind me what the book&rsquo;s maxims actually mean. The 7 habits are:</p>
<h1 id="be-proactive">Be proactive.</h1>
<p>Accept control of your life and focus on the things that you can control (your “circle of influence”) rather than the things that affect you (your “circle of concern”). Make and keep commitments to yourself and others; by doing so, you grow your circle of influence and build sense of personal honor that helps you to keep commitments even when you don’t feel like it.</p>
<h1 id="begin-with-the-end-in-mind">Begin with the end in mind.</h1>
<p>For all important projects, clearly define what success looks like and keep that definition at the center of your work. Life is your most important project: it’s critical that you do define what success in your life means. Imagine how you want others to describe you at your funeral and write a constitution describing the characteristics that would merit such a description. Memorize and strictly adhere to that constitution. Spend time each day to review it and visualize the minutiae of life under it. Following these steps will ensure that you aren’t making progress towards the wrong goal.</p>
<h1 id="put-first-things-first">Put first things first.</h1>
<p>Now that you’ve clarified your principles and values, effective self-management around them is the primary determinant of whether you’ll reach your goals. A key component of this is to distinguish importance from urgency. Ineffective self-managers often fail to prioritize non-urgent but important tasks and decline urgent but unimportant tasks.</p>
<p>A good strategy to focus on what’s important each week is:</p>
<ul>
<li>Determine the roles that you need to fulfill for the week.</li>
<li>Determine when you’ll fulfill each of those roles.</li>
<li>As things come up, rearrange your schedule around those roles.</li>
<li>Follow your schedule.</li>
</ul>
<p>Delegation is also key to accomplishing these goals, but effective delegation requires growing stewards rather than drafting gofers.</p>
<h1 id="think-winwin">Think win/win.</h1>
<p>In every negotiation involving another party, seek a solution that’s mutually beneficial. Try not to view problems as having binary solutions or being zero-sum; often times, there are less obvious paths that are ultimately more agreeable. Finding these paths requires a clear understanding of what each party wants. If no such mutually beneficial solution can be found, walk away.</p>
<p>Remember that public victory does not mean success over other people; it means moving towards a mutually beneficial results.</p>
<h1 id="seek-first-to-understand-then-to-be-understood">Seek first to understand, then to be understood.</h1>
<p>Sincerely aim to fully understand the viewpoint of the person that you’re communicating with. Listen empathetically. Their concerns are valid - figure out why. A great way to do this is to rephrase content and reflect emotion. It sounds like:</p>
<p>“Dad, I’ve had it! School is for the birds!”
“Ah, you’re feeling really frustrated about school.”</p>
<p>When doing this, let the other person speak. Don’t just look for an opportunity to respond. Avoid giving advice unless asked. Instead, try to help the other person to find their own solutions. If the other person is in a position where advice would be useful, they’ll ask. Lastly, if you find yourself in a conversation in which you’ve violated these rules, apologize and ask to restart.</p>
<p>Presentations are a great opportunity to use these skills: allow the person you’re trying to influence to fully explain their viewpoint, and then rephrase it back to them, confirming that you understand where they’re coming from. They’ll be much more likely to accept whatever solution you propose if they know that you understand and respect their concerns. Accept that this means you’ll be influenceable; this is key to being influential. Logic is surprisingly unimportant in influencing others.</p>
<h1 id="synergize">Synergize.</h1>
<p>Seek out moments of synergy, when things take a turn for the unexpected and fantastic. These experiences often begin with someone extreme honesty, authenticity, and courage and end with immense creativity and a close brush with chaos. Empathy is key to creating these situations; you have to allow someone else’s world view to influence your own. This creates a new and potent idea cocktail. And when trying to create synergy, “Seek not to imitate the masters, rather seek what they sought.”: look for new synergistic experiences rather than trying to recreate past ones. Find others that have different viewpoints and try to understand how they see the world. And, when trying to communicate these people, don’t be defensive or even just respectful: be empathetic.</p>
<h1 id="sharpen-the-saw">Sharpen the saw.</h1>
<p>Constantly focus on improving the primary areas of life:</p>
<ul>
<li><strong>Physical</strong>: Eat healthily. Exercise regularly and sustainably. Find ways to manage stress.</li>
<li><strong>Social/emotional</strong>: Live your life in service of others. Practice empathy. Synergize. Rely on instrinsic rather than extrinsic motivation.</li>
<li><strong>Mental</strong>: Allocate time to learn new things. Read good literature. Write frequently to practice crystallizing your thoughts. Live deliberately through planning. Grow your mental discipline.</li>
</ul>
<p>By continuously learning, committing to worthwhile things, and meeting those commitments, you get caught in an incredibly beneficial upward spiral.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>A personal constitution</title>
      <link>https://www.zeptonaut.com/posts/2015-7-1-personal-constitution/</link>
      <pubDate>Wed, 01 Jul 2015 15:14:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2015-7-1-personal-constitution/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been reading <em>The 7 Habits of Highly Effective People</em> by Stephen R. Covey over the past few days and have loved it.</p>
<p>I&rsquo;m probably a little over-enthusiastic about these types of self-help books. I read <em>How to Win Friends and Influence People</em> by Dale Carnegie and talked about it obnoxiously to my friends, but found as I tried to apply its lessons that I need to basically reread the book continuously to remember all of its many lessons. That&rsquo;s the biggest reason I like <em>7 Habits</em>: my memory&rsquo;s terrible, and this way I don&rsquo;t have to remember as much.</p>
<p>The second habit in the book is <em>&ldquo;Begin with the end in mind&rdquo;</em>. Essentially, Covey suggests that you begin all important projects by clearly defining <em>in writing</em> what success looks like. Then, as you work on the project, you should frequently review the success criteria and make sure that you&rsquo;re on track.</p>
<p>Given that life is essentially one big project, he suggests having such criteria for your life. <em>When you die, how do you want your life to have been lived? What are some principles you should live by in order to live such a life?</em></p>
<p>He encourages readers to actually write these things down as a sort of personal constitution, review that consitution regularly, and curate it over time.</p>
<p>Here&rsquo;s what my first attempt looks like (with some points unabashedly borrowed from Rolfe Kerr&rsquo;s personal creed in the book):</p>
<ul>
<li>Succeed at home first.</li>
<li>Seek and merit divine help.</li>
<li>Never compromise with honesty.</li>
<li>Seek to earn the trust of yourself and others.</li>
<li>Know and meet your obligations.</li>
<li>Listen twice as much as you speak.</li>
<li>Defend those who are absent.</li>
<li>Care for what belongs to you. Care for what belongs to others as if it were your own.</li>
<li>Be stubbornly positive.</li>
<li>Develop one new proficiency each year.</li>
<li>Focus on one task at a time.</li>
<li>Start with small wins to build momentum.</li>
<li>Hustle while you wait.</li>
<li>Ask for help when necessary. Don’t shy away when it’s offered.</li>
<li>Be generous with your time and money. Don’t squander either.</li>
<li>Keep self-praise to yourself.</li>
<li>Be the first to criticize yourself and the last to criticize others.</li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>Org everywhere</title>
      <link>https://www.zeptonaut.com/posts/2015-3-27-org-everywhere/</link>
      <pubDate>Fri, 27 Mar 2015 17:15:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2015-3-27-org-everywhere/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>In the world of <em>Getting Things Done</em>, I&rsquo;ve found that Emacs&rsquo;s org mode is second-to-none in terms of low-friction task managers. One thing that David Allen stresses in the book is that even a tiny amount of friction in the tasks that you have to do frequently when staying organized is enough to prevent you from staying organized. At least for me, this is very, very true because I am incredibly, incredibly lazy.</p>
<p>What makes org mode great is that whenever you find yourself issuing a command reguarly that takes a few too many keystrokes, you can write a tiny bit of Elisp to turn that command into a single shortcut. This luxury doesn&rsquo;t exist with non-digital implementations of GTD (it&rsquo;s tough to write Elisp to open a file drawer, put something into the waiting category, and close the file drawer, although Perl may get the job done).</p>
<p>The somewhat nasty thing about org mode, though, is that it&rsquo;s a little tough to get set up on your phone. There are a couple ways to do so, but I&rsquo;ve found the easiest to be through <a href="http://mobileorg.ncogni.to/">MobileOrg</a> and <a href="https://www.dropbox.com/">Dropbox</a>.</p>
<p>MobileOrg is a fairly simple editor for org files on your phone. It has a drop-in connection for Dropbox, so if you store your org files there, you can access them from multiple computers and your phone.</p>
<p>Here are the basic steps in getting this combination set up, assuming that you already have org-mode set up on your computer:</p>
<ul>
<li>
<p><a href="https://www.dropbox.com/login">Sign up for a Dropbox account.</a></p>
</li>
<li>
<p><a href="https://www.dropbox.com/install">Download the Dropbox app for your computer.</a> This app makes your Dropbox file system accessible as a normal folder on your computer. You&rsquo;ll want to do this on each computer that you&rsquo;ll be editing org mode files on.</p>
</li>
<li>
<p>Create a folder in your Dropbox folder that will store your org files. I use <code>$HOME/Dropbox/org</code>.</p>
</li>
<li>
<p>Create a folder in your Dropbox folder that will store your org files that have been exported for the mobile app. I use <code>$HOME/Dropbox/mobileorg</code>.</p>
</li>
<li>
<p>In your <code>.emacs</code> file, add the following line to let Emacs know where you want to export your mobile org files to:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">  (setq org-mobile-directory <span style="color:#e6db74">&#34;~/Dropbox/mobileorg&#34;</span>)
  </code></pre></div></p>
</li>
<li>
<p>Set your <code>org-agenda-files</code> variable to the folder where you&rsquo;re storing your org files. You&rsquo;ll know it&rsquo;s set correctly when you can run <code>org-iswitchb</code> to switch between your different org mode files. You can set it by adding the following line to your <code>.emacs</code> file:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">  (setq org-agenda-files (<span style="color:#a6e22e">list</span> <span style="color:#e6db74">&#34;~/Dropbox/org/projects&#34;</span>))
  </code></pre></div>
</li>
<li>
<p>Create a sample org mode file to test that everything&rsquo;s hooked up correctly at <code>~/Dropbox/org/projects/test.org</code>. It should read something like:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">  * TODO This task should show up. 
  </code></pre></div>
</li>
<li>
<p>After you&rsquo;ve done this, export your new file by running <code>org-mobile-push</code>. This basically wraps up all of your changes to org files and packages them to be sent to your mobile device.</p>
</li>
<li>
<p>Download the mobile org app on your device. When it asks where to look for your og mode files, choose Dropbox and authenticate with your Dropbox account. When asked what folder to use in your Dropbox file system, choose <code>mobileorg</code>.</p>
</li>
<li>
<p>You should see your sample task on your phone!</p>
</li>
</ul>
<p>One somewhat nasty thing about this system is that you have to run <code>org-mobile-push</code> every time that you want to export your computer&rsquo;s changes to your mobile device, and <code>org-mobile-pull</code> every time that you want to import changes made on your mobile device to your computer. I&rsquo;m still looking for a better system than manually doing this, but for now, I still prefer this to using a less flexible task manager.</p>
<p>Now pardon me - I have to get some things done.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Most qualified</title>
      <link>https://www.zeptonaut.com/posts/2015-2-26-most-qualified/</link>
      <pubDate>Thu, 26 Feb 2015 11:36:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2015-2-26-most-qualified/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>I stumbled across a pretty fantastic comment the other day on Hacker News that I wanted to share. The comment was in response to an article on GPG (GNU Privacy Guard) posted by an encryption expert. The encryption expert explained that he felt it was vitally important that <em>someone</em> create a more usable successor to GPG. Here&rsquo;s user sillysaurus&rsquo;s response to this idea:</p>
<blockquote>
<p>You know you&rsquo;re one of only a few people in the world who is in a position to do that, right? Anyone else would (rightfully!) get torn to shreds on HN by tptacek or yourself. And I say &ldquo;rightfully&rdquo; because it is very likely that other people would screw up some central aspect to the security of any new product that claims security.</p>
<p>It&rsquo;s not just that, though. Anyone else with your knowledge but no standing would be scorched for saying what you just said. &ldquo;Throw away the one thing that has proven to be secure and write our own protocol&rdquo; doesn&rsquo;t go hand in hand with &ldquo;serious cryptographers trust what this person is saying.&rdquo;</p>
<p>The truth is probably that either you do this or nobody will.</p>
<p>You should. The world would be better for it.</p>
</blockquote>
<p>I love this comment because it&rsquo;s such an earnest plea to stop kicking the can down the road. Too often, no one else ever gets around to the task. No one else is more qualified than you are, right now. So stop complaining or get to work.</p>
<p>For those who want to read more, <a href="https://news.ycombinator.com/item?id=9104188">here&rsquo;s a link to the full Hacker News post</a>.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Thou with hammer, whack</title>
      <link>https://www.zeptonaut.com/posts/2014-2-24-thou-with-hammer-whack/</link>
      <pubDate>Tue, 24 Feb 2015 10:24:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2014-2-24-thou-with-hammer-whack/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>Suppose that you&rsquo;ve just acquired some hard-fought knowledge or skill. Maybe you&rsquo;ve made tweaks to a particularly cringeworthy area of your codebase, or finally figured out how to hook up a profiler to the system that you use to run unit tests. Anyhow, you&rsquo;re done and ready to move on. Right?</p>
<p>/shrug</p>
<p>Chances are if you had to fight hard to get this far, most other people turned around a while ago. And if that&rsquo;s the case, you&rsquo;ll look <em>really</em> good if you whack a few easy to spot nails with your shiny new hammer that no one else has any idea how to use.</p>
<p>Practically, this could mean a few things:</p>
<ul>
<li>If you just figured out a swamp of your codebase, clean up the unit tests for it (if they exist and are nasty) or write some new ones (if they don&rsquo;t).</li>
<li>If you had to learn how to do some performance profiling to speed up your code path, try profiling some other really important code paths in your project. There&rsquo;s a good chance that if you had to try really hard to write performant code, some dolt messed it up elsewhere.</li>
</ul>
<p>It may not be worth following the white rabbit for days, but a few hours? Almost certainly.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Playing around with RPCs in Go</title>
      <link>https://www.zeptonaut.com/posts/2015-2-10-golang-rpc/</link>
      <pubDate>Tue, 10 Feb 2015 16:18:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2015-2-10-golang-rpc/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>I spent a bit of today playing around with Go&rsquo;s <a href="http://golang.org/pkg/net/rpc/">RPC package</a>. It&rsquo;s <em>super</em> easy to set up an RPC server in Go.</p>
<p><a href="https://github.com/zeptonaut/golang-rpc-example">Check it out</a>!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>The beauty of numpy</title>
      <link>https://www.zeptonaut.com/posts/2014-2-4-beauty-of-np/</link>
      <pubDate>Wed, 04 Feb 2015 10:56:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2014-2-4-beauty-of-np/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been beefing up on my algorithms lately by trying to finish a programming competition problem a day. And, just for kicks and practice, I&rsquo;ve been doing these problems in python.</p>
<p>I <em>really</em> like python so far. It&rsquo;s quick and dirty and great. The problem though, is that some of the expressiveness that makes it great costs speed. Loads of it. The problem I was working on necessitated working with fairly large data sets, and my program that needed to run in less than two seconds was instead taking 15-20s.</p>
<p>I tried profiling my program with cProfile, and it told me that <em>everything</em> was slow.</p>
<p>So I did what any programmer worth squat does: I looked online for an answer. The interwebs seemed to suggest that writing efficient python requires learning <em><a href="https://numpy.org">numpy</a></em>, a python library that provides efficient ways to work with numbers and matrices. Despite my resistance to learning a new library, I decided that it was worth a try.</p>
<p>In an effort to do as little work as possible, I decided to start by converting only a small portion of my program to use numpy. Here&rsquo;s the portion of my program that reads the input, sans numpy:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">main</span>():
    <span style="color:#66d9ef">while</span> <span style="color:#66d9ef">True</span>:
        m, n <span style="color:#f92672">=</span> map(int, raw_input()<span style="color:#f92672">.</span>split())

        <span style="color:#66d9ef">if</span> m <span style="color:#f92672">==</span> n <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>:
            <span style="color:#66d9ef">break</span>

        live_cells_count <span style="color:#f92672">=</span> int(raw_input())

        live_cells_unpaired <span style="color:#f92672">=</span> []
        <span style="color:#66d9ef">while</span> len(live_cells_unpaired) <span style="color:#f92672">&lt;</span> (live_cells_count <span style="color:#f92672">*</span> <span style="color:#ae81ff">2</span>):
            live_cells_unpaired<span style="color:#f92672">.</span>extend(map(int, raw_input()<span style="color:#f92672">.</span>split()))

        live_cells <span style="color:#f92672">=</span> [live_cells_unpaired[i:i<span style="color:#f92672">+</span><span style="color:#ae81ff">2</span>] <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(<span style="color:#ae81ff">0</span>, len(live_cells_unpaired), <span style="color:#ae81ff">2</span>)]
        generations <span style="color:#f92672">=</span> int(raw_input())

        <span style="color:#75715e"># In form grid[ring][cell]</span>
        grid <span style="color:#f92672">=</span> [[([i, j] <span style="color:#f92672">in</span> live_cells) <span style="color:#66d9ef">for</span> j <span style="color:#f92672">in</span> range(n)] <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(m)]</code></pre></div>
<p>And here&rsquo;s the same portion with numpy:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">main</span>():
    <span style="color:#66d9ef">while</span> <span style="color:#66d9ef">True</span>:
        m, n <span style="color:#f92672">=</span> map(int, raw_input()<span style="color:#f92672">.</span>split())

        <span style="color:#66d9ef">if</span> m <span style="color:#f92672">==</span> n <span style="color:#f92672">==</span> <span style="color:#ae81ff">0</span>:
            <span style="color:#66d9ef">break</span>

        live_cells_count <span style="color:#f92672">=</span> int(raw_input())
        live_cells_unpaired <span style="color:#f92672">=</span> []
        <span style="color:#66d9ef">while</span> len(live_cells_unpaired) <span style="color:#f92672">&lt;</span> (live_cells_count <span style="color:#f92672">*</span> <span style="color:#ae81ff">2</span>):
            live_cells_unpaired<span style="color:#f92672">.</span>extend(map(int, raw_input()<span style="color:#f92672">.</span>split()))

        live_cells <span style="color:#f92672">=</span> [live_cells_unpaired[i:i<span style="color:#f92672">+</span><span style="color:#ae81ff">2</span>] <span style="color:#66d9ef">for</span> i <span style="color:#f92672">in</span> range(<span style="color:#ae81ff">0</span>, len(live_cells_unpaired), <span style="color:#ae81ff">2</span>)]
        grid <span style="color:#f92672">=</span> np<span style="color:#f92672">.</span>zeros((m, n), bool)

        <span style="color:#66d9ef">for</span> live_cell <span style="color:#f92672">in</span> live_cells:
            grid[live_cell[<span style="color:#ae81ff">0</span>], live_cell[<span style="color:#ae81ff">1</span>]] <span style="color:#f92672">=</span> <span style="color:#66d9ef">True</span>

        generations <span style="color:#f92672">=</span> int(raw_input())</code></pre></div>
<p>They look almost identical. The difference? Without numpy, the input takes some 8 seconds to read in. With numpy, it takes .2s.</p>
<p>Sold.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>The greedy strategy of self improvement</title>
      <link>https://www.zeptonaut.com/posts/2015-1-27-greedy-self-improvement/</link>
      <pubDate>Tue, 27 Jan 2015 12:33:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2015-1-27-greedy-self-improvement/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>The best and worst part of my job is working with really, <em>really</em> smart people.</p>
<p>Why this is the best part is probably obvious. Why it can be the worst, though, stems from the fact that it can lead to some serious self-esteem issues. It&rsquo;s hard not ask yourself &ldquo;Am I <em>ever</em> going to be as good as these people?&rdquo;.</p>
<p>One thing that I&rsquo;ve found helpful is to remind myself: even smart people are just people. They can only type so many words per minute and have so many ideas. Most of their ideas are probably bad, just like mine.</p>
<p>Given this, there should be <em>some</em> path that I can take that will get me to their skill level. Finding that path seems like a daunting task, though.</p>
<p>To avoid being frozen by indecision, I&rsquo;ve started to employ what I call <em>the greedy strategy of self improvement</em>. The steps are simple:</p>
<ol>
<li>Pick the thing that you feel is holding you back the most right now.</li>
<li>Dedicate a couple months to remedying this deficiency.</li>
<li>Repeat steps 1. and 2. without regressing on already-addressed deficiencies.</li>
</ol>
<p>I call this <em>the greedy strategy</em> because it&rsquo;s what&rsquo;s known in computer science as a <em>greedy algorithm</em>, where you take the action that seems optimal at each step along the way.</p>
<p>Here&rsquo;s how it&rsquo;s been going for me:</p>
<ul>
<li>Leading up to July 2014, I&rsquo;d wasted several months building beautiful systems to answer questions that I realized only in retrospect were flawed ones. So from July until September, I focused on getting answers quickly and avoiding premature perfectionism.</li>
<li>After this, I realized that people couldn&rsquo;t rely on me because I wasn&rsquo;t organized. I then spent October through December on organization and becoming more considerate about how I spent my time.</li>
<li>Now that I&rsquo;ve got my tasks under control, I&rsquo;ve found that I&rsquo;m able to juggle distinct projects better, so I&rsquo;m spending January through March on increasing the number of parallel projects I&rsquo;m able to effectively handle.</li>
</ul>
<p>My most recent undertaking has helped demonstrate the beauty of the greedy strategy: six months ago, I didn&rsquo;t know I needed to increase my parallelism. The problem only became obvious once I had the tools I needed to address it. With the greedy strategy, I don&rsquo;t need to be smart enough to craft a master plan: I just need be aware enough to recognize what needs improvement now.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Remedying a defect in spaceballs-mode</title>
      <link>https://www.zeptonaut.com/posts/2014-10-12-remedying-a-defect-in-spaceballs-mode/</link>
      <pubDate>Sun, 12 Oct 2014 23:11:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/2014-10-12-remedying-a-defect-in-spaceballs-mode/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>I think that we can all agree that [spaceballs-mode]({% post_url 2014-10-11-the-missing-emacs-mode-spaceballs-mode &gt;}}) turned out <em>pretty</em> damn well. There&rsquo;s at least one glaring flaw in it, though.</p>
<p>Remember when we made <code>insert-random-spaceballs-quote</code> an interactive function so that we could bind it to a key? Declaring that a function is <code>interactive</code> is a little bit like signing a contract - you&rsquo;re expected to play nice with certain features of Emacs if it makes sense for your function to do so. Specifically in our case, it makes perfect sense for our function to accept what&rsquo;s known as a <em>prefix argument</em>.</p>
<p>A prefix argument can be passed to a function by pressing <code>C-u</code>, entering a number, and then calling the function. Functions that accept prefixes promise to do something sensible with the number that&rsquo;s passed to them.</p>
<p>As an easy example, let&rsquo;s take a look at the function <code>previous-line</code>, usually bound to <code>C-p</code>. Calling it once with <code>C-p</code> moves back to the previous line. Using <code>C-u 10 C-p</code> to pass it a prefix argument of 10 moves back 10 lines instead.</p>
<p>Following this logic, it makes sense for <code>insert-random-spaceballs-quote</code> to insert <em>ten</em> random spaceballs quotes when called with a prefix argument of 10.</p>
<p>How do we do get our function to accept a prefix, you ask? It&rsquo;s pretty darn easy. Rather than calling <code>(interactive)</code> in that function, we just call <code>(interactive &quot;p&quot;)</code>. Then we mark our function as accepting that argument.</p>
<p>Like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">(defun insert-random-spaceballs-quote (arg)
  (interactive <span style="color:#e6db74">&#34;p&#34;</span>)
  <span style="color:#f92672">...</span></code></pre></div>
<p>That argument is set to <code>nil</code> when no prefix argument is passed to the function; otherwise, it&rsquo;s set to the prefix argument. This means that we want to execute <code>insert-random-spaceballs-quote</code> <code>arg</code> times if <code>arg</code> is set; otherwise we execute it once. Something like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">(defun insert-random-spaceballs-quote (arg)
  (interactive <span style="color:#e6db74">&#34;p&#34;</span>)
  (dotimes (num (or arg <span style="color:#ae81ff">1</span>))
    (<span style="color:#a6e22e">insert</span> (get-random-element spaceballs-lines) <span style="color:#e6db74">&#34;\n&#34;</span>)))</code></pre></div>
<p>Now we can rest peacefully knowing that the <code>interactive</code> contract was fulfilled.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>The missing Emacs mode: spaceballs-mode</title>
      <link>https://www.zeptonaut.com/posts/spaceballs-mode/</link>
      <pubDate>Sat, 11 Oct 2014 18:08:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/spaceballs-mode/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>For <em>years</em> I&rsquo;ve been urging the Emacs community to create a major mode dedicated to the movie <em>Spaceballs</em> but, alas, I must be communicating my vision poorly.</p>
<p>Eager to bring this idea to fruition, I&rsquo;ve decided to teach myself the basics of writing a major mode. Specifically, I&rsquo;ll be creating a mode that inserts a random <em>Spaceballs</em> quote every time the user hits <code>ENTER</code>.</p>
<p>I wrote the skeleton for this new mode based on <a href="http://www.emacswiki.org/emacs/SampleMode">this Sample Mode tutorial</a>. It looks something like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp"><span style="color:#75715e">;; ~/.emacs.d/playground/spaceballs-mode.el</span>

(defvar spaceballs-mode-hook <span style="color:#66d9ef">nil</span>
  <span style="color:#e6db74">&#34;Hooks to be run when entering spaceballs-mode.&#34;</span>)
(defvar spaceballs-mode-map
  (let ((map (<span style="color:#a6e22e">make-keymap</span>))) map)
  <span style="color:#e6db74">&#34;Keymap for spaceballs-mode&#34;</span>)

(define-derived-mode
  <span style="color:#75715e">;; Name of the mode</span>
  spaceballs-mode
  <span style="color:#75715e">;; Name of the mode that we&#39;re derived from</span>
  fundamental-mode
  <span style="color:#75715e">;; How we appear in the mode line</span>
  <span style="color:#e6db74">&#34;spaceballs&#34;</span>
  <span style="color:#e6db74">&#34;Major mode for generating random Spaceballs quotes.&#34;</span>)

(provide <span style="color:#e6db74">&#39;spaceballs-mode</span>)</code></pre></div>
<p>The only part that&rsquo;s not self-explanatory is <code>spaceballs-mode-hook</code>. This variable gives users a place to add their own hooks. These hooks allow a user to tell Emacs to perform certain actions (e.g. enable <code>flycheck-mode</code>) when <code>spaceballs-mode</code> is loaded.</p>
<p>Check that you&rsquo;re able to load up our mode by going to a new buffer (<code>C-x b *spaceballs*</code>) and loading up our mode with <code>M-x load-library spaceballs-mode</code>. Emacs should allow you to enter this mode, although it&rsquo;s not too exciting at the moment.</p>
<p>So now we&rsquo;ve done the easy stuff: let&rsquo;s move on to the more interesting parts. Adding the keybinding to insert the quote seems like a good next step. We can do this by using <code>define-key</code> in conjunction with our existing <code>map</code> variable which stores our mode&rsquo;s keymap. That looks like this:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">(defvar spaceballs-mode-map
  (let ((map (<span style="color:#a6e22e">make-keymap</span>)))
    (<span style="color:#a6e22e">define-key</span> map (kbd <span style="color:#e6db74">&#34;RET&#34;</span>) <span style="color:#f92672">&#39;</span>(lambda ()
                                   (interactive)
                                   (<span style="color:#a6e22e">insert</span> <span style="color:#e6db74">&#34;Spaceballs quote goes here.\n&#34;</span>)))
    map)
  <span style="color:#e6db74">&#34;Keymap for spaceballs-mode&#34;</span>)</code></pre></div>
<p>There are two parts that might be confusing here:</p>
<ul>
<li><code>insert</code> just inserts whatever argument you pass it into the active buffer.</li>
<li>More interestingly, <code>interactive</code> tells Emacs to make the function available to the user. You can&rsquo;t map things to keys unless they&rsquo;re marked as <code>interactive</code>.</li>
</ul>
<p>Reload the mode with <code>M-x unload-feature spaceballs-mode</code> followed by <code>M-x load-library spaceballs-mode</code>. You&rsquo;ll have to reenable the mode within <code>*spaceballs*</code> as well. Once you do this, though, you should find that mashing <code>ENTER</code> results in something like this:</p>
<!-- raw HTML omitted -->
<p>Great! We&rsquo;re getting closer. Now we just have to work on the actual random quote part. We can start by creating a text file containing the quote list at <code>~/.emacs.d/playground/spaceballs-quotes.txt</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">That&#39;s all we needed, a Drewish princess.
What? You went over my helmet?
They&#39;ve gone to plaid.
We ain&#39;t found shit.
That&#39;s amazing. I&#39;ve got the same combination on my luggage.
You have the ring, and I see your Schwartz is as big as mine.
That&#39;s what I ordered. Change my order to the soup.</code></pre></div>
<p>We can load that text file as a list of lines using the same technique that we used to read the list of animals in [Friendly Veterinarian]({% post_url 2014-10-08-the-friendly-veterinarian-2 &gt;}}). To do so, add this at the top of <code>spaceballs-mode.el</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">(defun get-lines-from-file (file-path)
  <span style="color:#e6db74">&#34;Returns the lines of the file at file-path as a list.&#34;</span>
  (with-temp-buffer
    (<span style="color:#a6e22e">insert-file-contents</span> file-path)
    (split-string (<span style="color:#a6e22e">buffer-string</span>) <span style="color:#e6db74">&#34;\n&#34;</span> <span style="color:#66d9ef">t</span>)))

(defvar spaceballs-lines
  (get-lines-from-file <span style="color:#e6db74">&#34;~/.emacs.d/playground/spaceballs-quotes.txt&#34;</span>))</code></pre></div>
<p>After reevaluating our mode with <code>M-x eval-buffer</code>, test that <code>spaceball-lines</code> was populated correctly by inspecting its value (<code>M-: spaceballs-lines</code>).</p>
<p>Now that we have this list, we can create a new function that gets a random element from it:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">(defun get-random-element (lst)
  <span style="color:#e6db74">&#34;Returns a random element of a list.&#34;</span>
  (<span style="color:#a6e22e">elt</span> lst (<span style="color:#a6e22e">random</span> (<span style="color:#a6e22e">length</span> lst))))</code></pre></div>
<p>This function:</p>
<ul>
<li>Generates a random number between 0 and the length of <code>lst</code></li>
<li>Accesses the element of <code>lst</code> at the index of that random number</li>
</ul>
<p>Not bad at all. With our newly-minted <code>get-random-element</code> function, we can now create a function that inserts a random <em>Spaceballs</em> quote.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">(defun insert-random-spaceballs-quote ()
  (interactive)
  (<span style="color:#a6e22e">insert</span> (get-random-element spaceballs-lines) <span style="color:#e6db74">&#34;\n&#34;</span>))</code></pre></div>
<p>As a review, here&rsquo;s what our whole file looks like:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp"><span style="color:#75715e">;; ~/.emacs.d/playground/spaceballs-mode.el</span>

(defun get-lines-from-file (file-path)
  <span style="color:#e6db74">&#34;Returns the lines of the file at file-path as a list.&#34;</span>
  (with-temp-buffer
    (<span style="color:#a6e22e">insert-file-contents</span> file-path)
    (split-string (<span style="color:#a6e22e">buffer-string</span>) <span style="color:#e6db74">&#34;\n&#34;</span> <span style="color:#66d9ef">t</span>)))

(defun get-random-element (lst)
  <span style="color:#e6db74">&#34;Returns a random element of a list.&#34;</span>
  (<span style="color:#a6e22e">elt</span> lst (<span style="color:#a6e22e">random</span> (<span style="color:#a6e22e">length</span> lst))))

(defvar spaceballs-mode-hook <span style="color:#66d9ef">nil</span>
  <span style="color:#e6db74">&#34;Hooks to be run when entering spaceballs-mode.&#34;</span>)
(defvar spaceballs-mode-map
  (let ((map (<span style="color:#a6e22e">make-keymap</span>)))
    (<span style="color:#a6e22e">define-key</span> map (kbd <span style="color:#e6db74">&#34;RET&#34;</span>) <span style="color:#e6db74">&#39;insert-random-spaceballs-quote</span>)
    map)
  <span style="color:#e6db74">&#34;Keymap for spaceballs-mode&#34;</span>)
(defvar spaceballs-lines
  (get-lines-from-file <span style="color:#e6db74">&#34;~/.emacs.d/playground/spaceballs-quotes.txt&#34;</span>))

(defun insert-random-spaceballs-quote ()
  (interactive)
  (<span style="color:#a6e22e">insert</span> (get-random-element spaceballs-lines) <span style="color:#e6db74">&#34;\n&#34;</span>))

(define-derived-mode spaceballs-mode fundamental-mode <span style="color:#e6db74">&#34;spaceballs&#34;</span>
  <span style="color:#e6db74">&#34;Major mode for generating random Spaceballs quotes.&#34;</span>)

(provide <span style="color:#e6db74">&#39;spaceballs-mode</span>)</code></pre></div>
<p>That should be it! Reload the mode and your <code>*spaceballs*</code> buffer and make sure that everything&rsquo;s working alright. You should be seeing something like this when you hit <code>ENTER</code>:</p>
<!-- raw HTML omitted -->
<p>Congratulations! Together, we&rsquo;ve made the greatest contribution to the Emacs community since <code>M-x butterfly</code>. We can each now say, <a href="http://www.poets.org/poetsorg/poem/ozymandias">&ldquo;Look upon my works, ye Mighty, and despair!&quot;</a>. Or&hellip; something.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Allergic to Q</title>
      <link>https://www.zeptonaut.com/posts/allergic-to-q/</link>
      <pubDate>Fri, 10 Oct 2014 12:14:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/allergic-to-q/</guid>
      <description></description>
      <content:encoded><![CDATA[<p><a href="https://github.com/flycheck/flycheck">Flycheck</a> is a fantastic little emacs plugin that aims to help you find basic errors that can be found through static analysis. On its surface - yes, <em>I know</em> -this sounds incredibly boring. In practice, though, it&rsquo;s often the most boring jobs that I <em>want</em> a computer to help with, in order to help conserve my precious little sanity.</p>
<p>You&rsquo;re probably already familiar with what this looks like in practice. You know how in Microsoft Word and Google Docs, when you spell a word wrong, there&rsquo;s a little red squiggly underneath the word? Think of flycheck as a customizable way to make those squigglies.</p>
<p>Today, I wanted to learn how to make an incredibly simple syntax checker. Well, really I started yesterday, but this &ldquo;incredibly simple&rdquo; checker actually took me two days to build because I&rsquo;m an idiot. Typical.</p>
<p>This syntax checker will&hellip; (prepare yourself)&hellip; mark an error on any line with the letter &lsquo;q&rsquo;. Let&rsquo;s get started.</p>
<p>First, get a copy of flycheck. You can do this using <code>package.el</code>, which is included in Emacs 24. <code>M-x package-install &lt;ENTER&gt; flycheck</code> should do the trick. If flycheck isn&rsquo;t an available package, <a href="http://www.emacswiki.org/emacs/ELPA">make sure that you have the correct repositories set up</a>. Once you&rsquo;ve done that, make sure that you require flycheck in your .emacs file by adding the following:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">(require <span style="color:#e6db74">&#39;flycheck</span>)</code></pre></div>
<p>Now that that&rsquo;s taken care of, let&rsquo;s figure out how a checker works in flycheck. Whenever I don&rsquo;t have any clue what I&rsquo;m doing (usually), I look for the simplest example that I can find. Luckily, flycheck is open source and has lots of checkers already defined, so we can just take a look at the <a href="https://github.com/flycheck/flycheck/blob/master/flycheck.el#L6327">main flycheck file in the github respository</a>. <code>yaml-jsyaml</code> looks like a simple enough checker:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">(flycheck-define-checker yaml-jsyaml
  <span style="color:#e6db74">&#34;A YAML syntax checker using JS-YAML.
</span><span style="color:#e6db74">
</span><span style="color:#e6db74">See URL </span><span style="color:#e6db74">`https://github.com/nodeca/js-yaml&#39;</span><span style="color:#e6db74">.&#34;</span>
  :command (<span style="color:#e6db74">&#34;js-yaml&#34;</span> source)
  :error-patterns
  ((<span style="color:#a6e22e">error</span> line-start
          <span style="color:#e6db74">&#34;JS-YAML: &#34;</span> (<span style="color:#a6e22e">message</span>) <span style="color:#e6db74">&#34; at line &#34;</span> line <span style="color:#e6db74">&#34;, column &#34;</span> column <span style="color:#e6db74">&#34;:&#34;</span>
          line-end))
  :modes yaml-mode)</code></pre></div>
<p>Let&rsquo;s take this line by line:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">(flycheck-define-checker yaml-jsyaml</code></pre></div>
<p>This looks like it&rsquo;s just a macro that creates the checker.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">  :command (<span style="color:#e6db74">&#34;js-yaml&#34;</span> source)</code></pre></div>
<p>This looks like it&rsquo;s telling flycheck the command to run to generate the list of errors. I&rsquo;m assuming that js-yaml accepts a filename as its input, so <code>source</code> is probably just the name of the file being checked.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">:error-patterns
  ((<span style="color:#a6e22e">error</span> line-start
          <span style="color:#e6db74">&#34;JS-YAML: &#34;</span> (<span style="color:#a6e22e">message</span>) <span style="color:#e6db74">&#34; at line &#34;</span> line <span style="color:#e6db74">&#34;, column &#34;</span> column <span style="color:#e6db74">&#34;:&#34;</span>
          line-end))</code></pre></div>
<p>This looks like it&rsquo;s telling flycheck what a line of output text looks like. It looks like the error text is in the form:</p>
<pre><code>JS-YAML: This is an error message at line 43, column 2:
</code></pre>
<p>And lastly:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">:modes yaml-mode)</code></pre></div>
<p>Looks like it&rsquo;s just telling flycheck what modes this checker is available in.</p>
<p>Great! Equipped with our new-found inkling of what to do, let&rsquo;s try and write our own checker. This looks like a good framework:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp"><span style="color:#75715e">;; ~/.emacs.d/playground/flycheck-error-on-q.el</span>

(flycheck-define-checker error-on-q
  <span style="color:#e6db74">&#34;A syntax checker that errors on any line with a q.&#34;</span>

  :command (<span style="color:#e6db74">&#34;TODO: Write the command&#34;</span>)
  :error-patterns
  <span style="color:#75715e">;; Example error: 43:This line is bad</span>
  ((<span style="color:#a6e22e">error</span> line-start line <span style="color:#e6db74">&#34;:&#34;</span> (<span style="color:#a6e22e">message</span>) line-end))
  :modes text-mode)

(provide <span style="color:#e6db74">&#39;flycheck-error-on-q</span>)</code></pre></div>
<p>So now we just need to use our command-line-fu to write a one-liner that finds instances of the letter Q. To the terminal!</p>
<p>First, it&rsquo;s probably a decent idea to think of a file that has some Q&rsquo;s in it. In my case, I know that my Emacs initialization file has lots of them - it uses <code>package.el</code>&rsquo;s <code>require</code> function a lot.</p>
<p><code>grep</code> is good at finding things and, with a bit of fooling around, I found that:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">grep --color<span style="color:#f92672">=</span>never -n -i <span style="color:#e6db74">&#34;q&#34;</span> $FILENAME</code></pre></div>
<p>finds the line with Q&rsquo;s in them. This command makes sure:</p>
<ul>
<li><code>--color=never</code>: We don&rsquo;t colorize the output of <code>grep</code>. This ensures that we don&rsquo;t insert any control characters into our output that might mess up the error parsing in our checker.</li>
<li><code>-n</code>: We print the line number so that our checker knows which line to mark as erroneous.</li>
<li><code>-i</code>: We accept both upper and lower case q&rsquo;s</li>
</ul>
<p>Running this on my .emacs file with <code>grep --color=never -n -i &quot;q&quot; ~/.emacs</code>, I get</p>
<pre><code>2:;; Required here because this is what allows requiring of other packages.
3:(require 'package)
4:(setq package-archives '((&quot;gnu&quot; . &quot;http://elpa.gnu.org/packages/&quot;)
...
292:(require 'flycheck-error-on-q)
293:(add-to-list 'flycheck-checkers 'error-on-q)
</code></pre>
<p>Looks like a good start. Notice, though, that our checker expects a message after the colon, while <code>grep</code> just prints the matching string. We can fix this with a bit of <code>awk</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">grep --color<span style="color:#f92672">=</span>never -n -i <span style="color:#e6db74">&#34;q&#34;</span> $FILENAME | awk -F <span style="color:#e6db74">&#34;:&#34;</span> <span style="color:#e6db74">&#39;{print $1&#34;:Ick! Q! I hate that letter!&#34;}&#39;</span></code></pre></div>
<p>Now, instead of <code>2:;; Required here because this is what allows requiring of other packages.</code>, we get <code>2:Ick! Q! I hate that letter!</code>.</p>
<p>Unfortunately, after trying, I realized that we can&rsquo;t just put this incantation as our flycheck <code>:command</code> for two reasons:</p>
<ul>
<li>Flycheck expects the return value of the command that&rsquo;s run to be 1 if an error exists and 0 if it does not. For our command, it&rsquo;ll always return 0 because awk is always successful.</li>
<li>Flycheck automatically quotes all parameters after the first one, so it&rsquo;d automatically quote <code>awk</code> as well as the pipe that follows it. We don&rsquo;t want these evaluated as strings - we want them evaluated as regular old operations.</li>
</ul>
<p>Fortunately, all of these problems can be avoided by writing a thin wrapper of a bash script around our existing command. This bash script looks something like:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#75715e">#!/bin/bash
</span><span style="color:#75715e"></span><span style="color:#75715e"># ~/.emacs.d/playground/error-on-q</span>

<span style="color:#75715e"># Capture the first argument and put it into $FILE</span>
FILE<span style="color:#f92672">=</span>$1

<span style="color:#75715e"># Capture the output of grep and put it into $MATCHES</span>
<span style="color:#75715e"># Parameters:</span>
<span style="color:#75715e"># --color=never  Don&#39;t colorize the output - we want plain text</span>
<span style="color:#75715e"># -n             Print the line number of the match</span>
<span style="color:#75715e"># -i             We don&#39;t care about the case of the letter</span>
<span style="color:#75715e"># &#34;q&#34;            Our search string - the letter &#39;q&#39;</span>
<span style="color:#75715e"># $FILE          The file to search</span>
MATCHES<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>grep --color<span style="color:#f92672">=</span>never -i -n <span style="color:#e6db74">&#34;q&#34;</span> $FILE<span style="color:#66d9ef">)</span>

<span style="color:#75715e"># Capture the output status of grep so we know if we found any q&#39;s</span>
GREP_EXIT_STATUS<span style="color:#f92672">=</span>$?

<span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> $GREP_EXIT_STATUS -eq <span style="color:#ae81ff">0</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
  <span style="color:#75715e"># Print output in the form file:line_no:Ick! Q! I hate that letter!</span>
  echo <span style="color:#e6db74">&#34;</span>$MATCHES<span style="color:#e6db74">&#34;</span> | awk -F <span style="color:#e6db74">&#34;:&#34;</span> <span style="color:#e6db74">&#39;{print $1&#34;:Ick! Q! I hate that letter!&#34;}&#39;</span>

  <span style="color:#75715e"># If we found a &#39;q&#39;, return 1 to indicate there was a problem</span>
  <span style="color:#75715e"># with the file</span>
  exit 1;
<span style="color:#66d9ef">else</span>
  <span style="color:#75715e"># Otherwise, return 0</span>
  exit 0;
<span style="color:#66d9ef">fi</span></code></pre></div>
<p>It&rsquo;s long, but if you look at what it&rsquo;s actually doing, it&rsquo;s pretty simple. It&rsquo;s running the commands that we already talked about with one modification: it&rsquo;s capturing the exit value of <code>grep</code> and inverting it. That is, if <code>grep</code> returns 0, it returns 1, and vice versa. This is because we have an error when we find a Q, whereas grep returns 1 unless a match is found. <code>grep</code>&rsquo;s error is our success.</p>
<p>I put this file at <code>~/.emacs.d/playground/error-on-q</code> and made sure it was executable with <code>chmod 755 ~/.emacs.d/playground/error-on-q</code>.</p>
<p>Now, we can use this script in our <code>:command</code> in our checker:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp"><span style="color:#75715e">;; ~/.emacs.d/playground/flycheck-error-on-q.el</span>

(flycheck-define-checker error-on-q
  <span style="color:#e6db74">&#34;A syntax checker that always says that line 1 has an error.&#34;</span>

  :command (<span style="color:#e6db74">&#34;~/.emacs.d/playground/error-on-q&#34;</span> source)
  :error-patterns
  ((<span style="color:#a6e22e">error</span> line-start line <span style="color:#e6db74">&#34;:&#34;</span> (<span style="color:#a6e22e">message</span>) line-end))
  :modes text-mode)

(provide <span style="color:#e6db74">&#39;flycheck-error-on-q</span>)</code></pre></div>
<p>If we reevaluate the buffer and go back to our text buffer, we should see something like:</p>
<!-- raw HTML omitted -->
<p>Success!</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Sending our Friendly Veterinarian back to school</title>
      <link>https://www.zeptonaut.com/posts/the-friendly-veterinarian-2/</link>
      <pubDate>Wed, 08 Oct 2014 10:33:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/the-friendly-veterinarian-2/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>Yesterday we walked through how to write an extremely simple emacs plugin, [Friendly Veterinarian]({% post_url 2014-10-07-the-friendly-veterinarian &gt;}}). Today I want to see if we can expand the knowledge base of our friendly veterinarian a bit by having the plugin read the autocompletion options from a text file of animals rather than having to manually list them in elisp.</p>
<p>I found <a href="https://raw.githubusercontent.com/hzlzh/Domain-Name-List/master/Animal-words.txt">this animal list</a> on github which looks like a good list to use as an autocompletion source. We can download this file to our plugin directory with a <code>curl</code> one-liner:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">curl -0 https://raw.githubusercontent.com/hzlzh/Domain-Name-List/master/Animal-words.txt <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>  &gt; ~/.emacs.d/playground/animals.txt</code></pre></div>
<p>Perfect! Now we just have to parse the file when we call our autocomplete function. Googling for <code>elisp read from file</code> gives us an answer on how to do that.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp"><span style="color:#75715e">;; ~/.emacs.d/playground/friendly-veterinarian.el</span>
<span style="color:#75715e">;; (defun query-favorite-animal...</span>
<span style="color:#75715e">;; (defun query-favorite-animal-autocomplete...</span>

(defun get-lines-from-file (file-path)
  <span style="color:#e6db74">&#34;Returns the lines of the file at file-path.&#34;</span>
  <span style="color:#75715e">;; Insert the contents of the file into a temporary buffer</span>
  (with-temp-buffer
    (<span style="color:#a6e22e">insert-file-contents</span> file-path)
    <span style="color:#75715e">;; Split the contents of the current buffer on the new line</span>
    (split-string (<span style="color:#a6e22e">buffer-string</span>) <span style="color:#e6db74">&#34;\n&#34;</span> <span style="color:#66d9ef">t</span>)))
    
(provide <span style="color:#e6db74">&#39;friendly-veterinarian</span>)</code></pre></div>
<p>It&rsquo;d be nice to have an easy way of making sure this code works without having to use the rest of the plugin. Enter iELM (inferior Emacs Lisp Mode). iELM is what&rsquo;s known in the lisp world as a REPL, which stands for Read Evaluate Print Loop. It&rsquo;s essentially a program that reads a line of code that you write, evaluates it, and gives you back the result. This is exactly what we need - some way to test that <code>get-lines-from-file</code> works.</p>
<p>To do this, load up iELM with <code>M-x ielm</code> and evaluate the code in <code>friendly-veterinarian.el</code> using <code>M-x eval-buffer</code>. Evaluating the code makes that code available to be executed in the REPL. Once you&rsquo;ve done this, execute this line in the iELM REPL:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp">ELISP <span style="color:#a6e22e">&gt;</span> (get-lines-from-file <span style="color:#e6db74">&#34;~/.emacs.d/playground/animals.txt&#34;</span>)
(<span style="color:#e6db74">&#34;Aardvark&#34;</span> <span style="color:#e6db74">&#34;Albatross&#34;</span> <span style="color:#e6db74">&#34;Alligator&#34;</span> <span style="color:#f92672">...</span> <span style="color:#e6db74">&#34;Zebra&#34;</span>)</code></pre></div>
<p>Wunderbar! We can now swap out our puny autocomplete list that we were using in <code>query-favorite-animal-autocomplete</code> with the much more complete list from our text file.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp"><span style="color:#75715e">;; ~/.emacs.d/playground/friendly-veterinarian.el</span>
<span style="color:#75715e">;; (defun query-favorite-animal...</span>

(defun query-favorite-animal-autocomplete (name)
  <span style="color:#e6db74">&#34;Queries the user for their favorite animal with autocomplete.&#34;</span>
  (interactive
   (<span style="color:#a6e22e">list</span>
    (<span style="color:#a6e22e">completing-read</span> <span style="color:#e6db74">&#34;sEnter the name of your favorite animals: &#34;</span>
                     (get-lines-from-file <span style="color:#e6db74">&#34;~/.emacs.d/playground/animals.txt&#34;</span>))))
  (<span style="color:#a6e22e">message</span> <span style="color:#e6db74">&#34;Your favorite animal is: %s. I guess those are alright.&#34;</span> name))

<span style="color:#75715e">;; (defun get-lines-from-file...</span>
(provide <span style="color:#e6db74">&#39;friendly-veterinarian</span>)</code></pre></div>
<p>After reevaluating our buffer and calling our function with <code>M-x query-favorite-animal-autocomplete</code>, we&rsquo;re greeted with something like this:</p>
<!-- raw HTML omitted -->
<p>Now we have a friendly <em>and smart</em> veterinarian.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Friendly Veterinarian: a simple emacs package</title>
      <link>https://www.zeptonaut.com/posts/the-friendly-veterinarian/</link>
      <pubDate>Tue, 07 Oct 2014 10:19:00 +0000</pubDate>
      
      <guid>https://www.zeptonaut.com/posts/the-friendly-veterinarian/</guid>
      <description></description>
      <content:encoded><![CDATA[<p>Emacs is a fantastic editor. The flexibility offered by the plugin architecture makes its potential almost limitless.</p>
<p>Or&hellip; so I&rsquo;ve been told. I say all this never having actually <em>developed</em> an emacs package. I&rsquo;m changing that today. And I&rsquo;ve limited the scope of my first plugin to reflect the fact that my attention span is limited to about 30 seconds.</p>
<p>I think this plugin we&rsquo;re making has real potential to take off: I call it the friendly veterinarian. It asks you the name of your favorite animal and prints a message based on your response.</p>
<p>I started off by using the command line to create a directory where I could store these types of projects:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash">mkdir ~/.emacs.d/playground</code></pre></div>
<p>Now we can go ahead and create the actual package.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp"><span style="color:#75715e">;; ~/.emacs.d/playground/friendly-veterinarian.el</span>

<span style="color:#75715e">;; Found by googling for &#34;ask for user input emacs&#34;</span>
(defun query-favorite-animal (name)
  <span style="color:#e6db74">&#34;Queries the user for their favorite animal.&#34;</span>
  (interactive <span style="color:#e6db74">&#34;sEnter the name of your favorite animal: &#34;</span>)
  (<span style="color:#a6e22e">message</span> <span style="color:#e6db74">&#34;Your favorite animal is: %s. I guess those are alright.&#34;</span> name))

<span style="color:#75715e">;; This allows people to use (require &#39;friendly-veterinarian) in their .emacs</span>
(provide <span style="color:#e6db74">&#39;friendly-veterinarian</span>)</code></pre></div>
<p>After evaluating the buffer (another way of saying loading the code) with <code>M-x eval-buffer</code>, we can now  call our function with <code>M-x query-favorite-animal</code> and get asked what our favorite animal is.</p>
<!-- raw HTML omitted -->
<p>Alright - I think I can do a <em>little</em> better than that today. What about if we gave ourselves some neat options for autcomplete?</p>
<p>The first result of googling for &ldquo;interactive function autocomplete emacs&rdquo; lets us know that we can pass a different parameter to <code>interactive</code> to give ourselves some autocomplete options. Great!</p>
<p>Using our new-found knowledge, we can add a bit to the file:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-elisp" data-lang="elisp"><span style="color:#75715e">;; ~/.emacs.d/playground/friendly-veterinarian.el</span>
<span style="color:#75715e">;; (defun query-favorite-animal...</span>

(defun query-favorite-animal-autocomplete (name)
  <span style="color:#e6db74">&#34;Queries the user for their favorite animal with autocomplete.&#34;</span>
  (interactive
   (<span style="color:#a6e22e">list</span>
    (<span style="color:#a6e22e">completing-read</span> <span style="color:#e6db74">&#34;sEnter the name of your favorite animals: &#34;</span>
                     <span style="color:#f92672">&#39;</span>(<span style="color:#e6db74">&#34;cat&#34;</span> <span style="color:#e6db74">&#34;dog&#34;</span> <span style="color:#e6db74">&#34;giraffe&#34;</span>))))
  (<span style="color:#a6e22e">message</span> <span style="color:#e6db74">&#34;Your favorite animal is: %s. I guess those are alright.&#34;</span> name))

(provide <span style="color:#e6db74">&#39;friendly-veterinarian</span>)</code></pre></div>
<p>Now we can reload our package by revaluating the buffer (remember <code>M-x eval-buffer</code>?) and call our function with <code>M-x query-favorite-animal-autocomplete</code>. Looks good!</p>
<!-- raw HTML omitted -->
<p>Very humble goal: accomplished.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
