메뉴
HN
Hacker News • 44일 전

AI가 소프트웨어 엔지니어링의 중산층을 없애고 있다

IMP
8/10
핵심 요약

AI 코딩 도구의 도입으로 개발 속도는 비약적으로 빨라졌지만, 개발자들은 기술적 부채를 방치한 채 AI가 작성한 코드를 이해하지 못하는 상황에 직면하게 되었습니다. 시니어 엔지니어조차 방대한 양의 PR(PR)과 복잡해진 시스템을 통제하지 못하고 문제 해결을 전적으로 AI에 의존하게 되면서 프로젝트가 통제 불능 상태에 빠지게 되는 심각한 문제를 다루고 있습니다.

번역된 본문

2020년입니다. 당신은 팀의 가장 시니어 멤버이며, 코드 품질과 아키텍처를 총괄하고 있습니다. 당신은 훌륭한 엔지니어링 관행을 구축했고, 경력이 적은 동료들의 PR(Pull Request)을 꼼꼼하게 리뷰하며 건강한 코드베이스를 유지하기 위해 열심히 일하고 있습니다. 그러다 어느 날 휴가를 떠납니다. 돌아와 보니 코드베이스는 엉망이 되어 있습니다. 모두가 서로의 PR을 제대로 검토하지도 않고 병합(Merge)해 버렸고, 누군가는 구현하기 편하다는 이유로 데이터베이스에 새 테이블을 마구 추가해 비정규화(denormalise)를 시켰으며, 정당한 필요성 증명도 없이 서버리스(serverless)나 카프카(Kafka)를 기술 스택에 도입했습니다. 괜찮습니다. 당신이 고칠 수 있습니다.

시간은 2026년으로 흐릅니다. 당신은 휴가를 가지 않았습니다. 그저 평범한 월요일 아침입니다. 맛있는 커피를 내리고, 컴퓨터를 켜니 검토해야 할 7개의 PR이 당신을 기다리고 있습니다. 첫 번째 PR을 열어봅니다: 무려 +24,506줄, -3,938줄의 변경 사항과 함께, AI가 생성한 기능 설명이 덧붙여져 있습니다. 어쩌다 보니 팀원들은 금요일 이후 당신이 몇 주간 휴가를 갔을 때보다 더 많은 변경 사항을 만들어 냈습니다.

AI가 속도 제한을 풀어버렸습니다. AI는 엔지니어링 문화가 부실한 프로젝트를 훨씬 더 빠르게 실패하게 만듭니다. 예전에는 사람들이 모여 앉아 어떻게 구현할지 논의하곤 했습니다. 이제는 그저 에이전트에게 몇 시간 동안 프롬프트를 던지고 PR을 열어두면 그만입니다. 이런 업무 방식의 가장 비극적인 점은, 문외한의 눈에는 '작동하는 것처럼' 보인다는 것입니다. 브랜치를 pull(가져와)해서 테스트해 보면 아마 어느 정도는 작동하는 결과물을 얻을 수 있을 것입니다. 그래서 사람들은 어떻게 합니까? 계속 밀어붙이는 겁니다. 끊임없이 반복하죠. 결국 프로젝트는 아무도 작동 원리를 모르는 단계에 이르게 됩니다. 마치 신용카드로 새로운 럭셔리 카드락스를 사는 것과 같습니다. 당신은 빚을 보지 못합니다. 그저 멋져 보이는 자동차만 볼 뿐입니다.

하지만 결국 사용자들이 이상한 버그를 신고하기 시작합니다. 이것은 팀이 버그를 고치려고 시도한 네 번째 차례입니다. 아니... 고치려고 시도했다기보다는, AI에게 고쳐달라고 부탁한 거죠. 불행히도, 이 문제는 Fable(코딩 AI)조차 알아내지 못하는 것 같습니다. 해당 기능을 작업했던 팀원에게 대화를 하러 갑니다.

"그래, 여기 데이터는 어디서 오는 거야?" "음... 사실 저도 잘 모르겠어요. 클로드(Claude)한테 물어봐야겠네요."

둘이 나란히 앉아 화면에 끝없이 펼쳐지는 텍스트의 벽을 바라봅니다. 두 사람 모두 그 내용이 사실인지 전혀 알 수 없지만 클로드는 매우 자신만만해 보입니다.

