<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Heuristics on Andrew Quinn&#39;s TILs</title>
    <link>https://til.andrew-quinn.me/tags/heuristics/</link>
    <description>Recent content in Heuristics on Andrew Quinn&#39;s TILs</description>
    <image>
      <title>Andrew Quinn&#39;s TILs</title>
      <url>https://til.andrew-quinn.me/papermod-cover.png</url>
      <link>https://til.andrew-quinn.me/papermod-cover.png</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sat, 29 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://til.andrew-quinn.me/tags/heuristics/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>&#34;Courage to quit&#34; matters more for seniors, less for juniors</title>
      <link>https://til.andrew-quinn.me/posts/courage-to-quit-matters-more-for-seniors-less-for-juniors/</link>
      <pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/courage-to-quit-matters-more-for-seniors-less-for-juniors/</guid>
      <description>&lt;p&gt;As a teenager first getting into computers in the late 2000s I spent a lot of
time reading old
revered tomes like
&lt;a href=&#34;https://www.catb.org/~esr/writings/taoup/html/&#34;&gt;ESR&amp;rsquo;s &lt;em&gt;The Art of Unix Programming&lt;/em&gt;&lt;/a&gt;
and
&lt;a href=&#34;https://mitp-content-server.mit.edu/books/content/sectbyfn/books_pres_0/6515/sicp.zip/index.html&#34;&gt;SICP&lt;/a&gt;
.
If present-day me were to isekai back in time and lose all of the technical
knowledge I had but retain my current instincts, however, I would have left
all of this on the table and just built a terrible new automation tool for
&lt;a href=&#34;https://www.kingdomofloathing.com/login.php?loginid=09ca9334301941af8f94438812a5e6f0&#34;&gt;the surprisingly scriptable MMORPG I was into&lt;/a&gt;
in PHP 5, with as much disregard for clean code and security practices
that I could muster[^1].
Then I would have put that tool online, continued to add new features to the
ball of mud, and kept it running for 5-10 years before my first post-college
interview. And then the vibe that would come across is less &amp;ldquo;He&amp;rsquo;s an egghead,
and we like that, but we really need someone who actually does things&amp;rdquo; and
more &amp;ldquo;He&amp;rsquo;s a meathead, but inside of that meathead is an egghead waiting to
be revealed. We need this kind of junior dev yesterday.&amp;rdquo;
I would have done this even though
&lt;a href=&#34;https://github.com/kolmafia/kolmafia&#34;&gt;an objectively far superior tool&lt;/a&gt;
had already existed for quite some time,
making this project &amp;ldquo;feel like&amp;rdquo; dead weight in the wide world of software!
But why?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>It&#39;s okay to solve a problem twice</title>
      <link>https://til.andrew-quinn.me/posts/it-s-okay-to-solve-a-problem-twice/</link>
      <pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/it-s-okay-to-solve-a-problem-twice/</guid>
      <description>&lt;p&gt;Quoth
&lt;a href=&#34;https://www.catb.org/~esr/faqs/hacker-howto.html#believe2&#34;&gt;&amp;ldquo;How to Become a Hacker&amp;rdquo;&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2. No problem should ever have to be solved twice.
Creative brains are a valuable, limited resource. They shouldn&#39;t be wasted on re-inventing the wheel when there are so many fascinating new problems waiting out there.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Much more at the original post, including preemptive rebuttals to what
I&amp;rsquo;m about to describe. This post is entirely about cataloguing my own
error.&lt;/p&gt;
&lt;p&gt;I took this maxim, perhaps, a little too close to heart when I was
starting out as a software guy, 15-odd years ago. This is my
apology to past me. Past me, I apologize.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Experiment registry: Can I simply enjoy everything I do?</title>
      <link>https://til.andrew-quinn.me/posts/experiment-registry-can-i-simply-enjoy-everything-i-do/</link>
      <pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/experiment-registry-can-i-simply-enjoy-everything-i-do/</guid>
      <description>&lt;p&gt;&lt;strong&gt;N.B.&lt;/strong&gt;: If I link you to this personally, it is to
