Loading
2022. 2. 26. 21:30 - lazykuna

개발자의 실수와 패널티

개발자의 실수와 패널티

아... 또 빌드 깨졌네...

개발자도 사람이고, 그렇기 때문에 종종 실수를 저지른다. 실수는 프로덕션에 문제를 야기하고, 가볍게는 사내 구성원들에게 불편을 끼치는 것으로 끝나지만 크게는 고객에게 손실을 입히기도 한다.

그런데, 그렇다고 그게 개발자의 책임이 되어야 할까? 만약 책임이 되어야 한다면, 그게 어떤 모습으로 나타나야 할까? 대책은 있는 걸까?

개발자에게 패널티를 부여한다면?

굳이 패널티 안 가해도 이미 마음속으로는 저렇게 고문받는 중. 출처

책임을 전가하기에 가장 쉽고 단순한 방법은 바로 문제를 유발한 커밋을 한 개발자를 문책하는 것이다. 이유야 어쨌든간 그 사람 때문에 문제가 발생한 거니깐.

패널티의 모습은 다양하게 나타날 수 있을 것이다. 단순 잡무 추가에서부터 인센티브 감소까지...

그런데 저게 합당한 패널티가 맞나?

  • 잡무를 추가한다고 해서 실수를 덜 할 거라는 이유가 있나? 이건 정말 단순한 "징벌적 배상" 같은 건데, 여기서 잘못된 전제는 실수를 하고 싶어하는 사람은 아무도 없다는 거다. 차라리 실수를 줄이는 코드 디자인에 대한 책을 한권 더 읽히는 게 적합한 방안이다.
  • 인센티브 감소는 더더욱 웃기는 이야기다. 고객사에 손해를 입히면 돈을 깎는데, 내가 고객사에 기여했다고 돈을 그만큼 더 준적이 있기는 한지? 그런 회사가 있다면 난 기꺼이 그러한 패널티를 받아들일 수 있겠다

적어도 지금까지 보았단 내 경험상, 개발 실수에 대한 합당한 형태의 패널티가 가해진 적은 한 번도 본 적이 없다.

실수가 실력의 척도일까?

유이가 무슨 실수를 했는진 모르겠는데 아무리 봐도 실수한 표정이라 걍 넣었다

실수에 대한 페널티를 부여할 수 있는 또다른 정당한 이유는 바로 미숙하고 실력이 부족하기 때문에 실수를 유발했다는 전제가 있을 것이다. 물론 맞는 말일 수도 있지만, 난 이 전제에는 심각한 오류가 있다고 생각한다.

나는 작업량이 많고, 시간이 부족하고, 환경이 미흡할수록 실수할 확률이 자연스럽게 늘어난다고 생각한다. 만약 실수가 실력의 척도가 되려면, 이 모든 요인들을 고려해서 평가가 되어야 한다고 생각한다.

  • 비즈니스 이슈 : 고객사에서 급한 개발 요청이 들어왔다. 분명 넉달은 걸릴 작업이었지만, 어떻게든 3주 안에 개발을 마쳐서 급하게 production에 올려 놓았다. 너무나 당연하게도 지속적으로 문제가 발생하였다.
  • 플랫폼마다 다른 결과 : 꽤 거대한 개발을 수행하게 되었다. 빌드 코드도 고치고 라이브러리도 추가하고 이것저것 했다. 다양한 테스트를 만들고 내 머신에서 돌아가는 것까지 다 확인했다. 그런데 막상 production에 올려놓으니 빌드부터 오류가 발생한다. 보니까 환경변수 값이 달라 문제가 발생하고 있었다. 아무래도 이런건 클린빌드나 다른 머신에서 직접 수행해 보기 전까지는 알아내기 어렵다.
  • 리팩토링 후 테스트 도구 부족 : 한 직원이 기존 코드의 구조를 대대적으로 개선하여 리팩토링을 수행하였는데, 기존 유닛 테스트가 하나도 없는 부분이라 수정 후 지속적으로 문제가 발생.

만약 저런 실수들에 대해 패널티가 들어간다면, 단순히 로직 몇 줄 고치는 "코드 노동자"가 최고 고과를 받게 될 거고, 리팩토링이나 모듈 전체 설계 및 개발하는 사람들은 평가에서 감점 요인을 받게 될 여지가 크다. 아무도 어려운 개발을 하지 않으려고 할 것이다. 과연 이게 맞을까?

실수에 대한 회사의 책임은 없을까?

최근 실수를 방지하기 위한 많은 방법론과 결과물들이 많이 나오고 있다. 프로그램 차원에서 strict한 문법을 지원하는 경우도 많아졌고 (c++의 컴파일 옵션, rust, typescript의 도래 등), unit test, code coverage, integrated test 등 많은 것들이 생겨났고 지금도 생겨나고 있다.

프로그래밍 언어도 계속 발전한다. 그 느슨하던 js도 꽤 오래전에 use strict 같은게 생겼고 ... 런타임 이전에 오류 확인하기 좋아졌다.

그런데 이러한 것들 없이 개발하고 실수가 나왔다면, 과연 이 책임을 오롯이 개발자가 지는 게 맞을까?

모 트윗에서 이러한 점을 지적하기도 하였다. 사실 이 내용보고 여러 생각이 들어 이 포스트를 작성하게 되었다

만약 개발자가 잘못된 코딩으로인해 프러덕션에 오류가 났을때 개발자 개인의 잘못으로 치부한다면 그 회사를 떠나세요.
그것을 발견하지못한 시스템의 문제이고 프로젝트의 방법론의 문제입니다. 개발자와 일할준비가 덜되어있는 회사입니다.

개발자가 일할 수 있는 환경을 제공하는 건 회사다. 그렇기 때문에 나는 회사가 이러한 실정에 어둡다면, 회사 또한 어느 정도의 책임이 있다고 생각한다.

마무리하며

이 글은 전적으로 내 생각을 정리한 글이고, 이에 대한 관련 문헌은 내 지식이 짧아서 별로 첨부하지는 못했다. 그래서 더더욱 틀린 이야기가 있을 것 같다. 피드백 주시면 수정하는걸로... ㅎㅎ

다만 "실수는 오롯이 개발자의 몫"이라는 가스라이팅에 당하면 안 된다고 생각한다. 정말 본인이 실력이 없어서 실수를 하는 경우는 극히 드물었다. 그래서 실수의 원인에 대해서 알아야 한다고 생각하고, 이렇게 정리해 본 내용을 써 둔다.