"울트라코드(ultracode) 모드 켜고, 제대로 작동할 때까지 다시 확인해 보라고 할까?"

시간이 꽤 걸릴 것 같습니다. 두 사람은 최근 X(옛 트위터)에서 벌어진 최신 가십거리에 대해 이야기하기 시작합니다. 마침내 답변이 돌아옵니다.

"이거 당신한테는 이해가 돼?" "잘 모르겠어." "이거 지난주에 네가 만든 거 아니야?" 침묵.

이 프로젝트는 너무나도 복잡해졌고, 수많은 계층과 서비스가 얽혀 있어서 팀에 있는 누구도 지금 무슨 일이 벌어지고 있는지 이해할 수 없습니다. 그래서 어떻게 합니까? 이것을 고치려면 막대한 작업량이 필요하기 때문에 경영진에게 이를 정당화조차 할 수 없습니다. 그리고 당신이 무엇을 생각하든, 어차피 몇 달 안에 다시 똑같은 상태가 될 것이 뻔합니다.

"그냥 클로드한테 고치라고 하자." "좋아. 모든 게 제대로 작동하는지 확인할 때까지 멈추지 않도록 루프랑 목표를 설정해서 돌릴게." "좋은 생각이야." "아, 근데 내 Fable 오늘 사용량을 다 써버렸네. 내일 돌려야겠다."

당신은 커피를 한 잔 더 따라 들고 자리로 돌아갑니다. 이제 검토할 PR이 13개나 남아 있습니다. 이해할 수 없는 코드가 보여서 코드를 작성한 사람에게 메시지를 보냅니다.

"여기서는 왜 이렇게 처리한 거야?"

동료가 링크 하나를 보내옵니다. 클로드와의 대화 창입니다. 클로드가 어떤 아키텍처를 자신만만하게 추천하고, 사과하고, 생각을 바꾸고, 동료가 다시 생각해 보라고 요구하는 등 총 15차례의 수정 과정이 난무한 대화 속 어딘가에, 이 코드에 대한 설계 결정 사항이 묻혀있는 것 같습니다.

"그래서 어느 부분을 읽어야 하는데?" "아마 다 읽어야 할걸."

이런 상황이 익숙하게 들리시나요? 내가 이 이야기를 할 때마다, 누군가는 결국 대규모 시스템을 완전히 이해하는 사람은 애초에 아무도 없었다고 말합니다. 맞는 말입니다. 모든 서비스와 모든 데이터베이스를 이해할 것으로 기대받지는 않았죠. 하지만 최소한 그것을 이해하고 당신에게 설명해 줄 누군가는 있었습니다. 이제 사람들은 LLM(대형 언어 모델)에게 묻습니다. 왜냐하면 그들이...

