힘들지만 지켜야 하는 이유
좋은 개발 문화는 일단, 일정을 잘 맞추고 돈을 벌어오는 데에서부터 시작된다. 품질이 높은 서비스를 만들려면 일단 출시를 해야 한다. 아름답게 흘러가는 플로우와 군더더기 없는 함수를 구현하기 위해 일정을 너무 오래 지연시킨다면, 그 서비스로 돈을 버는 시간은 그만큼 단축될 것이다. 돈이 없는 팀이 좋은 개발 문화를 만들 수 있을까? 나는 없다고 생각한다.
그래서 내 생각에 좋은 개발 문화는 각각의 개발팀이 처한 환경에 따라 다를 것 같다. 그리고 자기 팀에 걸맞은 좋은 개발 문화를 찾아내기 위한 방법들을 시도할 수 있는지가 개발팀의 역량을 판가름하는 요소 중 하나인 것 같다. 유명한 개발자들의 강연에서 종종 들을 수 있는 '보고 배울 수 있는 숙련된 상급자', '뛰어난 역량과 성실함을 가진 동료', '함께 자라려는 태도' 같은 키워드들은, 경우에 따라서는 취사선택해야 하는 것 같다. '~인 것 같다.' 라는 어미를 반복하는 이유는 아직 확신이 없기 때문이다. 내가 경험한 개발문화가 많지 않기 때문에.
일을 하면서 내가 가장 두려워하는 것은, 일정을 준수하려고 무리해서 속도를 내 개발하다가 코드가 통제 바깥으로 벗어나서 원인을 찾기 힘든 사이드이펙트가 발생하는 것이다. 혹여 버그가 메인플로우를 해치기라도 한다면 처음부터 다 다시 뜯어봐야 하고, 최악의 경우에는 새로 만들어야 할 수도 있는, 일정과 품질 두마리 토끼를 모두 놓치는 재난상황이 닥칠 수 있다. 물론 이런 일은 잘 일어나지 않는다. 이 회사에서 반년 동안 개발을 하면서 거의 없었다. 하지만 '휴, 하마터면...' 이라고 안도한 적은 많았다. 크나큰 재난은 테스트코드와 동료들 간의 코드리뷰를 통해 미연에 방지되었다.
코드리뷰를 만장일치제로 할 것인지 아닌지는 고민의 대상이지만, 우리팀은 가능하면 모든 팀원이 리뷰를 할 때까지 기다린다. 꽤 살벌하고 성의있게 리뷰하므로 PR은 늘 긴장된다. 이것만큼은 꼭 필요한 긴장감이라고 생각한다. 리뷰댓글과 리뷰에 대한 대댓글은 각자 공부를 해서라도 논리적인 허점이 없이 달되, 말투는 둥글게 한다. 리뷰는 어디까지나 서로의 작업물에 도움을 주려는 것이기 때문에, 리뷰의 내용은 가능한 한 적극적으로 반영한다.
백엔드팀 뿐 아니라 프론트엔드팀도 기능 구현시 유닛테스트를 작성한다. (최근 약간 느슨해지고 있기는 하다) 유닛테스트를 구현하는 이유 중에는 애티튜드도 있다. 테스트 드리븐까지는 아니더라도 간단한 유닛테스트를 추가하는 것만으로도 코드를 대하는 시야를 넓고 깊이 있게 가질 수 있다는 한 상급자분의 말씀이 기억이 난다.
작업내용을 상세하게 공유할 필요가 있다면 문서화에도 꽤 공을 들인다. 일종의 동료학습이 이루어질 수 있도록 내가 겪은 상황과 작업의 배경, 주요 기술적인 내용을 정리하면 추후 팀원이 내 작업, 혹은 그것과 연관된 작업을 할 때 도움을 얻을 수 있고, 덧붙일 내용이 있다면 더 추가해 팀의 지식 자원을 늘릴 수도 있을 것이다.
이것이 우리팀의 개발문화이다. 이 규칙들이 처음에 어떻게 만들어졌는지 나는 잘 모르지만, 단점보다 장점이 많아 지금까지 지켜지고 있는 것 같다.
여기까지 읽었다면 이런 생각이 들 수 있다.
'너무 오래 걸리는 것 아니야?'
그렇다. 우리 개발문화의 단점 중 하나는 작업이 반영되기까지 오래 걸린다는 점이다. 올해 들어 개발팀 구성원이 많이 바뀌면서 좀더 그러한 단점이 두드러지게 되었고, 합을 맞추고 적응하는 데 시간을 들이느라 처음에 욕심냈던 만큼의 앱 기능 업데이트 계획을 전부 수용하기는 어려웠다. 하지만 힘들고 어려워도 개발문화라는 심리적 저지선을 지켜내야만 한다고 생각했다. 우리가 지키고 있는 개발문화는 팀원들이 서로를 신뢰할 수 있는 기반이기 때문에.
우리의 경쟁사 씽씽 앱은 흐름이 매끄럽고 가벼우며, UI 도 귀엽다. 과하지 않게 귀여워서 볼수록 매력있다. 그밖에 몇몇 공유킥보드 앱들도 열심히 사용자경험을 높여가는 것이 보인다. '우리앱은 그들보다 안정적인가?' '좀더 디테일한 부분까지 매끄럽게 구현했나?' '어떻게 더 가볍게 만들지?' '앱스토어의 사용자 리뷰에 개발자가 직접 상세한 답변을 남기는 게 좋을까?'
걱정은 꼬리를 물고 이어지다가 가장 근본적(?)인 질문에 도달한다.
'일단, 이번 릴리즈 일정 맞출 수 있을까?'
팀원 중에는 나보다 꼼꼼하고 섬세한 동료도 있고, 경험과 추진력, 속도 면에서 뛰어난 동료도 있다. 각자 중요하게 생각하는 것들이 있고, 의사소통이 어려울 때도 있다. 하지만 최대한 싱크를 맞춰나가기 위해 노력하고 있고, 지금의 개발문화는 현재의 우리에게 최선이다. 회사에서 만들어보고 싶어하는 기능과 업데이트하고 싶어하는 디자인이 많은 상황에서, 지금 정도의 개발문화와 코드품질을 유지하는 것도 쉽지는 않은 것 같다. 서비스가 있어야, 품질도 있는 것이다. 그렇다고 해도 버그는 있으면 안된다. 이건 참 어려운 문제인 것 같다.
Photo by Maxim Hopman on Unsplash