<?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: Tim Cadenbach</title>
    <description>The latest articles on DEV Community by Tim Cadenbach (@cordango).</description>
    <link>https://dev.to/cordango</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%2F3861294%2Ff70d3afb-9e80-469d-9df8-e9d30aa292e0.png</url>
      <title>DEV Community: Tim Cadenbach</title>
      <link>https://dev.to/cordango</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cordango"/>
    <language>en</language>
    <item>
      <title>AI Should Stop Generating the Same Code Over and Over</title>
      <dc:creator>Tim Cadenbach</dc:creator>
      <pubDate>Fri, 11 Sep 2026 21:55:33 +0000</pubDate>
      <link>https://dev.to/cordango/ai-should-stop-generating-the-same-code-over-and-over-fe5</link>
      <guid>https://dev.to/cordango/ai-should-stop-generating-the-same-code-over-and-over-fe5</guid>
      <description>&lt;p&gt;AI coding tools have become ridiculously good...guess we can all agree. &lt;br&gt;
You can describe an application, wait a few minutes, and suddenly you have React components, API endpoints, database models, authentication, migrations and a decent-looking application...it seems to be magically. Then you dig into the code, try to change something and something you didn't even remotely touch breaks. Then you spend another few thousand tokens explaining the architecture the AI itself created 30 minutes ago.&lt;br&gt;
I was sick of it....&lt;/p&gt;
&lt;h2&gt;
  
  
  A new way to build business apps
&lt;/h2&gt;

&lt;p&gt;As part of a platform for small businesses I'm currently working on I am also experimenting with a different architecture for AI-built business software: let AI describe the application, then compile the repeatable parts deterministically especially do not have the AI build things like authentication, connectivity, database stuff...you name it. That has all been solved for 20 years and we shouldn't ask AI to build it over and over again, failing over and over again at getting things right. &lt;/p&gt;

&lt;p&gt;The AI only has to write YAML using my own vocabulary. &lt;br&gt;
Think about something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;entity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;expense_claim&lt;/span&gt;

&lt;span class="na"&gt;fields&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;submitted_by&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;reference&lt;/span&gt;
    &lt;span class="na"&gt;targetEntity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;person&lt;/span&gt;

  &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;money&lt;/span&gt;
    &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;EUR&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or this..a little bit more involved:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;entity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;assumption&lt;/span&gt;
&lt;span class="na"&gt;ownedBy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;parent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scenario&lt;/span&gt;
  &lt;span class="na"&gt;via&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scenario&lt;/span&gt;
  &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;table&lt;/span&gt;
&lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;statement&lt;/span&gt;
&lt;span class="na"&gt;fields&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;statement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Assumption&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;scenario&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Scenario&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;reference&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;indexed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;targetEntity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scenario&lt;/span&gt;
    &lt;span class="na"&gt;onDelete&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cascade&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this isn't limited to entities or CRUD.&lt;br&gt;
Automations can be described in the same vocabulary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;automation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;build_segment_grid&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Lay out a segment's lifecycle&lt;/span&gt;
&lt;span class="na"&gt;effects&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;createForEach&lt;/span&gt;
    &lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;scenario&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;{{record.scenario}}'&lt;/span&gt;
      &lt;span class="na"&gt;segment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;{{record.id}}'&lt;/span&gt;
      &lt;span class="na"&gt;point&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;{{source.id}}'&lt;/span&gt;
      &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;{{record.name}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{source.label}}'&lt;/span&gt;
      &lt;span class="na"&gt;flex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;pick&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;entity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;revenue_plan&lt;/span&gt;
          &lt;span class="na"&gt;filters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scenario&lt;/span&gt;
              &lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eq&lt;/span&gt;
              &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;{{record.scenario}}'&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tier&lt;/span&gt;
              &lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eq&lt;/span&gt;
              &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;flex&lt;/span&gt;
          &lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;name&lt;/span&gt;
              &lt;span class="na"&gt;direction&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;asc&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can describe the whole application with YAML definitions, from entities, relations, workflows, automations, permissions up to views and screens and readymade widgets...its all in YAML. &lt;/p&gt;

