michaelheap.com I write about systems, people, and what we learn when things go wrong. 2026-10-08T07:56:10Z https://michaelheap.com Michael Heap m@michaelheap.com When you disagree with a decision 2026-10-08T07:56:10Z https://michaelheap.com/when-you-disagree-with-a-decision/ <p>I've previously written about <a href="https://michaelheap.com/never-leave-on-a-no/">never leaving on a no</a>, which is about how to get to a resolution when you disagree with your boss (in private). One of the sections towards the end covered how to communicate your decision to your team when you don't agree. It captured the practicalities, but not the sentiment. Here's what I wrote:</p> <blockquote> <p>&quot;There were other options, and we discussed them. This is the direction we’re taking, and here’s how we’ll make it successful.&quot;</p> </blockquote> <p>I recently read a conversation in which someone was asking how to communicate a decision that they disagree with, and someone responded with this wonderful phrasing:</p> <blockquote> <p>&quot;I understand this may not be your preferred path forward and you're not alone, but these concerns came up in the discussion and were given due consideration. This is where we landed, so let's give it our best.&quot;</p> </blockquote> <p>This says the same as my previous post, but with <em>so much more</em> empathy.</p> <h2 id="how-it-lands" tabindex="-1">How it lands</h2> <p>I've been in the situation where my boss had to say, &quot;this is what we're going to do&quot;. It sucked. I felt like my objections were being dismissed.</p> <p>I didn’t need the decision maker to tell me I was right. But I <em>did</em> need to know what was considered. The words &quot;given due consideration&quot; matter. I need to understand the trade-offs and constraints. &quot;I hear you&quot; is not the same as explaining how the decision was made.</p> <p>I don't need to agree with the decision. But I should be able to explain it.</p> <p>Once I understand why we chose this path, I can disagree (in private!) and still commit to the work. Then I make it clear that I have reservations <em>and</em> I'll do my best to make the project successful:</p> <blockquote> <p>&quot;I’m not sure this is the best option, but I understand that it’s a decision that’s been made and I’m here to make it happen.&quot;</p> </blockquote> <p>For me, making it happen means giving the decision a fair chance. It means putting in the same amount of effort I would have if we'd chosen my preferred option.</p> <h2 id="revisiting-the-decision" tabindex="-1">Revisiting the decision</h2> <p>Sometimes the decision needs another look. New information might change the trade-offs. Or the plan may repeatedly run into friction once we try to implement it. If I’m struggling to explain the idea to other people, or it feels janky in practice, I’ll bring that back with specific examples.</p> <p>&quot;I still disagree&quot; isn't sufficient reason to reopen a decision, but new information is. Repeated friction is new information. What specific problems are you seeing that change the calculus enough that we should revisit the conversation?</p> <p>Don't come back with &quot;I told you so.&quot; Come back with &quot;Here are three things we didn't anticipate, here's what they're costing us, and here's how they change the original trade-off.&quot;</p> <h2 id="alignment-agreement" tabindex="-1">Alignment ≠ Agreement</h2> <p>Real alignment doesn't mean absolute agreement. It means navigating the messy reality of constraints and trade-offs together. Just like you shouldn't &quot;leave on a no&quot; in private, you shouldn't leave your team in the dark in public.</p> <p>By pairing strong commitment with deep empathy, you respect both the decision-making process and the people executing it. Own the direction, do the work as if you were solely responsible for its success, and keep your eyes open for the genuine friction that proves it’s time to talk again.</p> What is trust? 2026-10-01T21:13:59Z https://michaelheap.com/what-is-trust/ <p>A new manager recently asked me, &quot;How do I build trust in the organization?&quot; After a few seconds' thought, my answer was &quot;How do you define trust?&quot;</p> <p>We often talk about trust as though it's a property of a person.</p> <blockquote> <p>I trust Alice</p> </blockquote> <p>But what we usually mean is that we trust them in a specific situation.</p> <blockquote> <p>I trust Alice to do X when Y happens</p> </blockquote> <p>Alice might be your go-to person for producing a high quality report and the last person you would ask to feed your cat while you are on vacation. Trust depends on the person, behaviour, and context.</p> <p>After talking it through, we landed on the following definition of trust:</p> <p><strong>Trust is the confidence that you can rely on someone in a particular situation when the stakes are high</strong></p> <h2 id="can-we-rely-on-you" tabindex="-1">Can we rely on you?</h2> <p>Trust isn't static. Every interaction we have with each other provides another data point to be considered. Imagine this situation:</p> <ul> <li>I write a proposal</li> <li>Someone comments with a challenging question and I engage in good faith</li> <li>It happens again, and I engage in good faith again</li> </ul> <p>People will start to rely on that pattern. They build a shortcut in their mind in the <em>I trust Michael to do X when Y happens</em> format. Here, they expect me to engage in good faith when someone challenges a proposal.</p> <p>Our whole lives are built on these small mental models that others build of us. A situation happens, people observe what we do and update their prediction of how we'll respond in the future.</p> <h2 id="trust-is-tested-when-it-has-a-cost" tabindex="-1">Trust is tested when it has a cost</h2> <p>The context around a behaviour matters. If you're open and collaborative in your team meetings, but try to control the conversation when there's a senior person in the room, people will learn that &quot;they're collaborative when the risks are low&quot; rather than &quot;they're collaborative&quot;.</p> <p>People pay particular attention to your behaviour when it costs you something:</p> <ul> <li>You're calm when a project is failing in addition to when things are going well</li> <li>You admit a mistake when your reputation is on the line as well as when it's inconsequential</li> <li>You behave the same when your boss is in the room as when they're not</li> </ul> <p>If you invite disagreement ten times, but chastise someone for challenging you when your boss is in the room, people learn that you're only open to ideas in certain situations.</p> <h2 id="becoming-trustworthy" tabindex="-1">Becoming trustworthy</h2> <p>Going back to the original question, the new manager wanted to know how to get the organisation to trust them. We can work backwards from the situations in which they need people to rely on them.</p> <p>What do I want people to be able to predict about my behaviour?</p> <p>We came up with these examples:</p> <ul> <li>When I make a commitment, I'll hit the date. If there is a risk, I'll raise it early and agree next steps</li> <li>When I don't know the answer, I'll say that I don't know</li> <li>When someone tells me bad news, I won't punish the messenger. We work through the problem together</li> <li>When someone has an idea, we assume it's possible and explore if we should make it a reality</li> </ul> <p>These behaviours are observable. If you say you want people to suggest ideas and shoot down every idea with &quot;we've tried that before&quot; or &quot;that'll never work because...&quot;, people will stop suggesting ideas.</p> <h2 id="when-trust-becomes-organisationally-useful" tabindex="-1">When trust becomes organisationally useful</h2> <p>Trust also affects how organisations work. Take this target behaviour as an example:</p> <blockquote> <p>When someone tells me bad news, I won't punish the messenger. We work through the problem together</p> </blockquote> <p>If you respond constructively when someone brings you bad news, they will come to believe that telling you will help. They will bring you bad news sooner. The sooner you know the bad news, the easier it is to correct course and get a positive outcome for the business and the people involved.</p> <p>When people know they can rely on your response, they can take the risk of being honest with you.</p> <h2 id="what-happens-next" tabindex="-1">What happens next</h2> <p>Other people decide whether they can rely on you based on what they have seen you do.</p> <p>Saying &quot;I want you to challenge me&quot; tells people your intentions. <em>How</em> you respond when challenged tells them what you value.</p> <p>To build a high-trust organisation, ask yourself: What have people seen me do often enough that they are willing to bet I will do it again?</p> iA Writer in Obsidian 2026-09-24T14:26:06Z https://michaelheap.com/ia-writer-obsidian/ <p>I used to be a big iA Writer user for writing on the go. I recently wanted to go back to that experience and came <em>this</em> close to buying the latest edition before realising that all I'd do is point it at my Obsidian vault anyway.</p> <p>So I spent an hour or so with Obsidian and Claude and have replicated iA writer in Obsidian. Here's how I did it</p> <div class="image-wrapper "><picture> <source class="" type="image/webp" srcset="https://michaelheap.com/images/ia-writer-obsidian/ia-writer-obsidian.png/GUehTtitVZ-320.webp 320w, https://michaelheap.com/images/ia-writer-obsidian/ia-writer-obsidian.png/GUehTtitVZ-640.webp 640w, https://michaelheap.com/images/ia-writer-obsidian/ia-writer-obsidian.png/GUehTtitVZ-960.webp 960w, https://michaelheap.com/images/ia-writer-obsidian/ia-writer-obsidian.png/GUehTtitVZ-1200.webp 1200w" sizes="(max-width: 320px) 320px, (max-width: 640px) 640px, (max-width: 960px) 960px, (max-width: 1200px) 1200px, 100vw" /> <img class="" alt="iA Writer in Obsidian" src="https://michaelheap.com/images/ia-writer-obsidian/ia-writer-obsidian.png/GUehTtitVZ-1200.jpeg" sizes="(max-width: 320px) 320px, (max-width: 640px) 640px, (max-width: 960px) 960px, (max-width: 1200px) 1200px, 100vw" srcset="https://michaelheap.com/images/ia-writer-obsidian/ia-writer-obsidian.png/GUehTtitVZ-320.jpeg 320w, https://michaelheap.com/images/ia-writer-obsidian/ia-writer-obsidian.png/GUehTtitVZ-640.jpeg 640w, https://michaelheap.com/images/ia-writer-obsidian/ia-writer-obsidian.png/GUehTtitVZ-960.jpeg 960w, https://michaelheap.com/images/ia-writer-obsidian/ia-writer-obsidian.png/GUehTtitVZ-1200.jpeg 1200w" width="1200" height="645" /> </picture></div> <h2 id="typewriter-mode" tabindex="-1">Typewriter Mode</h2> <p>The majority of this functionality is added by the <a href="https://community.obsidian.md/plugins/typewriter-mode">Typewriter Mode</a> plugin by Davis Riedel. It provides a toolkit of features such as &quot;dim paragraphs&quot; and &quot;keep the current line centered&quot; that I use.</p> <p>Install the plugin to get started.</p> <p>Next, update the settings to match what I have by replacing <code>.obsidian/plugins/typewriter-mode/data.json</code> with the following:</p> <pre class="shiki css-variables" style="background-color: var(--shiki-color-background); color: var(--shiki-color-text)"><div class="language-id">json</div><div class="code-container"><code><div class="line"><span style="color: var(--shiki-color-text)">{</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"general"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"version"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"1.5.0"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isAnnounceUpdatesEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isPluginActivated"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isOnlyActivateAfterFirstInteractionEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"enabledPlatforms"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"both"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"enabledFilePaths"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> []</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"disabledFilePaths"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> []</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"typewriter"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isTypewriterScrollEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isOnlyMaintainTypewriterOffsetWhenReachedEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isTypewriterOnlyUseCommandsEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"typewriterOffset"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">0.5</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"keepLinesAboveAndBelow"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isKeepLinesAboveAndBelowEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"linesAboveAndBelow"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">5</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"maxChars"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isMaxCharsPerLineEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"maxCharsPerLine"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">64</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"dimming"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isDimUnfocusedEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isDimUnfocusedOnlyInWritingFocusModeEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isDimHighlightListParentEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isDimTableAsOneEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"dimUnfocusedMode"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"paragraphs"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"dimUnfocusedEditorsBehavior"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"dim-all"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"dimmedOpacity"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">0.25</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isPauseDimUnfocusedWhileScrollingEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isPauseDimUnfocusedWhileSelectingEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"currentLine"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isHighlightCurrentLineEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isHighlightCurrentLineOnlyInWritingFocusModeEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isFadeLinesEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isFadeLinesOnlyInWritingFocusModeEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"fadeLinesIntensity"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">0.55</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isHighlightCurrentLineOnlyInFocusedEditorEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isPauseCurrentLineHighlightWhileScrollingEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isPauseCurrentLineHighlightWhileSelectingEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"currentLineHighlightStyle"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"box"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"currentLineHighlightUnderlineThickness"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">1</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"currentLineHighlightColor-dark"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"#444444"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"currentLineHighlightColor-light"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"#dddddd"</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"writingFocus"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"doesWritingFocusShowHeader"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"doesWritingFocusShowVignette"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"doesWritingFocusShowStatusBar"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isWritingFocusFullscreen"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"writingFocusVignetteStyle"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"box"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"writingFocusFontSize"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">0</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"restoreCursorPosition"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isRestoreCursorPositionEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"cursorPositions"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {}</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"hemingwayMode"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isHemingwayModeEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isHemingwayModeOnlyInWritingFocusModeEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isAllowBackspaceInHemingwayModeEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isShowHemingwayModeStatusBarEnabled"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"hemingwayModeStatusBarText"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Hemingway"</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span></div><div class="line"><span style="color: var(--shiki-color-text)">}</span></div></code></div></pre> <h2 id="the-ia-writer-font" tabindex="-1">The iA Writer Font</h2> <p>I wanted Obsidian to feel just like iA Writer, and using the iA Writer font is a big part of this Thankfully the fonts are <a href="https://github.com/iaolo/iA-Fonts">available on GitHub</a>. Rather than installing the font locally, I chose to embed it in my stylesheet so that it syncs with my vault to all platforms.</p> <p>Here's how to do it:</p> <ol> <li>Open your Obsidian vault folder on your computer.</li> <li>Navigate to <code>.obsidian/snippets/</code> (If the <code>snippets</code> folder doesn't exist, create it).</li> <li>Create a new plain text file named <code>ia-writer-font.css</code>.</li> <li>Open it in any text editor and paste the CSS below into it.</li> </ol> <pre class="shiki css-variables" style="background-color: var(--shiki-color-background); color: var(--shiki-color-text)"><div class="language-id">css</div><div class="code-container"><code><div class="line"><span style="color: var(--shiki-token-comment)">/* iA Writer Mono Webfont Embedded */</span></div><div class="line"><span style="color: var(--shiki-token-keyword)">@font-face</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">font-family</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'iA Writer Mono'</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">src</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">url</span><span style="color: var(--shiki-token-constant)">(</span><span style="color: var(--shiki-token-string-expression)">'data:font/woff2;charset=utf-8;base64,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'</span><span style="color: var(--shiki-token-constant)">) </span><span style="color: var(--shiki-token-function)">format</span><span style="color: var(--shiki-token-constant)">(</span><span style="color: var(--shiki-token-string-expression)">'woff2'</span><span style="color: var(--shiki-token-constant)">)</span><span style="color: var(--shiki-color-text)">;\n </span><span style="color: var(--shiki-token-constant)">font-weight</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">normal</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">font-style</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">normal</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)">}</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-token-comment)">/* Apply the writing style only in Typewriter Mode's Writing Focus Mode. */</span></div><div class="line"><span style="color: var(--shiki-token-string-expression)">body</span><span style="color: var(--shiki-token-function)">.ptm-focus-mode</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">.cm-editor</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">.cm-content</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">font-family</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"iA Writer Mono"</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-token-constant)"> monospace </span><span style="color: var(--shiki-token-keyword)">!important</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">font-size</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">22</span><span style="color: var(--shiki-token-keyword)">px</span><span style="color: var(--shiki-token-constant)"> </span><span style="color: var(--shiki-token-keyword)">!important</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)">}</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-token-string-expression)">body</span><span style="color: var(--shiki-token-function)">.ptm-focus-mode</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">.cm-editor</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> --file-line-width</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">60</span><span style="color: var(--shiki-token-keyword)">rem</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)">}</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-token-string-expression)">body</span><span style="color: var(--shiki-token-function)">.ptm-focus-mode</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">.cm-editor</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">.cm-line</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">line-height</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">1.8 </span><span style="color: var(--shiki-token-keyword)">!important</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">letter-spacing</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">-0.01</span><span style="color: var(--shiki-token-keyword)">em</span><span style="color: var(--shiki-token-constant)"> </span><span style="color: var(--shiki-token-keyword)">!important</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)">}</span></div><div class="line"></div></code></div></pre> <ol start="5"> <li>Save the file.</li> <li>In Obsidian, go to <strong>Settings -&gt; Appearance -&gt; CSS Snippets</strong> and toggle <code>ia-writer-font</code> to <strong>ON</strong>. You may need to reload the app for the snippet to show up in this screen.</li> </ol> <p>This snippet embeds the iA Writer font, and makes it active any time the Typewriter plugin's focus mode is enabled.</p> <h2 id="toggle-writing-mode" tabindex="-1">Toggle Writing Mode</h2> <p>The final part was the trickiest. I wanted to enable Typewriter scrolling and dimming, focus the editor, and enter Writing Focus, but only in edit mode. I explored using Commander for this, but ended up writing a small custom plugin.</p> <p>The plugin can be triggered in both <code>preview</code> and <code>source</code> mode. It enables typewriter mode, and does not try to re-enable it if typewriter mode is already enabled. When triggered again, typewriter mode is disabled and you're returned to your original file mode.</p> <p>To use this, add it to your <code>.obsidian/plugins</code> folder:</p> <pre class="shiki css-variables" style="background-color: var(--shiki-color-background); color: var(--shiki-color-text)"><div class="language-id">bash</div><div class="code-container"><code><div class="line"><span style="color: var(--shiki-color-text)">❯ tree .obsidian/plugins/mheap-focus-mode</span></div><div class="line"><span style="color: var(--shiki-color-text)">.obsidian/plugins/mheap-focus-mode</span></div><div class="line"><span style="color: var(--shiki-color-text)">├── main.js</span></div><div class="line"><span style="color: var(--shiki-color-text)">└── manifest.json</span></div></code></div></pre> <p><code>main.js</code>:</p> <pre class="shiki css-variables" style="background-color: var(--shiki-color-background); color: var(--shiki-color-text)"><div class="language-id">javascript</div><div class="code-container"><code><div class="line"><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> { </span><span style="color: var(--shiki-token-constant)">MarkdownView</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">Notice</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">Plugin</span><span style="color: var(--shiki-color-text)"> } </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">require</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"obsidian"</span><span style="color: var(--shiki-color-text)">);</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-token-constant)">module</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">exports</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">class</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">MheapFocusModePlugin</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">extends</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Plugin</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> originalMode </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">null</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">onload</span><span style="color: var(--shiki-color-text)">() {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">this</span><span style="color: var(--shiki-token-function)">.addCommand</span><span style="color: var(--shiki-color-text)">({</span></div><div class="line"><span style="color: var(--shiki-color-text)"> id</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"toggle-mheap-focus-mode"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> name</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Toggle mheap focus mode"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> icon</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"pen-line"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">callback</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">async</span><span style="color: var(--shiki-color-text)"> () </span><span style="color: var(--shiki-token-keyword)">=&gt;</span><span style="color: var(--shiki-color-text)"> {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">view</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">this</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">app</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">workspace</span><span style="color: var(--shiki-token-function)">.getActiveViewOfType</span><span style="color: var(--shiki-color-text)">(MarkdownView);</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">if</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-keyword)">!</span><span style="color: var(--shiki-color-text)">view) {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">new</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Notice</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"Open a Markdown note first."</span><span style="color: var(--shiki-color-text)">);</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">return</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">if</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-constant)">view</span><span style="color: var(--shiki-token-function)">.getMode</span><span style="color: var(--shiki-color-text)">() </span><span style="color: var(--shiki-token-keyword)">===</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"source"</span><span style="color: var(--shiki-color-text)">) {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">if</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-keyword)">!</span><span style="color: var(--shiki-token-constant)">document</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">body</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">classList</span><span style="color: var(--shiki-token-function)">.contains</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"ptm-focus-mode"</span><span style="color: var(--shiki-color-text)">)) {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">this</span><span style="color: var(--shiki-token-function)">.enableTypewriterMode</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-constant)">this</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> view);</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">return</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">this</span><span style="color: var(--shiki-token-function)">.disableTypewriterMode</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-constant)">this</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> view);</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">return</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">this</span><span style="color: var(--shiki-token-function)">.enableTypewriterMode</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-constant)">this</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> view);</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> });</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">async</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">enableTypewriterMode</span><span style="color: var(--shiki-color-text)">(t</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> v) {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">if</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-constant)">t</span><span style="color: var(--shiki-color-text)">.originalMode </span><span style="color: var(--shiki-token-keyword)">===</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">null</span><span style="color: var(--shiki-color-text)">) {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">t</span><span style="color: var(--shiki-color-text)">.originalMode </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">v</span><span style="color: var(--shiki-token-function)">.getMode</span><span style="color: var(--shiki-color-text)">();</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">t</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">app</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">commands</span><span style="color: var(--shiki-token-function)">.executeCommandById</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"typewriter-mode:typewriter-enable"</span><span style="color: var(--shiki-color-text)">);</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">v</span><span style="color: var(--shiki-token-function)">.setState</span><span style="color: var(--shiki-color-text)">({ </span><span style="color: var(--shiki-token-keyword)">...</span><span style="color: var(--shiki-token-constant)">v</span><span style="color: var(--shiki-token-function)">.getState</span><span style="color: var(--shiki-color-text)">()</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> mode</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"source"</span><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> { history</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-color-text)"> });</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">new</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">Promise</span><span style="color: var(--shiki-color-text)">((resolve) </span><span style="color: var(--shiki-token-keyword)">=&gt;</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">window</span><span style="color: var(--shiki-token-function)">.requestAnimationFrame</span><span style="color: var(--shiki-color-text)">(resolve));</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">v</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">editor</span><span style="color: var(--shiki-token-function)">.focus</span><span style="color: var(--shiki-color-text)">();</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">t</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">app</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">commands</span><span style="color: var(--shiki-token-function)">.executeCommandById</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"typewriter-mode:writing-focus-enable"</span><span style="color: var(--shiki-color-text)">);</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">async</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">disableTypewriterMode</span><span style="color: var(--shiki-color-text)">(t</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> v) {</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">t</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">app</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">commands</span><span style="color: var(--shiki-token-function)">.executeCommandById</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"typewriter-mode:writing-focus-disable"</span><span style="color: var(--shiki-color-text)">);</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">t</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">app</span><span style="color: var(--shiki-token-function)">.</span><span style="color: var(--shiki-token-constant)">commands</span><span style="color: var(--shiki-token-function)">.executeCommandById</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"typewriter-mode:typewriter-disable"</span><span style="color: var(--shiki-color-text)">);</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">v</span><span style="color: var(--shiki-token-function)">.setState</span><span style="color: var(--shiki-color-text)">(</span></div><div class="line"><span style="color: var(--shiki-color-text)"> { </span><span style="color: var(--shiki-token-keyword)">...</span><span style="color: var(--shiki-token-constant)">v</span><span style="color: var(--shiki-token-function)">.getState</span><span style="color: var(--shiki-color-text)">()</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> mode</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">t</span><span style="color: var(--shiki-color-text)">.originalMode </span><span style="color: var(--shiki-token-keyword)">??</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"preview"</span><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> { history</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span><span style="color: var(--shiki-color-text)"> }</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> );</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">t</span><span style="color: var(--shiki-color-text)">.originalMode </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">null</span><span style="color: var(--shiki-color-text)">;</span></div><div class="line"><span style="color: var(--shiki-color-text)"> }</span></div><div class="line"><span style="color: var(--shiki-color-text)">};</span></div></code></div></pre> <p><code>manifest.json</code>:</p> <pre class="shiki css-variables" style="background-color: var(--shiki-color-background); color: var(--shiki-color-text)"><div class="language-id">json</div><div class="code-container"><code><div class="line"><span style="color: var(--shiki-color-text)">{</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"id"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"mheap-focus-mode"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"name"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"mheap focus mode"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"version"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"1.0.0"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"minAppVersion"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"1.11.0"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"description"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Opens the active note in Editing View and enters Typewriter Mode Writing Focus."</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"author"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Michael Heap"</span><span style="color: var(--shiki-token-punctuation)">,</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">"isDesktopOnly"</span><span style="color: var(--shiki-token-punctuation)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">false</span></div><div class="line"><span style="color: var(--shiki-color-text)">}</span></div></code></div></pre> <p>You'll need to reload Obsidian after creating these files, then head to <code>Community Plugins</code> in settings and enable the new plugin.</p> <p>Then finally, bind a keyboard shortcut to trigger the <code>mheap focus mode: Toggle mheap focus mode</code> command. I use <code>cmd+shift+W</code> (for <strong>W</strong>riting).</p> <h2 id="fin" tabindex="-1">Fin</h2> <p>Now you have iA Writer, but in Obsidian. I hope you enjoy it as much as I do.</p> I don't want the details 2026-09-23T08:25:43Z https://michaelheap.com/i-dont-want-the-details/ <p>A few months ago I was dragged into a call with my engineering counterpart and their boss (who happens to be our SVP of engineering). Something had gone wrong that shouldn't have. Nothing catastrophic, but important enough that I was now on a call with an SVP.</p> <p>I started to explain how it happened when they cut me off with &quot;Michael, I don't want the details&quot;.</p> <p>They continued:</p> <blockquote> <p>I know that if we get into the details, the reasons will be perfectly reasonable. You'll explain what happened, I'll understand why everyone made the decisions they made, and I'll empathise with you. <br /><br /></p> <p>Then it'll happen again. <br /><br /></p> <p>So I don't want the details. I want to know what we're changing.</p> </blockquote> <p>At first I thought &quot;I don't want the details&quot; sounded dismissive. How can they make informed decisions without understanding the details?</p> <p>Then I realised that &quot;I don't want the details&quot; wasn't being dismissive. The executive assumed that we were competent, and was saying &quot;I already believe you. Now let's talk about what happens next&quot;.</p> <h2 id="asking-the-right-question" tabindex="-1">Asking the right question</h2> <p>After something goes wrong, most organizations ask &quot;Why did this happen?&quot; This is a question we're all familiar with answering.</p> <p>We write up timelines. We reconstruct decisions. We explain dependencies. At the end of it, we hand over a document that contains the specific combination of events that led to the incident.</p> <p>Everyone nods their head, says &quot;that makes sense&quot;, and we all move on with our day.</p> <p>Understanding an issue is not the same as fixing it. A good explanation can make things worse. Once everyone agrees that the behaviour was reasonable, the urgency to change anything disappears.</p> <p>When an incident is an unfortunate but understandable sequence of events where no-one is at fault nothing changes. Then the same thing happens six months later, and everyone is left wondering how we landed here again.</p> <p>To drive change in your organization, don't ask &quot;why did this happen?&quot;.</p> <p>Instead, ask:</p> <p><strong>What are we changing so that the same class of failure is less likely next time?</strong></p> <h2 id="reasonable-people" tabindex="-1">Reasonable people</h2> <p>The SVP wasn't interested in understanding how the issue happened or who was involved. They didn't want to be convinced that everyone involved behaved reasonably. That's a baseline expectation.</p> <p>Their question became:</p> <p><strong>“Given that reasonable people produced this outcome, what needs to change?”</strong></p> <p>Consider these examples:</p> <blockquote> <p>&quot;We missed it because Alice was on holiday and Bob thought the Widgets team owned it&quot;.</p> </blockquote> <p>Okay. How do we make ownership unambiguous when someone is unavailable?</p> <blockquote> <p>&quot;The requirements changed three days before launch.&quot;</p> </blockquote> <p>Of course they did! What happens when requirements change inside the launch window?</p> <blockquote> <p>&quot;The alert fired, but the on-call engineer had already dealt with twenty low-value alerts that evening&quot;.</p> </blockquote> <p>Makes sense. How do we improve the signal to noise ratio of our alerts?</p> <p>Focus on changing the system. The people are usually not what needs changing.</p> <h2 id="a-good-explanation-is-not-a-fix" tabindex="-1">A good explanation is not a fix</h2> <p>If your postmortem is full of sentences like &quot;we should involve support earlier&quot; and &quot;we need to communicate better&quot;, or my personal favourite, &quot;we'll be more careful next time&quot;, you have a collection of hopes dressed up as progress.</p> <p>If your corrective action depends on people remembering a conversation from six months ago, you don't have a corrective action. You have organizational folklore. If everyone involved in the incident left the company tomorrow, would the fix still work? If the answer is <em>no</em>, the people may have learned something while the system is still destined to fail.</p> <p>For a postmortem to drive lasting change, ask:</p> <p><strong>If the same situation happened tomorrow, what would cause a different outcome?</strong></p> <p>A process that forces a decision at this point is an improvement. A system that prevents this class of mistake is stronger still.</p> <h2 id="process-for-process'-sake" tabindex="-1">Process for process' sake</h2> <p>You can take &quot;the system prevents this class of mistake&quot; too far.</p> <p>Not every failure deserves a new process. That's how you build environments that no-one wants to work in. Sometimes the cost of preventing recurrence is higher than the cost of occasionally accepting the failure, and that's ok.</p> <p>But you need to accept failure with your eyes open. &quot;We are consciously accepting this risk&quot; is very different from &quot;we said we'd try harder and everyone felt better&quot;.</p> <h2 id="trust" tabindex="-1">Trust</h2> <p>I still think about what the SVP said a lot. What sounded like impatience was a declaration of trust. They didn't need me to prove that the people involved were competent or well intentioned. They were willing to start there. If the investigation showed otherwise, we could deal with that separately.</p> <p>What they didn't want was for empathy to become the mechanism by which the organisation absolved itself of having to change.</p> <p>People are usually making the best decisions they can with the information, incentives and constraints around them. That's why fixing the people is often the wrong answer.</p> <p>Sometimes the most useful thing a leader can say is:</p> <p><strong>I believe you. I don’t need the details. Tell me what we're changing.</strong></p> Boardgame Recommendations 2026-09-21T16:16:56Z https://michaelheap.com/boardgames/ <p>After reading <a href="https://lws.io/blog/boardgames/">Kevin's board game recommendations</a> I realised two things:</p> <ol> <li>He and I have very similar taste in games</li> <li>I regularly make recommendations in conversation and should just write them down</li> </ol> <p>So, here we go.</p> <p><strong>If you don't want to read lots of words, skip to the <a href="https://michaelheap.com/boardgames/#tldr">tl;dr</a></strong>. You can also see my complete collection <a href="https://boardgamegeek.com/collection/user/mheap?own=1&amp;subtype=boardgame&amp;ff=1">here</a>.</p> <h2 id="top-5" tabindex="-1">Top 5</h2> <p>Leading with the best. If I could only have five games in my collection, these are the five that I’d have.</p> <h3 id="power-grid" tabindex="-1">Power Grid</h3> <p>My undisputed favourite game since 2014. <a href="https://boardgamegeek.com/boardgame/2651/power-grid">Power Grid</a> is an economy/auction game where you bid on power plants to power cities. Each round you have to purchase resources for your power plants.</p> <p>The genius behind this game is that when buying resources, the person in last place buys first. As it’s a supply and demand based market with fixed restocking that means that the person in last place needs fewer resources for the same resources than the players that are pulling ahead.</p> <p>With a huge selection of expansion maps, Power Grid is a game that I’ll never get tired of playing.</p> <h3 id="viticulture" tabindex="-1">Viticulture</h3> <p><a href="https://boardgamegeek.com/boardgame/183394/viticulture-essential-edition">Viticulture</a> is a worker placement game about making wine. On your turn you have a limited number of workers to place one at a time. Each location that they could be played in also has limited space, and someone might beat you to it. It’s a strategic game of building an engine that produces lots of wine, but that doesn’t take too long to get started in case someone else ends the game.</p> <p>I enjoyed the Viticulture base game, but the more expansions I play, the more I love the game overall. The <a href="https://boardgamegeek.com/boardgame/202174/viticulture-tuscany-essential-edition">Tuscany</a> expansion is the sweet spot right now, but maybe I just need to play Bordeaux some more.</p> <p>At this point I mostly play Tuscany on BoardGameArena, and <a href="https://boardgamegeek.com/boardgame/360226/viticulture-world-cooperative-expansion">Viticulture World</a> (which is a <strong>very hard</strong> co-op expansion) in person. If you’ve got a regular group to play with, I can highly recommend Viticulture World as a way to challenge yourself.</p> <h3 id="puerto-rico" tabindex="-1">Puerto Rico</h3> <p><a href="https://michaelheap.com/boardgames/%5Bhttps://boardgamegeek.com/boardgame/415843/puerto-rico-1897-special-edition%5D(https://boardgamegeek.com/boardgame/3076/puerto-rico)">Puerto Rico</a> is classed as an “action selection” game, but that doesn’t really explain what it does. The idea of the game is that you’re all explorers looking to build up your plantations in Puerto Rico (yes, the theme isn’t great). On your turn you can choose an action for everyone to take. As the person that selected it you get one bonus (e.g. a special plantation, produce one more good).</p> <p>The trick to winning Puerto Rico is to take the action that benefits you the most while also not benefiting other players.</p> <p>It’s hard to imagine until you play it, but I highly recommend giving it a go. It’s also on BoardGameArena, and if you like it there’s an <a href="https://boardgamegeek.com/boardgame/415843/puerto-rico-1897-special-edition">Awaken Realms reprint</a> that’s massively overproduced, but also beautiful.</p> <h3 id="lords-of-waterdeep" tabindex="-1">Lords of Waterdeep</h3> <p><a href="https://boardgamegeek.com/boardgame/110327/lords-of-waterdeep">Lords of Waterdeep</a> is one of the original worker placement games. This is my go-to game on my iPad when I’m travelling, and I finally got my hands on a copy of the base game and skull port expansion thanks to the recent reprint.</p> <p>On your turn you visit locations to collect resources. Then spend those resources to complete quests. The quests have various synergies with each other and depending on which you take you can generate a ton of victory points thanks to the interactions between the cards themselves.</p> <h3 id="ra" tabindex="-1">Ra</h3> <p>Finally, <a href="https://boardgamegeek.com/boardgame/12/ra">Ra</a>! Another reprint that I’m very glad I backed. Ra is the quintessential auction game. Each player starts with some bid tokens and uses them to bid on a tableau of tiles that have been drawn. When you win a bid, you swap your chip with one of the values in the middle. This is how people that start with high values end up with low value chips and vice versa.</p> <p>The tiles that you win are placed in front of you in one of eight spaces. Four of them are reset every round, and four persist for the whole game. Figuring out which combination of spaces you want to invest in and which to ignore is most of the strategy. Careful though! If you’re building for a specific win condition people will start outbidding you to stop you getting the tiles you need.</p> <h2 id="quickfire-round" tabindex="-1">Quickfire Round</h2> <h3 id="worker-placement" tabindex="-1">Worker Placement</h3> <p>We already covered Viticulture and Lords of Waterdeep, which are positions one and two.</p> <p>The final worker placement game is <a href="https://boardgamegeek.com/boardgame/63628/the-manhattan-project">The Manhattan Project</a>, which is a tight game about building bombs, spying on other players and destroying other player's factories. You have different types of workers that can take specific actions, so you need to balance the workers you have at various points in the game. Each player can see what every other player is doing, so there is plenty of opportunity for calculation. Who can run the most efficient program?</p> <h3 id="deck-bag-builders" tabindex="-1">Deck / Bag Builders</h3> <p>Although I'll usually reach for worker placement games, deck/bag builders are my comfort game when I only have a short amount of time. Deck builder games are where you start with a hand of fixed cards, then spend resources available on those cards to buy better cards. Then use those cards to get even better cards.</p> <p>The strategy is to balance getting victory points (useless each round, but they're how you win) with economy and attack cards. Balance things correctly and you'll be victorious while everyone else is still building their economy.</p> <p>A bag builder is the same as a deck builder, but instead of drawing cards you pull tokens out of a cloth bag.</p> <ol> <li> <p><a href="https://boardgamegeek.com/boardgame/422780/mistborn-the-deckbuilding-game">Mistborn: The Deckbuilding Game</a> takes the top spot for me in this category. It comes with both a competitive and a co-operative mode. Personally, I prefer the competitive mode but the co-op is great too.</p> <p>If you're a fan of Brandon Sanderson's Mistborn novels, you'll love how thematic this game is. Burning metals to take actions, with characters you know and love available on the cards themselves. I've played this one half a dozen times already this year.</p> </li> <li> <p><a href="https://boardgamegeek.com/boardgame/194607/mystic-vale">Mystic Vale</a> is an intriguing game. The cards you buy are transparent, and you make your own cards by layering cards on top of each other in a plastic sleeve.</p> <p>The aim of the game is to collect victory points before they run out by adding victory point slots to your cards. But be careful, if you fill them up with victory points you won't be able to purchase any new cards.</p> <p>Mystic Vale had a great push-your-luck mechanism where you can keep drawing cards, but if you draw too many curse icons you lose your entire hand.</p> <p>I play this one a <em>lot</em> on the iPad when I have a few minutes to spare.</p> </li> <li> <p><a href="https://boardgamegeek.com/boardgame/244521/quacks">Quacks</a> (formerly known as Quacks of Quedlinburg) is a push your luck game where you draw tokens from a bag, gain money then spend that money on better tokens. You start from the same position every round, so there's a tension between improving your starting location and getting better chips in your bag to score higher each round.</p> <p>Quacks is the game I'd choose if I were introducing someone to deck/bag building games.</p> </li> </ol> <h3 id="co-op-games" tabindex="-1">Co-op Games</h3> <p>As mentioned above, Mistborn and Viticulture both have great co-op modes that I can highly recommend. For pure co-op games:</p> <ol> <li><a href="https://boardgamegeek.com/boardgame/98778/hanabi">Hanabi</a>: You have five cards in your hand that everyone can see except you. They can give you information about the cards, such as &quot;these two cards are the number 3&quot;, or &quot;these three cards are red&quot;. The aim of the game is to build stacks of colour-matched fireworks in order from 1-5 across all players.</li> <li><a href="https://boardgamegeek.com/boardgame/173090/the-game">The Game</a>: A terribly named, but very fun game. Each player has a set of numbered cards that they're trying to get rid of. There are four piles in the middle to play cards on to. Two are labelled 1-&gt;50, and two are labelled 50-&gt;1. You can play on any pile, but the numbers must be sequental. The only way you can go backwards is by playing a card that is exactly 10 difference with the current card. The challenge is that you can't tell each other what cards you have - only vague sentences like &quot;I have a REALLY good card for this pile&quot; are allowed. If anyone can't play on their turn, the game is over and you all lose.</li> <li><a href="https://boardgamegeek.com/boardgame/220517/the-shipwreck-arcana">The Shipwreck Arcana</a>: I've been playing Hanabi and The Game for 10+ years. I picked up Shipwreck last year when I was travelling and finally got it to the table. It has tarot-inspired graphics, and is about predicting what fates (numbers 1-7) people are holding in their hands. There are shared places to play numbers on that say things like &quot;play here if your numbers are exactly 3 apart&quot; or &quot;play here if the sum of your fates and all visible fates is a multiple of 4&quot;. It's hard to explain, so I recommend watching this <a href="https://youtu.be/E3fwBVWdUiw?t=39">four minute intro</a>.</li> </ol> <h3 id="two-player-games" tabindex="-1">Two Player Games</h3> <p>If you're looking for head to head games, there are some goodies out there.</p> <ol> <li><a href="https://boardgamegeek.com/boardgame/424219/zenith">Zenith</a>: A tug of war game where you're trying to influence planets by pulling them towards you. You can win by influencing the same planet 3 times, and 4 different planets of any combination of 5 planets. There's a ton of variety based on the research track used, the players involved and the order of the cards drawn. This is regularly my most played game on BoardGameArena each month, and I play the physical copy too.</li> <li><a href="https://boardgamegeek.com/boardgame/329082/radlands">Radlands</a>: I've only played this a couple of times but it's already in my top 3. I waited for the super deluxe edition and the neoprene mats make all the difference to your camp setup. The idea is that you're rival gangs trying to protect your camps. You only space for have six survivors, and you can build interesting combinations of survivors to destroy your opponent's camp. Simple to set up, reasonable depth and it plays quickly.</li> <li><a href="https://boardgamegeek.com/boardgame/50/lost-cities">Lost Cities</a>: A Knizia classic. Draw cards and build runs of numbers in a matching colour. Careful though - each run you start gives you -20 points until you play enough cards to offset it. Build numbers from 1-10 (so you only need a 3, 7 and 10 to break even). If you think you'll do well on a pile, play a wager card to increase your multiplier (both positive and negative - you can end up starting at -80 if you play three wagers in a single column!). This is another fantastic game to play on BoardGameArena. I'd recommend real-time for this one.</li> </ol> <p>Other two player games that we love include <a href="https://boardgamegeek.com/boardgame/54043/jaipur">Japiur</a>, <a href="https://boardgamegeek.com/boardgame/372/schotten-totten">Schotten Totten</a> and <a href="https://boardgamegeek.com/boardgame/373106/sky-team">Sky Team</a>.</p> <h3 id="party-games" tabindex="-1">Party Games</h3> <p>If you've got a larger group of people, party games work well. Party games are usually either competitive, social deduction games or co-operative. My top 3 are all co-operative, but the honourable mentions are all deduction games.</p> <ol> <li><a href="https://boardgamegeek.com/boardgame/254640/just-one">Just One</a>: A co-operative game where you're all trying to help one person guess a single word by giving one word clues. However, if two people write the same clue they're not allowed to share it with the guesser. I've played this with family over the holidays. I've played this at team offsites. It goes down well everywhere.</li> <li><a href="https://boardgamegeek.com/boardgame/411567/the-gang">The Gang</a>: A co-operative version of Texas Hold'em poker. Guess who has the strongest hand, who has the weakest hand, and every hand in between. After each new card is revealed everyone takes a numbered chip indicating how strong they think their hand is. If you get it right, you rob the vault! If not, you trip the alarm. If your group knows how to play poker, this is phenomenal. If not, I'd give it a miss.</li> <li><a href="https://boardgamegeek.com/boardgame/178900/codenames">Codenames</a>: Split in to two teams and try to identify all of the words related to your team through word association before the other team finds theirs. Each turn, the spy master gives a one word clue and a number e.g. &quot;Commonwealth 3&quot;. This means that there are 3 cards that relate to the word &quot;commonwealth&quot;. Codenames scales to any number of players, and has a variety of editions (standard, marvel)</li> </ol> <p>For competitive games we enjoy <a href="https://boardgamegeek.com/boardgame/135779/a-fake-artist-goes-to-new-york">A Fake Artist Goes to New York</a>, <a href="https://boardgamegeek.com/boardgame/166384/spyfall">Spyfall</a> and <a href="https://boardgamegeek.com/boardgame/128882/the-resistance-avalon">The Resistance: Avalon</a> (which I played every day for 4 years when I worked in an office).</p> <h2 id="what-i-take-to-game-night" tabindex="-1">What I take to game night</h2> <p>It really depends on the night. Most nights I take one of the above games as the main game, plus <a href="https://boardgamegeek.com/boardgame/420087/flip-7">Flip 7</a>, <a href="https://boardgamegeek.com/boardgame/129622/love-letter">Love Letter</a> or <a href="https://boardgamegeek.com/boardgame/131357/coup">Coup</a> as a quick filler game for before or after the main game.</p> <p>If we're feeling tired we'll pick up a lighter game. Something like <a href="https://boardgamegeek.com/boardgame/157969/sheriff-of-nottingham">Sheriff of Nottingham</a> (declare goods that you're importing. The Sheriff may choose to inspect your bag. If you're smuggling contraband, you pay. Otherwise he pays you), <a href="https://boardgamegeek.com/boardgame/271869/sushi-roll">Sushi Roll</a> (a set building game. This is the dice version of Sushi Go) or <a href="https://boardgamegeek.com/boardgame/260605/camel-up-second-edition">Camel Up</a> (a silly game about racing camels. Part luck, part strategy, lots of chaos).</p> <p>Finally, there are a couple of honourable mentions that don't fit the categories above, but do make it to the table a couple of times per year as the main game:</p> <ol> <li><a href="https://boardgamegeek.com/boardgame/290236/canvas">Canvas</a>: A bit like Mystic Vale, this is a game where you combine transparent cards to make something. You purchase cards from an auction, then combine their abilities (the five colours on the card) in order to meet the randomly drawn composition cards and score points. It sounds abstract until you play it (or watch <a href="https://www.youtube.com/watch?v=kAZxJTqFgSw">this video</a> from the publisher). I've had a lot of success with people at game night <em>and</em> with family with Canvas.</li> <li><a href="https://boardgamegeek.com/boardgame/68448/7-wonders">7 Wonders</a>: A tableau building, card drafting game where you choose a card then pass your entire hand on to the next player. There are 7 ways to score points, so every game can have a different strategy. This is a favourite for when you have a lot of players looking for a game as it goes up to 7 players (if there are 8 players, that's two games of four). Be warned: scoring makes zero sense until the end of your first game, then it's super easy to understand.</li> <li><a href="https://boardgamegeek.com/boardgame/18/roborally">RoboRally</a>: There are many versions of this. The linked one is the one I originally played way back in 2014. I own the <a href="https://boardgamegeek.com/boardgame/417203/robo-rally-30th-anniversary">30th anniversary edition</a>, but they all play the same. Plan your moves by playing cards in order. Then hope that you planned correctly and that conveyer belts, weapons and other robots don't push you off course. Be the first to get to the objectives to win.</li> </ol> <h2 id="tldr" tabindex="-1">TL;DR</h2> <p>I wrote a <em>lot</em> of words above. Here's the short version:</p> <ul> <li><strong>Top 5</strong>: <a href="https://boardgamegeek.com/boardgame/2651/power-grid">Power Grid</a>, <a href="https://michaelheap.com/boardgames/">Viticulture</a>, <a href="https://boardgamegeek.com/boardgame/3076/puerto-rico">Puerto Rico</a>, <a href="https://boardgamegeek.com/boardgame/110327/lords-of-waterdeep">Lords of Waterdeep</a>, <a href="https://boardgamegeek.com/boardgame/12/ra">Ra</a></li> <li><strong>Worker placement</strong>: <a href="https://michaelheap.com/boardgames/">Lords of Waterdeep</a>, <a href="https://michaelheap.com/boardgames/">Viticulture</a>, <a href="https://boardgamegeek.com/boardgame/63628/the-manhattan-project">The Manhattan Project</a></li> <li><strong>Deck/bag building</strong>: <a href="https://boardgamegeek.com/boardgame/422780/mistborn-the-deckbuilding-game">Mistborn: The Deckbuilding Game</a>, <a href="https://boardgamegeek.com/boardgame/194607/mystic-vale">Mystic Vale</a>, <a href="https://boardgamegeek.com/boardgame/244521/quacks">Quacks</a></li> <li><strong>Co-operative</strong>: <a href="https://boardgamegeek.com/boardgame/98778/hanabi">Hanabi</a>, <a href="https://boardgamegeek.com/boardgame/173090/the-game">The Game</a>, <a href="https://boardgamegeek.com/boardgame/220517/the-shipwreck-arcana">The Shipwreck Arcana</a></li> <li><strong>2 player</strong>: <a href="https://boardgamegeek.com/boardgame/424219/zenith">Zenith</a>, <a href="https://boardgamegeek.com/boardgame/329082/radlands">Radlands</a>, <a href="https://boardgamegeek.com/boardgame/50/lost-cities">Lost Cities</a>, <a href="https://boardgamegeek.com/boardgame/54043/jaipur">Japiur</a>, <a href="https://boardgamegeek.com/boardgame/372/schotten-totten">Schotten Totten</a>, <a href="https://boardgamegeek.com/boardgame/373106/sky-team">Sky Team</a></li> <li><strong>Party games</strong>: <a href="https://boardgamegeek.com/boardgame/254640/just-one">Just One</a>, <a href="https://boardgamegeek.com/boardgame/411567/the-gang">The Gang</a>, <a href="https://boardgamegeek.com/boardgame/178900/codenames">Codenames</a>, <a href="https://boardgamegeek.com/boardgame/135779/a-fake-artist-goes-to-new-york">A Fake Artist Goes to New York</a>, <a href="https://boardgamegeek.com/boardgame/166384/spyfall">Spyfall</a>, <a href="https://boardgamegeek.com/boardgame/128882/the-resistance-avalon">The Resistance: Avalon</a></li> <li><strong>Filler games</strong>: <a href="https://boardgamegeek.com/boardgame/420087/flip-7">Flip 7</a>, <a href="https://boardgamegeek.com/boardgame/129622/love-letter">Love Letter</a>, <a href="https://boardgamegeek.com/boardgame/131357/coup">Coup</a></li> <li><strong>Lighter games</strong>: <a href="https://boardgamegeek.com/boardgame/157969/sheriff-of-nottingham">Sheriff of Nottingham</a>, <a href="https://boardgamegeek.com/boardgame/271869/sushi-roll">Sushi Roll</a>, <a href="https://boardgamegeek.com/boardgame/260605/camel-up-second-edition">Camel Up</a></li> <li><strong>Bonus games</strong>: <a href="https://boardgamegeek.com/boardgame/290236/canvas">Canvas</a>, <a href="https://boardgamegeek.com/boardgame/68448/7-wonders">7 Wonders</a>, <a href="https://boardgamegeek.com/boardgame/18/roborally">RoboRally</a></li> </ul> Fetch PR comments using the `gh` CLI 2026-09-19T13:20:43Z https://michaelheap.com/gh-pr-comments/ <p>The &quot;fix this with copilot&quot; button on GitHub is great, but when you're already working on a branch locally sometimes you want to pass the review feedback to your agent directly.</p> <p>If you use the <code>gh</code> CLI, you can install this by running <code>gh extension install mheap/gh-pr-comments</code>.</p> <p>Once it's installed, run <code>gh pr-comments &lt;PR number&gt; | pbcopy</code> to get all of the comments ready to paste in to your agent.</p> <p>Here's what it does under the hood:</p> <pre class="shiki css-variables" style="background-color: var(--shiki-color-background); color: var(--shiki-color-text)"><div class="language-id">bash</div><div class="code-container"><code><div class="line"><span style="color: var(--shiki-token-comment)">#!/usr/bin/env bash</span></div><div class="line"><span style="color: var(--shiki-token-function)">set</span><span style="color: var(--shiki-color-text)"> -euo pipefail</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-token-keyword)">if</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">(( $# </span><span style="color: var(--shiki-token-keyword)">&lt;</span><span style="color: var(--shiki-token-string)"> </span><span style="color: var(--shiki-token-constant)">1</span><span style="color: var(--shiki-token-string)"> </span><span style="color: var(--shiki-token-keyword)">||</span><span style="color: var(--shiki-token-string)"> $# </span><span style="color: var(--shiki-token-keyword)">&gt;</span><span style="color: var(--shiki-token-string)"> </span><span style="color: var(--shiki-token-constant)">2</span><span style="color: var(--shiki-token-string)"> ))</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">||</span><span style="color: var(--shiki-color-text)"> [[ </span><span style="color: var(--shiki-token-keyword)">!</span><span style="color: var(--shiki-color-text)"> ${1</span><span style="color: var(--shiki-token-keyword)">:-</span><span style="color: var(--shiki-color-text)">} </span><span style="color: var(--shiki-token-keyword)">=~</span><span style="color: var(--shiki-color-text)"> ^[0-9]+$ ]]</span><span style="color: var(--shiki-token-keyword)">;</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">then</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">echo</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Usage: gh pr-comments &lt;PR number&gt; [owner/repo]"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">&gt;&2</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">exit</span><span style="color: var(--shiki-color-text)"> 1</span></div><div class="line"><span style="color: var(--shiki-token-keyword)">fi</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)">pr=</span><span style="color: var(--shiki-token-string-expression)">"$1"</span></div><div class="line"><span style="color: var(--shiki-color-text)">repo=</span><span style="color: var(--shiki-token-string-expression)">"${2</span><span style="color: var(--shiki-token-keyword)">:-</span><span style="color: var(--shiki-token-string-expression)">}"</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-token-keyword)">if</span><span style="color: var(--shiki-color-text)"> [[ </span><span style="color: var(--shiki-token-keyword)">-z</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"$repo"</span><span style="color: var(--shiki-color-text)"> ]]</span><span style="color: var(--shiki-token-keyword)">;</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">then</span></div><div class="line"><span style="color: var(--shiki-color-text)"> repo=</span><span style="color: var(--shiki-token-string-expression)">"$(gh repo view --json nameWithOwner --jq '.nameWithOwner')"</span></div><div class="line"><span style="color: var(--shiki-token-keyword)">fi</span></div><div class="line"></div><div class="line"><span style="color: var(--shiki-color-text)">gh api --paginate </span><span style="color: var(--shiki-token-string-expression)">"repos/$repo/pulls/$pr/comments"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">|</span><span style="color: var(--shiki-color-text)"> jq -c </span><span style="color: var(--shiki-token-string-expression)">'.[] | {path, line, body}'</span></div></code></div></pre> Dump Kong Gateway configuration 2026-09-15T19:27:15Z https://michaelheap.com/dump-kong-gateway-config/ <p>The simplest way to dump a Kong Gateway configuration is <code>deck gateway dump</code>. However, I sometimes find myself working with a dataplane that does not have an admin API exposed.</p> <p>Here's a one-liner that dumps the config from the running process (enterprise only).</p> <p><strong>Important</strong>: This dumps in DB-less format, not deck format. Use <a href="https://developer.konghq.com/deck/dbless-vs-deck/">deck file format</a> to convert between them.</p> <pre class="shiki css-variables" style="background-color: var(--shiki-color-background); color: var(--shiki-color-text)"><div class="language-id">bash</div><div class="code-container"><code><div class="line"><span style="color: var(--shiki-color-text)">docker </span><span style="color: var(--shiki-token-function)">exec</span><span style="color: var(--shiki-color-text)"> -i </span><span style="color: var(--shiki-token-string-expression)">"${docker_hash}"</span><span style="color: var(--shiki-color-text)"> sh -c \</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'echo "require([[kong.db.declarative]]).export_from_db({write=function(_,s) io.write(s) end})" | kong runner /dev/stdin'</span><span style="color: var(--shiki-color-text)"> \</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">&gt;</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"${output_file}"</span></div></code></div></pre> <p>Or for <code>kubectl</code>:</p> <pre class="shiki css-variables" style="background-color: var(--shiki-color-background); color: var(--shiki-color-text)"><div class="language-id">bash</div><div class="code-container"><code><div class="line"><span style="color: var(--shiki-color-text)">kubectl </span><span style="color: var(--shiki-token-function)">exec</span><span style="color: var(--shiki-color-text)"> -n kong -i deploy/kong-gateway -- sh -c \</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'echo "require([[kong.db.declarative]]).export_from_db({write=function(_,s) io.write(s) end})" | kong runner /dev/stdin'</span><span style="color: var(--shiki-color-text)"> \</span></div><div class="line"><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">&gt;</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"${output_file}"</span></div></code></div></pre> Asking better questions 2026-05-08T16:54:17Z https://michaelheap.com/asking-better-questions/ <p>There's nothing more terrifying than getting a &quot;Hey, quick question. Are we on track to launch by X?&quot;.</p> <p>It's not the question itself that's terrifying. It's everything you don't know when you hear it:</p> <ul> <li>What do they know that I don't?</li> <li>Why do they care right now?</li> <li>What happens if I give the wrong answer?</li> </ul> <p>That ambiguity is what drives anxiety.</p> <p>There are multiple ways to answer the question, each giving the asker more visibility into your thinking (and more confidence in your answer):</p> <ul> <li>&quot;I think so&quot;</li> <li>&quot;Yes, we're on track&quot;</li> <li>&quot;Yes, we're on track. I reviewed the remaining work items and there are approximately 3 weeks of work left, which will give us 2 weeks of testing.&quot;</li> <li>&quot;Yes, we're on track. I reviewed the remaining work items and there are approximately 3 weeks of work left, which will give us 2 weeks of testing. Is there a particular reason you're asking?&quot;</li> </ul> <p>The first three items make your thinking more visible. But the fourth item digs in to the question behind the question. It's unlikely that they've spontaneously taken interest in the project this morning. What changed that made them ask this now?</p> <p>Sometimes it's as simple as &quot;I'm meeting Customer Z and wanted to let them know when the change is coming&quot;. Other times it's &quot;I was chatting to the marketing team and they want to run a campaign around the new features and wondered when it was releasing&quot;. And sometimes it's &quot;The last 3 releases have been delayed by a couple of weeks and I wanted to make sure that we're not underestimating the amount of work. Every time we miss a deadline I look bad.&quot;</p> <p>Ambiguity drives anxiety. Context removes it.</p> <h2 id="provide-the-why" tabindex="-1">Provide the Why</h2> <p>Now that you know what it's like to be on the receiving end of this type of question, how can you reduce the anxiety for teams that you work with? One sentence of additional context is all it takes to remove that ambiguity.</p> <ul> <li><strong>Bad</strong>: When will your proposal be finished?</li> <li><strong>Good</strong>: When will your proposal be finished? I won't be able to review if it's Thursday or Friday as I'm travelling, so you'll need to wait an additional week. If it's done by Wednesday I'll carve out time.</li> </ul> <p>You can also lead with the reason you're asking:</p> <ul> <li><strong>Bad</strong>: Did we document feature X?</li> <li><strong>Good</strong>: I have partner Y trying to integrate feature X. Do we have any public docs that I can send to them? If not, can you hop on a call to help them out?</li> </ul> <p>Make sure that the context you add is useful, not something that will drive additional anxiety:</p> <ul> <li><strong>Bad</strong>: Are we shipping X this week?</li> <li><strong>Worse</strong>: Are we shipping X this week? Sales is asking</li> <li><strong>Good</strong>: I was talking to one of the sales engineers and they mentioned that feature X would help on one of their deals. Is it still shipping this week?</li> </ul> <p>“Sales is asking” adds pressure, but not clarity. It makes the question feel more urgent without making it easier to answer.</p> <h2 id="ask-the-question-behind-the-question" tabindex="-1">Ask the Question Behind the Question</h2> <p>When you're asking a question, make sure to add enough context that the person knows <em>why</em> you're asking.</p> <p>Context doesn't just give people more information, it changes the shape of the question. Here's what it looks like in practice:</p> <ul> <li><strong>Question</strong>: Are we shipping X this week?</li> <li><strong>Answer</strong>: Yes</li> </ul> <p>Let's try that again with the longer question:</p> <ul> <li><strong>Question</strong>: I was talking to one of the sales engineers and they mentioned that feature X would help on one of their deals. Is it still shipping this week?</li> <li><strong>Answer</strong>: Yes. Which engineer was it? I can give them early access and some internal docs that I've been writing if they want to try it themselves before we officially ship.</li> </ul> <p>The person being asked has the full picture and can give a better answer.</p> <p>In practice, adding context tends to do one of three things:</p> <ul> <li>It changes the <strong>urgency</strong></li> <li>It changes the <strong>format of the answer</strong></li> <li>It changes the definition of <strong>done</strong></li> </ul> <p>In the first example (<em>when</em>), the additional context changes the <strong>urgency</strong> of the question.<br /> In the second example (<em>did</em>), the additional context changes the <strong>format</strong> of the answer from a yes/no to a link.<br /> In the third example (<em>shipping</em>), the additional context changes the definition of <strong>done</strong>.</p> <p>If your context doesn’t change one of those three things, it’s probably not useful to the person you're asking.</p> <p>If you’re being asked a question and they don’t provide context, answer directly, then gently ask what prompted it: &quot;Great question! The answer is X. I'm curious to know what made you ask.&quot;</p> It just has to work 2026-04-29T09:01:50Z https://michaelheap.com/it-just-has-to-work/ <p>We've been trained all of our work life to &quot;do things the right way&quot;.</p> <p>The right process. The right level of detail. The right amount of alignment.</p> <p>You know what happens next. Six months later, nothing has shipped.</p> <h2 id="the-hidden-cost-of-&quot;doing-it-right&quot;" tabindex="-1">The Hidden Cost of &quot;Doing It Right&quot;</h2> <p>When you're a scrappy startup, everything is allowed. Quick hacks, half-baked ideas, and sometimes editing things live in production. But as a company grows, it starts to establish processes to prevent failure. A &quot;best practice&quot; here, or an &quot;executive review&quot; there.</p> <p>Some of that is necessary. Every process is someone's scar. They've lived through outages, security incidents, compliance failures, and broken trust.</p> <p>The problem is what happens over time. Last-resort safeguards quietly become prerequisites for action. Teams wait for a complete understanding of the problem. It rarely happens. When you treat perfection as a risk-avoidance strategy, nothing ever ships.</p> <h2 id="momentum-beats-consensus" tabindex="-1">Momentum Beats Consensus</h2> <p>One product manager I worked with hit this problem. They were struggling to get stakeholder time to talk about the requirements for a new capability. Everyone had opinions, and they wanted to make sure that they were captured.</p> <p>I asked them to write a one-page, opinionated spec and share it. Within a day, stakeholders were commenting in the doc with their opinions.</p> <p><strong>A one-page spec can trigger in a day what weeks of scheduling can’t: informed disagreement.</strong></p> <p>The first version is almost always wrong, but it surfaces the <em>right</em> disagreements fast.</p> <p>It doesn't need to be a spec. Sometimes it’s a clickable prototype. Sometimes it’s a command-line script, a mocked API, a Loom walkthrough. Just make <em>something</em> that people can react to.</p> <p>It doesn’t need to be complete. &quot;Working&quot; means:</p> <ul> <li>Usable by a real person today</li> <li>A measurable metric moves</li> <li>You can tell that it worked within hours or days</li> <li>It fits within your guardrails</li> </ul> <p>Incremental progress is how you get to the right answer faster. It requires clear success criteria and fast feedback loops. More importantly, it requires a willingness to delete work. Ship, learn, iterate, then ship again.</p> <p>Some work has tight constraints - safety, legal, ethical, security - but the need to learn doesn't go away.</p> <h2 id="the-real-questions" tabindex="-1">The Real Questions</h2> <p>Action creates something people can react to. Once something &quot;good enough&quot; is unblocking real users, the questions change. Instead of asking &quot;Is this ready?&quot; or &quot;Will this scale?&quot;, ask questions that inform the future.</p> <ul> <li>“What will we learn if this works?”</li> <li>“How quickly will we know if it doesn’t?”</li> <li>“What gets better the moment this exists?”</li> </ul> <p>Most teams fail not because they move too fast, but because they wait for certainty that never arrives. Teams that wait for perfect don't have better outcomes. They just have fewer of them. Progress starts when there’s something real to push against.</p> <p>Treating every decision as permanent is how you end up six months in with nothing shipped.</p> Disable VSCode embedded browser 2026-04-27T20:05:28Z https://michaelheap.com/vscode-embedded-browser/ <p>VSCode recently started opening my blog previews as an editor tab rather than in my normal browser. It turns out that this is a new <em>Integrated Browser</em> feature inside VSCode Insiders.</p> <p>To disable it, add the following to <code>settings.json</code>:</p> <pre class="shiki css-variables" style="background-color: var(--shiki-color-background); color: var(--shiki-color-text)"><div class="language-id">json</div><div class="code-container"><code><div class="line"><span style="color: var(--shiki-token-string-expression)">"workbench.browser.openLocalhostLinks"</span><span style="color: var(--shiki-color-text)">: </span><span style="color: var(--shiki-token-constant)">false</span></div></code></div></pre> <p>Or you can search for <code>workbench.browser.openLocalhostLinks</code> in the settings panel and uncheck the box.</p> <p>Then restart VSCode, or reload the window with <em>Command Palette → Developer: Reload Window</em>.</p>