메뉴
HN
Hacker News 18일 전

시니어 개발자가 자신의 전문성을 제대로 전달하지 못하는 이유

IMP
8/10
핵심 요약

AI 에이전트가 개발자를 완전히 대체할 것이라는 주장은 소프트웨어 개발의 본질인 '복잡성'을 관리하는 시니어 개발자의 역할을 간과한 것입니다. 비즈니스의 '불확실성'을 줄이기 위해 빠른 속도를 추구하는 마케팅/경영진과 달리, 시니어 개발자는 시스템의 '안정성'을 해치는 불필요한 코드와 복잡성을 추가하는 것을 극도로 경계합니다. 따라서 AI가 코드를 빠르게 찍어내는 능력은 있지만, 복잡성을 통제하는 시니어 개발자의 근본적인 역할을 대체할 수 없다는 직관이 맞습니다.

번역된 본문

다음 문장에 대해 어떻게 생각하시나요? "AI 에이전트가 소프트웨어 개발의 미래입니다. 더 이상 비즈니스의 진행을 늦추는 개발자는 필요 없을 겁니다." 만약 당신이 시니어 개발자이고 이 말이 사실이라고 생각한다면, 나는 당신의 전문성에 약간 의구심을 품을 것입니다(이유를 설명하겠습니다; 일부러 비난하려는 게 아닙니다). 하지만 당신이 시니어 개발자가 아니고 이 말이 사실이라고 생각한다면, 당신은 아마 맞을 것입니다. 네? 무슨 상황일까요?

카피라이팅의 본질은 메시지를 청중에 맞추는 것입니다. 따라서 카피라이터인 제 눈에 지금 벌어지고 있는 일은 동일한 메시지가 두 가지 다른 청중에게 각각 다른 의미로 다가오고 있다는 것입니다. 만약 당신이 시니어 개발자이고, 에이전트, 스킬(Skills), 모델(Models) 등 사람들을 열광하게 만드는 모든 것들을 직접 경험해 보았음에도 불구하고, 사람들이 당신의 직업이 도태되었다고 선언하는 방식에 여전히 '뭔가 어긋났다'는 직관이 든다면, 이 글에서는 (훌륭한 카피라이터가 그러하듯) 당신의 그 직관을 언어화해 보려고 합니다.

잠깐만요! 많은 노련하고 유명한 개발자들 역시 개발자의 종말을 선언하고 있습니다. 어떻게 된 일일까요? 누구의 직관이 맞는 걸까요? 그리고 이러한 엇갈림을 만드는 원인은 무엇일까요?

제가 팀에 합류하면 두 가지 유형의 시니어 개발자를 만나게 됩니다. 첫 번째 유형은 이런 말을 합니다. "이 새로운 도구를 찾았는데 꽤 멋지네요 ..." "우리와 전혀 다른 어떤 회사는 이런 식으로 일하니까, 우리도 ..." "이봐요, 해커뉴스(HackerNews)에 이게 모범 사례라고 나와있으니, 우리도 아마 ..."

저는 이런 부류의 시니어 개발자를 좋아하지 않습니다. 약간의 자기 보호본능이 있고, 업계에서 꽤 오래 일했으며, 아마 사람들과 잘 지낼 것입니다. 하지만 저와는 파장이 맞지 않습니다.

그리고 또 이런 부류의 시니어 개발자도 있습니다. "우리가 정말로 그것이 필요한가요?" "이것을 하지 않으면 어떻게 되나요?" "지금은 그냥 있는 걸로 충분하지 않을까요? 나중에 더 중요해지면 그때 다시 고민해보는 건 어떨까요?"

아, 이거야말로 제가 원하는 시니어 개발자입니다. 피하고, 줄이고, 재활용하는 사람. 그들은 최대한 개발(코딩)을 피하고 싶어 합니다. 왜일까요? 그들은 전문적인 소프트웨어 개발에서 단 하나의 괴물을 사냥하기 때문입니다. 바로 '복잡성(Complexity)'입니다.

특수한 예외 상황(Special cases), if 조건문, 새로운 데이터베이스 테이블, 새로운 컴포넌트. 이 모든 것들은 정말 끔찍합니다(Yuck yucks). 시니어 개발자는 이런 요소들을 최대한 줄이고 싶어 하며, 절대적으로 더 많은 코드를 추가해야만 하는 상황인지 확인하느라 많은 시간을 할애합니다. 시스템에 무언가를 추가하는 것은 복잡성을 높일 위험을 감수하는 것이기 때문입니다.

