소프트웨어의 역사는 기계에게 일을 넘겨온 역사다. 우리는 카드에 명령어를 천공하는 것으로 시작했고, 이어서 컴파일러가 읽기 쉬운 언어를 기계어로 바꾸도록 했으며, 그다음에는 가상 머신이 우리가 어떤 물리적 컴퓨터 위에 있는지 잊게 했고, 마침내 클라우드가 기계라는 존재 자체를 완전히 잊게 했다. 각 단계는 당시에는 통제권을 포기하는 것처럼 보였다. 그러나 사실 각 단계는 한 층 위로 올라가는 것이었다 — 수고의 한 층을 레버리지의 한 층과 맞바꾼 것이다. 에이전틱 개발은 이 오랜 흐름의 다음 단계이며, 그 대부분보다 더 큰 걸음이다.
추상화는 언제나 그 이야기였다
이전의 어떤 전환도 프로그래머를 쓸모없게 만들지 않았다. 그것들이 바꾼 것은 프로그래머가 하루를 무엇에 쓰는가였다. 컴파일러는 프로그래밍을 끝낸 것이 아니라 손으로 어셈블리를 작성하는 일을 끝냈다. 클라우드는 운영을 끝낸 것이 아니라 서버를 랙에 설치하는 일을 끝냈다. 기계가 아래층을 흡수할 때마다 인간은 위층으로 옮겨갔다 — 메모리 관리에서 로직 관리로, 서버 관리에서 시스템 관리로.
이 패턴은 너무나 일관적이어서 거의 하나의 법칙에 가깝다. 자동화하기 저렴해진 것은 더 이상 가치가 있는 곳이 아니게 되고, 가치는 지금 가장 희소한 것으로 옮겨간다. 오랫동안 희소했던 것은 구현 — 의도를 동작하는 코드로 바꾸는 일이었다. 그리고 바로 그 층을 지금 에이전트가 흡수하고 있다.
에이전트는 동료이지, 더 빠른 자동완성이 아니다
흔히 저지르는 실수는 코딩 에이전트를 "더 나은 자동완성" 정도로 분류하는 것이다. 이 둘은 전혀 다른 종류다. 자동완성은 당신의 문장을 마무리해줄 뿐이지만, 에이전트는 목표를 받아 그것에 대해 행동한다 — 당신이 설정한 가드레일 안에서 무엇을 어떻게 바꿀지 결정하고, 그런 다음 실제로 실행한다. 더 똑똑한 키보드라기보다는, 우연히 리포지토리 안에 사는 동료에 더 가깝다. 이슈를 하나 건네주면, 그는 자리를 비웠다가 merge request를 들고 돌아온다.
이것이 바로 우리가 TaskGoblin을 만든 방식이다. 에디터 안의 패널이 아니다. 당신의 팀이 이미 쓰고 있는 도구 안에 있는 팀원이다 — 이슈를 배정받고, 스레드에서 멘션되고, pull request를 리뷰한다. sandbox 안에서 구현을 수행하고, 당신이 검토할 수 있는 결과물을 들고 돌아온다. 상호작용의 단위는 키 입력이 아니다. 그것은 하나의 작업(task)이다.
하루가 시작되는 모습은 이렇게 바뀐다
그 흐름을 한 걸음 더 따라가면 근무일의 모습이 달라진다. 아무도 하고 싶어 하지 않는 의존성 업그레이드는 밤사이 끝나 있다. 불안정한 테스트는 스탠드업 전에 정리된다. 사양이 잘 정의된 기능은, 뼈대 코드와 테스트가 이미 갖춰진 초안 pull request로 도착해 타이핑이 아니라 판단을 기다린다. 프로덕트 매니저가 티켓 하나를 옮기면, 누군가 다시 보기도 전에 변경 사항의 첫 버전이 이미 열려 있다. 수고로움의 컨베이어 벨트 — 엔지니어의 한 주 대부분을 채우는, 필요하지만 화려하지 않은 작업 — 이 마침내 느려지기 시작한다.
남는 것은 언제나 진짜 일이었던 부분이다. 무엇을 만들어야 하는지 결정하는 것, 뻔해 보이는 구현이 미묘하게 틀렸다는 것을 알아차리는 것, 아무리 많은 원초적 역량으로도 대체할 수 없는 취향과 맥락을 지니는 것. 엔지니어는 저자에서 편집자로 옮겨간다 — 모든 줄을 직접 생산하는 존재에서, 무엇이 생산될지를 지휘하고 그것이 옳은지 판정하는 존재로.
질문이 "할 수 있는가"에서 "해야 하는가"로 바뀐다
구현이 저렴하고 빨라지면, 제약 조건은 더 이상 무언가를 만들 수 있는가가 아니라 그것이 만들 가치가 있는가로 바뀐다. 반복이 충분히 저렴해져서 디자인 리뷰는 탐색적으로 변한다 — 하나를 두고 논쟁하는 대신 세 가지 버전을 시도한다. 소규모 팀이 훨씬 큰 팀의 산출물을 낼 수 있게 되는데, 이는 인당 레버리지가 올라갔기 때문이다. 그리고 경쟁 우위도 그에 따라 옮겨간다 — 누가 실행할 수 있는가에서 벗어나, 무엇을 실행해야 하는지 아는 취향, 그것이 누구를 위한 것인지 이해하는 공감력, 그리고 에이전트가 곧바로 달려들 수 있을 만큼 문제를 명확히 표현하는 명료함을 가진 사람으로.
이것이 모든 소음 아래 깔린 진짜 재해석이다. "이제 우리는 그저 주니어 개발자 무리를 관리하고 있을 뿐이다"는 불안한 버전의 표현이다. 더 진실에 가까운 버전은, 레버리지가 옮겨갔고 희소한 스킬도 그와 함께 옮겨갔다는 것 — 위로, 판단력으로.
인간이 남는 자리
이 미래를 정직하게 그린다면 인간이 사라지는 척하지 않는다. 오히려 그 반대다. 기계가 구현을 흡수할수록 인간의 결정은 덜 중요해지는 것이 아니라 더 중대해진다. 왜냐하면 이제 각 결정이 훨씬 더 많은 산출물을 조종하기 때문이다. 그래서 TaskGoblin은 의도적으로 merge 단계에 사람을 남겨둔다 — 에이전트는 코드를 작성하고 변경 사항을 리뷰하지만, 결코 승인하거나 merge하지 않는다. 어떤 것이 지금 이 시스템에 옳은지에 대한 판단은 정확히 자동화되지 않는 층이며, 우리 모두가 올라가고 있는 바로 그 층이다.
컨베이어 벨트는 느려지고 있다. 소프트웨어의 다음 시대를 누가 형성할지를 결정하는 것은 누가 구현할 수 있는가가 아닐 것이다 — 기계는 그 아래 모든 층을 가져갔듯 그것도 가져가고 있다. 결정하는 것은 상상력과 취향, 그리고 이 모든 역량을 정말로 만들 가치가 있는 것에 겨눌 줄 아는 판단력일 것이다.