<?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: thomaslanghorst</title>
    <description>The latest articles on DEV Community by thomaslanghorst (@thomaslanghorst).</description>
    <link>https://dev.to/thomaslanghorst</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%2F996321%2F3a29cb34-5004-4513-84d7-42e9badaf92e.png</url>
      <title>DEV Community: thomaslanghorst</title>
      <link>https://dev.to/thomaslanghorst</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thomaslanghorst"/>
    <language>en</language>
    <item>
      <title>The Best Engineering Teams Use AI and Junior Developers Differently</title>
      <dc:creator>thomaslanghorst</dc:creator>
      <pubDate>Sat, 22 Aug 2026 03:46:29 +0000</pubDate>
      <link>https://dev.to/thomaslanghorst/the-best-engineering-teams-use-ai-and-junior-developers-differently-1eo3</link>
      <guid>https://dev.to/thomaslanghorst/the-best-engineering-teams-use-ai-and-junior-developers-differently-1eo3</guid>
      <description>&lt;p&gt;Over the past year, I've watched a lot of engineering teams go through the same adoption pattern with AI tools. They start using GitHub Copilot or Claude. Productivity goes up. And then someone in a meeting asks the question: "Do we still need as many junior developers?"&lt;/p&gt;

&lt;p&gt;I think that question reveals exactly the wrong mental model.&lt;/p&gt;

&lt;p&gt;The teams getting the most value from AI tools aren't the ones who figured out what AI can automate. They're the ones who figured out what AI &lt;em&gt;should&lt;/em&gt; automate, and then designed their workflows around that distinction.&lt;/p&gt;

&lt;p&gt;That sounds like a small difference. It isn't.&lt;/p&gt;

&lt;p&gt;Most of the debate around AI and junior developers focuses on the wrong question: can AI do what juniors do? In a previous article, I explored why that question leads teams in the wrong direction. In another, I looked at what happens when organizations quietly remove the work juniors need to grow. This article is about what the best teams actually do instead.&lt;/p&gt;

&lt;p&gt;They don't pick AI over junior developers. They redesign how work flows.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI and Junior Developers Debate Is Asking the Wrong Question
&lt;/h2&gt;

&lt;p&gt;The argument goes like this: AI can generate code, write tests, and produce documentation. Junior developers also generate code, write tests, and produce documentation. Therefore, AI can replace junior developers.&lt;/p&gt;

&lt;p&gt;This looks logical at the task level. But it misses something important.&lt;/p&gt;

&lt;p&gt;Junior developers aren't primarily valuable for their output. They're valuable for what they become while producing that output. Every bug they debug, every test they write, every pull request they review is quietly building something that doesn't appear in any sprint metric.&lt;/p&gt;

&lt;p&gt;You can automate a task. You can't automate the learning that comes from doing it.&lt;/p&gt;

&lt;p&gt;That's where the replacement narrative breaks down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI Is Actually Good At
&lt;/h2&gt;

&lt;p&gt;After using AI coding tools seriously for a while, certain patterns become clear.&lt;/p&gt;

&lt;p&gt;AI is fast and reliable for repetitive, well-defined work: boilerplate, standard implementations, documentation drafts, test scaffolding for known patterns, straightforward refactoring. The common thread is that these tasks have a recognizable shape. The output can be verified quickly by someone who knows what correct looks like.&lt;/p&gt;

&lt;p&gt;What AI handles less well is anything that requires judgment about context. Ambiguous requirements. Organizational constraints that aren't written down anywhere. Tradeoffs that depend on what this codebase will look like in two years. Recognizing that a technically correct implementation is actually the wrong solution to this specific problem.&lt;/p&gt;

&lt;p&gt;AI tools produce output confidently regardless of how uncertain the situation actually is. That creates a subtle but real verification problem. Sometimes the wrong answer looks almost indistinguishable from the right one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Junior Developers Are Actually Good At
&lt;/h2&gt;

&lt;p&gt;This is where the comparison gets interesting.&lt;/p&gt;

&lt;p&gt;Junior developers are slower at many of the tasks AI handles well. They take longer to write boilerplate. Their first test suite isn't always comprehensive. That's expected and fine.&lt;/p&gt;

&lt;p&gt;But junior developers do something AI doesn't: they learn while they work.&lt;/p&gt;

&lt;p&gt;A junior developer debugging a flaky test is building debugging instincts. A junior developer reviewing a pull request is starting to develop opinions about code quality. A junior developer working through an ambiguous requirement is learning how to ask the right questions. None of that shows up in velocity metrics. But it accumulates into something extremely valuable over time: engineering judgment.&lt;/p&gt;

&lt;p&gt;Junior developers also surface organizational knowledge in ways AI can't. When a junior engineer comes back and says "I'm not sure what this requirement means," that's not inefficiency. That's a signal about unclear specs, inconsistent system behavior, or missing documentation. It's useful information.&lt;/p&gt;

