<?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: Adithya K</title>
    <description>The latest articles on DEV Community by Adithya K (@adithyak3106).</description>
    <link>https://dev.to/adithyak3106</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4040117%2Ff2909f8b-b35b-41a2-8414-627a02d36960.png</url>
      <title>DEV Community: Adithya K</title>
      <link>https://dev.to/adithyak3106</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adithyak3106"/>
    <language>en</language>
    <item>
      <title>The two things missing from every AI coding tool: workflow and context discipline</title>
      <dc:creator>Adithya K</dc:creator>
      <pubDate>Tue, 21 Jul 2026 12:40:11 +0000</pubDate>
      <link>https://dev.to/adithyak3106/the-two-things-missing-from-every-ai-coding-tool-workflow-and-context-discipline-2kah</link>
      <guid>https://dev.to/adithyak3106/the-two-things-missing-from-every-ai-coding-tool-workflow-and-context-discipline-2kah</guid>
      <description>&lt;p&gt;AI coding tools have gotten very good at one thing: generating code fast. What they haven't gotten good at is discipline.&lt;/p&gt;

&lt;p&gt;They don't know your architecture. They don't remember that you rejected a pattern last sprint. They don't know which parts of your context window are signal and which are noise. And they have no concept of a development workflow — no phases, no review gates, no verification steps. You describe what you want, they generate, and you hope the output fits.&lt;/p&gt;

&lt;p&gt;For small tasks this works fine. For anything that touches your real codebase at scale — refactors, new features with cross-cutting concerns, compliance-sensitive changes — the lack of workflow structure creates subtle, expensive problems that compound over time.&lt;/p&gt;

&lt;p&gt;We've been building &lt;a href="https://adithyak3106.github.io/Ortho-community/" rel="noopener noreferrer"&gt;Ortho&lt;/a&gt; to address two of these problems: &lt;strong&gt;workflow discipline&lt;/strong&gt; (through ASES, a 6-phase AI development methodology) and &lt;strong&gt;context discipline&lt;/strong&gt; (through a 9-component token optimization pipeline). This post explains both.&lt;/p&gt;




&lt;h2&gt;
  
  
  The workflow problem with AI coding tools
&lt;/h2&gt;

&lt;p&gt;When a junior engineer joins your team, you don't just hand them a task and say "generate." There's a process: understand the codebase, plan the change, get the architecture reviewed, build it, test it, verify it, get it reviewed. The process exists because individual steps catch different categories of mistakes.&lt;/p&gt;

&lt;p&gt;AI coding tools collapse all of that into one step. You prompt. You get code. Done.&lt;/p&gt;

&lt;p&gt;The result isn't always bad code per file. The problem is architectural: the AI has no model of your layer boundaries, so it imports from layers it shouldn't touch. It has no memory of past decisions, so it re-proposes patterns you've already rejected. It has no verification step, so it confidently generates code that looks right but has subtle issues a reviewer would have caught in 30 seconds.&lt;/p&gt;

&lt;p&gt;The missing piece isn't a smarter model. It's a workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  ASES: A 6-phase workflow for AI-assisted development
&lt;/h2&gt;

&lt;p&gt;ASES (v1.2) is the methodology built into Ortho's orchestration layer. It structures AI-assisted development into six sequential phases, each with a distinct role:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;01 — PLANNER&lt;/strong&gt;&lt;br&gt;
Understands the intent, scans the existing codebase for relevant context, and produces a structured implementation plan with scope, assumptions, and open questions. The AI doesn't write a line of code in this phase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;02 — ARCHITECT&lt;/strong&gt;&lt;br&gt;
Reviews the plan against the actual architecture model. Identifies which layers will be touched, what the blast radius is, and whether the proposed approach violates any boundaries. Produces an architecture brief with constraints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;03 — BUILDER&lt;/strong&gt;&lt;br&gt;
Generates the implementation — with the architecture brief and context from phases 1–2 in hand. This is the only phase that produces code, and it operates with explicit constraints from the preceding phases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;04 — TEST-DESIGNER&lt;/strong&gt;&lt;br&gt;
Designs the test strategy: which behaviors to test, which edge cases matter, what coverage gaps exist. Produces test specs before tests are written.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;05 — VERIFIER&lt;/strong&gt;&lt;br&gt;
Runs the generated code against real checks: lint, type checking, tests, architecture scan. If something fails, it feeds back to BUILDER — not to the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;06 — REVIEWER&lt;/strong&gt;&lt;br&gt;
Summarizes the full change with evidence: what was built, what was tested, what architecture constraints were respected, what the verifier found. The human reviews a brief, not raw output.&lt;/p&gt;

&lt;p&gt;Each phase is a separate agent call with its own context window. The outputs chain: PLANNER feeds ARCHITECT, ARCHITECT constrains BUILDER, and so on.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ortho run &lt;span class="s2"&gt;"add rate limiting to the API layer"&lt;/span&gt;
&lt;span class="c"&gt;# → PLANNER: scans repo, produces plan&lt;/span&gt;
&lt;span class="c"&gt;# → ARCHITECT: validates against arch model, adds constraints&lt;/span&gt;
&lt;span class="c"&gt;# → BUILDER: generates implementation with constraints&lt;/span&gt;
&lt;span class="c"&gt;# → TEST-DESIGNER: proposes test coverage&lt;/span&gt;
&lt;span class="c"&gt;# → VERIFIER: runs checks, feeds back if needed&lt;/span&gt;
&lt;span class="c"&gt;# → REVIEWER: summary for human approval&lt;/span&gt;

