<?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: Marc Newstead</title>
    <description>The latest articles on DEV Community by Marc Newstead (@icentric).</description>
    <link>https://dev.to/icentric</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%2F3929651%2Ffa7f595b-8a59-45da-b8be-ee66e3feab4d.png</url>
      <title>DEV Community: Marc Newstead</title>
      <link>https://dev.to/icentric</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/icentric"/>
    <language>en</language>
    <item>
      <title>Using AI to Map Legacy Code Without Rewriting Everything</title>
      <dc:creator>Marc Newstead</dc:creator>
      <pubDate>Wed, 13 May 2026 16:46:44 +0000</pubDate>
      <link>https://dev.to/icentric/using-ai-to-map-legacy-code-without-rewriting-everything-oe0</link>
      <guid>https://dev.to/icentric/using-ai-to-map-legacy-code-without-rewriting-everything-oe0</guid>
      <description>&lt;h2&gt;
  
  
  Using AI to Map Legacy Code Without Rewriting Everything
&lt;/h2&gt;

&lt;p&gt;If you've ever inherited a fifteen-year-old Java monolith or been asked to "modernise" a COBOL system that's been running since before you were born, you know the real problem isn't the code itself — it's understanding what the hell it actually does.&lt;/p&gt;

&lt;p&gt;The business logic is tribal knowledge. The original developers have long since moved on. The documentation, if it exists at all, is either outdated or actively misleading. And yet, this code is mission-critical.&lt;/p&gt;