&lt;p&gt;And there's one more thing worth saying plainly: junior developers become senior developers. The pipeline matters. Teams that remove meaningful work from junior developers don't just lose short-term output. They slow down the production of the senior engineers they'll desperately need later.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changes for Senior Engineers
&lt;/h2&gt;

&lt;p&gt;In AI-assisted teams, the role of senior engineers shifts in a specific direction.&lt;/p&gt;

&lt;p&gt;Code generation speed increases. That means the review surface increases. There's more output to verify, more architectural decisions being made faster, and more opportunities for confident-looking mistakes to slip through. The most important senior engineer skill in this environment isn't prompt writing. It's verification: knowing whether the output is correct, safe, maintainable, and actually solving the right problem.&lt;/p&gt;

&lt;p&gt;What doesn't change: architectural decisions still require deep system understanding. Debugging production issues still requires reasoning under uncertainty. Communicating tradeoffs still requires knowing what the real tradeoffs are.&lt;/p&gt;

&lt;p&gt;In well-functioning AI-assisted teams, senior engineers end up doing more judgment-intensive work, not less. AI handles the pattern completion. Seniors focus on the decisions that require experience to get right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task Allocation Is the Real Problem
&lt;/h2&gt;

&lt;p&gt;Most teams adopting AI tools aren't rethinking task allocation. They're adding AI to existing workflows and measuring whether output speed increases.&lt;/p&gt;

&lt;p&gt;That misses the more important question.&lt;/p&gt;

&lt;p&gt;Which tasks should go to AI? Which tasks should go to junior developers? Which tasks should senior developers actually be spending their time on?&lt;/p&gt;

&lt;p&gt;Those three have genuinely different strengths and genuinely different costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI&lt;/strong&gt; is effective for repetitive pattern-matching work. It's fast, scales easily, and requires no management overhead. But it produces no learning, develops no judgment, and always requires verification from someone who can tell correct from almost-correct.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Junior developers&lt;/strong&gt; are slower at pattern-matching tasks, but they learn while they work. They build judgment. They ask questions that surface important information. They become the senior developers the team will need in three years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Senior developers&lt;/strong&gt; are expensive. Their most valuable contribution is judgment: understanding what to build, how to verify it, and what to avoid. Work that doesn't require judgment is the worst possible use of their time.&lt;/p&gt;

&lt;p&gt;In my experience, teams often get this backwards. They use AI for ambiguous architectural decisions and pull senior engineers into implementation details. Or they remove juniors from meaningful work because it's faster with AI, and then wonder why their engineers aren't growing.&lt;/p&gt;

&lt;p&gt;The best teams assign work based on where it creates the most leverage and the most learning. That's a different question from "what's the fastest way to close this ticket."&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow Redesign, Not Just Tool Adoption
&lt;/h2&gt;

&lt;p&gt;Teams that use AI well don't just adopt tools. They change how work flows.&lt;/p&gt;

&lt;p&gt;In practice, this looks something like: senior engineers define direction, validate AI-generated output, and help junior developers learn how to evaluate that output critically rather than just accept it. Junior developers work on real problems with appropriate oversight, including learning to use AI as a tool rather than a shortcut around understanding. AI handles the work that has a recognizable pattern and can be reviewed quickly.&lt;/p&gt;

&lt;p&gt;That's a different organizational design than most teams run today.&lt;/p&gt;

&lt;p&gt;Most teams treat AI adoption as a tooling decision. The teams getting the most value from it treat it as a workflow redesign problem. Those aren't the same thing, and the gap between them compounds over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens When Teams Get This Wrong
&lt;/h2&gt;

&lt;p&gt;The most common failure mode isn't over-adoption. It's shallow adoption without workflow change.&lt;/p&gt;

&lt;p&gt;That looks like hiring fewer juniors because AI can do their work. Shipping AI-generated output without a corresponding increase in review rigor. Senior engineers generating more code faster without spending more time verifying it.&lt;/p&gt;

&lt;p&gt;The downstream consequences are predictable. The junior pipeline dries up. The senior engineer shortage gets worse. Technical debt accumulates faster because AI output goes in without enough scrutiny. Teams gradually lose the organizational knowledge that comes from people actually learning on real systems.&lt;/p&gt;

&lt;p&gt;Faster output without stronger verification is just a faster way to create problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Better Question
&lt;/h2&gt;

&lt;p&gt;The teams doing this well aren't asking how to replace junior developers with AI.&lt;/p&gt;

&lt;p&gt;They're asking: how do we design a workflow where AI, junior developers, and senior developers each do the work they're actually best suited for?&lt;/p&gt;

&lt;p&gt;That's a harder question. It requires thinking carefully about task allocation, learning systems, verification processes, and long-term capability development. It requires senior engineers who understand not just how to use AI tools, but how to structure work around them.&lt;/p&gt;

