What are you curious about?

  • Thoughts

프로젝트는 고점이 아니라 저점을 높여야 합니다

뛰어난 순간보다 바쁘고 지친 순간에도 지켜지는 품질이 중요하다. 자동화와 리뷰, 기록으로 프로젝트의 저점을 높이는 일.

HIGH ABOVE.
DEEP WITHIN.
SOFTWARE
PEOPLE
A BRIGHTER TOMORROW.

프로젝트를 하다 보면 유난히 잘 풀리는 순간이 있습니다. 실력 좋은 개발자가 어려운 문제를 단번에 해결하기도 하고, 며칠 동안 해결하지 못했던 문제가 누군가의 아이디어 하나로 풀리기도 합니다. 그런 순간을 보면 팀의 수준이 굉장히 높아 보입니다. 하지만 저는 프로젝트의 수준을 결정하는 것은 이런 고점이 아니라고 생각합니다.

오히려 중요한 것은 저점입니다. 가장 바쁜 시기에 일이 어떻게 돌아가는지, 담당자가 자리를 비웠을 때 다른 사람이 이어받을 수 있는지, 경험이 적은 사람이 작업했을 때도 일정 수준의 품질이 나오는지, 실수가 발생했을 때 그것이 어디까지 커질 수 있는지. 프로젝트의 진짜 수준은 오히려 이런 순간에 드러납니다.

뛰어난 사람에게 의존하면 저점은 낮아집니다

개발을 하다 보면 뛰어난 사람에게 의존하는 것이 가장 빠른 방법처럼 보일 때가 있습니다. 어려운 문제가 생기면 잘하는 사람이 해결하고, 급한 일이 생기면 경험 많은 사람이 처리합니다. 당장은 효율적입니다. 하지만 이런 방식이 반복되면 프로젝트에는 이상한 구조가 만들어집니다. “이건 저 사람만 알아요.” “이 부분은 건드리면 안 됩니다.” “문제가 생기면 그 사람에게 물어보세요.” 잘하는 사람이 계속해서 프로젝트의 고점을 만들어주지만, 그 사람이 없는 순간 프로젝트의 수준은 급격하게 떨어집니다.

그래서 저는 좋은 프로젝트란 뛰어난 사람이 얼마나 뛰어난 결과를 만들어내느냐보다 평범한 상황에서도 얼마나 괜찮은 결과가 반복해서 나올 수 있느냐가 더 중요하다고 생각합니다.

귀찮은 것들은 저점을 높이기 위해 존재합니다

생각해보면 우리가 개발하면서 귀찮게 느끼는 많은 것들이 사실 저점을 높이기 위해 존재합니다. 코드 리뷰를 합니다. 테스트 코드를 작성합니다. CI를 구축하고 자동화합니다. 코딩 컨벤션을 정합니다. 문서를 남깁니다. 로그를 남기고 모니터링 시스템을 만듭니다. 누군가는 이것들을 번거롭다고 생각할 수도 있습니다. 실력이 좋은 개발자 한 명만 놓고 보면 실제로 그럴 수도 있습니다. 잘하는 사람은 문서가 없어도 코드를 이해하고, 테스트가 부족해도 조심해서 수정하고, 배포 과정이 수동이어도 실수하지 않을 수 있습니다.

하지만 프로젝트는 항상 최고의 상태에서 움직이지 않습니다. 사람은 피곤할 수도 있고, 담당자는 휴가를 갈 수도 있고, 새로운 사람이 들어올 수도 있고, 마감 직전에는 평소라면 하지 않을 실수를 할 수도 있습니다. 그래서 좋은 프로세스는 사람을 최고로 만드는 것보다 먼저, 사람이 좋지 않은 상태에서도 프로젝트가 일정 수준 아래로 떨어지지 않도록 만들어야 합니다.

자동화의 가치는 편차를 줄이는 데 있습니다

