우리 관리자는 그것을 허용하지 않을 것이다
TDD, 리팩터링, 코드리뷰 등을 강연하고 나면 듣는 많이 듣는 질문 중 하나는
"다 좋은 줄 알겠는데 우리 회사의 대표님, CTO님, 관리자는 하지 못하게 한다"
는 것이다.
나는 정말 문제가 있는 조직을 만나 본 기억은 잘 안 나지만 정말 문제가 있는 조직도 있다고 한다.
"절이 싫으면 중이 떠나야 한다"는 말처럼 이런 경우 더 좋은 회사를 찾는 것도 방법일 것이다. 하지만 경험상 이런 불만은 사실이 아니거나 적어도 전적으로 사실은 아닌 것 같다. 우리의 잘못도 있는 것 같다.
개발 일정을 논의할 때 리팩터링을 위한 일정을 별도로 잡는 경우를 꽤 여러 번 접했다. 적어도 이런 경우는 리팩터링을 제대로 이해하지 못하는 분들이라고 생각한다. 빠르게 동작하게 만들고, 다음 기능을 구현하기 전에 필요한 만큼 빠르게 코드의 구조/설계를 개선하는 것이 리팩터링인데 별도의 일정을 잡는 것은 아마 지금까지 만든 것을 굉장히 많이 수정하겠다는 의도일 것이다. 그럼 그간 자동, 수동 테스트로 검증한 기능에 대해서 다시 검증을 해야 할 수도 있을 텐데...
요리사로 고용했다면
"당신은 칼을 갈 수 있는 권한이 있습니다" 또는 "당신의 작업장을 청소하는 것은 당신의 책임입니다"
라고 말하지 않을 것이다. 요리사로서 그것은 그의 업무이다. 요리사가 조리실 청소를 승인을 받고 해야 하나?
마찬가지로 소프트웨어 엔지니어로서 전문가인 우리가 하는 일에 대해서 누구의 허락을 받아야 할까? 내가 TDD를 하던, 리팩터링을 하던, 짝 프로그래밍을 하던, 코드리뷰를 하던 주어진 일정 내에서 주어진 기능을 온전히 구현한다면 우리에게 개발을 요청한 분들은 상관하지 않을 것이다.
기능, 일정에 해당하는 무엇, 언제까지는 영업이나 경영진이 요구할 수 있다. 하지만 어떻게 개발할지는 개발을 하는 우리가 정하는 것이다. TDD를 할지, 리팩터링을 할지는 허락이 필요한 것이 아니다. 일정과 기능을 지키면서 잘하기 위해서 선택해야 하는 것이다(켄트벡은 TDD 말고 빨리 잘 만드는 방법을 모르겠다고 했음).
그럼에도 불구 종종 개발 일정에 대해서 대립/갈등 상황이 발생할 수 있다.
외부 제휴로 인해 큰 매출이나 영업 이익이 예상되는 경우 영업 조직은 개발조직에게 상의하지 않고 일정에 대한 약속을 하고 온 후에 경영진을 통해 개발 조직에 강요할 수도 있다. 또 개발 일정 지연이 빈번해지면 개발 조직에게는 2달의 시간이 있더라도 1달의 시간 밖에 없다고 말하는 경우도 있다.
이런 경우 개발자들은 안 되는 것에 대해서는 안된다고 해야 한다. 누군가 소리를 치거나 화를 낼 수도 있다. 하지만 그렇다고 안 되는 것을 된다고 해서는 안된다.
어느 책에서 본 글에서는 영업, 경영진 등은 대립 상황을 업무 수행을 위한 무기로 활용하기도 한다고 한다. 높은 분이 일정을 당길 수 없냐고 화를 낼 수도 있다. 그래도 안 되는 것은 안된다고 해야 한다. 그렇지 않으면 그들에게 화라는 무기를 주는 것이다. 다음번에도 그들은 우리가 어렵다고 하면 화만 내면 된다고 생각할 것이다.
영업 조직에서는 회사에 정말 중요한 일이라고 이번 한 번만 어떻게 안 되겠냐고 한다. 경영진도 이번만 어떻게 좀 해 봐 달라고 한다. 이게 반복되면 개발조직에서는 이번만 어떻게 할 수 있을지 알아보겠다고 답을 한다. 그럼 영업조직에서는 경영진에게 개발조직에서 가능하다고 했다고 전한다. 개발조직은 야근, 주말 근무까지 해서 어떻게든 날짜를 맞춘다. 하지만 오픈 후 무리한 일정으로 많은 문제를 겪는다. 그럼 개발 조직의 품질에 문제가 많다는 비난을 받는다. 이런 일을 겪다 보면 이직을 고민하는 개발자들이 생겨난다.
이런 대립 상황을 대부분의 개발자는 꺼리지만, 이런 상황을 해결하는 방법도 익혀야 한다. 기능 범위를 줄이거나 일정을 조율해 보는 것도 필요하다. 중요한 일부터 해서 오픈을 해야 할 날짜가 되었을 때 오픈 할 때 반드시 필요한 기능이 아니면 다음에 적용하자고 조율해 보기도 해야 한다.
종종 주간회의 등을 하면 리더에게 너무 상세히 알려주면서 자신들이 결정하고 공유해도 될 사안에 대해서 승인을 요청하는 모습을 본다. 자신들이 열심히(effort) 많은 결과(output)를 만들었다는 것을 어필하기 위해 매우 상세히 보고를 하는 것이다. 그러면 리더는 그들에게 도움을 주기 위해 더 상세하게 개입하려고 한다. 그러다 보면 러더보다는 담당자들이 더 전문성이 있어서 담당자들이 결정해야 하는 사항을 리더가 결정하여 문제가 발생하기도 한다. 애초에 리더에게 잘 보이기 위해 너무 상세히 공유한 사람들은 리더의 결정에 순응한다. 이렇게 되면 리더는
"이런 것도 내가 결정해줘야 하는구나"
라고 생각하고 더 많이 개입하려고 한다. 본래 리더가 해야 할 회사를 위한 높은 수준의 일은 밀리게 된다.
우리가 전문성이 있는 것은 우리가 결정해야 한다. 공유를 잘하면 된다. 리더의 책임이 요구되는 경우라면 잘 설명해서 우리의 결정을 인정받아야 한다.