&lt;p&gt;The best teams aren't replacing junior developers with AI. They're using AI to remove work that nobody should be doing manually, and using the capacity that creates to do more of the work that actually requires judgment and experience.&lt;/p&gt;

&lt;p&gt;That's a different kind of optimization. And it leads to better outcomes over time, both in what the team ships and in what the team becomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Takeaways for Engineering Managers
&lt;/h2&gt;

&lt;p&gt;If you're trying to apply this in practice, a few principles I keep coming back to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't measure AI adoption by lines of code generated. Measure by whether verification processes kept pace with output speed.&lt;/li&gt;
&lt;li&gt;Don't protect junior developers from difficult work. Protect their access to meaningful work that builds real judgment.&lt;/li&gt;
&lt;li&gt;Give AI repetitive work, not ownership. Ownership requires someone who'll still be there when the system misbehaves six months from now.&lt;/li&gt;
&lt;li&gt;Let junior developers evaluate AI output rather than just consume it. Reviewing generated code is itself a learning opportunity.&lt;/li&gt;
&lt;li&gt;Optimize for learning as well as delivery. A team that only optimizes for delivery eventually loses the ability to maintain what it delivered.&lt;/li&gt;
&lt;li&gt;Treat workflow design as an ongoing responsibility, not a one-time setup. AI capabilities change quickly. The workflows around them need to keep up.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The future isn't AI versus junior developers. It's AI working alongside junior developers inside engineering workflows that are actually designed for that combination. The teams that figure that out first will have an advantage that compounds.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>The Hidden Cost of Replacing Junior Developers With AI</title>
      <dc:creator>thomaslanghorst</dc:creator>
      <pubDate>Sat, 15 Aug 2026 05:57:27 +0000</pubDate>
      <link>https://dev.to/thomaslanghorst/the-hidden-cost-of-replacing-junior-developers-with-ai-5b49</link>
      <guid>https://dev.to/thomaslanghorst/the-hidden-cost-of-replacing-junior-developers-with-ai-5b49</guid>
      <description>&lt;p&gt;Over the last few months, I started using GitHub Copilot for work. It took me quite some time (and a lot of tokens) to learn to use it properly. But once I knew what I was doing, it at least 10x'ed my work.&lt;/p&gt;

&lt;p&gt;Until this day, I am surprised how well and fast AI models like ChatGPT or Claude can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scaffold CRUD endpoints&lt;/li&gt;
&lt;li&gt;Generate unit tests&lt;/li&gt;
&lt;li&gt;Refactor straightforward code&lt;/li&gt;
&lt;li&gt;Debug simple errors&lt;/li&gt;
&lt;li&gt;Document APIs or services&lt;/li&gt;
&lt;li&gt;Explain unfamiliar code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the help of AI, I feel way more productive and efficient than before.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://thomaslanghorst.com/blog/ai-or-junior-developer/" rel="noopener noreferrer"&gt;Today, many senior engineers delegate these tasks to GitHub Copilot&lt;/a&gt;. And honestly, in many cases that actually IS the more efficient choice. But, if AI is increasingly becoming better at execution-heavy development tasks, what exactly are junior developers supposed to learn from?&lt;/p&gt;

&lt;p&gt;Which creates an uncomfortable question: If junior developers stop doing this work, where exactly do future senior engineers come from?&lt;/p&gt;

&lt;h2&gt;
  
  
  Most Engineers Learn Through “Low-Value” Work
&lt;/h2&gt;

&lt;p&gt;Throughout my career, I was able to work with a lot of very smart and very capable software engineers. And there is one thing they all had in common: they didn't become experienced by reading architecture diagrams or attending conference talks. They became experienced by spending years dealing with messy code, repetitive tasks, flaky tests, deployment mistakes, and occasionally even frustrating work. They all gained experience by working with real software systems.&lt;/p&gt;

&lt;p&gt;A lot of this mentioned frustrating work early in my career was actually building a foundation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fixing bugs:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
While I was fixing bugs, I was not just solving individual issues. I was slowly building debugging instincts. Over time, I stopped focusing on the specific problem in front of me and started learning how to investigate systems that didn't behave the way they were supposed to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dealing with flaky tests:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Flaky tests taught me more about reliability than many books or conference talks ever could. Every time a test failed for no apparent reason, I learned a little more about reliability. Eventually, I started recognizing how seemingly harmless decisions can slowly erode confidence in a system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintaining "legacy" services&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
A huge amount of my understanding of software architecture came from maintenance work. Reading old code, following dependency chains, and figuring out why a workaround existed taught me far more than architecture diagrams ever did.&lt;/p&gt;

