<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Reuben Peter-Paul — Writing</title>
    <link>https://scaryponens.github.io/</link>
    <description>Writing</description>
    <lastBuildDate>Fri, 13 Mar 2026 12:18:46 GMT</lastBuildDate>
  <item>
    <title>Shipping with an AI Pair Programmer Who Never Sleeps</title>
    <link>https://scaryponens.github.io/blog/20260308-shipping-with-an-ai-pair-programmer.html</link>
    <content:encoded><![CDATA[
<h1>Shipping with an AI Pair Programmer Who Never Sleeps</h1>
<p>I used an AI assistant heavily while rebuilding <code>friendly-rotary-phone</code>.</p>
<p>And after enough cycles, the pattern is clearer:</p>
<ul>
<li>AI is excellent at <strong>acceleration</strong></li>
<li>AI is mediocre at <strong>prioritization</strong></li>
<li>AI is dangerous when you outsource <strong>direction</strong></li>
</ul>
<p>When I gave it clear boundaries and concrete goals, velocity spiked.</p>
<p>When I handed it strategic ambiguity, entropy spiked.</p>
<hr>
<p>The practical operating model that worked for me:</p>
<ul>
<li>Human defines vector (why, scope, tradeoffs)</li>
<li>AI executes chunks (scaffolding, rewrites, repetitive glue)</li>
<li>Human reviews integration points and architectural coherence</li>
<li>Tests arbitrate disagreements</li>
</ul>
<p>In this project, that model let me:</p>
<ul>
<li>pivot stacks quickly</li>
<li>preserve conceptual architecture</li>
<li>stand up tests/notebooks/docs faster than solo pace</li>
</ul>
<hr>
<p>My current take:</p>
<p>I don’t want AI to replace thought.</p>
<p>I want AI to remove waiting.</p>
<p>That’s a much healthier contract.</p>
<p>#AI #PairProgramming #SoftwareEngineering #Productivity #SystemsThinking</p>

]]></content:encoded>
    <description>I used an AI assistant heavily while rebuilding friendly-rotary-phone....</description>
    <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://scaryponens.github.io/blog/20260308-shipping-with-an-ai-pair-programmer.html</guid>
  </item>
  <item>
    <title>From Pretty Graphs to Useful Truth</title>
    <link>https://scaryponens.github.io/blog/20260307-pretty-graphs-useful-truth.html</link>
    <content:encoded><![CDATA[
<h1>From Pretty Graphs to Useful Truth</h1>
<p>I added two visualization layers to <code>friendly-rotary-phone</code>:</p>
<ol>
<li><strong>Graphviz DOT export</strong> for explicit machine diagrams</li>
<li><strong>NetworkX views</strong> in notebooks for quick structural inspection</li>
</ol>
<p>I didn’t do it for aesthetics.</p>
<p>I did it because logs lie by omission.</p>
<p>A transition table can be technically correct and still hide a bad mental model. Once you draw it, mistakes become obvious:</p>
<ul>
<li>unexpected dead ends</li>
<li>missing emissions</li>
<li>transitions that look valid but violate intended flow</li>
</ul>
<p>The same is true for struct graphs.</p>
<p>When constraints attach primitives in the wrong order, the graph tells on you immediately.</p>
<hr>
<p>That said, visualization can also seduce you.</p>
<p>A beautiful graph is not evidence of correctness.</p>
<p>It’s only useful when paired with testable invariants.</p>
<p>So the workflow now is:</p>
<ul>
<li>build model</li>
<li>render graph</li>
<li>challenge graph with tests</li>
<li>trust only what survives both</li>
</ul>
<hr>
<p>I like charts. I like diagrams.</p>
<p>But I like proven behavior more.</p>
<p>#Visualization #Graphviz #NetworkX #Testing #Engineering</p>

]]></content:encoded>
    <description>I added two visualization layers to friendly-rotary-phone:...</description>
    <pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://scaryponens.github.io/blog/20260307-pretty-graphs-useful-truth.html</guid>
  </item>
  <item>
    <title>Rebuilding an Old Thesis in Public: ETS, State Machines, and a Bubble Man</title>
    <link>https://scaryponens.github.io/blog/20260306-rebuilding-an-old-thesis-in-public.html</link>
    <content:encoded><![CDATA[
<h1>Rebuilding an Old Thesis in Public: ETS, State Machines, and a Bubble Man</h1>
<p>I’ve been re-implementing core ideas from my master’s thesis inside <code>friendly-rotary-phone</code>.</p>
<p>Not as nostalgia.</p>
<p>As an experiment in whether old process-first abstractions still hold under modern tooling.</p>
<p>So far? They do.</p>
<p>The current Python implementation includes:</p>
<ul>
<li>ETS primitives and temporal structs</li>
<li>active constraints as extension operations</li>
<li>class representations as grouped constraint sets</li>
<li>a struct-generating finite-state machine</li>
<li>a deterministic transducer that emits symbolic spatial instructions</li>
</ul>
<p>In short: generate structure in time, then instantiate into form.</p>
<p>That framing feels increasingly relevant in agent-era systems, where correctness is less about one pretty output and more about valid trajectories through constrained state.</p>
<hr>
<p>Our Bubble Man example is intentionally small, but useful:</p>
<ul>
<li><code>seed_head</code></li>
<li><code>grow_torso</code></li>
<li><code>attach_limbs</code></li>
</ul>
<p>Each step is constrained. Each transition is explicit. Each emitted action is inspectable.</p>
<p>No vibes. No magic leaps.</p>
<p>Just a process you can reason about.</p>
<hr>
<p>A lot of modern AI workflows still optimize for fluent output.</p>
<p>I’m more interested in reliable evolution.</p>
<p>If a system can’t tell me how it got here, I trust it less.</p>
<p>That’s why this old thesis work keeps feeling new.</p>
<p>#AI #StateMachines #FormalMethods #SystemsDesign #Research</p>

]]></content:encoded>
    <description>I’ve been re-implementing core ideas from my master’s thesis inside friendly-rotary-phone....</description>
    <pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://scaryponens.github.io/blog/20260306-rebuilding-an-old-thesis-in-public.html</guid>
  </item>
  <item>
    <title>uv Is the New “It Just Works” for Research Projects</title>
    <link>https://scaryponens.github.io/blog/20260305-uv-is-the-new-it-just-works.html</link>
    <content:encoded><![CDATA[
<h1>uv Is the New “It Just Works” for Research Projects</h1>
<p><img src="https://scaryponens.github.io/blog/assets/lookatit.png" alt="Look at it"><br><em>Look at it. Clean sync. Reproducible env. No ritual sacrifice required.</em></p>
<p>There are two kinds of project pain:</p>
<ol>
<li>Hard problems you expect</li>
<li>Environment problems you pretend are normal</li>
</ol>
<p>I have deep respect for hard problems.</p>
<p>I have zero patience left for the second category.</p>
<p>After resetting <code>friendly-rotary-phone</code>, I moved dependency and workflow management to <code>uv</code>, and the impact was immediate:</p>
<ul>
<li>predictable setup with <code>uv sync</code></li>
<li>clean execution paths (<code>uv run pytest</code>, <code>uv run jupyter lab</code>)</li>
<li>fewer “works on my machine” conversations</li>
<li>less cognitive overhead before doing actual thinking</li>
</ul>
<p>That last one matters most.</p>
<p>In research-heavy work, your best hours are fragile. If your first 45 minutes go to environment archaeology, your best ideas often don’t survive the day.</p>
<p><code>uv</code> doesn’t make your model better.</p>
<p>It makes your attention available.</p>
<hr>
<p>My current default for experimentation projects:</p>
<ul>
<li><code>pyproject.toml</code> as source of truth</li>
<li><code>uv</code> for environment + dependency operations</li>
<li>notebooks for exploration, tests for invariants, CI for honesty</li>
</ul>
<p>If your stack is fighting your thought process, it’s not “developer grit” to endure it. It’s usually a sign the project needs less ritual and more flow.</p>
<hr>
<p>No fireworks here. Just fewer papercuts.</p>
<p>And more shipping.</p>
<p>#Python #uv #DeveloperExperience #Productivity #Research</p>

]]></content:encoded>
    <description>![Look at it](assets/lookatit.png)
