<?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: Filipe</title>
    <description>The latest articles on DEV Community by Filipe (@alpomar).</description>
    <link>https://dev.to/alpomar</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%2F4144087%2F50d304b6-6cdc-414d-b29f-cd6075f93849.png</url>
      <title>DEV Community: Filipe</title>
      <link>https://dev.to/alpomar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alpomar"/>
    <language>en</language>
    <item>
      <title>The Biggest AI Change in Software Delivery Isn’t in the Code</title>
      <dc:creator>Filipe</dc:creator>
      <pubDate>Tue, 13 Oct 2026 13:24:00 +0000</pubDate>
      <link>https://dev.to/alpomar/the-biggest-ai-change-in-software-delivery-isnt-in-the-code-2c9k</link>
      <guid>https://dev.to/alpomar/the-biggest-ai-change-in-software-delivery-isnt-in-the-code-2c9k</guid>
      <description>&lt;p&gt;Your delivery chain can compress from months to days. Not by generating code faster, but by changing what happens before the coding starts.&lt;/p&gt;

&lt;p&gt;The chain&lt;br&gt;
&lt;em&gt;- We need a new checkout flow by Q3.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- Talk to the PM.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- PM needs a spec.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- That's the BA.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- BA needs screens first.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- That's UX.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- UX is mid-sprint.&lt;/em&gt;&lt;br&gt;
v- So… Q3?_&lt;/p&gt;

&lt;p&gt;Weeks later: engineering grooming. Sometimes months.&lt;/p&gt;

&lt;p&gt;The chain existed because translating a fuzzy business idea into something an engineer could build is genuinely hard. Each handoff was a translation. Each translation takes time.&lt;/p&gt;

&lt;p&gt;What has changed isn't the need to translate. It's who does it, and how fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  From months to an afternoon
&lt;/h2&gt;

&lt;p&gt;Your PM can now build a working prototype directly from a strategic idea. Not wireframes. Not a spec document. A working prototype, in hours, using tools like Claude Design.&lt;/p&gt;

&lt;p&gt;Users validate the idea before a line of code is written.&lt;/p&gt;

&lt;p&gt;Gone: the BA translation layer, the UX handoff, the approval loops. One person with the right tool can now do in an afternoon what the chain took weeks to produce. Your engineers receive something real to look at, to question, to build from.&lt;/p&gt;

&lt;h2&gt;
  
  
  The demo loop
&lt;/h2&gt;

&lt;p&gt;That prototype goes to a pod of two or three engineers, not a grooming session. The PM walks each pod through it. Edge cases surface. Decisions land in real time.&lt;/p&gt;

&lt;p&gt;A ticket follows. No user story - just what came out of that conversation: the edge cases, the decisions, the constraints.&lt;/p&gt;

&lt;p&gt;What about everything that doesn't get said in that meeting?&lt;/p&gt;

&lt;p&gt;Daily demos close the gap. The pod accepts the ticket won't be fully fleshed out from the start. Every day, they show running code (built since the day before) back to the PM. Feedback comes in. The work adjusts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The org change nobody plans for
&lt;/h2&gt;

&lt;p&gt;Your PM needs to be a different kind of person now. Not a spec writer or a backlog manager. Someone who can hold a product vision, prototype it in hours, and run a daily feedback loop with your engineers.&lt;/p&gt;

&lt;p&gt;The old requirements chain didn't just slow delivery. It distributed accountability so thinly that nobody felt the full weight of a bad decision. The BA owned the spec. UX owned the screens. Engineering owned the build. When something shipped wrong, the gap between those handoffs was always where the blame landed - and where the learning was lost.&lt;/p&gt;

&lt;p&gt;When your PM and the pod share a prototype, a daily demo, and a ticket that came out of a real conversation, something shifts. They are accountable for the same outcome. The gap disappears, because there is nowhere left to hand the problem off to.&lt;/p&gt;

&lt;p&gt;The engineering manager's job shifts with it. Breaking the team into pods means fewer coordination meetings and fewer half-formed tickets. What appears in their place is harder to manufacture: engineers accountable for understanding what they are building, not just executing what someone else has written. That is a better job. Not easier. Better.&lt;/p&gt;