&lt;p&gt;Most of this work looks low-value from the outside because it is difficult to measure. It does not always produce visible features. It is often slow, repetitive, and operational in nature. But it's exactly where software engineers develop essential skills like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pattern recognition&lt;/li&gt;
&lt;li&gt;risk awareness&lt;/li&gt;
&lt;li&gt;debugging intuition&lt;/li&gt;
&lt;li&gt;systems thinking&lt;/li&gt;
&lt;li&gt;operational judgment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Traditionally, juniors learned through an apprenticeship-like process inside engineering teams working on exactly those tasks with guidance from seniors. But this pipeline seems to change. Which brings us back to the question from before:&lt;/p&gt;

&lt;p&gt;If AI absorbs all of this work, organizations may accidentally remove the environments where engineers develop those skills.&lt;/p&gt;

&lt;p&gt;And if that happens, where do future senior engineers come from?&lt;/p&gt;

&lt;h2&gt;
  
  
  Senior Engineers Are Produced, Not Hired
&lt;/h2&gt;

&lt;p&gt;When discussing AI and productivity, many people focus on the individual developer. How much faster can they ship? How many tickets can they close? How much code can they generate?&lt;/p&gt;

&lt;p&gt;But there is a bigger organizational question hiding underneath all of this: Where do senior engineers actually come from?&lt;/p&gt;

&lt;p&gt;When scrolling through my LinkedIn, I see a lot of open positions for senior software engineers. Companies seem to assume that senior engineers can simply be hired when needed. But, if every company wants to hire senior engineers, who is producing them?&lt;/p&gt;

&lt;p&gt;In my opinion, every engineering organization should depend on internal talent growth. Because senior engineers are far more than simply better coders. They are engineers who have accumulated instincts and habits over many years of dealing with all the complexity that comes with real-world software development.&lt;/p&gt;

&lt;p&gt;Today's senior engineers were yesterday's juniors. They are developed over time. And if engineering organizations start removing those learning opportunities, they are unintentionally weakening the system that produces their future technical leaders.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI May Create Fragile Engineering Organizations
&lt;/h2&gt;

&lt;p&gt;What makes this whole evolution dangerous is that the impact may not be visible immediately.&lt;/p&gt;

&lt;p&gt;If a company starts using AI to handle more junior-level work, productivity might even improve in the short term. Features get delivered faster. Less time is spent on repetitive tasks. Engineers can focus on more complex problems.&lt;/p&gt;

&lt;p&gt;At first glance, that sounds like a win. The problem is not the AI-generated code itself. The problem is what happens to the human systems around it.&lt;/p&gt;

&lt;p&gt;If fewer engineers spend time debugging difficult issues, maintaining older systems, or investigating production incidents, fewer engineers develop a deep understanding of how those systems actually work.&lt;/p&gt;

&lt;p&gt;Over time, organizations may find themselves in a situation where only a small group of experienced engineers understands the critical parts of the system. And this creates a subtle form of organizational fragility.&lt;/p&gt;

&lt;p&gt;The codebase continues to grow. Development speed keeps increasing. AI makes engineers more productive than ever before. But at the same time, the number of people capable of understanding and handling that growing complexity may actually decrease.&lt;/p&gt;

&lt;p&gt;And here is where it becomes interesting. AI makes it easier and faster to produce software. But it does not make it easier and faster to verify and validate it. The faster code gets generated, the more important verification and judgment become.&lt;/p&gt;

&lt;p&gt;Every generated pull request still needs to be reviewed. Every deployment still needs to be validated. Every production issue still needs to be understood. Every architectural decision still needs critical thinking. And AI cannot fully evaluate those decisions within the broader context of an organization.&lt;/p&gt;

&lt;p&gt;In other words, AI may reduce the amount of coding required to ship software. But it may increase the importance of engineering judgment, systems thinking, testing, review processes, and quality engineering.&lt;/p&gt;

&lt;p&gt;And if those skills become concentrated in a small group of senior engineers, they eventually become a bottleneck for the entire organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Best Teams Use AI Differently
&lt;/h2&gt;

&lt;p&gt;After reading all of this, it might sound like I am arguing against AI. Well, I am not.&lt;/p&gt;

&lt;p&gt;The question is not whether repetitive work should be automated. The question is how organizations can preserve the learning opportunities hidden inside that work.&lt;/p&gt;

&lt;p&gt;In my opinion, the best engineering teams will use AI very differently. Instead of replacing apprenticeship, they will redesign it.&lt;/p&gt;

&lt;p&gt;Junior engineers should still spend time debugging production issues, investigating flaky tests, maintaining existing systems and learning how software behaves under real-world conditions.&lt;/p&gt;

&lt;p&gt;The difference is that AI can help them do those things more efficiently and learn faster.&lt;/p&gt;

&lt;p&gt;Instead of spending hours searching documentation, they can spend more time understanding the actual problem. Instead of being completely stuck, they can get guidance and continue learning.&lt;/p&gt;

&lt;p&gt;In other words, AI can reduce friction without removing exposure.&lt;/p&gt;