&lt;p&gt;Yet, The exact YAML isn't really the important part.&lt;br&gt;
It could be JSON. It could eventually be authored visually. Most of the time it may simply be written and modified by an AI.&lt;/p&gt;
&lt;h2&gt;
  
  
  The important part is the level of abstraction.
&lt;/h2&gt;

&lt;p&gt;The definition says what the business application should do. It doesn't describe how ASP.NET should register a controller, how EF Core should configure a relationship, how Vue should render the form or how an MCP tool should expose the operation, and ASP.NET is just an example here I use as thats the first target compiler that exists today. More to come. &lt;/p&gt;

&lt;p&gt;Yet...those things can be derived.&lt;/p&gt;
&lt;h2&gt;
  
  
  So...isn't this just another code generator?
&lt;/h2&gt;

&lt;p&gt;And hey, YAML rings a bell. Someone must have built something like this before. Absolutely!&lt;/p&gt;

&lt;p&gt;Lowdefy, for example, takes a similar approach in some ways: you describe an application using YAML instead of manually writing all the implementation code.&lt;/p&gt;

&lt;p&gt;But there is one important architectural difference.&lt;/p&gt;

&lt;p&gt;Lowdefy's YAML describes an application for the Lowdefy runtime. The runtime interprets that configuration and provides the UI, data connections, actions, authentication and other application machinery.&lt;br&gt;
That is a perfectly valid architecture, but your application is fundamentally expressed in terms of that runtime.&lt;/p&gt;

&lt;p&gt;My approach is different and goes way beyond that!&lt;/p&gt;
&lt;h2&gt;
  
  
  Compiling actual code from YAML
&lt;/h2&gt;

&lt;p&gt;For my project theres two options...The first is to run the application on the Cordango platform. The definition is compiled into an internal JSON representation which the platform uses to build and run the app.&lt;/p&gt;

&lt;p&gt;The platform adds some nice things on top, like apps sharing company data and reacting to each other's events without somebody having to manually build an integration between every single tool. But that's not really what I want to talk about here.&lt;/p&gt;

&lt;p&gt;The second path is the more interesting one for this article:&lt;/p&gt;
&lt;h2&gt;
  
  
  What if that YAML is compiled into actual source code?
&lt;/h2&gt;

&lt;p&gt;Not a starter template. Not a few generated models you still have to wire together. An actual standalone application with a frontend, backend, database model, migrations, authentication, permissions, business logic, REST/OpenAPI and MCP.&lt;/p&gt;

&lt;p&gt;Something you can take, build, run and host yourself.&lt;/p&gt;

&lt;p&gt;The current architecture looks roughly like this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                App Definition
                     |
                     v
            Deterministic Compiler
                     |
          +----------+----------+
          |                     |
          v                     v
       Frontend               Backend
      Vue / Vuetify        ASP.NET Core
          |                     |
          |          +----------+----------+
          |          |          |          |
          |       REST/API     MCP      Commands
          |       OpenAPI                Workflows
          |                     |       Permissions
          |                     |       Calculations
          |                     |
          +----------+----------+
                     |
                  EF Core
                     |
              Database Model
                 Migrations
                     |
                 PostgreSQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Today the first complete target generates ASP.NET Core + EF Core + PostgreSQL + Vue 3/Vuetify but Node/Typescript is on its way, Python is being planned and more to come. &lt;/p&gt;

&lt;p&gt;And because all of those pieces come from the same application definition, they don't have to be separately invented and kept in sync.&lt;/p&gt;

&lt;p&gt;If the definition says an expense_claim exists, that isn't just a database table.&lt;/p&gt;

&lt;p&gt;The compiler can derive:&lt;/p&gt;

&lt;p&gt;the entity model&lt;br&gt;
persistence&lt;br&gt;
migrations&lt;br&gt;
CRUD operations&lt;br&gt;
permissions&lt;br&gt;
forms and views&lt;br&gt;
REST/OpenAPI&lt;br&gt;
MCP access&lt;br&gt;
commands and workflows&lt;/p&gt;