네, 네, 물론 이는 단순화한 것입니다. 해결되지 않은 문제를 해결하고 새롭고 창의적인 디자인을 찾는 데 탁월한 시니어 개발자들도 있습니다. 하지만 결국, 작동 중인 시스템에 책임을 지게 된다면 당신도 복잡성을 두려워하게 됩니다.

자, 그 이유는 무엇일까요? 복잡성의 단점은 무엇일까요? 그리고 왜 다른 사람들은 이를 이해하지 못할까요?

우리는 비즈니스가 무엇인지 두 가지 루프(Loop)를 사용해 단순화해 볼 것입니다. 첫 번째 루프입니다. 마케터, 영업사원, 프로덕트 매니저, CEO 등은 모두 이곳에 살고 있습니다. 이 루프의 주요 목표는 시도하고 배우는 것입니다. 기업은 제품을 시장에 내놓고, 그것이 가치 있는 것인지 피드백을 받고 싶어 합니다. 이 루프에 있는 사람들에게 있어 괴물은 '불확실성(Uncertainty)'입니다.

불확실성은 잔인합니다. 왜냐하면 어떤 전략도 반드시 성공한다고 보장할 수 없기 때문입니다. (마케팅/영업에 대한 보상, 창업자를 위한 급여, 프로덕트 매니저를 위한 데이터 등의) '시간'과 결합되면, 마감일 전에 불확실성을 줄일 수 있는 유일한 방법은 최대한 빨리 시장에 제품을 출시하는 것이라고 느껴집니다. 시장에 내놓는 것이 많을수록 시장으로부터 더 많은 피드백을 받을 수 있고, 그러면 (잠재적으로) 불확실성을 더 많이 줄일 수 있습니다. 모든 회령이 이 루프에서 시작하며, 이 루프는 순수하고 날것 그대로의 '속도(Speed)'에 관한 것입니다.

하지만 기업이 고객을 얻으면 어떻게 될까요? 아, 자, 여기에 우리의 두 번째 루프가 있습니다. 서비스에 대한 대가를 지불하는 사람들. 많은 시니어 개발자들이 바로 이 루프에서 자신을 발견합니다. 이 루프의 주요 목표는 서비스의 지속과 보장입니다. 시스템이 계속 작동하게 유지하고, 이해 가능하게 유지하고, 디버깅(Debugging) 가능하게 유지하고, 고칠 수 있게 유지하고, 가르칠 수 있게 유지하며, 안정적으로 유지하는 것입니다. 시니어 개발자들은 안정성을 걱정합니다...