&lt;p&gt;The same is true for senior engineers. Their role becomes less about writing every line of code themselves and more about reviewing, mentoring, and helping others develop engineering judgment.&lt;/p&gt;

&lt;p&gt;Because the goal is not to protect junior work. &lt;strong&gt;The goal is to protect the pipeline that turns today's juniors into tomorrow's senior engineers.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>ai</category>
      <category>discuss</category>
      <category>programming</category>
    </item>
    <item>
      <title>Should I Use AI or Give the Task to a Junior Developer?</title>
      <dc:creator>thomaslanghorst</dc:creator>
      <pubDate>Sat, 08 Aug 2026 05:49:12 +0000</pubDate>
      <link>https://dev.to/thomaslanghorst/should-i-use-ai-or-give-the-task-to-a-junior-developer-3p4g</link>
      <guid>https://dev.to/thomaslanghorst/should-i-use-ai-or-give-the-task-to-a-junior-developer-3p4g</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Last week, I had a moment where GitHub Copilot felt like a more rational choice than delegating work to a junior developer. I am slightly embarrassed to admit it, yet I still feel like it was the right call. But why exactly is that?&lt;/p&gt;

&lt;p&gt;My task was to refactor a fairly complex API endpoint. The difficult part wasn't the implementation itself, but rather understanding the interactions between all involved systems and breaking down the work into manageable steps. After a few hours of anlysis, I had created a farily straightforward step-by-step implementation plan.&lt;/p&gt;

&lt;p&gt;Seconds later, I caught myself asking: "Do I give the implementation work to the junior developer, or do I give it to Copilot?" I chose Copilot. And while it felt like the more efficient choice, it kept bothering me afterwards.&lt;/p&gt;

&lt;p&gt;A few years ago, many of these implementation tasks would have gone straight to junior developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding CRUD endpoints&lt;/li&gt;
&lt;li&gt;Generating unit tests&lt;/li&gt;
&lt;li&gt;Refactoring straightforward code&lt;/li&gt;
&lt;li&gt;Debugging simple errors&lt;/li&gt;
&lt;li&gt;Documenting APIs or services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today, many senior engineers delegate these tasks to GitHub Copilot. And honestly, in many cases that actually IS the more efficient choice. But it raises a deeper question: If AI is increasingly becoming better at execution-heavy development tasks, what exactly are junior developers supposed to learn from?&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI Coding Tools Already Outperform Traditional Delegation
&lt;/h2&gt;

&lt;p&gt;Before we dig into this particular question, let's first look at what AI currently excels at.&lt;/p&gt;

&lt;p&gt;When it comes to software development, modern AI coding tools like GitHub Copilot are extremely good at certain types of work. In particular, they excel at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pattern recognition&lt;/li&gt;
&lt;li&gt;Syntax generation&lt;/li&gt;
&lt;li&gt;Boilerplate production&lt;/li&gt;
&lt;li&gt;Code transformation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially true if requirements are clear, ambiguity is low and correctness is easy to verify.&lt;/p&gt;

&lt;p&gt;What all of those tasks have in common is that they primarily focus on execution and require relatively little organizational context or domain knowledge. When dealing with implementation responsibilities, AI tools like GitHub Copilot have several structural advantages over junior developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They are faster&lt;/li&gt;
&lt;li&gt;Have zero onboarding cost&lt;/li&gt;
&lt;li&gt;Work instantly&lt;/li&gt;
&lt;li&gt;Scale cheaply&lt;/li&gt;
&lt;li&gt;Handle repetitive work effectively&lt;/li&gt;
&lt;li&gt;Reduce human errors to zero&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For senior engineers, this immediately translates into less delegation overhead, fewer interruptions, shorter review cycles, and ultimately faster delivery. In other words: AI significantly increases developer productivity for certain categories of implementation tasks.&lt;/p&gt;

&lt;p&gt;And that raises an uncomfortable question: If AI is already better at execution-heavy development tasks, why not give every task to AI? That's why many, especially junior developers, are afraid to get replaced by AI coding tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Task Purpose Matters More Than the AI vs. Junior Developer Decision
&lt;/h2&gt;

&lt;p&gt;The problem with the "AI vs. junior developer" question is that it assumes all software development tasks are the same. In reality though, they are not.&lt;/p&gt;

&lt;p&gt;Over the years, while working as a software engineer, mentoring junior developers, and leading whole projects, I’ve learned that most engineering tasks fall into three broad categories:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Tasks that require ownership
&lt;/h3&gt;

&lt;p&gt;The first category of tasks is tasks that require someone to take long-term responsibility for the system and its architecture.&lt;/p&gt;