&lt;p&gt;Change the definition and the generated implementation changes with it.&lt;/p&gt;

&lt;p&gt;The YAML isn't configuration for the generated application. It is the source from which the application is compiled.&lt;/p&gt;

&lt;p&gt;And this leads to one of my favorite slightly ridiculous consequences:&lt;/p&gt;
&lt;h2&gt;
  
  
  You could literally gitignore the code
&lt;/h2&gt;

&lt;p&gt;I'm serious.&lt;/p&gt;

&lt;p&gt;If your App Definition is stored in Git and you pin the compiler/generator versions required to build it, the generated source becomes a build artifact.&lt;/p&gt;

&lt;p&gt;Given the same application definition, generator version and scaffold version, the compiler generates the same files again.&lt;/p&gt;

&lt;p&gt;So technically your repository could look roughly like this:&lt;/p&gt;

&lt;p&gt;my-app/&lt;br&gt;
├── cordango.yaml&lt;br&gt;
├── apps/&lt;br&gt;
│   └── expenses/&lt;br&gt;
│       ├── app.cordango.yaml&lt;br&gt;
│       ├── entities/&lt;br&gt;
│       ├── roles/&lt;br&gt;
│       ├── views/&lt;br&gt;
│       └── workflows/&lt;br&gt;
└── .gitignore&lt;/p&gt;

&lt;p&gt;while this:&lt;/p&gt;

&lt;p&gt;generated/&lt;br&gt;
├── api/&lt;br&gt;
├── web/&lt;br&gt;
├── Dockerfile&lt;br&gt;
└── docker-compose.yml&lt;/p&gt;

&lt;p&gt;could simply be regenerated whenever you need it.&lt;/p&gt;

&lt;p&gt;Now, whether you should gitignore all generated source is a different discussion. Keeping generated code in Git can obviously be useful for reviewing changes, deployments and debugging.&lt;/p&gt;

&lt;p&gt;But architecturally, you don't have to treat it as the source of truth anymore.&lt;/p&gt;

&lt;p&gt;That's the important part.&lt;/p&gt;

&lt;p&gt;The definition is the source. The code is an output.&lt;/p&gt;

&lt;p&gt;And unlike a traditional runtime-based no-code platform, taking that output doesn't mean taking a dependency on my hosted service.&lt;/p&gt;

&lt;p&gt;There is no Cordango account requirement, licence server, model API or phone-home service involved in running the generated application.&lt;/p&gt;

&lt;p&gt;The current standalone runtime is small enough that it can either be referenced as a package or embedded into the generated project itself.&lt;/p&gt;

&lt;p&gt;So you can generate the application, take the source, and host it wherever you want.&lt;/p&gt;
&lt;h2&gt;
  
  
  An AI should reason about what you want to achieve not fundamentals
&lt;/h2&gt;

&lt;p&gt;With this approach, the AI gets more headroom to reason about the actual business problem instead of spending context and tokens on code we've already solved a thousand times.&lt;/p&gt;

&lt;p&gt;It also has far less room to accidentally break unrelated implementation details. If it changes a workflow, it changes the workflow definition. The compiler handles the rest.&lt;/p&gt;

&lt;p&gt;The AI can still misunderstand the requirement, of course. But those are business-level mistakes, not random implementation drift.&lt;/p&gt;

&lt;p&gt;And it doesn't even have to be a coding model...I literarily build one of the sample apps with ChatGPT...yes the old standard one, not codex. &lt;/p&gt;
&lt;h2&gt;
  
  
  A nice added extra...it saves a ton of token
&lt;/h2&gt;

&lt;p&gt;I don't want to make this the main part but yes, using YAML saved a ton of token. I compared the generated examples vs the YAML definition with Anthropic's tokenizer and the result was up to 98% fewer token consumed...lets see how that adds up when more work is done but it definitely saves you..some huge chunk. &lt;/p&gt;
&lt;h2&gt;
  
  
  What now? How does this work?
