2013년 1월 30일 수요일

티끌모아 태산 (개발 시간 절약하기)

성숙된 개발문화를 가지고 있는 회사는 개발 절차가 아주 효율적으로 진행된다.

하지만 그렇지 않은 회사들은 불필요하게 낭비하는 시간이 아주 많다. 10초에서 몇십분까지 자잘한 시간을 낭비해서 이것들을 합치면 어마어마한 시간이 낭비된다.

시간을 꼭 사용해야 할 중요한 곳에는 아끼지 말고 시간을 써야 한다. 하지만 자동화를 하거나 시스템이 커버를 할 수 있는데 사람이 반복적으로 하고 있거나 과도한 안전장치를 갖춘 프로세스로 인해서 비효율적으로 시간을 낭비하는 경우가 정말로 많다.

10초, 1분이라고 별것 아닐 것 같은 시간이 모이면 생산성은 10%, 20%, 50% 떨어지게 된다.

소프트웨어 개발은 워낙 복잡하기 때문에 이렇게 10초, 1분씩 낭비되는 시간을 최대한 제거해 나가면서 개발을 지속적으로 효율적으로 발전시켜나가는 노력이 필요하다.

회사마다 여건이 조금씩 다르지만 몇가지 예를 들어보겠다.

10초라도 낭비하면 아까운 시간들이다.

  • 빌드가 완전 자동화가 되어 있지 않아서 소스코드를 빌드할 때마다 약간이나마 중간에 수작업이 들어가는 시간 - 빌드는 완전 자동화를 구현해야 한다. 당연히 Command line으로 빌드가 되어야 하고 한번의 Enter로 최종 설치본까지 생성이 되어야 한다.
  • 이슈(버그)관리시스템을 잘 관리해보고자 너무 많은 커스텀필드를 넣어서 이슈(버그)를 등록할 때마다 몇초씩 더 걸리는 시간 - 적당한 커스트마이징은 필요하지만 과도함은 삼가해야 한다.
  • 이슈관리시스템이 있는데 보고나 관리를 위해서 별도의 자료를 만드는 시간 - 이슈관리시스템을 이용하면 원하는 View로 원하는 정보를 실시간으로 볼 수 있다. 관리자도 보고를 기다리지말고 직접 이슈관리시스템을 봐야 한다.
  • 여러벌의 Branch에 같이 존재하는 버그를 동시에 고치기 위해서 수작업을 할 때 - SCM의 Merge기능을 믿지 못하거나 기능을 활용할 줄 몰라서 수동으로 Merge를 하는 행위는 정말 시간 낭비이다. 제대로만 사용한다면 SCM의 Merge기능은 막강하고 99.9% 믿을만하다. 수작업이 아니고 최종적인 확인 정도만 해도 되는 경우가 대부분이다.
  • 개발자들의 주간 보고서 작성하기 - 이부분은 약간 논란의 이슈가 있다. 정말 간단한 주간보고서는 큰 무리가 없지만 부담스러울 정도의 주간보고서는 개발자들이 작성하지 않는 것이 좋다. 개발자들의 업무 기록은 이슈관리시스템 등에 다 남아 있다. 관리자는 개발자를 괴롭히지 말고 스스로 시스템을 보면 된다. 물론 기반시스템들이 잘 구축되어 있어야 한다.

이 외에도 코딩시 일반 업무시 절약할 수 있는 시간음 무궁무진하다. 이런 시간을 꾸준히 찾아서 제거해 나가는 노력이 필요하다.

2013년 1월 22일 화요일

재택근무가 가능한가?

우리 주변에는 비효율적인 개발 환경을 가지고 있는 회사들이 매우 많다. 상상외로 많다. 

스스로의 회사는 어떤가 생각해 보자. 나름대로 효율적인 개발문화를 가지려고 많은 노력을 해왔을 것이다. 그래서 과연 우리회사가 제대로 효율적인 개발문화와 환경을 가지고 있는지 궁금할 것이다.

이렇게 비교를 해보자. 당장 우리 회사의 개발자들이 모두 재택근무를 하면 어떻게 될까? 그리고 일주일에 딱 하루만 회사에 나와서 필요한 회의를 한다면...

대부분은 그렇게 해서는 회사가 돌아가지 않을 것이라고 생각할 것이다. 

그렇다면 아직 먼 것이다. 소프트웨어 회사가 효율적인 프로세스와 시스템을 갖추고 개발 역량과 성숙한 개발문화를 갖추고 있다면 얼굴보고 해야 할 일이 그렇게 많지가 않다. 일주일에 몇시간이면 충분하다.

일단 회의가 너무 많은가? 회의는 정말 비효율적이다. 꼭 필요한 회의가 아니면 대부분의 회의는 시간을 비효율적으로 사용하며 많은 인원의 시간을 한꺼번에 소비한다. 대분은 시스템으로 커버가 가능하다.

개발할 때마다 얼굴을 보고 설명을 해줘야 하는가? 주먹구구식 개발의 대표적인 현상이다. 효율적으로 작성된 SRS가 있다면 설명해줘야 하는 시간은 수십분의 일로 줄어든다. 줄어들어야 제대로 작성된 SRS이다.

수시로 물어봐야 해서 항상 자리에 붙어 있어야 하는가? 성숙한 개발 환경에서는 프로세스, 시스템, 문서등이 이를 대신한다. 

실제 이런 경험이 있는 않은 경우라면 즉, 기존의 적당한 주먹구구와 공력에 의해 개발을 했거나 비효율적인 프로세스를 적용해서 나쁜 기억만 가지고 있는 경우라면 이렇게 개발하는 것이 더 비효율적인 것이 아니냐고 반문을 하곤한다. 그렇게 하려면 문서를 너무 많이 적어야 하는 것이 아닌가? 프로세스나 시스템이 오히려 더 거추장스러운 것이 아닌가? 의문을 품을 수 있다.

책이나 인터넷을 보고 프로세스를 따라한 부작용이기도 하다. 태권도장에 가서 직접 태권도를 배우면 금방 되는 것이 책을 보고 배우면 대부분은 제대로 배우지 못하고 효율적이지 못한 것과 비슷하다.

프로세스, 시스템, 문서 모든 것은 개발을 빠르고 효율적으로 하기 위해서 존재하는 것이고 그보다 더 이상 이하여서도 안된다. 이는 제대로된 경험으로만 터득이 가능하다. 따라서 경험자나 전문가의 가이드가 필요한 것이다.

나름대로 개발 환경을 개선하기 위해서 열심히 노력한 경우라도 재택근무가 가능한 수준이 아니라면 아직 갈 길이 멀다는 것을 명심하자.

이제 효율적인 개발에 한발을 내딪였을 뿐이다.