원문 보기
원문 보기 (영어)
What do you feel about the following sentence: “AI agents are the future of software development. We won’t need developers anymore to slow down the progress of a business.” If you’re a senior developer and you think this is true, I’m somewhat suspicious of your expertise (I’ll explain why; I’m not needlessly antagonistic). But if you’re not a senior developer and you think this is true, I think you’re probably right. Huh? What’s going on here? Copywriting is, in its essence, about matching a message to an audience. And so, to me, a copywriter, what’s happening here is that the same message is meaning two different things to two different audiences. If you’re a senior developer, and if you’ve played with the agents and skills and models and all the other things that are blowing people’s minds, and if your intuition is still telling you something is off in how people are proclaiming your job obsolete, then here, in this post, I’m going to try and put words to your intuition (as a good copywriter does). But wait a minute! Many seasoned and famous developers are also proclaiming the death of the developer. How’s that? Whose intuition is right? And what’s causing this split? When I join a team there are two kinds of senior developers I meet. The first kind says things like: “I found this new tool and it’s pretty cool ...” “This company <company totally unlike the one we’re in> does things this way, so …” “Here, look at this HackerNews post that says this is best practice, we should probably …” I don’t like this kind of senior developer. A little self-protective, lots of time spent in the industry, probably a good people person. But not my wavelength. Then there’s also this kind of senior developer: “Do we really need that?” “What happens if we don’t do this?” “Can we make do for now? Maybe come back to this later when it becomes more important?” Ah, baby, this is my senior developer. The avoider, the reducer, the recycler. They want to avoid development as much as they can. Why? Because they hunt a singular monster in professional software development: complexity. Special cases, if conditions, new database tables, new components. All yuck yucks. The senior developer wants as little of this as possible, spending lots of time making sure they absolutely need to add more code. Because adding to a system is risking more complexity. Yes, yes, of course this is simplistic. There are senior developers who excel at taking on unsolved problems and finding new creative designs. But eventually, if you’re taking responsibility for a working system, you’re scared of complexity. Now, why is that? What’s the downside of complexity? And why doesn’t anybody else get it? We’re going to be simplifying what a business is using two loops. This is the first loop; marketers, salespeople, product managers, the CEO, they all live here: The main goal of this loop is to try and learn. The business wants to take things to market and then get feedback on whether they’ve got something valuable or not. The monster, for people in this loop, is uncertainty. And uncertainty is cruel because no strategy is guaranteed to work. When combined with time (compensation for marketing/sales, or payroll for founders, or data for product managers) it can feel like taking things to market as fast as possible is the only way to reduce uncertainty before a deadline. The more you can take to the market, the more you can get feedback from it, the more you can (potentially) reduce uncertainty. This loop, and all companies start with this loop, is about pure, raw, speed. But what happens when a business gets customers? Ah, now, here’s our second loop. People paying for a service. This loop is where a lot of senior developers find themselves in. The main goal in this loop is the continuation and guarantee of service. Keep things working, keep things understandable, keep things debuggable, keep things fixable, keep things teachable, keep things stable. Senior developers worry about stability because they take responsibility for the business to continue serving customers. And what risks all of that? Complexity. It makes a system less understandable, less debuggable, less fixable, less teachable, and ultimately, less stable. Rising complexity = lowering stability = senior developer failing responsibility = bad bad not nice, payments interrupted, everybody sad. So, if the first loop’s goal was uncertainty reduction, the second loop’s goal is complexity management. But why does this lead to communication failure? Because once you have customers, both loops are running simultaneously. A business needs to both explore possibilities and serve customers at the same time. Ok, now you might be able to spot my answer to the question in the title of this post. Depending on which loop you spend your time on, your problem is framed differently (which is why I think developers get split in their opinions on AI; some work more on one loop than the other) This was the story of the people in the first loop: But this was the story of the senior developer in the second loop: The stories don’t match. The more requests to build and add to the system the senior developer gets, the more the senior developer wants to respond with “uhhh, no complexity … maintenance costs … understandability … speed of continuing development … productivity over time …”. But that does nothing to address the rest of the business’s need for reducing uncertainty. The copywriter’s diagnosis: You can’t explain away someone else’s problem using your own problems. And the copywriter’s prescription: You need to describe your solution as a solution to their problem as well. Senior developer’s fail to communicate because they express their problems in terms of complexity management when they should be expressing their solutions in terms of uncertainty reduction. By acknowledging that what the rest of the company is seeking for is uncertainty reduction, the senior developer can use their expertise to help. And what’s the most useful skill a senior developer has? The reluctance to build what’s not necessary; the ability to spot an opportunity to re-use something already built. Need to collect survey data? Google forms, baby. Need to build a whole new feature to test it? Have you tried putting a button in the existing UI and seeing if people click it? Need new analytics service? What’s the most important decision we need analytics for? Can we start with one decision, one chart, one metric? You want to bake me a whole birthday cake? Just put a candle on my sandwich. This is what senior developers learn to do: they learn how to give people what they want by being resourceful with existing software. But how do you communicate this without sending people whole essays? Copywriters love boiling down multiple signals into singular phrases. And so, here’s the magical phrase every senior developer must learn: ‘Can we try something quicker?’ The use of ‘quicker’ acknowledges what they’re really looking for; ‘something’ implies another way of achieving it; ‘try’ implies imperfection, but also the possibility of it being good enough. It perfectly cuts down to the requirement of the rest of the company, speed to reduce uncertainty, while allowing the senior developer to exercise their expertise: reduce, re-use, and if life is truly a blessing, avoid. That’s it. That’s my answer to the title of the post: senior developers talk in terms of complexity when everyone else is worried about uncertainty. But! Big but! AI now seems to make all of this pointless, doesn’t it? Why reduce? Why re-use? Why avoid? The AI can build so much in so little time. Ah, well, it can’t yet do the one thing senior developers still do. Take responsibility. Senior developers care a lot about understanding the system because understanding allows fixing it when things go wrong. It allows extending it intelligently when the system needs to grow. It allows, more than anything, the continued, reliable servic