&lt;/h2&gt;

&lt;p&gt;YAML alone doesn't solve much if the AI still has to read an entire repository every time something changes. So Cordango comes with a CLI around the application model.&lt;br&gt;
The basic loop becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Describe a change
      ↓
AI changes the relevant definition
      ↓
cordango check
      ↓
cordango build
      ↓
Deterministically generated application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI works on the small semantic representation, not hundreds of generated controllers, migrations, components and API files, the CLi gives the AI the tools it needs to do that. And because the compiler understands the vocabulary, it can reject invalid definitions before they ever turn into source code.&lt;/p&gt;

&lt;p&gt;cordango check&lt;br&gt;
cordango build --target app --generator dotnet-vue&lt;/p&gt;

&lt;p&gt;That's really the whole bet. &lt;/p&gt;

&lt;p&gt;Want to have a look?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/cordango" rel="noopener noreferrer"&gt;https://www.github.com/cordango&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.cordango.com" rel="noopener noreferrer"&gt;https://docs.cordango.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.cordango.com" rel="noopener noreferrer"&gt;https://www.cordango.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All feedback welcome, negative, positive, roast it, praise it...give it a try!&lt;/p&gt;

&lt;p&gt;make the thing AI has to understand smaller, more meaningful and harder to accidentally break.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>discuss</category>
    </item>
    <item>
      <title>The DevRel Index</title>
      <dc:creator>Tim Cadenbach</dc:creator>
      <pubDate>Sat, 06 Jun 2026 14:53:07 +0000</pubDate>
      <link>https://dev.to/cordango/the-devrel-index-p2d</link>
      <guid>https://dev.to/cordango/the-devrel-index-p2d</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwnj5g9fg87un4scn448.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwnj5g9fg87un4scn448.png" alt="Smoower Brand Image" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every DevRel team I've watched get cut in the last two years was cut because nobody at the top could see what they did. Smoower is my answer to that. An index that makes the work visible, comparable, and impossible to ignore.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.smoower.com" rel="noopener noreferrer"&gt;The DevRel Index&lt;/a&gt; is a public index of developer relations activity across companies. It looks at the public surface of DevRel: docs, GitHub activity, developer content, community presence, events, integrations, package ecosystems, response patterns, and other signals that show whether a company is actually investing in developers or just saying it does.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an index can actually change
&lt;/h2&gt;

&lt;p&gt;The shift I want is the same shift that happened to SEO twenty years ago.&lt;/p&gt;

&lt;p&gt;Before tools like Moz, Ahrefs, and SEMrush, search marketing was a black box. People knew it mattered, but nobody could prove it relative to anyone else. Then a handful of indexes came along, gave the discipline a shared vocabulary and a comparable surface, and the entire field professionalised within five years. Budgets stabilised. Job titles got senior. Boards started asking informed questions instead of suspicious ones.&lt;/p&gt;

&lt;p&gt;DevRel needs the same moment. We need:&lt;/p&gt;

&lt;p&gt;A way to see, for any given company, what their public DevRel surface actually looks like, to compare that surface across companies in the same category and to track changes over time, so a board can see whether DevRel investment is moving the needle in a measurable direction&lt;br&gt;
Most importantly, a shared method that does not change every time a new vendor wants to sell you a dashboard&lt;br&gt;
That is the bet behind Smoower. Build the index first. Argue about the methodology in public. Let companies see themselves and their competitors in the same frame. Make the conversation possible at all.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx51njn30b6nqrpq7rbqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx51njn30b6nqrpq7rbqg.png" alt="Smoower Ranking Preview" width="799" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What Smoower actually does, in plain language&lt;br&gt;
Smoower is an index of developer relations activity across companies.&lt;/p&gt;

&lt;p&gt;We collect public signals (documentation freshness, content cadence, community presence, conference participation, plugin ecosystems, response times in public channels, and a few other things), score them against a methodology that is documented and open, and produce a comparable per-company score over time. You can look up your company. You can look up your competitors. You can see how a category like "AI infra" or "developer tools" trends quarter over quarter.&lt;/p&gt;

