“늘 예상보다 더 많은 시간이 소요될 것이다. ‘호프스태터의 법칙’을 감안할지라도 그럴 것이다.”
그러나 기업과 조직, 이해관계자, 프로젝트 매니저는 여전히 소프트웨어 프로젝트에 ‘일정’을 적용한다. 심지어 프로그래머들도 이렇게 한다. 그런데 ‘호프스태터의 법칙’이 프로그래머에게 좀더 유효할까? 아니면 프로젝트 매니저에게 더 통할까? 프로젝트 매니저는 API를 사용해 2개월 정도를 절약할 수 있다. 그러나 API에 129가지 옵션이 있으며, 이 가운데 회사에 필요한 것은 한 가지라는 것을 발견하는 사람은 개발자이다. 코드 빌드도 어렵지만, 8명의 프로그래머를 관리하는 일도 어렵다.
외부의 프로젝트 스폰서는 참을성 없게 회의 탁자 테이블을 두드린다. 한편, 현업 부문 사람들과 프로젝트 관리자는 프로그래머가 게을러 진전이 없다고 생각한다. 그러나 프로그래머는 자신이 직면한 어려운 문제들을 관리자, 감독자가 이해하지 못한다고 생각한다.
오래 전, 누군가 생산성과 ‘코드 줄’ 사이의 상관관계를 과학적으로 분석해 측정하려 시도했다. 페드릭 브룩스가 1975년 ‘맨먼스 미신(The Mythical Man-Month)’이라는 책을 통해 이에 대한 이론을 제시했다. ‘선형적 진행’에 대한 수학 모델과 가설이 적용되지 않음을 보여준 책이다.
이후 프로젝트 완료를 가로막는 가시밭이 더 늘었다. 애자일과 지속적인 빌드 같은 개념은 국소적인 문제에서 일시적으로 효과가 있지만, 모든 것을 더 복잡하게 만든다. 즉, 복잡성이 궁극적인 문제이다. 고객과 이해당사자, 주주들은 갈수록 더 많은 것을 요구하고 있고, 이는 시간이 점점 더 길어진다는 의미이다.
소프트웨어 딜리버리를 앞당길 수 있는 새로운 도구와 기법들이 다수 등장했음에도 불구하고 소프트웨어 프로젝트가 예상보다 지연되는 이유 10가지를 제시한다. 프로젝트 지연을 초래하는 모든 원인을 다 설명하지 못할 수도 있지만, 적어도 현장을 이해하는데 도움을 줄 것이다.
범위 추가
몇달 전에 시작한 프로젝트의 명칭이 바뀌지 않았을 지 모르지만, 그 사이에 범위와 목표 산출물(deliverables)이 너무 많이 바뀌어 프로젝트에 다른 이름을 붙이는 게 적절한 경우가 있다. 큰 목적과 목표는 기존과 같지만, 누군가 처음부터 모든 것을 다시 만들 정도로 아키텍처를 바꿨을 수 있다.
어쩌면 지연된 프로젝트를 하나의 프로젝트로 생각하는 것이 타당하지 않을 수도 있다. 첫 번째 프로젝트는 오래 전에 완료되었고, 이름만 같은 전혀 다른 새로운 프로젝트를 시작한 것이나 다름없기 때문이다. 아니 그 사이 몇달 동안 완료한 프로젝트가 여러 개일 수도 있다. 즉, 정확히 계산을 하면 하나의 프로젝트에 예상보다 많은 몇달을 추가 소비한 것이 아니라, 개발자들이 같은 이름을 가진 여러 프로젝트에 이 시간을 투자한 것일 수 있다.
심의
소프트웨어 개발자들은 개방형 사무실에 대해 투덜거린다. 코딩에 몰입하기 위해 고립된 공간과 큰 헤드폰을 요구한다. 그런데 정작 소프트웨어 디자인에 필요한 것들을 토론하느라 시간이 부족한 것처럼 보인다. 개발자들이란 업무을 완수하는 것보다 접근법에 대해 토론을 하는 것에 더 큰 만족을 느낀다고 생각될 정도다.
물론 메뉴 구성이나 스키마 디자인에 최선의 방법을 논의하는 미팅에 많은 시간을 투자하는 것을 비웃을 수도 있다. 그러나 중요한 사실은 단순한 프로젝트조차 새로운 ‘무엇’을 만드는 데 목적을 두고 있다는 것이다. 코딩은 로마 제국 시대부터 시작된 ‘도로 건설’과는 다르다. 과거 많은 경험이 없기 때문에 소프트웨어 최적화에 더 많은 시간이 소요되기 마련이다. 더구나 현재 비즈니스에 필요한 시스템, 스펙을 감안하면 더 그렇다.
애자일에는 한계가 있다.
매니저들의 경우, 프로세스가 ‘전부’이다. 속도를 유지하는 문제에 있어, 매니저가 가장 중요하게 여기는 최고의 솔루션은 프레임워크와 방법론이다. 소프트웨어 프로젝트 매니저는 최고의 개발 방법론에 대해 주장하기 좋아하지만, 이런 방법론은 모두 한계와 제약을 갖고 있다. 프레임워크는 가이드라인에 불과하며, 이론과 실무가 다른 경우가 많다. 이로 인해 프로젝트 일정이 촉박한 경우에도 반드시 해결해야 할 ‘예외 사항’이 발생하게 된다.
개발자는 애자일을 좋아하는 경향이 있다. 기여할 방향에 대한 선택에 있어 가장 많은 자유가 주어지기 때문이다. 그러나 ‘인도자’가 없는 경우, 혼란과 혼돈이 초래될 수 있다. 관리자 한 명이 내게 코드가 올바른 지 걱정할 필요가 없다고 말한 적이 있다. 이를 고치기 위해 새 애자일 ‘티켓’을 만들면 된다는 이유에서였다. 그런데 해결을 통해 인정받는 크레딧이 티켓의 2배는 된다. 2배에 달하는 성과를 달성한 것으로 간주되기 때문이다.
누구도 미래를 예측할 수 없음
미적분법을 만든 아이작 뉴튼은 “다른 사람보다 더 멀리 볼 수 있는 경우는 거인의 어깨 위에 앉아있을 때에만 해당된다”라고 말했다. 미적분법은 고등학교 수학의 '최고봉’이며, 많은 과학에서 ‘토대’ 역할을 한다. 그러나 몇몇 기본 연산법으로만 구성되어 있다. 워싱턴 DC와 푸에르토리코 같은 지역을 포함해 50개 주에서 모두 작동해야 하는 페이롤(급여 지불 처리) 시스템과 다르다.
소프트웨어 개발자들은 수 많은 공동체에 모두 작동하고 적용되는 시스템을 빌드하는 일을 하고 있으며, 따라서 머리 속에 모든 사람들의 니즈(필요 사항)를 계속 담아두는 것이 사실상 불가능하다는 이야기를 하는 것이다.
미래를 예측할 수 없는 때가 많으면서 상황이 더 악화된다. 새로운 시스템은 ‘쿨’ 하기도 하지만, 동시에 과거의 모든 것을 파괴한다. 따라서 추상적으로 접근하는 모험을 할 수밖에 없다. 반복을 하면서 세부적인 부분을 고치고, 이후 최상의 결과를 기대한다. 모든 ‘장애물’을 극복하고 고치는 데 많은 시간이 걸린다. 다뤄야 할 세부 사항이 아주 많기 때문이다.
이해당사자의 변덕
소프트웨어 개발자가 자신의 업무 속도를 통제한다고 생각할지 모르겠다. 그러나 사실 그렇지 않다. 주어진 과업이 바뀌는 경우가 많기 때문이다. 고객이나 조직 내 다른 이해당사자가 많은 것을 바꿔 초래된 문제를 놓고 소프트웨어 팀을 비난하는 것은 부당하다. 이들은 계속해서 새로운 수정, 새로운 보완(강화)을 요구한다. 때론 아주 별것 아닌 듯 작은 것을 추가하지만, 이것이 아주 어렵고, 지금까지 달성한 많은 것을 망치는 결과가 초래될 수도 있다.
경직된 데이터 구조
데이터는 길들이기 힘든 야수이다. 그런데 소프트웨어 개발 업무 가운데 상당 부분은 밤에 이 야수를 자신의 외양간으로 몰고 가는 것이다. 가장 긴장되는 업무 중 하나는 데이터 모델을 구현하고, 데이터베이스가 적시에 완벽하게 정보를 저장하도록 만드는 것이다.
또 데이터 모델은 대개 경직되어 있다. 예를 들어 설명하면, ZIP 코드 필드에는 9자리 숫자의 ZIP 코드만 있어야 한다. 그러나 한편으로는 아이러니하게도 데이터 모델이 유연한 것이 좋다. ‘마법의 막대기’를 흔들면, 캐나다의 누군가 숫자와 문자로 구성된 캐나다 우편번호를 등록할 수 있도록 만들기 위해서이다(이 경우에도 경직된 패턴으로). 이런 모델을 구현하는 데 시간이 걸리기 마련이다.
작동하는 구조가 필요하다. 그러나 변화나 변경은 이런 구조를 무효로 만들 수 있다. ‘끝이 없는 전쟁’이다. 한 사람 당 하나의 엔트리가 있는 것이 좋다. 그런데 이름을 바꾼 후에도 사람을 추적하고 싶어 지고, 2개의 엔트리가 만들어진다. 그러면 둘 모두 그저 그런 것이 된다.
‘거짓(Falsehood)’ 발생
일부 프로그래머는 ‘참’으로 보이는 단순한 명령 구문도 코드로 렌더링을 시도하기 전까지 별도로 분류하기 좋아한다. ‘하루는 24기간’이라는 구문이 이런 ‘거짓’에 해당된다. 언뜻 보기에 ‘참’으로 보인다. 그러나 서머타임 시간이 시작되거나 끝나는 날은 해당이 되지 않는다. 즉, ‘참’이 아니다. 더구나 매년 이런 날이 바뀌고, 유럽에서 일광 절약 시간이 시작되고 끝나는 날은 미국과 다르다. 다시 말해, 미국은 하루가 24시간이지만, 유럽은 25시간인 날이 있다.
프로젝트마다 이런 ‘거짓’을 새로 발견하게 될 것이다. 우리는 새 ‘거짓’이 쉽게 해결할 수 있는 ‘거짓’이고, 사용자가 이와 관련된 ‘불일치’ 중 하나에 직면했을 때 크게 화를 내지 않기 바랄 수밖에 없다.
복잡성 문제
프로그래머는 자신이 작업하는 시스템을 단순화시키기 원한다. 그러나 사용자와 이해당사자는 가능한 비즈니스 가치를 추구하면서 추가 ‘사례'와 기능을 추가해 시스템을 향상시키기 원한다. 기능은 좋다. 그러나 더 ‘스마트'하고 나은 기능을 추가하면 논리 또한 추가된다. 그러면서 논리가 기하급수적으로 복잡해지는 경우도 있다.
쉽게 추가할 수 있는 기능도 있다. 그러나 의도하지 않은 결과를 촉발하는 기능도 있다. 이 경우, 예상 못했던 문제에 대한 결정을 내리기 위해 계획에 없던 미팅을 더 많이 하게 된다. 코드에 또 다른 계층을 추가하거나, 데이터베이스에 행을 추가할 때 각별히 주의를 기울여야 한다. 그러지 않을 경우, 프로젝트가 걷잡을 수 없이 복잡해지고, 일정이 훨씬 더 많이 지연될 수 있다.
기능을 추가시키는 디자인 검토
디자인 검토는 개발 프로세스에 반드시 필요한 부분이다. 그러나 디자인 검토에 목적을 둔 미팅 때, 모든 사람이 소프트웨어 기능을 추가시키기 원하고, 개발자가 이런 기능 추가 요청을 기꺼이 받아들이는 경우에만 해당된다. 현재 진행하는 프로젝트 범위를 넘어서는 것이 분명해 이런 요청을 거부할 수 있는 때도 있지만, 이것이 명확하지 않은 요청들도 많다. 많은 기록이 필요한 요청들이다. 쉽게 추가할 수 있는 기능인지, 어려운지 여부를 파악하는 것에만 몇 시간을 투자해야 할 수도 있다.
그러나 이해당사자와의 디자인 검토를 피할 방법은 없다. 바람직한 개발 프로세스의 일부이기 때문이다. 따라서 추가할 수 있는 기능, 버전 2.0 또는 버전 5.0으로 남겨둘지 결정하기 위해 코드를 변경하는 일은 피할 수 없는 운명과 같다.
때로는 느린 것이 바람직하다
프로젝트 진행이 느린 것에 화가 날 수도 있지만, 소프트웨어 개발이 지연되는 것을 '버그’가 아닌 ‘기능’으로 봐야 한다. 중요한 부분을 서둘러 재촉할 경우 단점과 문제점이 발생하게 된다. 코더가 시간을 투자할 경우, 우리는 그 토대가 튼튼하고, 논리가 타당하도록 만전을 기해야 한다. 속도에 대해 불평을 하는 것은 집중에 방해가 되고, 프로젝트에 위험을 초래한다. 개발자들이 자신의 일에 집중하도록 놔둘 필요도 있다.
*Peter Wayner는 오픈소스 소프트웨어, 자율주행 차량, 개인정보 보호 강화, 디지털 트랜잭션, 스테가노그래피(steganography) 등 다양한 주제에 관한 16권 이상의 책을 저술한 저자다. ciokr@idg.co.kr
Sponsored
Surfshark
“유료 VPN, 분명한 가치 있다” VPN 선택 가이드
ⓒ Surfshark VPN(가상 사설 네트워크, Virtual Private Network)은 인터넷 사용자에게 개인 정보 보호와 보안을 제공하는 중요한 도구로 널리 인정받고 있다. VPN은 공공 와이파이 환경에서도 데이터를 안전하게 전송할 수 있고, 개인 정보를 보호하는 데 도움을 준다. VPN 서비스의 수요가 증가하는 것도 같은 이유에서다. 동시에 유료와 무료 중 어떤 VPN을 선택해야 할지 많은 관심을 가지고 살펴보는 사용자가 많다. 가장 먼저 사용자의 관심을 끄는 것은 별도의 예산 부담이 없는 무료 VPN이지만, 그만큼의 한계도 있다. 무료 VPN, 정말 괜찮을까? 무료 VPN 서비스는 편리하고 경제적 부담도 없지만 고려할 점이 아예 없는 것은 아니다. 보안 우려 대부분의 무료 VPN 서비스는 유료 서비스에 비해 보안 수준이 낮을 수 있다. 일부 무료 VPN은 사용자 데이터를 수집해 광고주나 서드파티 업체에 판매하는 경우도 있다. 이러한 상황에서 개인 정보가 유출될 우려가 있다. 속도와 대역폭 제한 무료 VPN 서비스는 종종 속도와 대역폭에 제한을 생긴다. 따라서 사용자는 느린 인터넷 속도를 경험할 수 있으며, 높은 대역폭이 필요한 작업을 수행하는 데 제약을 받을 수 있다. 서비스 제한 무료 VPN 서비스는 종종 서버 위치가 적거나 특정 서비스 또는 웹사이트에 액세스하지 못하는 경우가 생긴다. 또한 사용자 수가 늘어나 서버 부하가 증가하면 서비스의 안정성이 저하될 수 있다. 광고 및 추적 위험 일부 무료 VPN은 광고를 삽입하거나 사용자의 온라인 활동을 추적하여 광고주에게 판매할 수 있다. 이 경우 사용자가 광고를 보아야 하거나 개인 정보를 노출해야 할 수도 있다. 제한된 기능 무료 VPN은 유료 버전에 비해 기능이 제한될 수 있다. 예를 들어, 특정 프로토콜이나 고급 보안 기능을 지원하지 않는 경우가 그렇다. 유료 VPN의 필요성 최근 유행하는 로맨스 스캠은 인터넷 사기의 일종으로, 온라인 데이트나 소셜 미디어를 통해 가짜 프로필을 만들어 상대를 속이는 행위다. 이러한 상황에서 VPN은 사용자가 안전한 연결을 유지하고 사기 행위를 방지하는 데 도움이 된다. VPN을 통해 사용자는 상대방의 신원을 확인하고 의심스러운 활동을 감지할 수 있다. 서프샤크 VPN은 구독 요금제 가입 후 7일간의 무료 체험을 제공하고 있다. ⓒ Surfshark 그 외에도 유료 VPN만의 강점을 적극 이용해야 하는 이유는 다음 3가지로 요약할 수 있다. 보안 강화 해외 여행객이 증가함에 따라 공공 와이파이를 사용하는 경우가 늘어나고 있다. 그러나 공공 와이파이는 보안이 취약해 개인 정보를 노출할 위험이 있다. 따라서 VPN을 사용하여 데이터를 암호화하고 개인 정보를 보호하는 것이 중요하다. 서프샤크 VPN은 사용자의 개인 정보를 안전하게 유지하고 해킹을 방지하는 데 유용하다. 개인정보 보호 인터넷 사용자의 검색 기록과 콘텐츠 소비 패턴은 플랫폼에 의해 추적될 수 있다. VPN을 사용하면 사용자의 IP 주소와 로그를 숨길 수 있으며, 개인 정보를 보호할 수 있다. 또한 VPN은 사용자의 위치를 숨기고 인터넷 활동을 익명으로 유지하는 데 도움이 된다. 지역 제한 해제 해외 여행 중에도 한국에서 송금이 필요한 경우가 생길 수 있다. 그러나 IP가 해외 주소이므로 은행 앱에 접근하는 것이 제한될 수 있다. VPN을 사용하면 지역 제한을 해제해 해외에서도 한국 인터넷 서비스를 이용할 수 있다. 따라서 해외에서도 안전하고 편리하게 인터넷을 이용할 수 있다. 빠르고 안전한 유료 VPN, 서프샤크 VPN ⓒ Surfshark 뛰어난 보안 서프샤크 VPN은 강력한 암호화 기술을 사용하여 사용자의 인터넷 연결을 안전하게 보호한다. 이는 사용자의 개인 정보와 데이터를 보호하고 외부 공격으로부터 사용자를 보호하는 데 도움이 된다. 다양한 서버 위치 서프샤크 VPN은 전 세계 곳곳에 여러 서버가 위치하고 있어, 사용자가 지역 제한된 콘텐츠에 액세스할 수 있다. 해외에서도 로컬 콘텐츠에 손쉽게 접근할 수 있음은 물론이다. 속도와 대역폭 서프샤크 VPN은 빠른 속도와 무제한 대역폭을 제공하여 사용자가 원활한 인터넷 경험을 누릴 수 있도록 지원한다. 온라인 게임, 스트리밍, 다운로드 등 대역폭이 필요한 활동에 이상적이다. 다양한 플랫폼 지원 서프샤크 VPN은 다양한 플랫폼 및 디바이스에서 사용할 수 있다. 윈도우, 맥OS, iOS, 안드로이드 등 다양한 운영체제 및 디바이스에서 호환되어 사용자가 어디서나 안전한 인터넷을 즐길 수 있다. 디바이스 무제한 연결 서프샤크 VPN은 무제한 연결을 제공하여 사용자가 필요할 때 언제든지 디바이스의 갯수에 상관없이 VPN을 사용할 수 있다.