Look at it. Clean sync. Reproducible env. No ritual sacrifice required....</description>
    <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://scaryponens.github.io/blog/20260305-uv-is-the-new-it-just-works.html</guid>
  </item>
  <item>
    <title>I Buried My Elixir Darling (And It Was the Right Call)</title>
    <link>https://scaryponens.github.io/blog/20260304-buried-my-elixir-darling.html</link>
    <content:encoded><![CDATA[
<h1>I Buried My Elixir Darling (And It Was the Right Call)</h1>
<p><img src="https://scaryponens.github.io/blog/assets/imnotmad.png" alt="I’m not mad, I’m just disappointed"><br><em>Me, staring at another runtime mismatch with a coffee that had gone cold.</em></p>
<p>Before I get into the stack pivot, context: I’ve been building this with Blueshell, my OpenClaw business and thought partner.</p>
<p>We work like this: I set direction, tradeoffs, and taste; Blueshell handles the heavy execution loops—scaffolding code, validating builds, tightening docs, and helping turn implementation notes into publishable thought entries.</p>
<p>Code and writing aren’t separate lanes in this workflow. They’re one loop: ship architecture, extract lessons, ship the story.</p>
<p>I didn’t switch stacks because I stopped believing in elegant systems.</p>
<p>I switched because I wanted to ship one.</p>
<p>For this thesis reimplementation project (<code>friendly-rotary-phone</code>), I started in Elixir with Livebooks. It felt right on paper: state machines, constrained transitions, deterministic transduction. The architecture had poetry.</p>
<p>But then reality showed up wearing steel-toe boots.</p>
<p>Toolchain mismatch. Runtime assumptions. Notebook loading quirks. “Simple” demos that required too much invisible ceremony. Every hour debugging environment friction was an hour not spent on the model itself.</p>
<p>At some point, I had to choose between loyalty and velocity.</p>
<p>I chose velocity.</p>
<p>And here’s the part nobody likes to say out loud: <strong>a good architecture trapped behind recurring setup friction is just expensive taste.</strong></p>
<p>So we did the hard reset.</p>
<ul>
<li>Removed the Elixir scaffolding</li>
<li>Rebuilt the project as Python + Jupyter</li>
<li>Used <code>uv</code> for deterministic dependency management</li>
<li>Preserved the conceptual core: ETS structs, constraints, FSM generation, transducer outputs</li>
</ul>
<p>The model survived.</p>
<p>Only the ceremony died.</p>
<hr>
<p>I still love Elixir. I still think it’s one of the cleanest ways to model concurrent systems.</p>
<p>But for this moment, this project, and this pace: Python gave me oxygen.</p>
<p>Sometimes architecture is about selecting a language.</p>
<p>Sometimes architecture is about selecting what <em>not</em> to fight this week.</p>
<hr>
<p>#AI #Engineering #Elixir #Python #DecisionMaking</p>
<p>GitHub repo: <a href="https://github.com/scaryPonens/friendly-rotary-phone">https://github.com/scaryPonens/friendly-rotary-phone</a></p>

]]></content:encoded>
    <description>![I’m not mad, I’m just disappointed](assets/imnotmad.png)
