연속성과 Handoff

연속성과 Handoff

상태는 전달될 수 있다. 하지만 전달된다고 유지되는 것은 아니다.


이 문서는 시간적 어긋남을 다룬다. 같은 구조라도 handoff가 반복되면서 전제, 범위, 의미가 어떻게 손실되는지 본다.


시스템은 이어진다

시스템은 단일 단계로 끝나지 않는다.

한 사람이 설계하고, 다른 사람이 구현하고, 또 다른 사람이 수정한다. 하나의 세션에서 기능을 만들고, 다음 세션에서 이어서 작업한다. 한 컴포넌트가 상태를 만들고, 다른 컴포넌트가 그 상태를 읽는다.

이 모든 과정에서 상태와 의도는 계속 전달된다.


끊어지는 순간

문제는 이 전달이 항상 온전하지 않다는 데 있다.

한 단계에서 만들어진 상태가 다음 단계로 넘어갈 때, 무언가가 조금씩 달라진다.

이걸 handoff라고 부른다. 단계 간 경계에서 일어나는 전달의 순간.

겉으로는 이어지는 것처럼 보인다. 하지만 내부에서는 변화가 누적된다.


Handoff에서 무슨 일이 일어나는가

전달 과정에서 여러 가지가 사라지거나 바뀐다.

명시되지 않은 전제. 이전 작업자가 당연하게 여겼던 것들, 예를 들어 “이 함수는 항상 검증된 입력만 받는다"는 가정이 다음 작업자에게 전달되지 않는다. 코드에 남아 있지 않기 때문이다.

범위의 축소. 이전에 고려했던 엣지 케이스가 다음 작업에서는 고려되지 않는다. “저번에 이미 처리했다"는 사실이 기억되지 않는다.

의미의 변형. 같은 필드명, 같은 함수명이 다음 컨텍스트에서 조금 다르게 해석된다. 그 차이는 처음에는 미미하다. 하지만 쌓이면 달라진다.

각각은 작은 변화다. 하지만 이 과정이 반복되면, 원래 의도와 실제 구현 사이의 간극이 점점 벌어진다.


같은 작업, 다른 결과

이 구조에서는 같은 작업을 반복해도 결과가 달라진다.

한 번은 된다. 다음에는 어긋난다. 수정해도 원래 상태로 돌아가지 않는다.

재현이 어렵다. 원인을 찾기 어렵다. 왜냐면 문제가 특정 코드 한 줄에 있는 게 아니라, 여러 단계에 걸친 전달 과정에서 누적된 것이기 때문이다.


사람은 보완하지만, AI는 확장한다

사람은 handoff의 손실을 어느 정도 보완한다.

맥락을 추론하고, 빠진 것을 채우고, 이상한 부분을 직감적으로 알아챈다. 그래서 버텨진다. 완벽하지 않아도, 어느 정도는 이어진다.

AI는 다르게 작동한다.

AI는 전달된 것만 사용한다. 전달되지 않은 전제는 복구되지 않는다. 명시되지 않은 범위는 채워지지 않는다. 그리고 가장 중요한 것 — 어긋난 상태는 교정되지 않고, 그 위에서 작업이 계속 쌓인다.

handoff에서 상태가 한 번 어긋나면, 사람은 다음에 눈치채고 수정한다. AI는 그 어긋난 상태를 정상으로 받아들이고, 그 위에서 다음 작업을 수행한다. 그래서 어긋남이 더 빠르게, 더 멀리 퍼진다.


연속성은 무엇으로 고정되는가

handoff를 줄이는 것은 장문의 문서 한 장이 아니다. 세션이 바뀌어도 같은 경로가 반복되게 만드는 기계적 표면이 필요하다.

대표적인 고정 장치는 다음 네 가지다.

  • 가장 자주 보이는 코드 표면에 canonical path를 두는 정본 예시
  • 작업 범위와 허용 경로를 잠그는 작업 계약
  • 완료와 중간 교정을 같은 기준으로 묶는 Acceptance Gate
  • 오래된 shortcut을 경고가 아니라 실패로 바꾸는 analyzer, lint, pre-commit 같은 로컬 gate

즉 연속성은 문서화만으로 유지되지 않는다. 하네스는 전달되지 않는 의도를 물리적 제약으로 치환해서, 다음 작업자가 그 의도를 몰라도 허용된 경로 밖으로 쉽게 이탈하지 못하게 만든다. 저장소 안의 예시, 규칙, gate, failure format이 같은 방향을 가리킬 때 비로소 세션 간 handoff가 덜 흔들린다.


여기서 다시 본다

문제는 한 단계가 아니다.

연결이다.

상태가 어떻게 정의되고, 어떻게 전달되고, 전달되는 과정에서 무엇이 사라지는지.

이 흐름 전체가 문제다.

그리고 이 흐름을 통제할 수 없으면, AI를 도입할수록 문제는 가속된다.