<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alex</title>
    <description>The latest articles on DEV Community by Alex (@seriousbydesign).</description>
    <link>https://dev.to/seriousbydesign</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3847749%2F49f8fef6-5e4a-4545-94bc-51734bad3722.jpeg</url>
      <title>DEV Community: Alex</title>
      <link>https://dev.to/seriousbydesign</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seriousbydesign"/>
    <language>en</language>
    <item>
      <title>I made Claude Code slower. On purpose. Here's why.</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Thu, 09 Apr 2026 14:10:09 +0000</pubDate>
      <link>https://dev.to/seriousbydesign/i-made-claude-code-slower-on-purpose-heres-why-1lo9</link>
      <guid>https://dev.to/seriousbydesign/i-made-claude-code-slower-on-purpose-heres-why-1lo9</guid>
      <description>&lt;p&gt;You're 40 minutes into a Claude Code session. You've lost track of what you decided.&lt;/p&gt;

&lt;p&gt;Claude is re-reading files it already read. You're not sure if you're building the right thing anymore, and you're not sure when you stopped being sure.&lt;/p&gt;

&lt;p&gt;This is not a Claude problem. It's a structure problem. That's why I built FRAME.&lt;/p&gt;




&lt;h2&gt;
  
  
  What FRAME is
&lt;/h2&gt;

&lt;p&gt;FRAME is a set of Markdown files that give Claude Code a role to play and a gate to stop at. Nothing installs beyond copying a few files. No config, no runtime, no dependencies. You run &lt;code&gt;/frame load sw-development&lt;/code&gt; and Claude Code knows it's a Requirements Engineer now, and that it doesn't move until you confirm what you're building.&lt;/p&gt;

&lt;p&gt;The core mechanic: a cartridge defines the phases, roles, and gates for a particular kind of work. The engine reads the cartridge and runs the session accordingly. You keep control at every gate — nothing advances without your &lt;code&gt;y&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That's it. The rest is Markdown.&lt;/p&gt;




&lt;h2&gt;
  
  
  Two runs, same task
&lt;/h2&gt;

&lt;p&gt;I wanted to test this honestly, so I ran the same bug fix twice — once with plain Claude Code, once with FRAME's &lt;code&gt;sw-development&lt;/code&gt; cartridge. Same prompt, same codebase, same starting branch.&lt;/p&gt;

&lt;p&gt;The bug: &lt;code&gt;_get_daily_limit()&lt;/code&gt; crashes when &lt;code&gt;NOTEBOOKLM_DAILY_LIMIT&lt;/code&gt; is set to a non-numeric value or zero. Fix it and add tests.&lt;/p&gt;

&lt;p&gt;Plain Claude Code read the function, wrote the fix, wrote the tests, committed. About a minute. No questions asked. The fix was correct.&lt;/p&gt;

&lt;p&gt;FRAME started by asking questions. Branch name? Hard constraints? Acceptance criteria beyond what was stated? Anything explicitly out of scope? It produced a SHAPE block before touching a single file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Goal       : Fix _get_daily_limit() crash - non-numeric or zero env var
Stack      : Python 3.9+, pytest
Branch     : fix/frame-daily-limit-validation
Constraints: none
Acceptance : - Non-numeric → returns 50, no exception
             - Zero → returns 50, no exception
             - Negative → returns 50, no exception
             - Valid numeric → still works correctly
             - At least one test per bad-input case
Out of scope: all other functions, no refactoring, no interface changes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You confirm this, or you push back. Only then does it write code.&lt;/p&gt;

&lt;p&gt;Some minutes later, the fix landed. Same correctness as plain CC. But then the QA Engineer ran a pass — mapping every acceptance criterion to a test, checking for gaps. It flagged one: whitespace-only strings (&lt;code&gt;" "&lt;/code&gt;) aren't covered. A fourth test, not in the original brief.&lt;/p&gt;

&lt;p&gt;Plain CC found its edge cases by instinct. FRAME found them by process.&lt;/p&gt;




&lt;h2&gt;
  
  
  The honest framing
&lt;/h2&gt;

&lt;p&gt;FRAME didn't produce better code. It produced a documented contract for what the code was supposed to do — agreed before anything was written, verified after.&lt;/p&gt;

&lt;p&gt;For a contained bug fix where you know exactly what you want, plain Claude Code is hard to beat. One minute versus ten is a real difference.&lt;/p&gt;

&lt;p&gt;FRAME earns its keep when "what does done look like?" isn't obvious before you start. When the session is a decision, not just a task. When you're about to build something that depends on choices you haven't made yet, and you don't want to discover mid-BUILD that you've been building the wrong thing.&lt;/p&gt;

&lt;p&gt;The ten minutes isn't overhead. It's the work of agreeing on what you're building before you build it. For the right task, that's the most valuable ten minutes in the session.&lt;/p&gt;

