티스토리 뷰

재앙의 기억

한때 대형 이동통신사에서 일을 한 적이 있었다. 새로운 모바일 포털 서비스를 선보이려는 마케팅부서의 기획 아래 그 시스템을 개발하는 일을 했다. 마케팅에선느 3개 국가에서 동시에 서비스를 출시하길 원했고 출시 당일에 접속할 고객의 숫자는 전체의 몇 퍼센트 정도로 매우 적을 것으로 예상했었다. 몇 퍼센트 정도라고 하더라도 전체 고객 수가 3개 국가를 합쳐 2천만 명에 달했기에 첫날 방문자가 수십만명 정도는 될 것이라고 예측했다. 프로젝트 매니저가 완료 일정을 통보했을 때 아직 몇 개월이 남기는 했지만 그때까지 모든 요구사항을 구현하기는 힘듦을 우리 모두 알고 있었다. 초기 회의에서 프로젝트 매니저에게 요구한 완료 일정을 맞추기 어렵다는 이야기를 했다. 그는 우리에게 선택의 여지는 없고 그 일정대로 맞춰야 하고, 우리가 열심히만 한다면 일정 안에 할 수 있을 거라고 주장했다. 마음이 불편했지만 우리는 최선을 다 해보기로 했다.


한주 한주가 지날 때마다 비즈니스 분석 부서에서는 어김없이 새로운 요구사항을 추가했다. 일정은 그대로였다. 우리는 여러 차례 이미 주어진 요구사항들만으로도 일정을 맞추기 어려우니 기능을 추가할 것이 아니라 줄여야 한다고 말했다. 그럴 때마다 이미 마케팅팀에서 3개 국가에서 모든 기능들에 대해서 광고를 시작했다면서, 어떻게든 해야 한다는 식의 대답만 돌아올 뿐 우리 말을 듣기는 커녕 계속 일을 키우기만 했다.

마케팅 팀이 우리와 일정 협의도 없이 먼저 광고부터 집행하면 안 되기 때문에 개발자들이 직접 마케팅 팀과 각 기능들에 대해 논의하게 해달라고 프로젝트 매니저에게 요구했다. 몇 가지 기능들을 좀더 단순화하거나 아예 필요 없게 할 수 있는 아이디어들이 있었다. 하지만 프로젝트 매니저는 자신이 콘택트 포인트이며 마케팅팀에서 요구하는 바를 전부 이해하고 있으니 개발자들이 마케팅 사람들과 이야기하는 것은 무의미하다고 주장했다. 프로젝트 매니저는 "안타깝지만, 협의라는 것은 있을 수 없다. 선택의 여지없이 모든 것을 구현해야만 한다." 라고 이야기했다. 그와 나눈 모든 대화의 결론은 그냥 주어진 상황을 감수하고 최대한 오랜 시간, 일을 많이 하는 것뿐이었다. 그거 말고는 할 수 있는 것이 없었다.


우리는 몇 주 동안 야근과 휴일 근무를 밥먹듯이 했다. 당연하지만 여기서 '우리'라고 함은 프로젝트 매니저를 제외한 개발자들을 뜻한다. 프로젝트 매니저오 비즈니스 부서 사람들은 저녁 6시만 지나면 자리에서 찾아볼 수 없었고 주말에는 출근하지 않는것은 물론 전화조차도 받지 않았다. 프로젝트를 시작할 때부터 우리는 개발용 인프라가 필요하다고 주장했었다. 실제 상용 서비스 환경과 비슷한 부하 시험용 인프라가 있어야 했다. 하지만 프로젝트 매니저는 우리의 요구를 들어주지 않았고 마케팅에 데모할 비즈니스 기능 구현에 집중하라고만 했다. 상용서비스 배포가 한 달도 남지 않았을 때 이제는 기능 구현을 멈추고 상용 시스템에서 어플리케이션이 제대로 동작할지 기술적인 사항들을 시험해보자고 했다. 프로젝트 매니저는 우리의 말을 듣지 않고 일단 모든 긴으을 어떻게든 구현할 것을 지시했다. "이번 하넌만 더 엸미히 해보자. 이제 마지막이다. 당신들이 결국 해낼것이라고 믿는다." 우리는 다시 얼굴 한 번 본적 없는 마케팅 담당과 일정을 조율해달라고 요청했지만 그는 여전히 말을 듣지 않았다. 완료일이 가까워지고 있었지만 여전히 너무 많은 일들이 진행중 이었다. 우리는 그저 "어떻게든 해보겠습니다"라는 말만 하고 있었다.


