숫자는 멀쩡해 보였다
한 무역회사의 B2B 비즈니스에서 재고 시트를 읽고 부족한 품목을 알려주는 봇을 쓰고 있습니다. 어느 월요일, 봇이 「재고 충분」이라고 보고한 품목이 사실은 이미 바닥났다는 걸 뒤늦게 알았습니다. 봇은 오류 메시지 하나 내지 않았습니다.
원인은 열 이름 하나
시트의 「수량」 열이 「가용수량」으로 바뀌어 있었습니다. 그런데 예전 「수량」 열은 지워지지 않고 옛 값이 그대로 남아 있었습니다. 봇은 열이 사라졌다고 멈추는 대신 남아 있던 옛 열을 읽었고, 틀린 알림이 나흘 동안 조용히 나갔습니다. 사람이 우연히 숫자를 대조하다가 발견했습니다.
Before
• 시트 구조가 바뀌어도 봇은 알아채지 못함
• 이상 발견은 사람의 우연한 눈썰미에 의존, 평균 4일
• 틀린 알림 위에서 다음 작업이 계속 진행됨
추가한 규칙 3줄
1. 읽기 전에 시트의 헤더 이름이 기대한 목록과 같은지 먼저 비교한다.
2. 하나라도 다르면 계산하지 말고 멈춘 뒤, 어떤 이름이 달라졌는지 보고한다.
3. 보고서 첫 줄에 이번에 읽은 열 이름을 그대로 적는다.
After
다음 번 시트 구조가 바뀌었을 때, 윈도우 디바이스에서 돌던 봇이 계산을 시작하기도 전에 멈췄습니다. 「기대한 열: 가용수량, 찾지 못함」이라는 메시지가 맥미니를 거쳐 그날 아침 바로 도착했습니다. 발견까지 걸리는 시간이 4일에서 당일로 줄었습니다.
오늘의 교훈
봇은 시키지 않은 의심을 하지 않습니다. 「맞는 열을 읽고 있는지」부터 확인하라고 적어두는 것이 가장 싼 안전장치였습니다. 작은 팀일수록 조용히 틀리는 것이 시끄럽게 멈추는 것보다 훨씬 비쌉니다.