유지 보수 업무에 지친 개발자에게 보내는 제언
대부분의 개발자들은 새로운 것을 만드는 것을 좋아한다. 다른 사람이 만든 오래된 소프트웨어를 운영하거나 유지 보수하는 것을 좋아하는 개발자를 보는 것은 정말 힘들다. IT기술은 하루가 다르게 빠르게 발전하고 있다. 최초 개발을 완료한 뒤 3년 정도만 지나도 낡은 기술을 적용했었다는 생각이 든다. 3년 전에 사용했던 그 기술을 보고 있노라면 자신은 왠지 뒤처져 있는 것만 같다.
나는 이러한 현상에 대한 근본 원인이 서비스에 적용된 기술이나 개념의 최신성에서 오는 것은 아니라고 본다. 그보다는 개발자가 서비스 유지보수를 바라보는 시각에 대한 문제라고 생각한다. 개발자들은 서비스를 운영 및 유지 보수하는 것을 단순노동이라고 생각하는 경향이 있다. 다른 개발자가 만들었거나 혹은 만든 지 오래된 시스템을 더 효율적으로 운영하는 것은 왜 엔지니어링 문제로 보지 않는 걸까?
남이 이미 짜둔 판에서 방식을 바꾸지 않고 단순히 노동력만 투입한다면 개인의 성장도 서비스의 성장도 기대할 수 없을 것이다. 기존과는 다른 판으로 재구성하는 것은 훌륭한 기술 문제이다. 그 문제들을 잘 풀어나가는 경험도 어떤 시스템을 새롭게 구축하는 것만큼 크게 성장할 수 있는 밑거름이 된다고 생각한다. 내가 몸담은 조직에는 끝내 그런 일이 없다면 운영의 문제를 신규 개발의 문제로 바꾸어 볼 수도 있다. 새로운 시스템을 잘 만들 수 있는 역량은 오래된 시스템을 잘 운영하는 노련함과도 연관이 깊다.
개발 업무는 사이클이 필요하다. 신규 개발의 경험을 갖지 못한 채 운영만 하는 것은 괴로운 일이다. 그것은 마치 주구장창 시험공부만 힘들게 하고 있지만 정작 시험은 치르지 않는 상태와 비슷하다. 반면에 새로운 개발만 계속하려고 하는 사람은 학습의 과정 없이, 시험만 계속 치는 것과 유사하다. 우리는 인생의 전반적인 과정에서 학습과 평가의 과정을 반복해서 거친다. 이 과정의 반복이야 말로 인간을 성장시키는데 실질적인 효과가 있는 증명된 방법이기 때문이다.
지금 자신이 오래된 서비스의 유지보수를 맡고 있다면 본인의 불행을 탓하기 전에 당장 해결할 수 있는 기술 문제들을 찾아보길 바란다. 유지보수 서비스의 기술 문제들을 잘 정의하기만 해도 엄청난 내적 성장을 거둘 수 있다. 더 나아가 그것들을 차근차근 해결해 나간다면 미래에 새로운 프로그램을 개발할 때 그 노하우가 자연스럽게 새로운 시스템에 녹아들어 가게 된다. 기술적 성장의 측면뿐만이 아니다. 기회의 측면에서도 마찬가지이다. 함께 일하는 동료나 관리자의 입장에서 생각해보자. 현재 맡고 있는 일에서도 기술 문제를 해결하지 못한다면 새롭게 시작해야 하는 일을 믿고 맡길 수 있을까? 나는 아니라고 본다.
개발팀에 있어 보면 '지난번엔 저 사람이 신규 개발했으니까 이번에 나를 시켜줘요'라는 말을 종종 들을 수 있다. 근데 미안하지만 턴 기반(Turn-based) 게임처럼 다른 사람 한 번, 나 한번 하는 게 아니다. "내가 운영 한 번 했으니 다음엔 내가 신규 개발할 거야" 이런 사고방식은 통하지 않는다. 협상하고 설득해서 얻어 내는 것이 아니라 나 말고는 맡길 사람이 없도록 상황을 만들어야 한다. 다른 사람이 자기 턴을 진행할 때 전력으로 나의 턴을 준비해야 한다. 기회는 준비하는 자에게 주어지는 것임은 이미 잘 알고 있을 것이다.