양산 D-7, 잠을 잘 수 없다

양산 D-7, 잠을 잘 수 없다

양산 D-7, 잠을 잘 수 없다

알람이 울린다. 5시 30분.

어제는 3시간 잤다. 그 전날은 2시간. 통패턴이다. 일주일 수면 시간을 계산하지 않는 게 정신 건강에 좋다.

침대에 누웠는데 눈이 감기지 않는다. 천장을 본다. 까만 천장. 거기에 코드가 보인다.

if (sensor_value > THRESHOLD)
{
    // 여기 로직이 맞나?
}

맞다. 틀렸다. 아니, 모르겠다. 일단 일어난다.

D-7이라는 숫자

양산까지 일주일. 정확히는 7일. 168시간. 10,080분.

더는 세지 않는다. 세면 더 짧아 보인다.

오늘 아침 회의. HW팀 리더가 물었다.

“펌웨어 테스트 상태는?”

나: “90% 정도요.”

HW팀 리더: “90%면 앞으로 7일 동안 마무리 되겠네요?”

아. 이미 계산이 되어 있었구나.

남은 10%는 뭘까.

아무도 모른다. 나도 모른다. 그래서 무섭다.

엣지 케이스의 악몽

어제 테스트 케이스 리스트를 다시 봤다. 문서는 총 47페이지. 펌웨어팀이 만든 게 아니라 QA팀이 만들었다. 아, QA팀은 테스트만 한다. 우리는 이 테스트를 통과하려고 코드를 짠다.

47페이지를 다 읽으면서 생각했다.

‘혹시 우리가 놓친 조건이 있나?’

예를 들면.

  • 온도 0도에서 켜졌을 때는 어떻게 되나?
  • 전원을 뺐다가 5초 안에 다시 꽂으면?
  • 시리얼 통신하는 도중에 전원 끊으면?
  • 펌웨어 업데이트 중에 전원 끊으면?

이런 것들. 생각하면 끝이 없다.

한 가지 놓친 게 있으면 리콜이다.

리콜 비용. CEO한테서 들은 소문은 ‘최소 3억’. 최악은 ‘10억 이상’. 우리 팀 연봉 다 더해도 그 정도다. 나 혼자면 20년을 일해도 못 버는 돈이다.

그럼 그만큼의 책임이 내 어깨에 있다는 뜻이다.

어제 저녁 10시. 새로운 엣지 케이스를 발견했다.

극저온에서 배터리가 들어갔을 때, 부트 시퀀스에서 전압 체크하는 타이밍이 밀릴 수 있다는 걸 알았다. 딱 1ms 차이. 1ms가 뭐 하는 건가 싶겠지만, 그 1ms 때문에 다른 인터럽트가 선점되고, 그럼 UART 버퍼가 터질 수 있다. 터지면 모니터링 명령이 날아가고, 장비가 시작되지 않는다.

회로도를 다시 봤다. 콘덴서 용량이…

아니다. 그건 HW팀 문제다.

그럼 우리가 할 수 있는 건?

타이머 할당을 바꾸거나, 인터럽트 우선순위를 조정하거나, 또는…

밤 12시. 코드를 고쳤다. 테스트를 돌렸다. 통과. 다시 돌렸다. 통과. 5번 더. 다 통과.

그런데 혹시 다른 케이스에서 망가진 건 아닐까?

회귀 테스트. 모든 테스트를 다시 돌린다. 3시간 30분. 다 통과. 아침 3시 30분.

잠에 든다.

양산 후 되돌릴 수 없다

웹개발자 친구 있다. SI 회사 다닌다.

“버그 있으면 그냥 배포 다시 하면 돼. 새 버전 올리고. 끝.”

나: ”…”

“너는 왜 그렇게 신경 써?”

펌웨어는 롤백이 없다.

물론 기술적으로 불가능한 건 아니다. 펌웨어 업데이트 메커니즘이 있고, 장비를 수거해서 새 버전을 올리고 반송할 수 있다. 비용만 우리 회사에서 감당하면.

하지만 고객입장에서는?

“이 제품 버그 있어서 교환해야 해요.”

신뢰도가 떨어진다.

두 번 이상 리콜되면 우리 제품은 끝이다. 시장에서.

그래서 처음부터 완벽해야 한다.

완벽이라는 건 뭘까. 혼자서 생각하면 미친다.

여자친구가 있을 때. 그때도 이랬다. 야근 때문에 헤어졌다는 게 공식 이유지만, 사실은 이것 때문이었다. 내 정신이 여기 없었다. 펌웨어에. 양산에. 리콜의 악몽에.

“넌 왜 항상 일에만 생각해?”

“양산까지만. 양산 나가면…”

양산이 나갔다.

그 다음 날부터 다음 프로젝트의 양산이 시작됐다.

지금 여기

회사 카페. 아침 8시.

검은색 커피. 세 잔째.

옆 테이블 신입. 인턴. 밝다. 웃는다. 최고 7시간을 자는 거 같다.

나를 봤을 때 이런 생각이 있겠지.

‘저 사람 왜 저렇게 피곤해 보이지?’

답을 줄 수 없다. 말로는 불가능하다.

침대에 누워도 잠이 오지 않는다. 눈을 감고 기다린다. 5분. 10분. 20분.

그럼 차라리 일한다.

집에 가는 길. 9시 40분. 퇴근이 이른 날이다.

내일 테스트 결과를 생각한다.

실패하는 건 아닐까. 지금까지 다 했는데 갑자기?

그럼 HW팀 보고를 어떻게 하지. 우리가 못 찾은 버그가 있었다고?

아, 그리고 스펙 문서. 다시 읽어야 한다. 혹시 우리가 놓친 요구사항이…

이미 3번 읽었는데. 4번째 읽을까.

D-6

회사 도착. 9시 15분.

테스트 결과 확인.

모두 통과.

다시 확인.

모두 통과.

한 번 더.

모두 통과.

그런데 이게 이상하다. 이렇게 잘 될 리가 없다.

“혹시 테스트 자체에 문제는 없나?”

팀원이랑 테스트 코드를 다시 본다. 1시간. 이상 없다.

그럼 정말 다 잘 된 건가.

아니다. 뭔가 놓친 게 있다. 분명히.

야근할까. 아니다. 일단 오늘은 자자.

한 번 자본다. 제대로.

침대에 든다. 8시간을 자자고 다짐한다.

5시간을 잤다. 깼다. 또 코드가 생각난다.

포기한다.

회사로 간다.

그냥 이런 거다

이게 펌웨어 개발자의 삶이다.

양산까지 이런 거다.

웹개발자처럼 칼퇴할 수 없다. 배포 버튼 누르고 집 가면 끝. 문제 생기면 롤백. 대면 해결.

우리는 다르다.

보드에 코드가 올라가면 끝.

그 다음부턴 고객 손에.

고객이 전원을 켜면 우리 코드가 돈다.

온도 영하 20도인 한겨울에도. 습도 95%인 욕실에서도. 시골 할머니 손에서도.

모든 상황을 예상할 수 없다.

그래서 잠을 못 자는 거다.

D-7이라는 숫자는 사실 숫자가 아니라 카운트다운이다.

남은 시간. 소진되어 가는 기회. 돌이킬 수 없는 경계선.

그 선을 넘는 순간, 우리 펌웨어는 세상으로 나간다.

그리고 나는 계속 그걸 생각한다.

밤마다.

천장을 보면서.


내일도 버틴다. 그 다음날도. D-6일 때도 D-1일 때도. 그리고 양산 나간 후에도.