소프트웨어 개발에서 흔히 Rocket Science는 대규모, 복잡성, 무거운 프로세스, 반복불가능 함을 비유하는 의미로 자주 사용됩니다.
매주 월요일 오전은 팀에서 (주로 엔지니어링에 관련된) 다큐멘터리를 보는 시간입니다. 얼마전에 BBC의 ‘Space Race’란 다큐멘터리를 EBS에서 ‘우주 전쟁’이라는 제목으로 방영한 것을 봤습니다. 말그대로 2차 대전 이후, 미국과 소련의 우주 경쟁을 주역들을 중심으로 극화해서 보여주는 다큐멘터리입니다. 지루하지 않고 가볍게 보기에 좋은 것 같으니 한번 보셔도 좋을 듯 합니다.
이 다큐멘터리를 보고 나면 인간이 달에 착륙하기까지 얼마나 많은 치명적인 실패들이 있었는가를 깨닫게 됩니다. 로켓 발사 프로젝트란 비용 제약에 의해 반복하기 힘든 성격을 가지고 있고, 그 규모와 복잡성을 관리하기 위해 정확한 계획과 체계적인 테스팅을 위한 프로세스를 채용하고 있지만, 그렇다고 해서 실패하지 않는 것은 아니라는 것입니다.
하물며 우리가 경험하는 소프트웨어 프로젝트를 돌이켜보면, 역시 모두가 성공한 것은 아닙니다. 우리가 하루하루 부닥치는 일과의 업무들도 아마 모두 성공적이지는 않을 것입니다. 정확한 계획과 체계적인 테스팅, 그리고 프로세스가 중요하지 않다는 얘기가 아닙니다. 중요한 것은 실패가 발생했을 때, 무엇을 하느냐 입니다.
실패했을 때, ‘미안하다’라는 말을 하지마세요. 그 말이 자신과 동료의 기분을 조금 나아지게 할 지는 몰라도, 반경 10km 밖의 거주지에 떨어진 녹아들어간 파편 조각과 폭발에 휩쓸려간 우주인의 생명을 원래 자리로 되돌려 놓지는 못합니다. 엔지니어라면, 실패가 발생했을 때, 그것이 왜 발생했는가, 왜 방지하지 못했는가를 돌아보고, 다시 발생하지 않도록 하려면 어떻게 해야하는가를 가장 먼저 생각해야할 것입니다.