&lt;p&gt;Examples are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designing system architecture&lt;/li&gt;
&lt;li&gt;Making security-critical decisions&lt;/li&gt;
&lt;li&gt;Handling production incidents&lt;/li&gt;
&lt;li&gt;Evaluating technical tradeoffs&lt;/li&gt;
&lt;li&gt;Maintaining long-term system consistency&lt;/li&gt;
&lt;li&gt;Coordinating cross-team integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tasks usually require a deep understanding of the system, architectural judgement, and a solid foundation of the business context.&lt;/p&gt;

&lt;p&gt;People working on them often need to evaluate tradeoffs, make long-term technical decisions with impactful consequences and coordinate requirements and decisions across multiple systems and teams.&lt;/p&gt;

&lt;p&gt;In other words, these tasks come with real ownership and responsibility. That is exactly why they cannot simply be delegated to an AI, or handled independently by junior developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Tasks that enable fast software delivery
&lt;/h3&gt;

&lt;p&gt;We've already touched on these tasks earlier, but let's make the category more explicit.&lt;/p&gt;

&lt;p&gt;First, let's go over the examples again:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating repetitive CRUD endpoints&lt;/li&gt;
&lt;li&gt;Writing straightforward unit tests&lt;/li&gt;
&lt;li&gt;Transforming data between APIs&lt;/li&gt;
&lt;li&gt;Scaffolding new services/modules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my experience, tasks that enable fast delivery of software usually involve clear requirements, repetitive implementation patterns, low ambiguity and are easy to verify.&lt;/p&gt;

&lt;p&gt;People working on them typically need to follow well established patterns to translate well-understood requirements into working code effectively and quickly.&lt;/p&gt;

&lt;p&gt;These are exactly the kind of tasks where AI coding assistants like GitHub Copilot already outperform developers writing code on their own in terms of speed and efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tasks that help people grow
&lt;/h3&gt;

&lt;p&gt;This brings us to the third category: tasks that are intentionally delegated as learning opportunities.&lt;/p&gt;

&lt;p&gt;Examples are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementing a small feature end-to-end&lt;/li&gt;
&lt;li&gt;Debugging a non-critical bug&lt;/li&gt;
&lt;li&gt;Refactoring legacy code to learn architecture&lt;/li&gt;
&lt;li&gt;Writing tests for unfamiliar business logic&lt;/li&gt;
&lt;li&gt;Participating in code reviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tasks usually involve low levels of complexity, rudimentary domain knowledge, touch only non-critical code, and leave room for exploration.&lt;/p&gt;

&lt;p&gt;People working on these tasks typically need mentorship, fast feedback loops, and enough time to not only understand the problem, but also why the solution is built that.&lt;/p&gt;

&lt;p&gt;In the age of AI, tasks that are not primarily focused on speed or efficiency become even more important. Future senior developers still need opportunities to grow through real-world experience and take on more responsibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Junior Developers Still Matter
&lt;/h2&gt;

&lt;p&gt;Up until this point, we've looked at the problem from a productivity perspective, focusing on the task-level. But the problem becomes even more visible once we start thinking on an organizational-level, where software engineering teams must make strategic choices about AI adoption.&lt;/p&gt;

&lt;h3&gt;
  
  
  Growing Future Senior Engineers
&lt;/h3&gt;

&lt;p&gt;In any engineering organization, junior developers should not be seen only as current contributors, but as future senior engineers. Therefore, it's the responsibility of software engineering teams to enable growth and help them learn.&lt;/p&gt;

&lt;p&gt;To accomplish that, organizations need to create learning opportunities. From my personal experience working with many junior developers, I've found that they learn best and gradually become mid-level and senior developers by working on real-world problems and taking on increasing responsibility and accountability.&lt;/p&gt;

&lt;p&gt;Teams therefore need to support them by allowing juniors to make mistakes and by providing constructive feedback in short feedback loops.&lt;/p&gt;

&lt;p&gt;Without those opportunities, teams sacrifice long-term engineering capacity for short-term productivity.&lt;/p&gt;

&lt;h3&gt;
  
  
  System and Domain Knowledge Compounds
&lt;/h3&gt;

&lt;p&gt;Another argument why organizations need to create learning opportunities for junior developers is that, over time, developers accumulate something that is difficult to document and impossible to generate instantly: system knowledge.&lt;/p&gt;

&lt;p&gt;Developers learn why systems were designed a certain way, what tradeoffs were made, how systems behave under production-like conditions, which parts of the system are fragile, and where complexity exists in the codebase.&lt;/p&gt;

&lt;p&gt;Besides a deeper technical understanding, developers also accumulate knowledge about the business domain itself.&lt;/p&gt;

&lt;p&gt;They learn why certain features matter more than others, which edge cases are business-critical, how real-world users interact with the system, and where technical decisions directly affect business outcomes and vice versa.&lt;/p&gt;

&lt;p&gt;This technical and domain expertise is built through years of working on real-world problems, participating in domain discussions, and solving real production incidents. Without gradually exposing junior developers to those experiences, organizations slowly but surely lose the capability to deeply understand their own systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Software Needs Long-Term Maintainers
&lt;/h3&gt;

