그것은 규칙과 절차. 그리고, 목적이 명확하게 하면 됩니다.
개발자들은 누구나 대부분 프로젝트에 대한 빠른 결과물을 만들고 싶어 합니다.
그리고,
그것을 만들기 위해서 야근을 하거나 주말에 근무하는 것도 그렇게 중요하게 생각하지 않습니다.
그냥, 프로젝트와 소프트웨어 개발에 최선을 다하게 됩니다.
이들에게...
맛난 음식과
관리자나 경영진의 일정 압박 등은
큰 의미가 없습니다.
오늘 글에서는 개발자에게 열정을 가지게 하고, 열정을 높이는 몇 가지 방법을 적어보겠습니다.
그리고, 말미에 열정을 식게 만들고, 열정을 버리게 되는 것들도 몇 가지 이야기해보도록 하죠.
개발자들에게 열정을 높이는 방법.
첫째. 개발자들에게 개발 프로세스가 확립된 상황을 만들어줍니다. 개발자들은 구체적인 요청사항에 맞추어서 가능한 맞추어진 방법, 문제 해결을 위한 고민, 테스트나 배포 등의 안전책을 최대한 고려할 수 있는 환경을 원합니다. 그들이 원하는 개발 프로세스를 맞춰주세요. 물론, 쉽지 않습니다. 일정이 늘어나고, 인력이 증가하니까요.
둘째. 구체적인 목표와 도달했을 때에 개발자들이 얻을 수 있는 개발 성과에 대한 구체적이고 기술적인 목적이 명확하게 해줘야 합니다. 단지, 급여나 인센티브라는 숫자로만 표시되지는 않습니다. 내가 만든 이번의 서비스와 기능들이 과거의 나보다 한 단계 더 증가될 수 있는 목표와 과제를 명확하게 해주어야 합니다.
그래서, 개발팀장과 CTO들은 그 과제들의 도전 목표들을 더 잘 만들어 주려고 애쓰죠.
셋째. 개발자들이 천시받고 있거나, 개발자들이 무시받지 않는 상황을 만들어 준다. 특히, 기획자나 비개발자 출신의 관리자들과 대화하면서 개발자들이 무시되는 발언과 말을 많이 듣게 됩니다.
'왜! 쉽게 되는 일 아니냐?' '왜? 동일한 버그가 똑같이 나오느냐?' 비개발자인 '자신에게 오류 상황을 모두 설명해봐라!'등등이 개발자가 무시받고 있다고 느끼게 되는 상황들입니다. 그들을 무시하지 말아 주세요.
넷째. 가능하다면, 목표가 명확하고. 단계별로 변화되는 기획서의 구성이 튼실할수록 개발자들은 행복해합니다. 구체적인 일정이 맞아 들어가고, 만들어야 할 단계들이 명확하면 명확할수록 개발자들은 즐겁습니다. 만들어야 할 목표들이 부정확하고, 개발하면서 필요하거나 부족한 상황들을 하나씩 찾아가는 상황은 고통스럽습니다. 개발자들에게는 가능한 구체적인 상황으로 설명이 되어야 합니다.
다섯째. 소프트웨어는 버그가 발생할 수 있습니다. 어떤 상황에서도 완전한 상황은 존재하지 않습니다. 그래서, 개발자들은 문제를 해결하기 위해서 최선을 다합니다. 문제 해결을 위해서 최선을 다하는 개발자를 다그치지 마세요. 옆자리에 와서 다그친다고 문제가 해결되는 것도 아닙니다.
심지어, 서버나 서비스 등은 복합적인 이슈로 문제가 발생합니다. 기존 레거시 코드, 기존 개발자가 만들어 두었던 코드, 표준에 어긋나는 상황, 개발자의 실수들, 프레임워크의 버그, 상상하지 못한 단계에서 만들어진 예측 못한 상황까지 복잡한 상황들에 대해서 추리를 단계적으로 해야 합니다.
물론, 그런 상황을 만들기 싫어서.. 대부분의 개발자들은 테스트와 실험을 더 많이 하려고 하고, 기획서가 더 튼튼해지기를 바랍니다.
여섯째. 빠르게 개발하는 방법이 있습니다만, 개발자들은 그런 방법을 선호하지 않습니다. 왜냐하면, 개발자들이 급하게 만든 소프트웨어들 대부분은 버려진다는 것을 알고 있으니까요.
일곱째. 테스터가 많거나, 테스트를 꾸준하게 해 줄 수 있는 동료들이 있고, 그들을 믿고 싶어 합니다. 관련 조직을 만들거나, 해당 담당자들을 뽑아주세요. 개발자들은 자신이 만든 코드에 대한 자부심이 높아서 테스트를 하지 않는 것이 아니라, 정해진 방식대로만 동작하는 자신의 코드를 더 완전하게 해 줄 동료들을 원하기 때문입니다.
여덟 번째. 동료를 믿고 따르도록 해주세요. 개발자들은 서로 간에 비판하거나, 코드에 대한 이야기를 자주 할 수 있습니다. 하지만, 비개발자들의 무논리적인 상황에서의 비난을 하는 모습을 보게 된다면, 그 상황 자체에 대해서 불편해하고, 동료에 대한 방어적인 생각들이 만들어집니다.
오류와 에러에 대해서 최대한 사전에 만들어지지 않도록 애를 쓰고, 만들어졌다면, 애를 쓰는 개발자들을 측은하게 생각해 주세요.
아홉 번째. 대부분의 개발자들은 머릿속에 현재 담당하는 개발업무들을 담고 다닙니다. 출근을 하고 퇴근을 한 뒤에도, 심지어 주말에 쉬다가도 코드에 대한 고민을 하고 있습니다. 그들이 업무에 애정을 가지고 열정을 가지게 하려면, 코드를 여유 있게 생각하게 해야 합니다.
열 번째. 개발자에게 불타오르는 열정을 가지게 하려면, 이 세상에 없던 그 무언가라는 당위성이 부여되어야 합니다. 그리고, 충분한 단계와 시간을 거쳐서, 해당 코드를 완성할 수 있게 해야 합니다. 하지만, 실제 프로젝트는 그런 상황을 만들기 어렵습니다.
가능한 영영과 대충 만들어야 할 영역, 그리고, 정말 공을 들여야 할 영역들로 구분할 수 있게 해 주세요.
.
.
.
그렇다면, 개발자들에게서 열정을 깎아내리는 방법은 무엇일까요?
첫째. 당위성 없는 야근 강요
둘째. 성공했을 때에 인센티브와 같은 지킨 적 없고, 지켜지지 않을 약속을 하는 것.
셋째. 내가 하면 5분 안에 하겠다고 비개발자가 개발자 앞에서 떠드는 것.
넷째. 구체적이지 않은 개발 내용을 가지고 개발을 해야 하는 상황
다섯째. 변덕스럽고, 자주 바뀌는 요구사항을 당연한 듯 이야기하는 기획자와 경영자
여섯째. 개발자의 기술 스킬에 대해서 대단하지 않다고 폄훼하는 명문대 출신의 경영자와 관리자
일곱째. 개발자에 대해서 잘 알지도 못하면서, 굳이 개발자를 컨트롤하려는 상황의 반복
여덟 번째. 일정과 품질에 대해서 계속 관여하는 비개발자들의 상황
아홉째. 개발자들이 원하는 환경을 만들어주겠다고 하면서, 특별하게 지원되지 않는 상황의 반복
열 번째. 개발자들이 안된다고 하고, 이해시키기 어려운 상황에 대해서 비논리적으로 대응하는 단계
나열하면 끝이 없겠지만, 몇 가지 끄적거려봅니다.