드디어 약속한 완료 날짜가 되었다. 그날은 월요일 아침이었다. 상용 서비스가 전개될 예정시간의 겨우 몇 시간 전가지도 시스템 배포작업이 이루어졌다. 전부가 지쳐 모든 것이 끝나기만을 바라는 한편, 우리가 프로젝트를 해냈다는 자랑스러움도 한 켠에 있었다. 우리는 영웅이 될 거라고 기대했다. 새벽에 커피 한 잔으로 휴식을 취하면서 승진과 급여 인상에 대한 이야기를 나눌 정도였다.


시스템이 구동된 지 30분도 안 되어서 어플리케이션이 다운되었다. 시스템이 부하를 감당하지 못했다. 문제가 발생한 후 3시간만에 다시 복구하기는 했지만 다시 몇 시간도 못 버티고 다운되었다. 복구와 다운이 5일 내내 반복되었다. 우리가 그렇게 뒷수습에 애쓰는 동안 여러 사람들이 우리를 지켜보았다. 거기에는 마케팅 부서 사람들도 있었다. 우습게도 마케팅 담당자의 얼굴을 그때서야 처음 보았다. 시스템을 배포하기 전에 테스트는 몇 번 해보지도 못했다. 이러한 압박 속에서 여유있게 테스트 코드를 작성할 사람은 아무도 없다. 매우 작은 팀이었음에도 코드는 엉망이었고 수정을 살짝만 해도 정말 고통스러운 상황이 벌어졌다. 테스트를 한번 하려면 모든 것을 수동으로 다시 돌려보아야 하기에 대단히 어려웠다.


결론부터 말하면 고객들에게 항의가 빗발쳤다. 몇 주가 지나서 모든 기능들이 안정화되었지만, 승진과 급여 인상은 커녕 개발팀원으로서 나쁜 평판만 생겼다. 마케팅 담당이 왜 이런 문제가 생겼는지 프로젝트 매니저에게 물었을 때 그는 개발자들이 할 수 있다고 했고, 개발자들의 노력과 기술 역량을 믿었을 뿐이라고 대답했다. 코드 한 줄 작성한 적이 없으니 프로젝트 매니저의 책임이 아니라는 것이 아주 틀린 말은 아니었다.

문제가 터진 후 연이어 있었던 대책회의에서 마케팅 담당은 시스템이 부하를 감당하기가 어려움을 알았다면 서비스 오픈 범위를 일부 줄이고 기능 몇 가지는 생략할 수 있었다고 말했다. 마케팅 팀에서 계속해서 추가 기능을 요청했던 것은 개발팀이 감당할 여령이 되고 기능 외적인 요구사항들은 자체적으로 잘 관리하고 있을 걸로 믿었기 때문이라고 했다. 그 이외에 다른 이유는 없었다.

결국 우리 대부분은 거의 동시에 그 회사를 떠났다. 그 회사는 새로운 개발자들을 선별 과정을 거칠 여유도 없이 급하게 채용해야 했다. 이 부분은 회사에 더 큰 문제가 되었다. 새롱누 개발자들은 우리가 만든 그 불안정한 시스템의 여러 가지 문제들에 대해 전혀 알 리가 없었다. 애플리케이션의 두 번째 버전은 3개월 일정으로 계획되었고, 예상했던 3개월이 아닌 9개월이 걸렸다는 소식을 들었다.