저는 이것이 자동화의 중요한 역할 중 하나라고 생각합니다. 자동화라고 하면 보통 시간을 줄이는 것을 먼저 생각합니다. 10분 걸리던 일을 1분으로 줄이고, 사람이 하던 일을 프로그램이 대신하는 것입니다. 물론 그것도 중요합니다. 하지만 자동화의 더 큰 가치는 편차를 줄이는 것에 있다고 생각합니다. 숙련자가 하면 잘되고 초보자가 하면 잘못되는 작업, 어제는 제대로 했지만 오늘은 실수할 수 있는 작업, 사람마다 결과가 조금씩 달라지는 작업을 누가 실행하더라도 비슷한 결과가 나오도록 만드는 것입니다.

최고의 결과를 더 높이는 것이 아니라 최악의 결과가 발생할 가능성을 줄이는 것입니다.

사람에게 완벽함보다 구조를 만들어야 합니다

팀도 마찬가지입니다. 모든 사람을 최고의 개발자로 만드는 것은 어렵습니다. 모든 사람이 항상 최고의 컨디션으로 일하는 것도 불가능합니다. 그렇다면 우리가 할 수 있는 것은 사람에게 완벽함을 요구하는 것이 아니라 실수가 발생해도 잡아주는 구조를 만드는 것입니다. 한 사람이 몰라도 다른 사람이 알 수 있도록 하고, 기억하지 못해도 문서를 찾아볼 수 있도록 하고, 잘못된 코드를 작성해도 리뷰와 테스트에서 발견되도록 하고, 실수로 잘못된 변경을 하더라도 시스템이 막아주도록 하는 것입니다.

그러면 팀에서 가장 뛰어난 사람의 능력이 갑자기 올라가지는 않을 수도 있습니다. 대신 팀에서 가장 좋지 않은 순간의 결과가 조금씩 좋아집니다. 저는 그것이 프로젝트가 성장하고 있다는 중요한 신호라고 생각합니다.

오래가는 프로젝트는 쉽게 무너지지 않습니다

스포츠에서도 강한 팀은 매 경기 최고의 경기력을 보여주는 팀이 아닙니다. 컨디션이 좋지 않은 날에도 쉽게 무너지지 않는 팀입니다. 프로젝트도 비슷합니다. 잘하는 사람이 잘하는 것은 당연합니다. 시간이 충분할 때 잘하는 것도 당연합니다. 문제가 없을 때 잘 돌아가는 것도 당연합니다. 하지만 사람이 바뀌고, 시간이 부족하고, 예상하지 못한 문제가 발생했을 때도 일정 수준 이상의 결과를 만들어낼 수 있는 프로젝트는 많지 않습니다. 그래서 프로젝트를 개선할 때 저는 이런 질문을 던지는 것이 중요하다고 생각합니다.

“우리의 최고 수준을 어떻게 더 높일까?” 보다 먼저, “우리 프로젝트가 가장 형편없는 순간은 언제인가?” 그리고, “그 순간을 어떻게 조금 덜 형편없게 만들 수 있을까?” 고점은 뛰어난 사람이 만들어낼 수 있습니다. 하지만 저점은 프로세스와 문화와 시스템이 함께 만들어냅니다. 결국 오래가는 프로젝트의 경쟁력은 얼마나 높이 올라갈 수 있는가보다, 얼마나 쉽게 무너지지 않는가에 있을지도 모릅니다.

책을 읽는 이유는 답이 아니라, 내 생각을 잃지 않기 위해서입니다

책과 기록은 이미 안다고 생각했던 것을 다시 묻게 한다. 수많은 목소리 속에서 내 생각을 잃지 않기 위해 읽는다는 것.

양승민

안다고 생각하는 순간, 질문은 멈춥니다

같은 질문에도 경험과 관점에 따라 다른 답이 나온다. 이미 안다고 생각하는 것에도 질문을 멈추지 않으려는 이유.

양승민

직관은 경험이 압축된 결과입니다

빠른 판단 뒤에는 경험과 학습이 쌓여 있다. 직관을 결론이 아닌 확인할 신호로 받아들이고, 근거로 교정하는 태도.

양승민
See all