&lt;p&gt;It is not a productivity tool for individual DevRel folks. It is a visibility layer for the field as a whole. The point is not to grade humans. The point is to make the discipline legible to the people who decide whether the discipline continues to exist next year.&lt;/p&gt;

&lt;p&gt;If you are running DevRel right now and you want a way to walk into a budget conversation with something other than vibes, that is who this is built for.&lt;/p&gt;

&lt;h2&gt;
  
  
  This was not possible two years ago
&lt;/h2&gt;

&lt;p&gt;I want to be honest about something. If I had tried to build Smoower in 2023, it would have been a glorified spreadsheet with a small research team feeding it by hand. That is what every previous attempt at a DevRel index actually was. Slow, expensive, biased toward whoever the analyst at the firm happened to like, and updated maybe twice a year.&lt;/p&gt;

&lt;p&gt;The reason this version can exist now is LLMs.&lt;/p&gt;

&lt;p&gt;Here is the specific problem they solve. DevRel output is heterogenous in a way most categories are not. One company's signal is a polished docs site. Another's is a Discord with 40,000 messages a month. Another's is a YouTube channel. Another's is twenty engineers writing essays on their personal blogs. None of those surfaces look anything like each other on the wire. A traditional crawler can count pages, count members, count posts. It cannot tell you that the docs site has not been touched in eighteen months while the Discord is full of unanswered questions. It cannot tell you that one company's blog post has actual technical depth and another's is the same press release published seven times in different fonts.&lt;/p&gt;

&lt;p&gt;LLMs can. Not perfectly, but well enough to normalise. They can read a docs page and judge whether it is fresh or stale. They can read a community thread and identify whether the question got an answer. They can compare two technical blog posts and tell you which one is doing real DevRel work and which one is content marketing wearing the costume.&lt;/p&gt;

&lt;p&gt;That normalisation is what makes a fair index possible at all. Without it, you are either reducing everything to a few crude counts, which is what most existing "DevRel scorecards" already do and why nobody trusts them, or you are paying analysts to read each surface by hand, which is what boutique research firms charge fifty thousand dollars a year for and which can never update in real time.&lt;/p&gt;

&lt;p&gt;The narrative layer matters too. A raw score is useful, but it is not what a board reads. What a board reads is "your community response time dropped 40 percent this quarter, and here is what changed." Generating that summary, for every company in the index, every quarter, used to require a human writer. Now it requires a model, a methodology, and a careful editorial pass. Same output, very different cost curve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why now, honestly
&lt;/h2&gt;

&lt;p&gt;There is a more personal piece to this. After getting laid off from DeepL, I spent a few weeks talking to other DevRel people who had been through the same thing. The pattern was depressingly consistent. Good work, often great work, that nobody upstairs could see or compare. Quiet teams getting quietly removed. People rebuilding their careers from a position of "I cannot prove what I did, only describe it."&lt;/p&gt;

&lt;p&gt;I do not want the next wave of DevRel people to walk into that meeting carrying screenshots and anecdotes. I want them to walk in with a number. Their number, the industry's number, a chart, a methodology, a thing the CFO can read.&lt;/p&gt;

&lt;p&gt;That is what Smoower is for.&lt;/p&gt;

&lt;p&gt;It is going to launch incomplete. Indexes always do. The first version of any benchmark is wrong in interesting ways, and we will iterate in public on the methodology, the signal set, the weights, all of it. That is the deal. I would rather ship a measurable thing we can argue about than wait another two years for the perfect framework while more teams get cut.&lt;/p&gt;

&lt;p&gt;If you run DevRel at a company, or you care about DevRel surviving as a discipline, I would like you to come look at it when it goes live, push back on it, and tell me what we are getting wrong. That is how an index becomes a standard. Not by being right on day one.&lt;/p&gt;

&lt;p&gt;I will write more about the methodology soon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.smoower.com" rel="noopener noreferrer"&gt;Go check it out!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devrel</category>
      <category>opensource</category>
      <category>github</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