&lt;p&gt;That right task looks like: a feature with ambiguous requirements. A codebase you haven't touched in six months. An audit where you need to explain every finding to a stakeholder. A project plan that has to survive a conversation with someone who wasn't in the room when it was made.&lt;/p&gt;

&lt;p&gt;In those sessions, the documentation FRAME produces isn't a side effect — it's the point. The SHAPE archive records what was agreed before code was written. The phase archives record what was decided at every gate. The final output is something you can hand to someone who wasn't there and they can reconstruct exactly what happened and why. Plain Claude Code produces an output. FRAME produces an output and a record.&lt;/p&gt;




&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;A session has five phases: SHAPE, BREAKDOWN, DESIGN, BUILD, CHECK.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SHAPE&lt;/strong&gt; is where the Requirements Engineer extracts the goal, stack, constraints, and scope. No code is touched. The output is a &lt;code&gt;PROJECT.md&lt;/code&gt; you confirm before anything else happens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BREAKDOWN&lt;/strong&gt; is where the Orchestrator turns the goal into work units — small enough to complete in one context window, sequenced by dependency. The first time I saw the unit list appear I understood why FRAME works: a project that felt overwhelming at the goal level becomes a list of five things, in order, with clear scope. The Tur-Tur effect — something that looks impossibly large from a distance resolves into ordinary steps up close.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DESIGN&lt;/strong&gt; is where the Architect turns the unit list into a plan — interfaces, dependencies, sequencing decisions. Nothing is built yet. The point is to make implementation choices explicit before a Developer touches a file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BUILD&lt;/strong&gt; executes one unit at a time. Gates between units let you &lt;code&gt;/clear&lt;/code&gt; context without losing state — FRAME writes everything to file before it stops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CHECK&lt;/strong&gt; runs a Code Reviewer and QA Engineer pass. This is where the acceptance criteria table appears, mapped to actual test coverage. Gaps surface here, not in production.&lt;/p&gt;

&lt;p&gt;The cartridge is just Markdown. You can read every instruction Claude Code is following. You can edit them. You can build your own in an hour using the &lt;code&gt;cartridge-creator&lt;/code&gt; cartridge.&lt;/p&gt;




&lt;h2&gt;
  
  
  What makes it different from SPARC, claude-flow and others alike
&lt;/h2&gt;

&lt;p&gt;Those tools are powerful. If you want multi-agent orchestration, parallel execution, XML-structured plans, and a framework with a full ecosystem — use them. They're built for that.&lt;/p&gt;

&lt;p&gt;FRAME is deliberately smaller. No multi-agent complexity. No tooling overhead. No XML. The entire engine is one Markdown file. The design principle is: if it needs an installer to be useful, it's already too complicated.&lt;/p&gt;

&lt;p&gt;If you want a framework, use SPARC or claude-flow. If you want structure without infrastructure, this is for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/SeriousByDesign/frame.git
&lt;span class="nb"&gt;cd &lt;/span&gt;frame
bash install.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, in any Claude Code session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/frame load sw-development
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;FRAME is domain-agnostic — the engine stays the same, the cartridge defines the kind of work. Available initially: &lt;code&gt;sw-development&lt;/code&gt;, &lt;code&gt;code-audit&lt;/code&gt;, &lt;code&gt;blog-writing&lt;/code&gt;, &lt;code&gt;linkedin-profile&lt;/code&gt;, &lt;code&gt;project-planner&lt;/code&gt;, &lt;code&gt;cartridge-creator&lt;/code&gt;. Each one is a validated workflow you can use as-is or modify. Build your own with &lt;code&gt;cartridge-creator&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;v0.3.0 added four more: &lt;code&gt;codebase-analysis&lt;/code&gt; (structured documentation reports from an existing codebase), &lt;code&gt;findings-to-tasks&lt;/code&gt; (turns audit findings into actionable tasks), &lt;code&gt;skill-creation&lt;/code&gt; (designs and validates new Claude Code skills), and &lt;code&gt;document-and-commit&lt;/code&gt; (documents and commits code changes made outside of FRAME).&lt;/p&gt;




&lt;h2&gt;
  
  
  Where it is
&lt;/h2&gt;

&lt;p&gt;This is v0.3.0. Validated across real sessions — software development, code audit, blog writing, LinkedIn profile creation, cartridge authorship, project planning. All core design decisions are closed.&lt;/p&gt;

&lt;p&gt;It's not done. I'm looking for people who like to run it on real work, file issues when it breaks, and tell me where the friction is. If that's you, the repo is at &lt;a href="https://github.com/SeriousByDesign/frame" rel="noopener noreferrer"&gt;github.com/SeriousByDesign/frame&lt;/a&gt;. Just want to give it a go? You're welcome as well. Everyone is.&lt;/p&gt;

&lt;p&gt;Break it. That's the point of v0.3.0.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