&lt;p&gt;But understanding a system is only one part of the equation. Somebody also needs to maintain it long-term. In practice, systems need to be maintained, debugged, extended, migrated, and sometimes even completely rewritten later.&lt;/p&gt;

&lt;p&gt;That’s why I think organizations need more people who can just generate code fast, they also need people who continuously maintain the system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Investing in Future Engineering Capability
&lt;/h3&gt;

&lt;p&gt;The goal for every organization should therefore not be to replace junior developers with AI tools like GitHub Copilot, but rather to strategically use them alongside human developers. Sustainable software development still depends on continuously developing juniors into engineers who understand, maintain, and eventually take ownership of complex systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Better Delegation Question
&lt;/h2&gt;

&lt;p&gt;In software development teams, the rise of AI coding assistants like Copilot has made delegation decisions more complex. Tasks are often evaluated mostly based on delivery speed, but sometimes the biggest long-term benefit is not the finished feature—it's the knowledge the person gained while implementing it. A junior developer working on a feature may gain architectural understanding, domain knowledge, and practical experience that become valuable far beyond the task itself.&lt;/p&gt;

&lt;p&gt;Every delegation decision also shapes the capabilities of the engineering team, and even the organization itself. Teams that only optimize for short-term efficiency may ship software faster today, but they sacrifice the ability to develop future maintainers, domain experts, and system owners.&lt;/p&gt;

&lt;p&gt;I believe this ultimately changes the question that modern software engineering teams should be asking. Instead of rushing into deciding whether a task should go to AI or junior developers, engineering organizations should first ask what the task is actually meant to achieve.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is the task about speed -&amp;gt; give it to AI&lt;br&gt;
Is the task about teaching -&amp;gt; give it to a junior developer&lt;br&gt;
Is the task about ownership -&amp;gt; give it to a senior and include a junior developer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;So, should you give the task to AI or to a junior developer?&lt;/p&gt;

&lt;p&gt;In my opinion, the answer depends less on the complexity of the task itself and more on what the task is actually meant to achieve.&lt;/p&gt;

&lt;p&gt;The future of software engineering will not belong to teams that replace developers with AI, but to teams that understand how to combine speed, learning, and ownership effectively.&lt;/p&gt;

&lt;p&gt;AI may change how software gets written, but organizations will still succeed or fail based on how well they develop people. The real competitive advantage in the age of AI will not be to generate code faster, but to build teams that continuously grow people who can understand, maintain and eventually own complex systems. And that is exactly why junior developers still matter.&lt;/p&gt;

&lt;p&gt;For more articles like that visit &lt;a href="https://thomaslanghorst.com/blog/" rel="noopener noreferrer"&gt;my blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Should you learn Go in 2023?</title>
      <dc:creator>thomaslanghorst</dc:creator>
      <pubDate>Mon, 26 Dec 2022 04:45:42 +0000</pubDate>
      <link>https://dev.to/thomaslanghorst/should-you-learn-go-in-2023-1hgl</link>
      <guid>https://dev.to/thomaslanghorst/should-you-learn-go-in-2023-1hgl</guid>
      <description>&lt;p&gt;In this article, I will be answering the question: to Go, or not to Go, with Go, in 2023? (sorry for the pun). If you rather want to watch the YouTube video, you can find it &lt;a href="https://www.youtube.com/watch?v=PaJQjkOVf34&amp;amp;ab_channel=ThomasLanghorst" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Now without further ado, let’s find out!&lt;/p&gt;

&lt;h2&gt;
  
  
  A little History
&lt;/h2&gt;

&lt;p&gt;For those of you who don’t know what Go or Golang is. Here a little history. Back in 2007, Go was first designed by three google employees. As Rob Pike, one of the three authors of Go, wrote in an &lt;a href="https://go.dev/talks/2012/splash.article" rel="noopener noreferrer"&gt;article&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The goals of the Go project were to eliminate the slowness and clumsiness of software development at Google, and thereby to make the process more productive and scalable.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Working with a huge backend codebase, mostly written in C++, Java and Python, the three engineers wanted to build a new language to help tackle the issues they had while working with the code at google, while also maintaining its effectiveness. Rob Pike said: &lt;em&gt;“In short, development at Google is big, can be slow, and is often clumsy. But it &lt;strong&gt;is&lt;/strong&gt; effective.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So they wanted to take the speed of C++, the strict syntax of C and paired it with pythons simplicity and useful features of Java. And what came out was this new language called Go. The combination of these makes Go one of the most powerful and effective languages for large-scale codebases, while also being simple and easy to maintain. Later in 2009, Go was open-sourced and had its first major version 1.0 in march 2012.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros of Go
&lt;/h2&gt;

&lt;p&gt;But what exactly is Go, and what are its main benefits? Go is an open-source, compiled, strongly and statically typed programming language. It was built to be readable, simple and efficient, while also being high-performing.&lt;/p&gt;