&lt;p&gt;This is where AI tooling is starting to show genuine value — not by magically rewriting everything (please don't), but by making legacy systems &lt;strong&gt;legible enough&lt;/strong&gt; to modernise incrementally.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Documentation Gap Is What Actually Kills You
&lt;/h2&gt;

&lt;p&gt;Let's be honest: the blocker on most legacy migrations isn't technical complexity. It's the fact that nobody knows what the code is supposed to do.&lt;/p&gt;

&lt;p&gt;You've got thousands of lines of procedural COBOL or deeply nested Java that's been patched and extended for decades. Business rules are embedded in the code itself. There are no tests. The person who understood the invoice calculation logic retired in 2012.&lt;/p&gt;

&lt;p&gt;Traditionally, you'd need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reverse-engineer the business logic by reading code&lt;/li&gt;
&lt;li&gt;Interview subject matter experts (if they still exist)&lt;/li&gt;
&lt;li&gt;Run the system with test data and observe outputs&lt;/li&gt;
&lt;li&gt;Document everything manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This takes &lt;strong&gt;months&lt;/strong&gt;. And it's boring, error-prone work that nobody wants to do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enter AI-Assisted Mapping
&lt;/h3&gt;

&lt;p&gt;Modern LLMs (GPT-4, Claude, even specialised models) can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parse legacy code and generate plain-English summaries of what functions do&lt;/li&gt;
&lt;li&gt;Trace data flows across modules&lt;/li&gt;
&lt;li&gt;Identify dependencies and side effects&lt;/li&gt;
&lt;li&gt;Suggest which components are safe to decouple&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a simple example. You've got a 500-line stored procedure that calculates something financial. You feed it to an LLM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Legacy stored procedure from 2005&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;calculate_customer_discount&lt;/span&gt;
  &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;order_total&lt;/span&gt; &lt;span class="nb"&gt;DECIMAL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="c1"&gt;-- 500 lines of nested IF statements&lt;/span&gt;
  &lt;span class="c1"&gt;-- and undocumented business rules&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Summarise what this procedure does, list all business rules, and identify external dependencies."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The output won't be perfect, but it gives you a &lt;strong&gt;starting point&lt;/strong&gt; that would've taken hours of manual analysis. You can then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate the summary with a domain expert&lt;/li&gt;
&lt;li&gt;Use it as documentation for the replacement service&lt;/li&gt;
&lt;li&gt;Identify edge cases that need testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach is already being used across UK enterprises — financial services and public sector teams are documenting legacy systems at a pace that simply wasn't feasible before. For a broader view on how organisations are tackling this, see this &lt;a href="https://www.icentricagency.com/insights/ai-and-legacy-codebases-a-pragmatic-guide-for-uk-enterprises" rel="noopener noreferrer"&gt;pragmatic guide for UK enterprises&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strangler-Fig with AI: Incremental Wins
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;strangler-fig pattern&lt;/strong&gt; is still the safest way to modernise: you build new services alongside the old system, gradually routing traffic over, until the legacy code can be retired.&lt;/p&gt;

&lt;p&gt;AI tools can act as a &lt;strong&gt;co-pilot&lt;/strong&gt; here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Identify bounded contexts&lt;/strong&gt; — which chunks of the monolith can be safely extracted?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate interface contracts&lt;/strong&gt; — what inputs and outputs does this component expect?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scaffold replacement services&lt;/strong&gt; — create boilerplate for new microservices based on analysed legacy behaviour&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare outputs&lt;/strong&gt; — run both old and new implementations in parallel and flag discrepancies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You're not trusting the AI to do the work unsupervised. You're using it to &lt;strong&gt;speed up the tedious parts&lt;/strong&gt; so you can focus on the hard decisions: architecture, trade-offs, risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI Breaks Down (and You Still Need Humans)
&lt;/h2&gt;

&lt;p&gt;Let's be clear: &lt;strong&gt;LLMs don't understand your business logic&lt;/strong&gt;. They pattern-match. They hallucinate. They'll confidently give you plausible-sounding nonsense.&lt;/p&gt;

&lt;p&gt;Don't use AI for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Final architectural decisions&lt;/strong&gt; — a human needs to own that&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validating business-critical logic&lt;/strong&gt; — always verify with domain experts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security-sensitive code&lt;/strong&gt; — treat AI output as untrusted input&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anything without code review&lt;/strong&gt; — hallucinations are real and dangerous&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI is a &lt;strong&gt;documentation accelerator&lt;/strong&gt; and a &lt;strong&gt;mapping tool&lt;/strong&gt;. It's not a replacement for engineering judgement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Takeaways
&lt;/h2&gt;

&lt;p&gt;If you're staring down a legacy modernisation project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start with documentation, not code replacement&lt;/strong&gt; — use AI to map what exists before you change anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate everything&lt;/strong&gt; — treat AI output as a first draft, not gospel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus on knowledge capture&lt;/strong&gt; — the real value is making implicit knowledge explicit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use AI for boring, repetitive analysis&lt;/strong&gt; — free up your team to solve actual problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Legacy systems aren't going away. But with the right tooling and a pragmatic approach, you can make them &lt;strong&gt;understandable&lt;/strong&gt; — and that's half the battle.&lt;/p&gt;

&lt;p&gt;If your team is exploring how AI fits into modernisation work, agencies specialising in &lt;a href="https://www.icentricagency.com" rel="noopener noreferrer"&gt;AI automation and software development&lt;/a&gt; can help structure these programmes without the hype.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What's your experience with legacy code and AI tooling? Have you used LLMs to document or analyse old systems? Let's hear it in the comments.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>legacy</category>
      <category>softwareengineering</category>
      <category>devops</category>
    </item>
    <item>
      <title>Your AI Copilot Is Steering Your Tech Stack (And You Might Not Have Noticed)</title>
      <dc:creator>Marc Newstead</dc:creator>
      <pubDate>Wed, 13 May 2026 16:31:29 +0000</pubDate>
      <link>https://dev.to/icentric/your-ai-copilot-is-steering-your-tech-stack-and-you-might-not-have-noticed-1ckl</link>
      <guid>https://dev.to/icentric/your-ai-copilot-is-steering-your-tech-stack-and-you-might-not-have-noticed-1ckl</guid>
      <description>&lt;h2&gt;
  
  
  Your AI Copilot Is Steering Your Tech Stack (And You Might Not Have Noticed)
&lt;/h2&gt;

&lt;p&gt;Let's talk about something that's been happening on development teams everywhere, but hardly anyone's discussing openly: &lt;strong&gt;AI coding assistants are influencing which languages and frameworks we choose&lt;/strong&gt;. Not through recommendations or warnings, but through something far more subtle — better autocomplete suggestions.&lt;/p&gt;

&lt;p&gt;If you've noticed your team gravitating toward TypeScript over JavaScript, or reaching for well-documented frameworks more often, there's a good chance your AI assistant is quietly pushing you in that direction. Here's what's actually happening and why you should care.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Autocomplete Bias
&lt;/h2&gt;

&lt;p&gt;AI coding assistants aren't neutral tools. They're trained on massive datasets of public code, and they perform measurably better with some languages than others. TypeScript over JavaScript. Go over Ruby. Frameworks with extensive documentation over newer alternatives.&lt;/p&gt;

&lt;p&gt;This isn't about one language being objectively "better" — it's about &lt;strong&gt;which languages AI can parse and predict more reliably&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think about your own experience. When you're working in TypeScript, your AI assistant probably feels almost telepathic — completing entire functions, suggesting the exact pattern you were about to write. Switch to a dynamically-typed language or a less-documented framework, and suddenly it feels… duller. More generic. Less helpful.&lt;/p&gt;

&lt;p&gt;That difference in experience creates a feedback loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better suggestions → faster development → positive reinforcement&lt;/li&gt;
&lt;li&gt;Weaker suggestions → more manual typing → subtle frustration&lt;/li&gt;
&lt;li&gt;Over time, the path of least resistance shifts toward AI-friendly choices&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When AI Preferences Become Architectural Decisions
&lt;/h2&gt;

&lt;p&gt;This influence doesn't stop at language choice. It cascades:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Language → Framework → Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When your AI assistant excels at TypeScript, you'll naturally get better suggestions for TypeScript-first frameworks like Next.js or NestJS. The autocomplete for configuration, routing patterns, and common operations will be sharper. You'll ship faster.&lt;/p&gt;

&lt;p&gt;Meanwhile, that interesting new framework with sparse documentation? Your AI assistant will be nearly useless. You'll feel like you're coding with one hand tied behind your back.&lt;/p&gt;

&lt;p&gt;The result: &lt;strong&gt;teams drift toward a narrower range of technologies&lt;/strong&gt;, not because of deliberate technical evaluation, but because of tooling friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Risk Isn't Technical
&lt;/h2&gt;

&lt;p&gt;Here's the uncomfortable bit: for many projects, TypeScript probably &lt;em&gt;is&lt;/em&gt; the right choice. The static typing, improved tooling, and reduced runtime errors are genuine benefits.&lt;/p&gt;

&lt;p&gt;The risk isn't that &lt;a href="https://www.icentricagency.com/insights/why-ai-is-quietly-deciding-which-languages-your-team-uses" rel="noopener noreferrer"&gt;AI is quietly deciding&lt;/a&gt; your tech stack poorly — it's that &lt;strong&gt;you're not deciding at all&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When was the last time your team had a proper discussion about language choice? Can you honestly say you evaluated the trade-offs, or did TypeScript just become the default because "everyone's using it" and it felt better with Copilot?&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Can Actually Do About It
&lt;/h2&gt;

&lt;p&gt;This isn't a call to abandon AI assistants or reject TypeScript. It's a nudge to &lt;strong&gt;make technology decisions deliberately&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's what that looks like in practice:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Name the Influence
&lt;/h3&gt;

&lt;p&gt;In your next tech stack discussion, explicitly ask: "How much of this preference is driven by better AI assistant support?" Just acknowledging it changes the conversation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Separate Evaluation from Implementation
&lt;/h3&gt;

&lt;p&gt;When assessing a new library or framework, spend time with the documentation and community &lt;em&gt;before&lt;/em&gt; diving into code. Don't let autocomplete quality be the primary signal.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Track Your Technology Radar
&lt;/h3&gt;

&lt;p&gt;Keep a lightweight register of your tech choices and why you made them. Review it quarterly. Are you actually evaluating alternatives, or has your stack ossified around what your AI assistant knows best?&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Test Drive Without Assistance
&lt;/h3&gt;

&lt;p&gt;Occasionally try prototyping in a new language or framework with AI assistance &lt;em&gt;disabled&lt;/em&gt;. It's uncomfortable, but it recalibrates your sense of what's genuinely difficult versus what just has weak AI support.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;For teams working on &lt;a href="https://www.icentricagency.com" rel="noopener noreferrer"&gt;AI automation and software development&lt;/a&gt;, this is doubly important. If you're building AI-assisted tools, you're both influenced by and influencing these patterns.&lt;/p&gt;

&lt;p&gt;The future probably involves AI assistants becoming even more capable and more opinionated. That's not inherently bad — but it makes &lt;strong&gt;intentional technical decision-making&lt;/strong&gt; more valuable, not less.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Move
&lt;/h2&gt;

&lt;p&gt;Next time you're starting a new project or choosing a framework, pause before reaching for the obvious choice. Ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are we choosing this because it's the best fit for our problem?&lt;/li&gt;
&lt;li&gt;Or because our AI assistant makes it feel effortless?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both can be valid reasons. But you should know which one you're acting on.&lt;/p&gt;

&lt;p&gt;The tools are meant to serve your decisions, not make them for you. Keep it that way.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>typescript</category>
      <category>devtools</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