&lt;h2&gt;
  
  
  The experiment on my team
&lt;/h2&gt;

&lt;p&gt;I've been running this model with a large team for the past several months. The daily demo cadence is still finding its rhythm. Some engineers rose to the accountability immediately; others are still waiting for someone else to do the discovery for them. That gap is now visible in a way it never was when tickets arrived pre-written.&lt;/p&gt;

&lt;p&gt;Pod composition has proved messier than expected. When priorities are clear, the pods hold their shape. When they aren't, we add people, split pods, or run smaller groups than planned. The structure is more fluid than the model suggests.&lt;/p&gt;

&lt;p&gt;What none of that messiness has changed is the result. The end-to-end journey from idea to production has compressed from months to days. Not by hiring faster engineers or buying better tooling. By changing what happens before the coding starts.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Filipe Albero Pomar is an engineering manager and speaker based in London. He writes about AI adoption, engineering leadership, and software delivery. Find him at &lt;a href="https://alpomar.dev" rel="noopener noreferrer"&gt;alpomar.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TechLeadConf 2026 · GenAI London 2026&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>leadership</category>
      <category>agile</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Your AI Productivity Number Is Right. So Is Your Team’s.</title>
      <dc:creator>Filipe</dc:creator>
      <pubDate>Tue, 06 Oct 2026 13:07:00 +0000</pubDate>
      <link>https://dev.to/alpomar/your-ai-productivity-number-is-right-so-is-your-teams-21gn</link>
      <guid>https://dev.to/alpomar/your-ai-productivity-number-is-right-so-is-your-teams-21gn</guid>
      <description>&lt;p&gt;Ask your engineers how much AI has improved their productivity. You'll hear somewhere between fifty and a hundred percent. Transformative. Game-changing. Then ask yourself whether you could stand up in front of your leadership and say the same thing with confidence.&lt;/p&gt;

&lt;p&gt;Most engineering managers can't - not yet. The gains feel real, but they're hard to pin down. And that gap between what your team experiences and what you can actually defend is more useful than it might seem.&lt;/p&gt;

&lt;p&gt;That gap isn't a measurement failure. It's the most useful signal you have.&lt;/p&gt;

&lt;h2&gt;
  
  
  The measurement problem
&lt;/h2&gt;

&lt;p&gt;The gains your engineers are reporting aren't exaggeration. They're just measuring the wrong thing.&lt;/p&gt;

&lt;p&gt;Ask where AI has actually helped and you'll hear the same answer across most teams: automation tests and boilerplate code. The mechanical layer - the work that needs doing but rarely needs thinking. If a test suite that used to take an hour now takes ten minutes, that's an 83% reduction on that task. That's real.&lt;/p&gt;

&lt;p&gt;But it's only half the picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the saved time actually goes
&lt;/h2&gt;

&lt;p&gt;Laura Tacho at DX puts the industry average at 3.75 hours saved per developer per week. Take that on face value. The question isn't whether the time is being saved. It's where it goes.&lt;/p&gt;

&lt;p&gt;The time reclaimed from the mechanical layer doesn't convert directly into new features.&lt;/p&gt;

&lt;p&gt;AI-generated code creates its own overhead. PRs arrive faster, which means review pressure arrives faster too - and reviewing code you didn't write, at higher volume, is its own drain on your engineers' attention. Generated output varies in quality. Security and maintainability issues that an experienced engineer would have caught while writing don't always surface until someone else is reviewing.&lt;/p&gt;

&lt;p&gt;Meanwhile, the work itself doesn't hold still. A ticket is a snapshot - a fixed description of a feature the Product Manager wrote before anything was built. Once she can see intermediate output, her understanding shifts, and so does the scope, and the time to build the feature increases.&lt;/p&gt;

&lt;p&gt;That isn't dysfunction; it's how good product thinking works. The work that exits a sprint rarely resembles the work that entered it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to measure - and what to fix
&lt;/h2&gt;

&lt;p&gt;Your delivery metrics give you something defensible for leadership - a number you can stand behind when someone asks what AI is actually delivering. Survey data gives you the signal from inside the work, and the frame to make sense of the gap between the two.&lt;/p&gt;