explain why I usually seem to be in a great mood.
It&amp;rsquo;s an experiment.
I&amp;rsquo;m normally in merely a good mood,
and I am pushing myself to be great.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This is an unusual entry for a Today I Learned site,
even by my standards.
But I think it&amp;rsquo;s
something I would prefer to pre-register ahead of time.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve always been predisposed to mirth. I laugh easily; I rarely get
depressed; I&amp;rsquo;m just about always in a content mood these days, in no
small part because I have actually succeeded on the meager goals I set
for myself as a teenager (soulmate: check, child: check,
sujuvuus vieraalla kielellä: yhä työn alla mutta kyllä se siitä, give
me maybe five more years). Yet for some reason I have always felt it is,
I don&amp;rsquo;t know, low status to be so effortlessly joyful and opulent. Like
people will take you less seriously or something. So I&amp;rsquo;ve been reluctant
to push my naturally good mood into the realm of &lt;em&gt;actively loving life&lt;/em&gt;
as my default state.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Enforce GPL compliance by offering bounties?</title>
      <link>https://til.andrew-quinn.me/posts/enforce-gpl-compliance-by-offering-bounties/</link>
      <pubDate>Sat, 21 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/enforce-gpl-compliance-by-offering-bounties/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Epistemic status:&lt;/strong&gt; Very unclear, also I Am Not A Lawyer This Is Not Legal
Advice Get Off My Lawn&lt;/p&gt;
&lt;p&gt;(N.B.: I&amp;quot;m using &amp;ldquo;GPL&amp;rdquo; with broad strokes here, to point at &amp;ldquo;open source
licenses it&amp;rsquo;s straightforward to run afoul of&amp;rdquo;.)&lt;/p&gt;
&lt;p&gt;Policing is always hard in a world of limited resources. Especially when one
is targeting sophisticated, well-monied criminal organizations, it can take an
awful lot of time and effort merely to &lt;em&gt;credibly reveal&lt;/em&gt; that wrongdoing has
taken place. Would it surprise you if I said the average criminal software
organization is probably, on the margin, more sophisticated than the average
criminal organization? If so, you should probably expect that the former&amp;rsquo;s
crimes are brought to life even less often than the latter&amp;rsquo;s.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>How I ask GPT-4 to make tiny Python scripts in practice</title>
      <link>https://til.andrew-quinn.me/posts/how-i-ask-gpt-4-to-make-tiny-python-scripts-in-practice/</link>
      <pubDate>Thu, 22 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/how-i-ask-gpt-4-to-make-tiny-python-scripts-in-practice/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;First get a working script. &amp;ldquo;Hey GPT-4, write me a ChatGPT script that does &lt;X&gt;.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Manually check over the script and iterate until it&amp;rsquo;s giving me what I want.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Now wrap the script into a &lt;a href=&#34;https://click.palletsprojects.com/en/8.1.x/&#34;&gt;&lt;code&gt;click&lt;/code&gt;&lt;/a&gt; command-line interface.&amp;rdquo; I almost always specify to use an &lt;code&gt;--input&lt;/code&gt; flag and an &lt;code&gt;--output&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;If the data it&amp;rsquo;s working with is human-readable, &amp;ldquo;Make it so that if &lt;code&gt;--input&lt;/code&gt; is not specified, it reads data from stdin.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;If the data it&amp;rsquo;s writing is human-readable, &amp;ldquo;Make it so that if &lt;code&gt;--output&lt;/code&gt; is not specified, it emits data to stdout.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;If the script is complicated enough that error logging is warranted: &amp;ldquo;Add logging and &lt;a href=&#34;https://pypi.org/project/colorlog/&#34;&gt;&lt;code&gt;colorlog&lt;/code&gt;&lt;/a&gt;. Ensure all error messages are written to &lt;code&gt;stderr&lt;/code&gt; so that it does not clash with output.&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This advice is optimized for &lt;strong&gt;small&lt;/strong&gt; Python scripts, usually under 200 lines in total,