ortho approve   &lt;span class="c"&gt;# accept the change&lt;/span&gt;
ortho reject &lt;span class="s2"&gt;"wrong layer for rate limiting, use middleware"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reject step matters: that decision is stored. Next time a similar change is proposed, Ortho cites it: &lt;em&gt;"Rejected 2026-07-15: use middleware layer, not API handler."&lt;/em&gt; The AI doesn't propose the same anti-pattern twice.&lt;/p&gt;




&lt;h2&gt;
  
  
  The token problem nobody talks about
&lt;/h2&gt;

&lt;p&gt;Context windows have gotten large. That doesn't mean you should fill them.&lt;/p&gt;

&lt;p&gt;Most teams using AI coding tools are doing one of two things: (1) sending too little context and getting generic output that doesn't fit the codebase, or (2) sending everything and burning tokens on noise — boilerplate, generated files, test fixtures, third-party vendored code — that makes the model's actual reasoning worse, not better.&lt;/p&gt;

&lt;p&gt;The naive solution is "just send more." The real solution is sending the &lt;em&gt;right&lt;/em&gt; context: the signal, not the noise. But figuring out what's signal for a given task requires understanding the task, the codebase, and the relationship between them.&lt;/p&gt;

&lt;p&gt;This is what Ortho's token optimizer does.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 9-component token optimization pipeline
&lt;/h2&gt;

&lt;p&gt;Ortho's token optimizer runs before every agent call in the ASES workflow. It takes the raw context candidates and applies nine filtering and ranking passes to produce a lean, high-signal context window:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Intent Extractor&lt;/strong&gt; — Parses the task to identify the primary intent, affected layers, and key symbols. Everything downstream is filtered against this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Symbol Ranker&lt;/strong&gt; — Scores every symbol in the index by relevance to the intent. Direct matches score highest; indirect references score lower.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Import Graph Pruner&lt;/strong&gt; — Walks the import graph from the intent's entry points and prunes branches that don't connect back to the affected code paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Call Graph Filter&lt;/strong&gt; — Uses the call graph to identify which functions are actually on the execution path for this task.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Architecture Context Selector&lt;/strong&gt; — Injects the architecture model at the right level of detail — full for ARCHITECT phase, minimal for BUILDER.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;History Deduplicator&lt;/strong&gt; — Strips context already included in a previous phase's call. Prevents re-sending the same file content across six agent calls.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Feedback Injector&lt;/strong&gt; — Retrieves relevant past decisions from the feedback store and injects them as constraints. &lt;em&gt;"Pattern X was rejected on [date] for [reason]"&lt;/em&gt; goes into every relevant call.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Budget Allocator&lt;/strong&gt; — Enforces a per-phase token budget. If ranked context exceeds the budget, lower-scoring items are dropped.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Format Compressor&lt;/strong&gt; — Strips comments, docstrings, and whitespace from included source before sending. A 400-line file often compresses to 200 lines of signal.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result: each agent call gets a context window purpose-built for that phase. The PLANNER gets broad repo context. The ARCHITECT gets the architecture model. The BUILDER gets only the code paths it needs to touch. Nothing leaks between phases that shouldn't.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why these two things belong together
&lt;/h2&gt;

&lt;p&gt;Workflow and token optimization sound like separate problems. They're not.&lt;/p&gt;

&lt;p&gt;A workflow without context discipline produces well-structured calls with bloated, noisy inputs. The ARCHITECT phase is only useful if it gets accurate architecture context — not every file in the repo.&lt;/p&gt;

&lt;p&gt;And context optimization without workflow structure produces lean inputs to an unstructured process. You might send the right 200 lines of code, but if there's no ARCHITECT phase enforcing layer constraints before BUILDER generates, the lean input goes to the wrong question.&lt;/p&gt;

&lt;p&gt;The workflow defines what questions to ask, in what order. The token optimizer ensures each question gets the right signal to answer it. Together, they're the missing layer between "I have an AI coding tool" and "AI coding is actually disciplined on my team."&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Ortho is local-first — your source never leaves your machine. One SQLite file in your repo root, zero telemetry.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows&lt;/span&gt;
irm https://adithyak3106.github.io/Ortho-community/install.ps1 | iex

&lt;span class="c"&gt;# macOS / Linux&lt;/span&gt;
git clone https://github.com/AdithyaK3106/Ortho.git &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;Ortho &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./install.sh

&lt;span class="c"&gt;# Then:&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;your-repo
ortho run &lt;span class="s2"&gt;"add Redis caching to the API layer"&lt;/span&gt;   &lt;span class="c"&gt;# ASES workflow&lt;/span&gt;
ortho guardrails                                  &lt;span class="c"&gt;# architecture scan&lt;/span&gt;
ortho memory search &lt;span class="s2"&gt;"rate limiting"&lt;/span&gt;              &lt;span class="c"&gt;# search past decisions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/AdithyaK3106/Ortho" rel="noopener noreferrer"&gt;https://github.com/AdithyaK3106/Ortho&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Landing page: &lt;a href="https://adithyak3106.github.io/Ortho-community/" rel="noopener noreferrer"&gt;https://adithyak3106.github.io/Ortho-community/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're looking for 5 engineering teams to run Ortho on a real internal repo for 30 days and give honest feedback. If you're shipping AI-generated code and hitting architecture or workflow problems, I'd love to hear about it. Email: &lt;a href="mailto:urbrain369@gmail.com"&gt;urbrain369@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>python</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
