<?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: ArchSteer</title>
    <description>The latest articles on DEV Community by ArchSteer (@archsteer).</description>
    <link>https://dev.to/archsteer</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%2F4044074%2Fd8fe33d2-1b68-40bb-88c3-c6bd754abc7e.png</url>
      <title>DEV Community: ArchSteer</title>
      <link>https://dev.to/archsteer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/archsteer"/>
    <language>en</language>
    <item>
      <title>The Architecture X-Ray Challenge: Find One Surprise in Your Codebase</title>
      <dc:creator>ArchSteer</dc:creator>
      <pubDate>Thu, 23 Jul 2026 15:34:21 +0000</pubDate>
      <link>https://dev.to/archsteer/the-architecture-x-ray-challenge-find-one-surprise-in-your-codebase-2eh8</link>
      <guid>https://dev.to/archsteer/the-architecture-x-ray-challenge-find-one-surprise-in-your-codebase-2eh8</guid>
      <description>&lt;p&gt;Most teams have an architecture diagram. Fewer have a diagram they trust.&lt;/p&gt;

&lt;p&gt;The codebase is the only completely current record of the system, but reading&lt;br&gt;
it file by file is a poor way to see boundaries, dependency direction, data&lt;br&gt;
access, and how the shape has changed over time.&lt;/p&gt;

&lt;p&gt;So this week I am running a deliberately simple experiment:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Run an architecture X-ray on one repository and find one thing you did not&lt;br&gt;
know.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  The challenge
&lt;/h2&gt;

&lt;p&gt;You need Python 3.10 or newer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pipx &lt;span class="nb"&gt;install &lt;/span&gt;archsteer
&lt;span class="nb"&gt;cd &lt;/span&gt;your-repo
archsteer xray
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;.archsteer/report.html&lt;/code&gt;, then look for one surprise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a dependency crossing a boundary you thought was clean;&lt;/li&gt;
&lt;li&gt;a module that owns much more of the system than its name suggests;&lt;/li&gt;
&lt;li&gt;data access in an unexpected layer;&lt;/li&gt;
&lt;li&gt;an external call site nobody remembered;&lt;/li&gt;
&lt;li&gt;a legacy architecture still living inside the current one; or&lt;/li&gt;
&lt;li&gt;a structural change that should have produced an ADR.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Share the finding, open an issue if the model is wrong, or keep the result&lt;br&gt;
private. All three outcomes are useful.&lt;/p&gt;
&lt;h2&gt;
  
  
  What it does and does not do
&lt;/h2&gt;

&lt;p&gt;ArchSteer statically reads the repository and emits a code-derived model,&lt;br&gt;
living architecture documentation, diagrams, an evolution feed, and draft ADRs&lt;br&gt;
for boundary-altering changes. It runs locally, does not execute the target&lt;br&gt;
code, does not upload the repository, and requires no account.&lt;/p&gt;

&lt;p&gt;The model is heuristic. It is supposed to be an always-current starting point&lt;br&gt;
that an architect can curate, not a formal proof that the system behaves a&lt;br&gt;
certain way. A confidently wrong boundary is exactly the kind of result I want&lt;br&gt;
reported.&lt;/p&gt;

&lt;p&gt;Current language support covers Python, TypeScript/JavaScript, Java Spring, and&lt;br&gt;
Salesforce Apex.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why this matters more with coding agents
&lt;/h2&gt;

&lt;p&gt;Coding agents learn the local pattern from the files around an edit. In a&lt;br&gt;
half-migrated codebase, legacy examples outnumber target examples, so an agent&lt;br&gt;
can produce perfectly plausible code that pushes the architecture backward.&lt;/p&gt;

&lt;p&gt;An accurate current model makes a control loop possible:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;derive the architecture the code actually implements;&lt;/li&gt;
&lt;li&gt;declare one target invariant;&lt;/li&gt;
&lt;li&gt;put the relevant invariant into the coding agent's file-scoped context;&lt;/li&gt;
&lt;li&gt;check the resulting code; and&lt;/li&gt;
&lt;li&gt;block only net-new violations, so delivery continues while debt ratchets
down.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The challenge starts with step one because it should provide value before a&lt;br&gt;
team writes any rules.&lt;/p&gt;
&lt;h2&gt;
  
  
  Participate
&lt;/h2&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pipx &lt;span class="nb"&gt;install &lt;/span&gt;archsteer &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; archsteer xray
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then share one surprising finding and link to&lt;br&gt;
&lt;a href="https://github.com/einvoice-dev1/archsteer" rel="noopener noreferrer"&gt;ArchSteer on GitHub&lt;/a&gt;, or file the&lt;br&gt;
most specific example you can where the model got your architecture wrong.&lt;br&gt;
ArchSteer is free and MIT licensed.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://www.archsteer.com/blog/architecture-xray-challenge?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=xray_week" rel="noopener noreferrer"&gt;archsteer.com&lt;/a&gt;. I build ArchSteer and welcome blunt feedback on the model.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>architecture</category>
      <category>showdev</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