for automating semi-mundane tasks like&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>My pet theory of how great software gets started</title>
      <link>https://til.andrew-quinn.me/posts/my-pet-theory-of-how-great-software-gets-started/</link>
      <pubDate>Tue, 16 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/my-pet-theory-of-how-great-software-gets-started/</guid>
      <description>&lt;p&gt;(Inspired by
&lt;a href=&#34;https://news.ycombinator.com/item?id=40974768&#34;&gt;yungporko&amp;rsquo;s Ask HN post&lt;/a&gt;,
which got me thinking.)&lt;/p&gt;
&lt;p&gt;Pretty much every community, dojo, workplace, subculture, scene you can imagine
in the modern day had a software sub-scene embedded within it. It can be as
small as &amp;ldquo;that guy who does our Excel&amp;rdquo;, or as large as
&lt;a href=&#34;https://www.pouet.net/&#34;&gt;the scene itself&lt;/a&gt;
. This is owing to the fantastic generality of software as a way to make almost
anything more efficient, but we won&amp;rsquo;t go on that tangent now.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>What scripting languages come out of the box on Debian 12?</title>
      <link>https://til.andrew-quinn.me/posts/what-programming-languages-come-out-of-the-box-on-debian-12/</link>
      <pubDate>Sun, 23 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/what-programming-languages-come-out-of-the-box-on-debian-12/</guid>
      <description>&lt;p&gt;Poking around in a
&lt;a href=&#34;https://til.andrew-quinn.me/posts/the-unreasonable-effectiveness-of-vms-in-hacker-pedagogy/&#34;&gt;fresh VM in Vagrant&lt;/a&gt;,
I see&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dash&lt;/code&gt;, a POSIX compliant shell linked under &lt;code&gt;sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;python3&lt;/code&gt;, 3.11.2 at the time of writing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;awk&lt;/code&gt;, specifically &lt;code&gt;mawk&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sed&lt;/code&gt;, if you count that (I do)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;perl&lt;/code&gt;, specifically Perl 5&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There may be others I missed.&lt;/p&gt;
&lt;p&gt;Why I&amp;rsquo;m curious: Knowing that a language is installed by default on the most
popular Linux distribution can simplify certain concerns considerably, which
are of special interest to
&lt;a href=&#34;https://til.andrew-quinn.me/posts/openbsd-the-computer-appliance-maker-s-secret-weapon/&#34;&gt;people who don&amp;rsquo;t work on Internet-connected boxes&lt;/a&gt;.
Knowing that Python/Perl is already on there means that,
provided your script only
relies on the standard library, you should be able to just &lt;code&gt;scp&lt;/code&gt; it over in a
pinch and have it &amp;ldquo;just work&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OpenBSD, the computer appliance maker&#39;s secret weapon</title>
      <link>https://til.andrew-quinn.me/posts/openbsd-the-computer-appliance-maker-s-secret-weapon/</link>
      <pubDate>Wed, 05 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/openbsd-the-computer-appliance-maker-s-secret-weapon/</guid>
      <description>&lt;p&gt;Between our ESP32 prokaryotic organisms and our 24/7 Internet-enabled
megafauna servers, there exists a vast and loosely-defined ecosystem of things
the
B2B world likes to call &lt;strong&gt;computer appliances&lt;/strong&gt;. Picture a bespoke Pi 4 packaged
up neatly with some Python scripts, a little fancy plastic embossing, and maybe
a well-guarded &lt;code&gt;id_ed25519.pub&lt;/code&gt; in case you end up in hot water during the
(long - very long, stable cash flow for generations long) maintenance contract,
and you&amp;rsquo;re in the ballpark.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>tmux is worse is better</title>
      <link>https://til.andrew-quinn.me/posts/tmux-is-worse-is-better/</link>
      <pubDate>Thu, 23 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/tmux-is-worse-is-better/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tmux/tmux/wiki&#34;&gt;tmux&lt;/a&gt;
