바로가기 메뉴
본문 바로가기
대메뉴 바로가기

TECH M

SW 생산성, 어떻게 높일까

2016-06-29유석문 라이엇게임즈 기술이사



생산성은 산업 분야에서 매우 중요하다. 기업이 생존하고 발전하기 위해서는 수익이 필요하고 동일한 환경이라면 생산성이 높은 기업이 더 높은 수익을 올릴 수 있다.

특히 소프트웨어(SW) 산업 분야는 서비스 제공이 시공간의 제약을 받지 않기에 글로벌 경쟁이 매우 치열하다. 당연한 결과로 경쟁에서 살아남고 성장하기 위해서는 생산성이 높아야 한다.

그렇다면 SW 산업 분야에서는 어떻게 생산성을 측정하고 관리하는 것일까?

SW 산업 분야의 생산성을 측정하는데 사용된 범용의 방식은 SLOC(Source Lines Of Code)다. SLOC는 개발자가 작성하는 코드를 최종 산출물로 보고 단일 시간에 더 많은 코드를 생산하면 생산성이 높다고 평가한다.

하지만 개발자가 불필요한 코드를 만들어 낸다면 유지보수 비용이 높아지고 변경이 어려워 생산성이 낮아진다. SLOC는 단지 무슨 일이 벌어지고 있다는 것을 알려줄 뿐 생산성을 대표할 수 없는 것이다.

개인이 아닌 팀 단위로 생산성을 측정하거나 기능점수(Function Point)를 이용하는 방법이 사용되기도 한다. 예를 들어 생산성을 투입한 비용 대비 얻은 수익으로 계산하는 방법이 있다.

이 방법은 조직 내의 부분 최적화가 필요하거나 조직 간 경쟁이 심한 경우와 수익이 장기간에 거쳐 발생하는 경우에 현재의 생산성을 측정하기 어려운 제약을 안고 있다.

이를 보완 하고자 오류의 수, 복잡도, 검사방법(Test Coverage), 예상 대비 실 투입 시간 등의 지표를 추가로 사용하지만 생산성을 정의하는데 실패했다.

새로운 생산성 관리법, 애자일

SW 개발 생산성 측정의 문제와 낮은 생산성 문제를 해결하고자 2000년대 초반 개발자 중심의 애자일(Agile) 활동이 소개됐다. 애자일에서는 SW를 사용할 ‘고객’이 원하는 기능을 얼마나 빠르고 효과적으로 개발해 고객에게 인도하는지가 생산성의 핵심이다.

애자일 활동에서는 아무리 많은 기능을 개발하더라도 고객이 원하는 기능이 아니면 생산성은 ‘0’으로 판단한다. 고객이 원하지 않는 기능을 만들 바에는 차라리 아무 것도 만들지 않는 편이 생산성이 더 높다. 적어도 자원을 낭비하지는 않았기 때문이다.

고객이 원하는 기능을 빠르게 개발하려면 ‘짧은 사이클 타임(Cycle time)’과 ‘높은 품질(Quality)’이 중요하다. 사이클 타임은 고객이 원하는 기능이 고객에게 인도될 때까지 걸리는 시간을 말하며, 짧을수록 생산성이 높다. 품질은 기능이 고객의 기대대로 동작하며, 수정하거나 새로운 기능을 추가하기가 용이할수록 생산성이 높다.

사이클 타임을 짧게 하기 위해서는 효과적인 의사소통이 필요하다. 고객이 원하는 것이 무엇인지를 파악하고 고객이 원하는 대로 구현하려면 고객과의 의사소통, 실무 부서간의 의사소통이 잘 이뤄져야 한다. 이들 간의 의사소통이 효과적이지 않다면 오해가 발생하게 돼 귀중한 자원의 낭비를 유발하기 때문이다.

또 고객이 원하는 기능을 우선순위에 맞춰 나누고 정의하는 작업이 필요하다. 12개의 기능을 1년 동안 개발해 한 번에 고객에게 전달하는 것보다는 고객이 가장 원하는 기능부터 하나씩 순차적으로 개발해 매달 인도하는 것이 낭비를 줄이고 생산성을 높이는데 유리하다.