&lt;p&gt;I will not go into all the pros and cons of Go in this article (you still have things to do today, right?). Instead, I will keep it short and focus on the three main benefits and drawbacks. If you want to see a full list, you can go ahead and watch my &lt;a href="https://www.youtube.com/watch?v=PaJQjkOVf34&amp;amp;ab_channel=ThomasLanghorst" rel="noopener noreferrer"&gt;video on YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Concurrency&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Go has an incredible concurrency support, which makes writing concurrent code as easy as it gets. The way how easy Go handles concurrency is probably one of the main reasons why people pick this language over others.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Toolchain&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Go has a fantastic toolchain. Running, building, formatting, profiling, installing, testing, … all these, any many more commands are part of the integral Go toolchain. So there is no need for external tools.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Simplicity&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
One of the main reasons why people use Go is: Go is an extremely simple programming language. Without much syntactic sugar, Go forces explicit code. Which makes this language easy to read, easy to maintain and easy to learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cons of Go
&lt;/h2&gt;

&lt;p&gt;But it’s not all rainbows and unicorns in Go land. Go also has its drawbacks. For example:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Verbosity&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Despite its simplicity, Go sometimes can be too verbose and too explicit. Functions ranging over several 100 lines of code are no exception. And don’t get me started on the gazillion &lt;code&gt;if err != nil&lt;/code&gt; checks. Writing all this code can be time consuming and a drawback for teams rushing against strict deadlines.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;No strict coding guidelines&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Although there are some best practices and generally accepted rules, Go does not strictly tell you how it wants things to be coded. This lack of clear and strict structure leaves room for undisciplined coding and inconsistencies. Which can become an issue in larger projects.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Still feels young&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Even though Go is more than 10 years old, it still is a seemingly young programming language. Sometimes, even big companies or projects are missing Go SDKs or clients for their products. So if you want to use them, you need to either rely on open-source projects or write them yourself.&lt;/p&gt;

&lt;p&gt;These are the pros and cons of the Go programming language. But what is Go primarily used for?&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary use-cases of Go
&lt;/h2&gt;

&lt;p&gt;According to the latest &lt;a href="https://go.dev/blog/survey2021-results" rel="noopener noreferrer"&gt;Go developer survey&lt;/a&gt; conducted in 2021, Go is used in a variety of areas. Such as Technology, FinancialServices as well as Media/Gaming, to name the top three. Of those people who write Go code, almost 50% write backend API or RPC services. Leaving the rest far behind with data processing, web services and CLI tools with roughly 10% each. So if you work in one of these areas, knowing Go can be a huge benefit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Job opportunities for Go developers
&lt;/h2&gt;

&lt;p&gt;Now let’s have a look a the jobs for Go developers. The &lt;a href="https://go.dev/" rel="noopener noreferrer"&gt;Go homepage&lt;/a&gt; gives us a list of many big tech companies, who are using Go. Among them google (obviously), but also PayPal, Meta, Netflix, Uber, and many many more. Go must be doing something right, if big tech companies are relying so heavily on it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hired.com/2022-state-of-software-engineers/" rel="noopener noreferrer"&gt;According to Hired&lt;/a&gt;, Go is the most in demand skill that companies are searching for in software engineers. The second year in a row by the way. So, the need for Go developers is definitely there. But how about the salaries?&lt;/p&gt;

&lt;h2&gt;
  
  
  Salaries for Go developers
&lt;/h2&gt;

&lt;p&gt;If you have a look at the annual &lt;a href="https://survey.stackoverflow.co/2022/" rel="noopener noreferrer"&gt;stack overflow survey from 2022&lt;/a&gt;, you can see that Go is among the top 10 of top paying programming languages. With a median of almost $90k USD, being a Go developer gets paid better compared to more popular languages like python ($71k), C++ ($68k) or Javascript ($66k).&lt;/p&gt;

&lt;p&gt;If you have a look at the same tables from the surveys of years &lt;a href="https://insights.stackoverflow.com/survey/2021#technology-top-paying-technologies" rel="noopener noreferrer"&gt;2021&lt;/a&gt;, and &lt;a href="https://insights.stackoverflow.com/survey/2020#technology-what-languages-are-associated-with-the-highest-salaries-worldwide-global" rel="noopener noreferrer"&gt;2020&lt;/a&gt;, you can see that salaries for Go developers have increased over the last few years. From $74k USD in 2020, to $76k in 2021, and now being at almost $90k USD in 2022, the average salary has increased tremendously. Which is also very positive for the Go language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;So, to answer the question: should you learn Go in 2023? If you are looking for a new programming language to pick up, or a new language to increase your chances on the job market, in my opinion, Go is a fantastic choice!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>programming</category>
      <category>rxjs</category>
    </item>
  </channel>
</rss>