(short for &amp;ldquo;terminal mux&amp;rdquo; (short for &amp;ldquo;multiplexer&amp;rdquo;))
is
&lt;a href=&#34;https://i3wm.org/&#34;&gt;i3&lt;/a&gt;
for your terminal.
Oh, it&amp;rsquo;s so much more than that, and I recently discovered with
some joy that it is installed by default on
&lt;a href=&#34;https://www.openbsd.org/&#34;&gt;OpenBSD&lt;/a&gt;,
but its fundamental value add to any programmer who has to
SSH into servers more than once a week is it allows you to
split your screen up into multiple independent shells
&lt;em&gt;without needing a graphical environment at all&lt;/em&gt;.
If you want to walk the path of true digital minimalism,
&lt;a href=&#34;https://www.vim.org/&#34;&gt;vanilla Vim&lt;/a&gt;
and tmux or its spiritual grandfather
&lt;a href=&#34;https://www.gnu.org/software/screen/&#34;&gt;screen&lt;/a&gt;
are all you need.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Beware those who promise increasing marginal returns</title>
      <link>https://til.andrew-quinn.me/posts/beware-those-who-promise-increasing-marginal-returns/</link>
      <pubDate>Tue, 09 Apr 2024 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/beware-those-who-promise-increasing-marginal-returns/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://en.wikipedia.org/wiki/Diminishing_returns&#34;&gt;law of diminishing returns&lt;/a&gt; needs no introduction. Your second slice of pizza is less satisfying than your first. Your second million dollars is less valuable to you, personally. If you think econ 101 has any life wisdom to impart, it deserves being elevated to the status of &amp;ldquo;life heuristic&amp;rdquo; - especially because, unlike some other concepts in econ 101 (comparative advantage anyone?) it feels true in a boring way, not in an actively counterintuitive way.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Most 2 digit numbers not divisible by 2, 3, or 5 are prime</title>
      <link>https://til.andrew-quinn.me/posts/most-2-digit-numbers-not-divisible-by-2-3-or-5-are-prime/</link>
      <pubDate>Mon, 04 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/most-2-digit-numbers-not-divisible-by-2-3-or-5-are-prime/</guid>
      <description>&lt;p&gt;There are only four single-digit primes: 2, 3, 5, and 7. So all two-digit numbers are either prime, or divisible by one of these four numbers.&lt;/p&gt;
&lt;p&gt;Of the four, 2, 3 and 5 are all very easy to spot check whether a number is divisible by them or not (for 3, add the digits first, and see if that sum is divisible by 3). If a given 2-digit number doesn&amp;rsquo;t fall into this category, 7 times out of 8, it&amp;rsquo;s prime.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Pomodoros and leverage ratios</title>
      <link>https://til.andrew-quinn.me/posts/pomodoros-and-leverage-ratios/</link>
      <pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/pomodoros-and-leverage-ratios/</guid>
      <description>&lt;p&gt;I love pomodoros 🍅. But I have to admit, most of the time when I reach for them, it&amp;rsquo;s because I&amp;quot;m already having trouble staying on task with whatever I&amp;rsquo;m doing. I generally don&amp;rsquo;t get a lot of value out of the &amp;rsquo;longer break&amp;rsquo; option, a steady beat of work and breaks is enough for me.&lt;/p&gt;
&lt;p&gt;In those circumstances I often find solace in the idea that a well-constructed pomodoro creates a certain &lt;em&gt;lower bound&lt;/em&gt; on my work-to-play &lt;a href=&#34;https://www.investopedia.com/terms/l/leverageratio.asp&#34;&gt;leverage ratio&lt;/a&gt;. The classic 25 minutes on, 5 minutes off gives you a 5:1 ratio.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The Rule of Four</title>
      <link>https://til.andrew-quinn.me/posts/the-rule-of-four/</link>
      <pubDate>Fri, 24 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://til.andrew-quinn.me/posts/the-rule-of-four/</guid>
      <description>&lt;p&gt;A communication heuristic, optimized for &lt;strong&gt;asynchronous communication of detailed concepts between human beings.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not really a TIL, I&amp;rsquo;ve been sitting on this one for a while.&lt;/p&gt;
&lt;h2 id=&#34;rationale&#34;&gt;Rationale&lt;/h2&gt;
&lt;h3 id=&#34;existence-proof&#34;&gt;Existence “proof”&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Our short term memory can hold &lt;a href=&#34;https://www.quantamagazine.org/overtaxed-working-memory-knocks-the-brain-out-of-sync-20180606/&#34;&gt;at best&lt;/a&gt; about 7 +/- 2 chunks of information at a time.&lt;/li&gt;
&lt;li&gt;Start with the lower end of that: 5 chunks.&lt;/li&gt;
&lt;li&gt;Assume that whatever someone is “really” trying to do takes up 1 of those 5.&lt;/li&gt;
&lt;li&gt;We’re left with 4 chunks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Organize your work processes as much as possible so that they can be effectively understood using &lt;strong&gt;at most 4 chunks of short-term memory&lt;/strong&gt;. If you feel a process is too complicated to be held like that, find conceptual fault lines to hack against until it’s true.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
