만약 여러분이 어떤 제품의 개발 책임자라고 상상해 보자.
불행하게도 이미 경쟁 제품은 시장에 나와 선풍적인 인기를 끌고 있는 상태다. 경쟁 상대가 신제품을 출시하기 전까지 대항마를 내놔야 하는데, 주어진 시간은 턱없이 짧고 준비도 완벽하지 않다. 품질을 고민하면 개발 기간은 턱없이 부족하고 , 시장을 생각하면 무리수를 두더라고 짧은 기간 내에 제품 개발을 완성해야 한다.
아마 이러한 상황은 국내에서 작던 크던 다양한 규모의 개발 조직을 이끄는 많은 분들이 겪는 어려움일 것이다. 물론 정답이 있는 것은 아니지만 분명 국내와 해외의 문화와 정서는 무척 다른 것 같다. 필자의 경험상 국내의 경우 품질 보다는 빠른 상품 출시를 위한 속도를 더 중요하게 생각한다. 여러 이유가 있겠지만 사회 문화적으로 과거 압축 성장을 통해 한강의 기적이라는 경제 성장을 경험했던 기성세대가 구축한 기업들 입장에서 시간이라는 변수 다시 말해 속도전은 의지를 통해 충분히 극복할 수 있다 라는 환상이 가장 큰 이유가 아닐 까 싶다.
과거 2년 전 쯤 , 고려대학교 장세진 교수 의 '삼성과 소니'란 책을 읽은 적이 있다. 이 책을 보면 과거 삼성전자의 윤종용 부회장이 주창한 디지털 사시미 전략이라는 것이 눈에 띈다. 디지털 사시미 전략은 한 마디로 “사시미에서 휴대폰에 이르기까지 모든 일상제화에 공통적으로 적용되는 핵심으로 아무리 비싼 사시미라도 시간이 지나면 가격이 떨어지듯이 디지털 제품의 재고는 치명적이기 때문에 스피드가 모든 것이고 가장 중요한 것”이라는 얘기다. 제품 생산에서 부터 판매에 이르기까지 속도를 강조한 전략이다.
그렇다면 온라인 서비스나 소프트웨어 제품에 있어서 스피드는 과연 어떤 요소일까? 특히, 품질과는 어떠한 상관 관계가 있을까?
물론 다른 제품과 마찬가지로 소프트웨어와 서비스에게 품질과 스피드는 모두 중요한 경쟁 요소다. 아무리 잘 만든 소프트웨어도 이미 다른 제품이 시장을 선점했다면 시장 진입이 어려울 수 밖에 없다. 따라서 치열한 경쟁을 위해서는 속도전을 펼칠 수 밖에 없다. ( 물론 이러한 소프트웨어의 속도전 이면에는 품질 문제와 개발자의 희생이라는 문제가 숨어 있을 수 밖에 없다. 마치 과거 한강의 기적이라는 압축 성장의 이 면에 많은 사람들의 희생이 있었듯이 말이다. )
그러나 이러한 속도전과 더불어 가장 중요한 부분은 품질 문제다. 아무리 빨리 시장에 서비스와 제품을 출시해도 품질에 문제가 있다면 결코 성공할 수 없다. 그렇다면 소프트웨어와 서비스를 개발하는 데 있어 어떻게 품질을 만족 시켜 내면서 속도전을 펼칠 수 있을까? 특히, 소프트웨어와 서비스에 있어 품질이라는 것은 단순히 버그나 오류같은 기능적 결험 수준만을 말하는 것이 아니다. 기능적 품질외에 제품의 사용성(Usability)이라는 아주 중요한 것을 포함하고 있다. 사용성은 사용자 입장에서 원하는 기능과 서비스를 손쉽게 찾아서 활용할 수 있도록 제공하는지를 의미한다.
일반적으로 소프트웨어 품질보증 과정에서 사용성 테스트(Usability Test)는 개발 후 임의의 사용자들에게 특정 작업을 수행하게 하면서 이를 녹화하거나 기록해 문제점을 찾은 후 사용성을 개선한다. 또 기능적인 버그는 개발자의 1차 단위 테스트 후 빌드가 나오면 이를 전문 품질관리팀을 통해 검사한 후 일정 수준까지 반복적으로 품질을 개선한다. 이러한 복잡한 과정들과 많은 비용과 시간을 투자한 후 제품을 출시한다.
최근 들어서는 이러한 품질과 사용성 테스트에도 변화가 있다. 바로 알파 공개, 베타 공개(테스트)란 형태를 통해 공개적으로 진행되고 있는 것이다. 최초 소수의 마니아를 대상으로 한 알파 단계를 통해 해당 서비스의 사용성과 품질을 향상 시킨 후, 이를 베타 수준으로 공개한다. 이 후, 주 단위나 심지어 일 단위로 품질과 사용성을 개선하여 사용자에게 최적화된 서비스와 소프트웨어를 제공한다.
스피드와 품질은 이러한 소프트웨어 사업의 숨은 경쟁력이다. 현재 상황에서 스피드가 늦은 소프트웨어와 서비스는 절대 성공할 수 없다. 경쟁없는 상황은 상상할 수 없다. 경쟁이야 말로 발전의 원동력이다. 경쟁을 가장 잘 활용하고 있는 분야가 바로 스포츠다. 축구나 야구에서 특정 포지션의 주전 경쟁은 경쟁하는 사람에게는 피말리는 일이겠지만 전체 팀장 입장에서는 팀원의 능력을 배가 할 수 있는 가장 적극적인 방법이다.
물론, 이 과정을 통해 경쟁하는 사람도 발전 한다. 한 사람의 페이스가 떨어지거나 다른 사람이 치고 올라오면 기회를 잃게 된다. 이 과정에서 중요한 것은 바로 스피드다. 빠른 시간내에 자신의 능력을 보여주어야만 경기에 출전을 할 수 있다. 출전 기회를 못 잡으면 경쟁에서 멀어지게 되고 결국은 낙오하게 된다.마찬가지로 온라인 서비스나 소프트웨어 분야에서도 마찬가지다. 경쟁업체보다 빠르고 신속하게 제품과 서비스를 업데이트 해야 하며, 신규 기능과 서비스를 지속적으로 보여줘야 한다. 보여주지 못한다면 결국은 낙오하게 된다.
서비스와 소프트웨어 개발에 있어 시간을 줄일 수 있는 방법에 대해 고민해 보자. 물론 시간을 줄인다고 해서 품질까지 떨어뜨린 다는 것은 절대 아니다. 품질과 사용자의 관심을 유지하는 것이 바로 스피드의 효과이다.
- 초기 지나친 인프라 구축 및 관리에 드는 비용과 시간을 줄여야 한다.
일반적으로 하나의 서비스를 개발하고 운영하기 위해서는 하드웨어 구매/설치/셋팅/튜닝, 개발 환경 셋팅, 서비스 오픈 후 시스템 모니터링 환경 구축,장애 조치 등 많은 인프라에 대한 투자가 필요하고 이를 안정시키는 데 많은 시간이 소요된다.
그러나 이렇게 많은 시간과 자본을 투자하는 것은 바보짓이다. 제대로된 SW 아키텍처와 개발 플랫폼을 사용한다면 개발과 운영에 있어 큰 문제가 발생하지 않으며 이후 시스템을 확장할 때도 손쉽게 할 수 있다. 이런 사고는 과거 2000년 초반 닷컴 버블로 많은 투자 자금을 갖고 있었을 때의 얘기다. 닷컴 버블 당시도 실제 돈을 번 업체는 썬마이크로시스템즈같은 하드웨어 판매업체와 망한 닷컴 회사들의 장비를 인수하여 중고로 매매하는 회사들이었다.
따라서 개발 환경과 운영 환경에 드는 비용과 시간을 최소화하는 것이 유리하다. 냉정하게 생각해 보면 성공 여부를 판단할 수 없는 제품과 서비스에 막대한 초기 투자를 하는 것은 어리석은 일이다. 아울러 일단 개발된 서비스는 서비스가 가능한 범위내에서 단계별(알파와 베타)오픈을 통해 안정화와 검증을 통해 단계별로 인트라에 투자하는 것도 방법이다.
현재 가장 좋은 방법은 바로 클라우드 컴퓨팅( Cloud Computing )을 이용하여 서비스를 구축하는 것이다. 아마존의 EC2 같은 IaaS(Infrastructure As A Service)나 구글 앱스 서비스 같은 PaaS(Platform As A Service) 을 이용하면 많은 투자를 하지 않더라도 안정적인 플랫폼에 서비스 등을 구축할 수 있다.
- 오픈 소스를 적극 활용한다.
제품 개발시 반드시 선행 작업으로 사용가능한 오픈소스와 이에 대한 사용 정책을 수립하는 것이 좋다. 경험적으로 볼 때 개발하고자 하는 제품에 필요한 많은 기반 라이브러리와 프레임워크중 상당수는 오픈소스를 통해 얻을 수 있다.
오픈소스 활용시 반드시 점검해야 할 점은 첫째 , 오픈소스 커뮤니티의 활동 상황을 점검해야 한다. 해당 오픈소스 솔루션이 필요하더라도 커뮤니티를 통해 적극적으로 업데이트 되지 못한다면 현재 기능적으로 조금 부족하더라도 활성화된 오픈소스 솔루션을 선택하는게 안정적이다.
또 오픈소스의 경우 각기 다른 라이선스 정책을 갖고 있기에 패키지로 개발하여 배포할 경우와 서비스로 할 경우 등에 맞춰 미리 라이선스 문제를 검토하고 예상되는 문제를 해결해야 한다.
- 알파 및 베타 오픈을 적극 활용하며 개발 라이프사이클을 줄여야 한다.
결코 한번에 완벽한 서비스와 패키지를 개발할 수 없다. 완성도를 높이기 위해서는 당연 시간이 필요하다. 이 때, 시간을 최소화하기 위해 단계별로 서비스를 오픈하면서 사용자의 불편함과 완성도를 높여야 한다.
가장 좋은 방법은 알파 오픈시 최소한의 얼리 아답터에게 서비스를 공개하고 이들로 부터 냉정한 평가를 받는 것도 좋은 방법이다.
단, 이렇게 얻어진 개선 사항은 최대한 빨리 개선해야 한다. 이런 방법으로 사용자를 확대하면서 서비스를 고도화함으로써 개발 시간을 단축하고 품질을 확보할 수 있다. 패키지도 마찬가지이다. 메이저와 마이너 패치 버전을 병렬적으로 수행할 수 있는 팀을 구성해 운영하는 것도 시간을 줄여 경쟁력을 갖을 수 있는 방법중 하나다.
- NIN 신드롬을 버려야 한다.
개발자는 누구나 NIH(Not invented here) 신드롬을 갖고 있다.
다시 말해 내가 직접 개발한 것 이외에는 신뢰하지 않는 다는 것을 말한다. 실제 특정 업무를 인수인계 받은 개발자들과 인터뷰를 해보면 이구동성으로 하는 말이 있다. – ” 정말 선임자가 거지 같이 코딩을 했네요. 다시 개발하는 게 낫겠어요”.
필자는 이런 말을 100% 믿지 않는다. 소프트웨어의 특성상 시간이 지날수록 많은 사용자의 요구사항이 반영되고 버그를 수정하는 작업 등을 통해 코드는 보기에 지저분 해 질 수 있다.그러나 이 코드는 그 만큼 버그가 적으며 안정화된 코드다. 일반적으로 다시 개발된 코드는 같은 시간 만큼의 안정화 기간을 거쳐야 비슷한 품질을 제공하는 수준에 도달한다. 소프트웨어도 사람이 하는 작업이기 때문이다. 물론 그렇기 때문에 많은 편차도 존재한다.
개인적으로는 현재가 있어야 미래도 있다고 생각한다. 필자는 현재 많은 문제를 안고 있는 서비스와 소프트웨어 제품의 책임자들이 경쟁에서 승리하기 위해 현재의 문제 해결을 위해 주력해야 한다고 생각한다. 그것도 가장 스피드 있게. 그래야 미래도 있다.
지금까지 언급한 내용이 정답은 아니더라고 소프트웨어와 서비스 개발시 스피드와 경쟁력, 그리고 품질 등에 대해서는 생각해 봐야 한다고 생각한다. 사용자는 기다려주지 않기 때문이다. 더불어 필자는 이러한 모든 작업이 개발자들의 자발적 참여를 전제로 한다고 생각한다. 만일, 개발자들의 비자발적 참여를 전체로 한다면 이 또한 다시 생각해야 할 것이다.
*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.