&lt;p&gt;To close that gap, you need to invest in the engineering harnesses that make AI-generated code production-worthy without consuming the time AI just freed up. That means reducing the review burden from agent-generated PRs (better tooling, clearer standards, automated quality gates, and early detection of architecture drift). It means ensuring generated code is maintainable, secure, and consistent with your architecture before it reaches a human reviewer.&lt;/p&gt;

&lt;p&gt;Your engineers reporting 50–100% aren't describing where you are. They're describing where you could get to, once the engineering discipline around AI catches up with the adoption of it.&lt;/p&gt;

&lt;p&gt;And when you get there, you might find speed wasn't the real prize. Working code earlier means product thinking catches up, requirements shift, and you deliver the right thing. Your delivery metrics won't show that - but your business will feel it. That's the gap worth closing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Filipe Albero Pomar is an engineering manager and speaker based in London. He writes about AI adoption, engineering leadership, and software delivery. Find him at &lt;a href="https://alpomar.dev" rel="noopener noreferrer"&gt;alpomar.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TechLeadConf 2026 · GenAI London 2026&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>leadership</category>
      <category>devex</category>
    </item>
    <item>
      <title>Your Team’s AI Spend Is a Black Box — Even to You</title>
      <dc:creator>Filipe</dc:creator>
      <pubDate>Tue, 29 Sep 2026 13:03:00 +0000</pubDate>
      <link>https://dev.to/alpomar/your-teams-ai-spend-is-a-black-box-even-to-you-l60</link>
      <guid>https://dev.to/alpomar/your-teams-ai-spend-is-a-black-box-even-to-you-l60</guid>
      <description>&lt;p&gt;“I ran out of tokens.”&lt;/p&gt;

&lt;p&gt;“Me too. Can we get more?”&lt;/p&gt;

&lt;p&gt;“Sure,” says the business. “Where did they go?”&lt;/p&gt;

&lt;p&gt;Silence. Shrugs. Someone mumbles something about refactoring.&lt;/p&gt;

&lt;p&gt;That exchange is happening in engineering orgs everywhere right now. You’re under pressure to control the bill, not just explain it — and you can’t control what you can’t see.&lt;/p&gt;

&lt;p&gt;We know the total bill. We don’t know which feature it paid for.&lt;/p&gt;

&lt;p&gt;That’s not a tooling gap. It’s a visibility gap. And it’s costing you two things at once: a straight answer on return for the spend, and any way to weigh cost against value at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost and value, side by side
&lt;/h2&gt;

&lt;p&gt;Cost attribution means tagging assistant usage to the piece of work it went into. Not a team. Not a month. A feature, a ticket, one line in a backlog.&lt;/p&gt;

&lt;p&gt;It’s the half of the equation nobody has. A rough number exists for engineering time (e.g., person-days x daily $), but it’s never included what the assistant itself cost. What most teams have instead is a dashboard showing total tokens per person, maybe per team, refreshed monthly — useful for a finance conversation about the subscription, useless for putting a cost next to any one feature’s value.&lt;/p&gt;

&lt;p&gt;That’s not an oversight. No assistant vendor has much incentive to make their own token spend easy to scrutinise.&lt;/p&gt;

&lt;p&gt;Once you have cost attribution, you can finally put the two halves next to each other: this feature cost this much, and here’s what we believed it was worth. Sometimes they’ll agree. Sometimes the gap will be the most useful thing in the room.&lt;/p&gt;

&lt;h2&gt;
  
  
  From spend to a conversation with product
&lt;/h2&gt;

&lt;p&gt;Here’s where the same data becomes your leverage in the conversation with product.&lt;/p&gt;

&lt;p&gt;Two tickets, same sprint. PROJ-118 burned 400,000 tokens and shipped a feature two enterprise customers had asked for by name. PROJ-204 burned 2.6 million (six times the spend) fixing a papercut nobody had complained about.&lt;/p&gt;

&lt;p&gt;Without attribution, both look identical in the backlog: five story points each, both “done.” With attribution, they’re not the same at all — one delivered named value cheaply, the other cost six times as much for a fix nobody asked for.&lt;/p&gt;

