3주짜리 스프린트가 5주가 된다. 아무도 이유를 설명하지 못한다. AI 컴포넌트는 단독으로는 작동한다. 통합은 계속 깨진다. 두 엔지니어가 4일을 디버깅에 썼는데, 한 페이지짜리 컨텍스트 문서가 있었다면 막을 수 있었던 문제였다.
이것이 잘못된 인수인계다. AI 프로젝트에서 가장 흔한 지연 원인이지만, 근본 원인으로 추적되는 경우는 거의 없다.
잘못된 인수인계의 실제 비용
손실의 단위는 시간이 아니다. 스프린트 리셋이다.
스프린트 리셋은 이미 완료된 작업이 다시 열린다는 의미다. 이미 내려진 결정이 재논의된다. 다음 작업으로 넘어간 엔지니어가 다시 끌려온다. 복합적인 영향은 초기 지연보다 훨씬 심각하다.
구체적인 패턴을 보자. 엔지니어 A가 데이터 파이프라인을 구축한다. 엔지니어 B가 이를 이어받아 추론 레이어를 연결한다. B는 어떤 필드가 nullable인지, 어떤 업스트림 소스가 불안정한지, A가 특정 스키마 선택을 세 번이나 바꾼 이유를 모른다. B는 가정을 세운다. 그 중 두 개가 틀렸다. 추론 레이어는 조용한 오류를 안고 배포된다. QA가 4주차에 이를 발견한다.
수정에 이틀이 걸린다. 원인 파악에 사흘이 걸린다. 스프린트가 리셋된다. 작성된 산출물이 없는 인수인계 하나로 5일을 잃은 것이다.
이를 8명의 엔지니어가 참여하는 6개월 프로젝트에 곱하면, 9개월 만에 결과물이 나오는 프로젝트가 된다. AI가 어려워서가 아니라, 사람들 사이에서 컨텍스트가 계속 사라졌기 때문이다.
AI 시스템이 인수인계 실패를 더 악화시키는 이유
일반 소프트웨어는 요란하게 실패한다. 깨진 API 호출은 예외를 던진다. 누락된 필드는 null 포인터를 유발한다. 실패 지점이 눈에 보인다.
AI 시스템은 조용히 실패한다. 잘못 설정된 프롬프트는 그럴듯해 보이는 출력을 반환한다. 검색 단계가 오류 없이 잘못된 문서를 가져온다. 임베딩 모델이 잘못 클러스터링된 벡터를 생성하고, 다운스트림 모델은 그냥 주어진 것으로 작동한다.
이는 AI 프로젝트의 인수인계 실패가 즉시 드러나지 않는다는 의미다. 실패는 쌓인다. 엔지니어가 컴포넌트를 이어받아 합리적으로 보이는 변경을 가하고, 실제 데이터로 프로덕션 부하가 걸릴 때까지 나타나지 않는 미묘한 성능 저하를 만들어낸다.
반복적으로 나타나는 세 가지 구체적인 실패 패턴이 있다.
- 문서화되지 않은 모델 가정. 원래 엔지니어는 모델이 입력 길이에 민감하다는 것을 알았다. 다음 엔지니어는 몰랐다. 90일째부터 엣지 케이스가 실패하기 시작했다.
- 누락된 평가 기준선. 인수인계 전에 '좋은 상태'가 어떤 것인지 아무도 기록하지 않았다. 새 엔지니어는 자신의 변경이 동작을 개선했는지 저하시켰는지 알 방법이 없었다.
- 암묵적인 데이터 계약. 파이프라인은 특정 필드 형식을 가정했다. 그 가정은 엔지니어 한 명의 머릿속에만 있었다. 그가 떠나자 가정도 함께 사라졌다.
이 각각은 기술적 실패가 아니라 프로세스 실패다. AI가 문제를 일으킨 것이 아니다. 산출물의 부재가 문제를 일으켰다.
운영 원칙: 영웅주의보다 프로세스 산출물
DK1.AI의 규칙은 단순하다. 기록되지 않은 것은 존재하지 않는다.
이것은 문화적 가치가 아니다. 운영상의 제약이다. AI Brand Presence를 위해 구축된 시스템은 지속적으로 실행된다. 엔지니어는 교체된다. 컨텍스트는 인력 변화에도 저하 없이 살아남아야 한다.
AI 컴포넌트 인수인계를 위한 산출물 세트는 다음을 포함한다.
- 의사결정 로그. 검토한 대안이 아닌 이 접근법을 선택한 이유. 날짜 포함.
- 실패 목록. 개발 중 무엇이 왜 깨졌는지. 정제하지 않은 그대로.
- 평가 기준선. 구체적인 입력, 예상 출력, 허용 가능한 편차. 설명이 아닌 수치.
- 데이터 계약. 모든 업스트림 의존성, 신뢰도 등급, 실패 시 발생하는 일.
- 알려진 한계. 컴포넌트가 저하되는 지점. 잘 처리하지 못하는 입력. 설계되지 않은 용도.
이를 작성하는 데 시간이 걸린다. 그것이 핵심이다. 산출물 작성에 쓴 시간은 누군가가 3시간짜리 구두 브리핑 없이 컴포넌트를 이어받는 첫 번째 순간에 회수된다.
영웅주의 — 모든 것을 머릿속에 담고 항상 질문에 답할 수 있는 엔지니어 — 는 리스크다. 단일 장애점을 만든다. 시스템을 프로세스가 아닌 사람에게 의존하게 만든다. 그 사람이 자리를 비우면 프로젝트가 멈춘다.
프로세스 산출물은 지루하다. 하지만 그것만이 확장 가능한 유일한 방법이다.
실제로 어떻게 적용되는가
컴포넌트는 코드가 테스트를 통과할 때가 아니라 산출물 세트가 완성될 때 완료로 간주된다. 코드 리뷰에는 산출물 리뷰가 포함된다. 비자명한 선택에 대한 의사결정 로그 항목이 없는 PR은 머지되지 않는다.
인수인계는 즉흥적으로 이루어지지 않고 일정에 따라 진행된다. 인계하는 엔지니어와 인수하는 엔지니어가 함께 산출물 세트를 검토한다. 인수인계가 완료되기 전에 빈틈을 채운다. 인수하는 엔지니어는 컴포넌트를 소유할 충분한 컨텍스트가 있음을 확인한다.
이는 주요 인수인계당 약 4시간이 추가된다. 스프린트 리셋을 없앤다. 계산은 간단하다.
근본적인 문제
AI 프로젝트는 기술의 중심이 아니라 사람들 사이의 경계에서 실패한다. 모델은 작동한다. 파이프라인은 작동한다. 인수인계가 작동하지 않는다.
인수인계 프로세스를 고치면 대부분의 AI 프로젝트 지연이 사라진다. AI가 나아져서가 아니라, 그것을 둘러싼 시스템이 더 체계적으로 변했기 때문이다.
지루한 프로세스가 영웅적인 엔지니어를 이긴다. 언제나.