<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>shit i never finished</title>
    <link>https://shitineverfinished.com/</link>
    <atom:link href="https://shitineverfinished.com/rss.xml" rel="self" type="application/rss+xml" />
    <description>A running log of half-baked ideas, abandoned projects, and the occasional thing that actually shipped.</description>
    <language>en</language>
    <lastBuildDate>Fri, 17 Apr 2026 14:07:12 GMT</lastBuildDate>
    <pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate>
    <item>
      <title>Hello, world (and all the other ones I didn&#39;t finish)</title>
      <link>https://shitineverfinished.com/posts/hello-world-and-all-the-other-ones-i-didnt-finish/</link>
      <guid isPermaLink="true">https://shitineverfinished.com/posts/hello-world-and-all-the-other-ones-i-didnt-finish/</guid>
      <pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate>
      <description>A first post about why this blog exists — a public log of the projects I start, the ones I abandon, and the rare few that ship.</description>
      <category>meta</category><category>writing</category>
      <content:encoded><![CDATA[<p>I’ve started a lot of things.</p>
<p>A shell that I rewrote three times before giving up. A note-taking app that made it as far as a logo. A game engine whose <code>main.cpp</code> still compiles — and nothing else. The graveyard is bigger than the portfolio, and I suspect that’s true for a lot of people who work in software long enough.</p>
<p>This blog is for that. It’s not a “building in public” thing, exactly. It’s more of a <strong>log of attempts</strong> — what I tried, what I learned, what made me lose interest in month four, and occasionally, what I actually finished.</p>
<h2>Why bother writing it down</h2>
<p>Because projects that don’t ship still teach you things, and those lessons tend to evaporate the moment you close the editor for the last time.</p>
<p>A few examples of things I keep re-learning because I never bothered to write them down:</p>
<ul>
<li>Don’t start with the data model. Start with one screen a user would see.</li>
<li>Scope is the only real feature.</li>
<li>If I can’t explain the project in one sentence by week two, it’s already dead.</li>
<li>“I’ll come back to this next weekend” is a decision to delete the project.</li>
</ul>
<h2>What to expect here</h2>
<p>Probably:</p>
<ol>
<li>Postmortems of shelved projects.</li>
<li>Small notes on things that worked unexpectedly well.</li>
<li>The occasional deep-dive on a tool, a pattern, or an idea I keep reaching for.</li>
</ol>
<p>Here’s a code sample, because every first post is contractually obligated to have one:</p>
<pre class="shiki github-dark-dimmed" style="background-color:#22272e;color:#adbac7" tabindex="0"><code class="language-ts"><span class="line"><span style="color:#F47067">type</span><span style="color:#F69D50"> Project</span><span style="color:#F47067"> =</span></span>
<span class="line"><span style="color:#F47067">  |</span><span style="color:#ADBAC7"> { </span><span style="color:#F69D50">status</span><span style="color:#F47067">:</span><span style="color:#96D0FF"> "abandoned"</span><span style="color:#ADBAC7">; </span><span style="color:#F69D50">reason</span><span style="color:#F47067">:</span><span style="color:#6CB6FF"> string</span><span style="color:#ADBAC7"> }</span></span>
<span class="line"><span style="color:#F47067">  |</span><span style="color:#ADBAC7"> { </span><span style="color:#F69D50">status</span><span style="color:#F47067">:</span><span style="color:#96D0FF"> "shipped"</span><span style="color:#ADBAC7">; </span><span style="color:#F69D50">url</span><span style="color:#F47067">:</span><span style="color:#6CB6FF"> string</span><span style="color:#ADBAC7"> }</span></span>
<span class="line"><span style="color:#F47067">  |</span><span style="color:#ADBAC7"> { </span><span style="color:#F69D50">status</span><span style="color:#F47067">:</span><span style="color:#96D0FF"> "in-progress"</span><span style="color:#ADBAC7">; </span><span style="color:#F69D50">since</span><span style="color:#F47067">:</span><span style="color:#F69D50"> Date</span><span style="color:#ADBAC7"> };</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F47067">function</span><span style="color:#DCBDFB"> honestStatus</span><span style="color:#ADBAC7">(</span><span style="color:#F69D50">p</span><span style="color:#F47067">:</span><span style="color:#F69D50"> Project</span><span style="color:#ADBAC7">)</span><span style="color:#F47067">:</span><span style="color:#6CB6FF"> string</span><span style="color:#ADBAC7"> {</span></span>
<span class="line"><span style="color:#F47067">  if</span><span style="color:#ADBAC7"> (p.status </span><span style="color:#F47067">===</span><span style="color:#96D0FF"> "in-progress"</span><span style="color:#ADBAC7">) {</span></span>
<span class="line"><span style="color:#F47067">    const</span><span style="color:#6CB6FF"> months</span><span style="color:#F47067"> =</span><span style="color:#DCBDFB"> monthsSince</span><span style="color:#ADBAC7">(p.since);</span></span>
<span class="line"><span style="color:#F47067">    if</span><span style="color:#ADBAC7"> (months </span><span style="color:#F47067">></span><span style="color:#6CB6FF"> 6</span><span style="color:#ADBAC7">) </span><span style="color:#F47067">return</span><span style="color:#96D0FF"> "abandoned"</span><span style="color:#ADBAC7">;</span></span>
<span class="line"><span style="color:#ADBAC7">  }</span></span>
<span class="line"><span style="color:#F47067">  return</span><span style="color:#ADBAC7"> p.status;</span></span>
<span class="line"><span style="color:#ADBAC7">}</span></span></code></pre>
<blockquote>
<p>Most of my projects would fail <code>honestStatus()</code>. That’s fine.</p>
</blockquote>
<p>More soon. Or not. That’s kind of the point.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