&lt;p&gt;That’s the evidence you bring into the prioritisation conversation yourself: proof this sprint’s “quick win” has a track record of being anything but.&lt;/p&gt;

&lt;p&gt;The good news: all of this is already sitting on your engineers’ machines, waiting to be read.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the data already lives
&lt;/h2&gt;

&lt;p&gt;A Claude Code session isn’t just recorded somewhere — the session is the transcript. It writes itself to disk as it goes, a plain JSONL file sitting locally on the engineer’s machine: every prompt, every tool call, every token count. Nobody has to switch it on. It’s already happening.&lt;/p&gt;

&lt;p&gt;The assistant also fires events at named moments in a session’s life — SessionStart when a session opens, SessionEnd when it closes, and others besides, though those two are all this needs. A hook is what you register to catch one: nothing more exotic than a line in a config file pointing an event at a script of your choosing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;on SessionStart  → run reminder_script
on SessionEnd    → run export_script
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s the whole mechanism. No agent to install, no proxy to sit in front of the assistant, no changes to how engineers work. You’re reading a file that already exists, at two moments that already happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building it: three pieces, one afternoon
&lt;/h2&gt;

&lt;p&gt;With that in mind, the shape of this is simpler than it sounds. What follows is pseudo-code, meant to build intuition for how the three pieces fit together. If you’d rather start from real code, see the reference repo on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. A feature ID reminder, at SessionStart.&lt;/strong&gt; Ask for the feature ID the session relates to, and check again a few prompts later if it never showed up:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;on session_start:&lt;br&gt;
    ask("which ticket is this session for?")&lt;br&gt;
on each prompt:&lt;br&gt;
    if prompt_count in [2, 5, 10, 20] and no ticket_id seen yet:&lt;br&gt;
        ask_again()&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2. An export, at SessionEnd.&lt;/strong&gt; When the engineer exits Claude Code, it runs whatever script settings.json points it to, passing that script the session's details. Your script's only job is to copy that transcript somewhere durable, off the engineer's machine, without making them wait for it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="nf"&gt;session_end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session_info&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;transcript&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;session_info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transcript_path&lt;/span&gt;
    &lt;span class="nf"&gt;spawn_background&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;copy&lt;/span&gt; &lt;span class="n"&gt;transcript&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;immediately&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. A batch job, run on a schedule.&lt;/strong&gt; Step 2 only ever pushed raw transcripts into durable storage — nothing has parsed them yet. This job walks every transcript sitting there unprocessed, and turns each one into a single row of metrics in a separate table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for each raw session not yet in the metrics table:
    tokens = sum_by_type(session.events)
    feature_id = find_ticket_reference(session.raw_text)
    cost = weighted(tokens, session.model)
    duration = session.end_time - session.start_time
    write_row(feature_id, tokens, cost, model, duration)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Token types aren’t priced the same, and neither are models, so weighted() needs both:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;weighted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;       &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;      &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache_read&lt;/span&gt;  &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache_write&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;input_price_per_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The 1.0 / 5.0 / 0.1 / 1.25 figures come from Claude’s own published per-token rates, normalised against input. That ratio holds roughly steady across the model family. What doesn’t hold is the absolute price — Opus costs several times more per token than Haiku, which is exactly what input_price_per_token(model) corrects for.&lt;/p&gt;

&lt;p&gt;What you get, three weeks in&lt;br&gt;
The first few weeks won’t tell you much. Give it time, and patterns surface: which tickets run expensive, which kinds of work quietly cost more than they should.&lt;/p&gt;

&lt;p&gt;None of it decides whether a feature was worth building — that call still belongs to you. What changes is that you now have a real number in hand instead of a shrug, to put next to whatever value story the PM was already telling.&lt;/p&gt;

&lt;p&gt;The question was never whether you’re spending a lot on tokens. It’s whether you’re spending them on the right things.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Filipe Albero Pomar is an engineering manager and speaker based in London. He writes about AI adoption, engineering leadership, and software delivery. Find him at &lt;a href="https://alpomar.dev" rel="noopener noreferrer"&gt;alpomar.dev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TechLeadConf 2026 · GenAI London 2026&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>devops</category>
      <category>leadership</category>
    </item>
  </channel>
</rss>
