프로들은 일과 중에 업무를 끝낸다
내 인생에 필히 손절하고 싶었던 단어 중 하나였다. 남들보다 더 하지 않으면 뒤쳐질 거라는 불안감, 항상 빠듯한 데드라인, 빼먹을 수 없는 눈치 등 여러 가지 이유로 야근을 했었다. 그리고 야근 때문에 약속을 취소해야 했던 날들, 잠이 부족했던 날들, 애인을 기다리게 했던 날들이 수도 없이 많았다.
지금은 야근 없는 인생을 살고 있는지 벌써 2년이 되었고, 야근으로 채웠던 자리에는 가족과의 즐거운 시간, 운동, 자기 계발 등 내 삶을 가치 있게 해주는 시간들로 가득 채웠다. 개발자로서 나의 가치는 더 올라갔고, 억대연봉을 받으며 뛰어난 동료들과 일할 수 있는 기회도 얻게 되었다.
이번 글에서는 내가 어떻게 야근 없이 개발자로 사는 노하우를 나눠보려 한다.
소프트웨어 개발은 몇 달에 걸친 프로젝트도 있고 일주일이 채 안 되는 것들도 있다. 그렇지만 개발자가 정시에 퇴근하기 위해서는 오늘 반드시 해야 할 분량을 업무시간 내에 마무리할 수 있어야 하고, 오늘의 개발 목표가 무엇인지 알고 있어야 한다.
하루의 개발목표를 설정하는 방법은 프로젝트의 허용 기준(Acceptance Criteria)을 달성하기 위해서 필요한 모든 요소들을 목록화 한 뒤 하나씩 처리해 나가면 된다.
간단한 예를 들자면 아래와 같다.
API개발 작업에 필요한 스키마, 백엔드 로직, 엔드포인트, 테스트 등 큰 구조를 두고, 개발해야 하는 구체적인 작업들을 나열한다.
1. 스키마: 필드 설정 작업, 조건 설정 작업, 스키마 조건 유닛테스트 작성
2. 백엔드 로직: 스키마 연결, 데이터 호환, 데이터 호환 유닛테스트 작성
3. 엔드포인트: 경로 설정, 리퀘스트/리스폰스 검증, 응답 유닛테스트 작성
오늘 일과 중에 반드시 완료해야 하는 일
스키마 연결 작업, 데이터 호환 작업
내일로 미뤄도 괜찮은 일
데이터 호환 유닛테스트
업무를 구체적으로 분할하기 시작하면 하루에 가능한 개발 분량을 대략 측정할 수 있게 된다. 계획대로 모든 일이 진행되지 않기 때문에 어느 정도의 유연함을 가지고 있어야 하지만, 하루의 목표 달성에 집중하면 전체적인 프로젝트를 큰 기복 없이 진행할 수 있다.
예전에는 하루에 개발을 얼마큼 해야 하는지 딱히 생각 없이 개발을 했었다. 퍼포먼스의 기복이 심하다 보니 잘되는 날은 많이, 안 되는 날은 적게, 그러다가 마감기한이 가까워지면 조급해져서 야근을 했고 개발 중 실수도 잦았다. 이제는 하루의 개발에 집중한다. 기복이 아예 없는 것은 아니지만 일정한 수준의 퍼포먼스를 유지하고, 하루의 목표를 달성한 뒤 뿌듯한 마음으로 노트북을 덮는다.
현업에서 개발자가 마주하는 어려움 중 하나는 업무의 흐름이 시도 때도 없이 끊긴다는 점이다.
개발자가 개발에만 집중할 수 있다면 데드라인을 맞추는 일이 크게 어렵지 않겠지만, 이런저런 회의에 불려 들어가고, 시도 때도 없이 치고 들어오는 질문에 대답도 해야 하고, 뜬금없이 버그가 발생하기도 하는 등 흐름을 끊기는 요소들이 나타난다. 그리고 이렇게 하나둘씩 쌓여간 잡무들 때문에 개발할 시간을 놓치면, 결국 프로젝트 데드라인을 맞추려면 어쩔 수 없이 야근을 해야 하는 상황이 발생하게 된다.
야근을 하지 않기 위해서는 개발에 집중할 수 있는 시간을 업무시간 중에 확보해야 한다.
일과 중 개발에 집중할 수 있는 시간을 반드시 확보하여 우선순위를 가지고 일을 하자. 일과 중에 중요한 개발을 마무리하기 시작하면 야근을 할 필요가 없어진다.
분야를 막론하고 본연의 업무를 잘하는 것이 중요하다. 축구선수 리오넬 메시를 생각해 보자. 우리는 그가 보여주는 놀라운 축구 실력에 열광하는 것이지 결코 다른 요소에 열광하는 것은 아니다. 같은 맥락에서 개발자도 개발 성과가 가장 중요하다. 회의에 참여하는 것도, 질문에 답을 잘해주는 것도 결코 회사생활에서 무시할 수 없는 부분 책임 중 하나다. 그러나 개발자에게는 이런 부수적인 것들이 개발보다 우선순위를 가져서는 안 된다.
나의 경우 오전에는 Standup(15분 내 짧은 일일 업무보고) 외에는 모든 회의를 거절함으로 최소한 세 시간을 개발에 집중할 수 있도록 만든다. 사내 구글 캘린더에 'ㅇㅇㅇ 작업 중'이라고 시간을 정해놓고, 미팅 요청이 들어오면 자동으로 거절하도록 설정해 놓고, 집중을 크게 요구하는 개발을 할 때에는 메신저 알람조차 꺼놓는다. 공개적으로 캘린더를 막아놓거나 메신저 상태에 '바쁨'이라고 올려놓는 것만으로도 대부분의 질문이나 요청은 먼저 보는 동료들이 답변을 하고, 정말로 급한 내용일 경우 어떻게든 연락이 오게 된다.
개발 시간을 보호하기 위한 또 다른 방법은, 반복되는 문제들을 해결하는 시스템을 만들어서 나 대신 일을 하게 만드는 것이다.
개발자가 직접 나서야 하는 일들은 사실 그렇게 많지 않다. DRY(Don't Repeat Yourself) 접근법을 개발 외 영역에서 활용해 보자. 시간을 빼앗는 것들은 패턴이 있기 마련이고, 자세히 들여다보면 해결책을 찾아낼 수 있다.
나의 개발 시간을 빼앗기는 대부분의 일들을 보면 디자이너나 프론트엔드 개발자들로부터 오는 질의응답시간이었는데, 그중 절반 이상이 백엔드 구조와 API에 대한 질문들이었다. 처음에 친절하게 대답을 해주다 보니 나중에는 사소한 것들도 찾아보지 않고 그냥 물어보는 사람들이 많아졌고, 심지어 다른 개발자들에 비해서 대답을 잘해준다는 소문이 돌아서 남의 업무도 나에게 질문하러 오는 경우도 종종 있었다.
앵무새도 아니고 같은 말을 여러 번 반복하는 것은 참 골치스러운 일이었다.
마침 팀 페리스의 '나는 4시간만 일한다'를 읽고 있었는데, 중요한 일에 집중하기 위해서는 우선순위가 낮은 일들을 남에게 맡기는 습관(레버리지)을 길러야 한다는 내용에서 영감을 받았다.
비슷한 질문이 왜 여러 사람에게서 나오는 것일까 생각해 보니, 질의응답을 체계적으로 정리해 놓은 문서가 없기 때문이라는 것을 깨달았다. 그래서 자주 받았던 질문들을 문서로 정리했고 사내 메신저에 공유를 했다. '질문을 하기 전에 이 문서를 한번 읽어주시고, 문서에서 찾을 수 없다면 메신저로 연락을 바랍니다'. 이후에는 반복적인 질문들이 들어오는 일이 확연히 줄었고, 중요한 질문들은 적절하게 문서에 업데이트해 가면서 사내 메신저로 공유를 했다.
어느 순간 반복된 일을 하고 있는 자신의 모습을 발견한다면, 자동화를 통해 시간을 벌 수 있다는 기회임을 잊지 말아야 한다.
개발자 커리어를 막 시작했을 때에는 모든 것이 중요해 보였고, 야근을 하는 것조차 성장을 하기 위해 필요한 노력이라고 생각했던 시기가 있었다. 그러나 야근이나 초과 근무가 잦아지면 항상 번아웃이 찾아왔고, 이런 식으로는 커리어 성장을 할 수 없다고 판단을 했다. 그래서 조금씩 꾸준히 성장하겠다는 목표로 다시 개발에 접근을 하면서 나만의 노하우들을 만들어내기 시작했다.
업무 시간을 최대한 활용하여 개발에 집중하는 방법을 택했고, 매일 하루에 정해놓은 목표 달성을 위한 노력을 하기 시작했다. 덕분에 퇴근 후 개발에 대한 신경을 끌 수 있었고, 가족들과 보내는 시간을 늘려가면서 적절한 휴식, 체력관리, 그리고 자기 계발에 힘쓸 수 있게 되었다. 좋은 컨디션으로 지치지 않게 꾸준히 개발을 한 덕분에 커리어 또한 자연스럽게 성장할 수 있었다.
어쩌면 내가 제시하는 방법들이 지금은 더 어려워 보일 수 있다. 그리고 이런 방식을 적용하는 데 걸리는 시간이면 그냥 하루 야근해서 몰아치면 해결되는 일들일 수 있다. 그렇지만 커리어를 운영하는 데 있어 원칙을 세우고 시스템을 갖춰놓으면, 에너지 소모도 줄어들고 지속 가능한 커리어 성장을 만들어 낼 수 있다.
제 글을 읽어주셔서 감사합니다.
글의 내용이 도움이 되었다면 지인들에게 공유를 부탁드리고, 이견이나 개선점이 있으시면 댓글 부탁드립니다.