Me, staring at another runtime mismatch with a coffee that had gone cold....</description>
    <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://scaryponens.github.io/blog/20260304-buried-my-elixir-darling.html</guid>
  </item>
  <item>
    <title>Spec-Driven Development with an AI Co-Pilot Rotation</title>
    <link>https://medium.com/@reuben.peterpaul/spec-driven-development-with-an-ai-co-pilot-rotation-d14e9c71c1ee</link>
    <description>Your AI has amnesia — not the garden-variety kind, but the 50 First Dates kind.</description>
    <pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://medium.com/@reuben.peterpaul/spec-driven-development-with-an-ai-co-pilot-rotation-d14e9c71c1ee</guid>
  </item>
  <item>
    <title>Learning Go in the Age of AI — Goodbye, Hello World!</title>
    <link>https://medium.com/@reuben.peterpaul/learning-go-in-the-age-of-ai-goodbye-hello-world-d04899356264</link>
    <description>The bar for entry into a new language or ecosystem hasn’t just been lowered, it’s been removed!</description>
    <pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://medium.com/@reuben.peterpaul/learning-go-in-the-age-of-ai-goodbye-hello-world-d04899356264</guid>
  </item>
  <item>
    <title>Finally Hit Inbox Zero. And I Didn’t Lift a Finger.</title>
    <link>https://scaryponens.github.io/blog/20250904-inbox-zero-finally.html</link>
    <content:encoded><![CDATA[
<h1>Finally Hit Inbox Zero. And I Didn’t Lift a Finger.</h1>
<hr>
<p><em>UPDATE 2026-01-31: I&#39;ve since moved on to use ChatGPT Atlas. I have yet to retry this test with Gemini or Chrome since I wrote this article.</em></p>
<hr>
<p><img src="https://scaryponens.github.io/blog/assets/imnotmad.png" alt="I&#39;m not mad, I&#39;m just disappointed"><br><em>I&#39;m not mad, I&#39;m just disappointed</em></p>
<hr>
<p>For weeks, I&#39;ve been experimenting with various AI tools, but today the concept of an &quot;agentic browser&quot; truly clicked. I gave the Perplexity browser, Comet, a simple set of instructions to clean out my cluttered inbox—archive old newsletters, delete promotional emails, and organize the rest. It just... did it.</p>
<p>This is the key differentiator. It wasn&#39;t just answering my questions; it was executing a task on my behalf. A task I couldn&#39;t delegate to other powerful AI like Gemini, which lacked agency and tools to interact directly with my Gmail inbox.</p>
<hr>
<p><img src="https://scaryponens.github.io/blog/assets/imdisappointed.png" alt="Ok..."><br><em>Ok...</em></p>
<hr>
<p>That one, simple, time-saving action has solidified my decision to continue with Comet and discover what else it can do. It&#39;s not just a smarter way to search; it&#39;s a step towards an AI that genuinely reduces my workload.</p>
<hr>
<p>The future isn’t about asking smarter questions.</p>
<p>It’s about getting things done.</p>
<hr>
<p>#AI  #Productivity  #Agents  #Automation</p>
<hr>

]]></content:encoded>
    <description>---...</description>
    <pubDate>Thu, 04 Sep 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://scaryponens.github.io/blog/20250904-inbox-zero-finally.html</guid>
  </item>
  <item>
    <title>My Monitor is too big so I&#039;m trading JetBrains for VSCode (for now)</title>
    <link>https://scaryponens.github.io/blog/20250816-big-monitor.html</link>
    <content:encoded><![CDATA[
<h1>My Monitor is too big so I&#39;m trading JetBrains for VSCode (for now)</h1>
<p><em>Originally published on <a href="https://www.linkedin.com/pulse/my-monitor-too-big-so-im-trading-jetbrains-vscode-now-peter-paul-34xkc">LinkedIn</a></em></p>
<hr>
<p><img src="https://scaryponens.github.io/blog/assets/lookatit.png" alt="Just look at it"><br><em>Just look at it!</em></p>
<hr>
<p>After more than 10 years of living happily inside the JetBrains Toolbox, I’m switching things up. For the next two months, I’ll be writing code exclusively in Cursor/VSCode. Why? For two reasons: </p>
<ul>
<li>I really want to give Cursor a fair and honest kick at the tires</li>
<li>and to a lesser because I invested in a 49-inch monitor</li>
<li>(bonus reason) are cloud-based dev environments ready to fully support my day-to-day</li>
</ul>
<hr>
<p>I’ve leaned on Jetbrains&#39; IntelliJ IDEA and Pycharm batteries-included ecosystems for a long time and I’m curious to see how well Cursor (vs Pycharm + Copilot) can streamline my day-to-day dev workflow. Additionally, my 49-inch monitor investment has had the unintended consequence of making my screen exceptionally hard to share on name-your-favourite-video-conferencing platform. What I tend to do now is share my browser and because most of my goto-tools are cloud-based: Postman, Lucidchart, Mermaid, GitHub, AWS etc. Github Codespaces has been very helpful.</p>
<blockquote>
<p>This isn’t about loyalty to one editor over another — it’s about testing whether cloud dev environments are ready to fully support the kind of work I do every day.</p>
</blockquote>
<hr>
<p>👉 To my tech community: if you’ve made a similar jump, what are your best pro-tips for making the transition smoother? Favorite extensions? Hidden tricks? Gotchas I should avoid?</p>
<hr>
<p>And to my friends in the other camps — yes, I see you emacs <a href="https://www.linkedin.com/in/trevorbernard/">Trevor Bernard</a> and vim <a href="https://www.linkedin.com/in/onesale/">Saša Savić</a> fanboys. I’ve only got two months and can’t spend six of them tweaking keybindings and configuration files 🫶.</p>

]]></content:encoded>
    <description>Originally published on [LinkedIn](https://www.linkedin.com/pulse/my-monitor-too-big-so-im-trading-jetbrains-vscode-now-peter-paul-34xkc)...</description>
    <pubDate>Sat, 16 Aug 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://scaryponens.github.io/blog/20250816-big-monitor.html</guid>
  </item>
  <item>
    <title>Why Startups Need Kanban: Think Back Pressure, Not Burnout</title>
    <link>https://scaryponens.github.io/blog/20250509-startus-need-kanban.html</link>
    <content:encoded><![CDATA[
<h1>Why Startups Need Kanban: Think Back Pressure, Not Burnout</h1>
<p><em>Originally published on <a href="https://www.linkedin.com/pulse/why-startups-need-kanban-think-back-pressure-burnout-peter-paul-dvrjc/">LinkedIn</a></em></p>
<p><img src="https://scaryponens.github.io/blog/assets/kanban.png" alt="kanban for startups"></p>
<p>Startups move fast. But speed without control leads to unpredictable outcomes, constant context switching, and eventually burnout 🔥💀. The irony is that developers already understand the problem—just not always how it shows up in team dynamics.</p>
<p>Every developer knows what happens when a message queue gets overwhelmed: the system slows down, crashes, or starts dropping messages. That is why we use <strong>back pressure</strong>.</p>
<p>What if your team had the same protection? It can. It is called <strong>Work In Progress (WIP) limits</strong>, and it is a core part of <strong>Kanban</strong>.</p>
<hr>
<h2>Message Queues and Back Pressure 101</h2>
<p>In software systems, queues act as buffers between producers and consumers. If consumers fall behind, the system can respond by:</p>
<ul>
<li>Throttling producers</li>
<li>Buffering messages</li>
<li>Failing gracefully</li>
</ul>
<p>This is back pressure. It prevents overload and preserves flow.</p>
<p>Now apply this idea to your team:</p>
<ul>
<li>Product minds are the producers</li>
<li>Developers and reviewers are the consumers</li>
<li>The Kanban board is the message queue</li>
</ul>
<p>Too much input without matching capacity creates flow blockages and overload.</p>
<hr>
<h2>Kanban and WIP Limits</h2>
<p>Kanban is a flow-based system focused on managing and improving throughput. Unlike Scrum, there are no sprints—just a steady stream of work moving from left to right.</p>
<p>The key constraint is <strong>WIP limits</strong>.</p>
<p>These are explicit caps on how many items can exist in each stage of the workflow. For example:</p>
<ul>
<li>A developer can only have two tasks <em>In Progress</em></li>
<li>The team can only have three stories in <em>Code Review</em></li>
<li>Product can only have three stories in <em>Ready</em></li>
</ul>
<p>These limits force focus, expose bottlenecks, and prevent teams from taking on more than they can finish.</p>
<hr>
<h2>The Analogy in Action</h2>
<p><img src="https://scaryponens.github.io/blog/assets/analogy_diagram.png" alt="Analogy in Action"></p>
<p>When consumers fall behind in a queuing system, back pressure kicks in. When teams fall behind, WIP limits do the same thing: they signal that capacity is full and protect the system from overload.</p>
<hr>
<h2>Sidebar: Back Pressure in Scrum?</h2>
<p>Back pressure maps cleanly to Kanban because WIP limits are built into the process.</p>
<p>In Scrum, back pressure is more implicit. Teams rely on timeboxing, sprint commitment, and velocity to regulate flow. Without strict discipline, scope creep and mid-sprint work easily bypass that natural throttle.</p>
<p>In practice, Scrum often requires an iron-fisted Scrum Master to enforce boundaries and say “no” when the sprint backlog is full.</p>
<p>Kanban embeds the back pressure mechanism directly into the system. Scrum outsources it to process rigor—and people.</p>
<p><img src="https://scaryponens.github.io/blog/assets/sbean.png" alt="The Bean"></p>
<hr>
<h2>Why This Matters for Startups</h2>
<p>Startups operate with limited resources and finite throughput. Taking on too much work leads to thrashing: nothing finishes, priorities shift mid-stream, and stress skyrockets 🚀.</p>
<p>Kanban provides a lightweight, flexible way to:</p>
<ul>
<li>Focus on flow</li>
<li>Visualize bottlenecks</li>
<li>Reduce waste from context switching</li>
<li>Protect teams from burnout</li>
</ul>
<p>It requires less ceremony, adapts easily to change, and does not require a dedicated Scrum Master 👮.</p>
<hr>
<h2>Tactical Advice</h2>
<ul>
<li><strong>Start small</strong>: Apply WIP limits to <em>In Progress</em> first</li>
<li><strong>Enforce gently</strong>: Treat limits as signals, not blockers</li>
<li><strong>Adjust over time</strong>: Tune limits using real data</li>
<li><strong>Use metrics</strong>: Track cycle time, throughput, and blocked work</li>
<li><strong>Build culture</strong>: Empower developers to say “no” when limits are reached</li>
</ul>
<hr>
<h2>Conclusion</h2>
<p>Kanban is not just for factories or large organizations. It is a developer-native approach that fits how modern teams actually work—especially startups.</p>
<p>When every hour counts and every developer matters, the fastest way forward is to avoid overheating your most valuable system: your team.</p>
<p>Back pressure keeps distributed systems stable. WIP limits do the same for teams.</p>
<blockquote>
<p>You would not run a system without back pressure. Do not run a team without WIP limits.</p>
</blockquote>
<p>For deeper practical guidance, <em><a href="https://www.amazon.ca/dp/0735698953?_encoding=UTF8&psc=1&ref=cm_sw_r_ffobk_cp_ud_dp_H0XXBQ1PWB5QJ9VCJKH6&ref_=cm_sw_r_ffobk_cp_ud_dp_H0XXBQ1PWB5QJ9VCJKH6&social_share=cm_sw_r_ffobk_cp_ud_dp_H0XXBQ1PWB5QJ9VCJKH6&bestFormat=true">Agile Project Management with Kanban</a></em> by Eric Brechner is a solid next read.</p>

]]></content:encoded>
    <description>Originally published on [LinkedIn](https://www.linkedin.com/pulse/why-startups-need-kanban-think-back-pressure-burnout-peter-paul-dvrjc/)...</description>
    <pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://scaryponens.github.io/blog/20250509-startus-need-kanban.html</guid>
  </item>
  </channel>
</rss>