원문 보기
원문 보기 (영어)
It's 2020. You're the most senior person on your team, in charge of code quality and architecture. You've set up good engineering practices, you thoroughly review PRs from people who are less experienced than you and work hard to maintain a healthy codebase. Then at some point, you go on holiday. When you come back, the codebase is a mess. Everyone merged each other's PRs without really paying much attention, someone added a bunch of new tables to the database to denormalise it because it was easier and they added serverless or Kafka to the stack without any solid evidence that they needed either. It's okay. You can fix this. Fast forward to 2026. You haven't been on holiday. It's just a normal Monday morning. You make yourself a nice coffee, open your computer and find yourself with 7 PRs to review. You open the first one: +24506 -3938 lines, accompanied by some AI-generated description of what they're supposed to do. Somehow, your team has made more changes since Friday than they used to make while you were away for a few weeks. AI removed the speed limit AI makes projects with weak engineering culture fail much faster. There used to be a time when people sat down and talked about how they'd do something. Now they can just prompt an agent for a few hours and open a PR. The most tragic aspect of this way of working is that, to the untrained eye, it works. If you pull the branch and test it, you'll probably get something somewhat functional. So what do they do? They keep going. Again and again. Until the project reaches a point where no one knows how anything works. Just like someone buying a new luxury car on a credit card. You don't see the debt. You just see the car that looks great. But then users start to report a weird bug. It's the 4th time your team has been trying to fix it. I mean... asking AI to fix it. Unfortunately, it seems like not even Fable can figure it out. You go talk to the person who worked on this feature. "So where does the data come from?" "Hmm... actually I don't know. Let me ask Claude." You sit next to each other watching an endless wall of text appear on the screen. Neither of you has any idea whether any of it is true but Claude seems very confident. "Let's just turn on ultracode and ask it to double-check?" This one will take a while. You start talking about the latest drama on X. You finally get an answer back. "Does this make any sense to you?" "I'm not sure." "Didn't you build this like... last week?" Silence. This project has become so convoluted, with so many layers and services, that no one on your team could possibly start to understand what's going on. So, what do you do? Fixing it would require such a colossal amount of work that it would be impossible to even start justifying it to anyone in management. And what are you even thinking about? It would end up in the exact same state again in just a few months anyway. "Let's just ask Claude to fix it." "Okay. I'll create a loop and goal so it doesn't stop until it's checked that everything works." "Sounds good" "Actually, I ran out of Fable usage for today so I'll run it tomorrow" You grab another coffee and walk back to your computer. You now have 13 PRs left to review. You see something you don't quite understand, so you message the person who wrote it. "Why are we doing this here?" They send you a link. It's a Claude conversation. Somewhere in that conversation, buried between Claude confidently recommending one architecture, apologising, changing its mind, your coworker asking it to reconsider again and another 15 rounds of changes, is apparently the design decision behind this code. "Which part should I read?" "Probably all of it." Does this sound familiar? Whenever I talk about this, someone eventually tells me that nobody ever fully understood large systems anyway. It's true. You were never expected to understand every service and every database. But at least someone did and would explain it to you. Now they ask an LLM because they don't actually know themselves. You can't afford bad engineers anymore In every team, there are competent people who make the project possible. There are also people who essentially make it harder for everyone else. And now anyone can produce more code in a day than they used to in a year. In the story above, everyone is failing: The engineer opening a 25,000-line PR should have stopped the agent long before it got there. They should have understood what it was doing, broken the work into smaller pieces and questioned every new abstraction it introduced. The person reviewing it should have refused to review something that large instead of giving in. The person adding Kafka should have been able to explain exactly why it was needed. The person who built the feature should have been able to explain where the data came from without sending a link to a Claude conversation. But what's the problem then? Just use AI to fix it. Well, it's not that easy... Before anyone jumps on this, none of this means technical debt is always bad. The important part is that you know it's a shortcut. Anyway, reverting a bad decision is hard. Very hard. For example, how long would it take an LLM to add a bunch of tables and columns to the database? 10 minutes? But once you start storing data there, you can't just remove them. You have to come up with a migration plan, make sure you don't disrupt the system because people are paying to use this every day. You have to think about what you'll do if the migration fails. Make sure you don't end up with orphaned foreign keys. It's just so much harder to fix. Even with the best model you can get. And while you're fixing it, more PRs keep coming in. More code, more abstractions, more decisions. A person can generate 20,000 lines of code in an afternoon, but you still have to sit there and understand what those lines actually do. By the time you've untangled one bad decision, five more have been merged. The new AI economy Of course, bad engineers were always a liability. It has been like this for decades, well before OpenAI or Anthropic existed. Bad decisions compounded, unnecessary complexity accumulated and teams ended up maintaining systems nobody really understood. The difference is that there used to be a limit to how fast you could do it. Today, implementation is cheap. You are paid to make good decisions. To build software that will scale while managing complexity. Ask yourself why companies are paying six-figure salaries for engineers in London or San Francisco in the first place. If all they needed was someone who could turn a specification into working code, why were they paying that much when they could already get it done cheaply elsewhere? Why are the tech companies claiming that "software is solved" still paying top salaries to attract the best people they can? My bet is that AI pushes salaries further apart. To be employable, there's a bar you have to clear and that bar is whatever the current best model du jour can do. Good engineers have become more valuable because AI lets them move much faster. They don't need as many people around them just to do the implementation work anymore. At the same time, bad engineers have become much more expensive to hire. I wrote about this before when I said the vibe coder career path is doomed . You need to contribute beyond what everyone already gets by giving an agent a prompt. If you lack the judgment required to evaluate the LLM's recommendation, asking for more judgment doesn't solve the problem. At some point, someone still has to know what is going on. And that's the most valuable person on the team. The people who don't will become much cheaper to hire or get replaced entirely while the money gets funnelled towards an increasingly smaller number of people who can actually be trusted. I don't think this is going to be limited to software engineering either. I believe the same thing is going to happen across most knowledge work. AI will make the best peopl