교훈

이 이야기에서 프로젝트 매니저가 프로페셔널하게 행동하지 않았다는 점은 바로 짚어낼 수 있다. 그는 팀을 챙기지 않았고 그저 자신의 승진을 위해 팀원들을 극악한 노동 환경에 빠뜨렸다. 개발자 입장에서는 모든 것이 매니저의 잘못이며 회사를 나가야 할 사람은 바로 그라고 말할 수 있다. 우리는 프로젝트 매니저에 대항해서 힘을 합쳐 프로젝트 관계자들에게 그가 얼마나 나쁜 행동을 했는지, 프로젝트의 성공을 위해 가장 힘들게 일한 사람이 누구인지 알렸어야 했다고 말할 수 있다. 뭐라고 말하든 자유이긴 하지만, 이미 일ㅇ르 그르친 후에는 아무 소용이 없다. 모든 것이 끝난 뒤에 무슨 말을 하든 그저 공허한 푸념일 뿐이다.

우리 개발자들은 그런 상황 전체를 피할 수 없었다. 우리들도 비난을 받아야 한다. 프로젝트 매니저뿐만 아니라 개발자들도 전혀 프로답지 않았다. 이미 불가능하다고 알고 있는 것에 대해 '해보겠다'라고 말하지 말았어야 했다. 어떻게든 모든 기능을 상용 릴리즈에 포함시킬 수 있을 거라고 생각했더라도, 제대로 된 테스트를 거치지 않았을 뿐만 아니라 완성된 시스템이 정상적으로 동작할 거라는 믿읍도 없었다. 상사에게 대항할 수 없다는 불편함과 전체 상황 자체에 대한 증오 말고도 그렇게 무책임하게 밀고 나간 또 다른 원인이 우리 마음속에 있었다. 마음 깊은 곳에서는 스스로가 얼마나 잘났는지 내보이고 싶었던 것이다. 그 일을 제대로 해내는 것이 어렵다는 것을 알았지만, 영웅이 될 수 있을 거라는 작은 가능성에 매달렸다. 성공적인 마케팅 캠페인을 만들어낸 사람들도 인정받을 수 있었다. 스스로 도박을 선택했다.

이러한 상황에서 시도해보겠다고 하거나 영웅이 되겠다는 생각을 해서는 절대 안 된다. 애초부터 프로젝트 매니저에게 마케팅 담당과 협상하도록 압력을 넣었어야 했다. 프로젝트 매니저가 마케팅 부서의 실제 상황을 개발자들에게 감추고 개발 일정에 여유가 없음을 통보하고, 상용 시스템에 대한 부하 점검이 필요함을 이메일 기록으로 남겼어야 했다. 대단히 나쁜 방식이었지만, 프로젝트 매니저의 입장에서는 그의 미션인 '모든 기능들을 일정 안에 개발 완료하여 마케팅에 전달하는 것'을 수행하려 했다. 프로젝트 매니저가 자신의 미션을 수행하려 했듯이, 개발자들도 개발자로서의 미션을 해냈어야 했다. 상용화 수준에 미달되는 저품질의 소프트웨어가 될 수 밖에 없다면 주어진 조건들을 거부했어야 했다. 현실적으로 행동했어야 했다. 새 기능을 추가하라는 지시에 개발자와 마케팅 팀이 협의하지 않고서는 기능을 개발할 수 없음을 명확히 했어야 했다. 설령 모든 기능이 구현되더라도 시스템이 다운되면 전혀 의미가 없다는 점도 전달했어야 했다. 우리가 영웅이 될 수 있다는 망상에 사로잡혀 프로페셔널하게 행동하지 못했다. 우리는 '아니오' 라고 말할 수 있어야 했다.


출처 

산드로 만쿠소 지음 권오인 옮김 - 소프트웨어 장인


댓글
댓글쓰기 폼