고객은 짧은 주기로 가장 필요한 기능 순으로 사용할 수 있고, 개발자는 고객의 피드백을 자주 받을 수 있어 고객이 원하는 기능을 개발할 확률이 높아진다.

SW 생산성의 또 다른 요소인 품질을 높이기 위해서는 버그를 줄이는 것이 필수다. 버그란 고객이 의도한대로 동작하지 않는 모든 종류의 오류를 의미한다. 버그가 발생하면 생산적인 작업에 사용할 자원을 버그 수정에 사용하게 되므로 생산성이 낮아진다. 고객의 만족도 또한 떨어진다. 버그의 발생 원인은 다양하지만 잘못된 의사소통 때문에 나타나는 경우가 많다.

여름에 신을 등산용 신발이 필요한 고객의 요구사항을 오해해 여름철 시원하게 신을 샌들을 만들어 준 경우를 상상해보자. 여름이라는 조건을 오해한 것이다.




고객과의 의사소통이 생산성 높인다

이런 버그를 줄이고 생산성을 높이려면 고객과 효과적으로 의사소통 할 수 있어야 한다. 만드는 목적이 무엇인지, 지금 개발 중인 기능이 고객의 의도에 부합하는지 짧은 주기로 피드백을 받아야 하며 이러한 내용을 개발에 참여하는 모든 참가자가 정확히 이해하고 있어야 한다.

버그가 발생하는 다른 유형은 개인이 실수하는 경우다. 모든 사람은 실수를 하기에 이런 유형의 버그를 완벽히 방지할 수는 없다. 가능한 실수를 빨리 발견하고 수정하는 것이 현실적이고 효과적인 해결책이다.

제조업의 경우 품질관리(QC)가 생산공정의 마지막에 위치하고 전담인력이 담당하는 경우가 많다. 이 방식의 문제점은 버그의 발견이 늦어지고 담당자 외에는 누구도 품질에 관심을 갖지 않는다는 것이다.

최근 SW 개발 분야에서는 품질보증을 생산과정의 앞 단계부터 전체 공정에 걸쳐 고루 사용한다. 또 품질보증을 하나의 역할에 일임하지 않고 참여자 모두의 공동 책임으로 지정하고 있다. 가능한 빨리 버그를 찾아 수정해 생산성을 높이는 것이다.

SW 개발에서 생산성이란 단순히 더 많은 기능을 만들어 내는 것이 아니다. 높은 생산성의 의미는 고객이 최대의 만족을 느끼도록 고객 중심의 개발을 진행하는 것이며, 이 과정에서 낭비 요소를 제거해 보다 빠르게 고객이 원하는 기능을 인도하는 것이다. 이러한 목표를 달성하기 위해서는 좋은 인력이 필수이다.

좋은 인력이란 자신의 담당 업무를 수행할 수 있고 지속적으로 개선해 발전시키며 주변과 효과적으로 협업할 수 있는 사람을 말한다. 그러기 위해서는 오랜 시간에 걸쳐 지식과 경험을 쌓아야 한다. SW 산업은 최첨단 분야이지만 인력에 대한 의존도가 가장 높은 산업이다. 아무리 좋은 컴퓨터와 솔루션을 갖춘 경우라도 결국 이를 개발하고 운영하는 것은 사람이기 때문이다.

요즈음 주변에서 생산성이 낮아 걱정이라는 이야기와 함께 좋은 인력을 찾지 못한다는 푸념을 자주 듣고는 한다. 생산성을 높일 수 있는 좋은 인력이 없는 것이 문제라면 해당 조직이 좋은 인력을 키워내기 위한 투자에 나서야 한다.

인력에 대한 교육과 투자 없이는 좋은 인력이 성장할 수 없으며 아무리 좋은 인력을 채용하더라도 순식간에 평범한 인력이 되어 버리기 때문이다. SW 산업 분야의 생산성은 결국 ‘사람’이다.

<본 기사는 테크M 제38호(2016년6월) 기사입니다>

뉴스