검색어 프로젝트에 대한 글을 관련성을 기준으로 정렬하여 표시합니다. 날짜순 정렬 모든 글 표시
검색어 프로젝트에 대한 글을 관련성을 기준으로 정렬하여 표시합니다. 날짜순 정렬 모든 글 표시

2019년 12월 26일 목요일

[Software Spec Series 2] 소프트웨어 프로젝트 실패의 원인

우리 주변에서 실패한 소프트웨어 프로젝트를 보는 것은 어려운 일이 아니다. 프로젝트를 성공하는 방법을 배우기 위해서는 프로젝트를 제대로 진행하는 방법을 연구하는 것도 필요하지만 프로젝트가 왜 실패하는지 살펴보는 것도 도움이 될 것이다. 프로젝트 실패에 대한 기준은 제각각이다. 그래서 어떤 경우에 프로젝트가 실패했다고 할 수 있는지 알아보자.
  • 약속된 일정 내에 제품 또는 서비스를 출시하지 못했다.
  • 소프트웨어가 요구되는 품질을 충족하지 못했다. (기능 요구사항, 성능, 안정성, 사용성, 확장성 등)
  • 프로젝트에 꼭 필요한 기술 개발에 실패했다. 
  • 아키텍처가 엉망진창이 되어서 유지보수가 어렵게 됐다.
  • 프로젝트에 계획된 예산보다 많은 비용을 지출했다.
  • 프로젝트 내내 야근을 거듭하여 조직의 사기가 떨어지고 퇴사자가 많이 발생했다.
          직접적인 실패와 억지로 일정을 맞추려다 보니 다른 문제를 야기하는 간접적인 실패까지 예로 들어봤다. 이런 저런 이유로 실패하는 프로젝트는 매우 많다. 또한 실패하는 이유도 매우 다양한다. 필자는 이 중에서 가장 중요하다고 생각하는 하나에 대해서 얘기를 하려고 한다. 우선은 프로젝트를 왜 실패하는지 다양한 원인을 알아보자.


          • 고객의 요구사항을 충분히 파악하지 못했다.
          • 제품의 방향을 빨리 정하지 못하고 우왕좌왕하면서 프로젝트 앞부분에서 상당히 많은 시간을 소모하여 정작 개발 기간이 부족하게 되었다.
          • 스펙과 설계를 제대로 작성하지 않고 코딩을 시작해서 엉뚱한 방향으로 개발을 하였다.
          • 작성된 스펙을 프로젝트 이해관계자들이 충분히 리뷰 하지 않아 잘못된 스펙으로 개발하였다.
          • 프로젝트를 진행할수록 새로운 요구사항이 계속 발견되어서 프로젝트가 한없이 늘어졌다.
          • 변경된 요구사항을 제대로 관리하지 않아서 프로젝트 팀원들이 서로 다른 기준으로 개발을 하였다.
          • 상명하복식으로 지정된 출시 일정을 맞추기 위해서 급하게 코딩부터 시작했다. 나중에 잘못된 코드를 고치느라고 시간이 더 소요되었다.
          • 충분히 훈련되지 않은 개발자들을 투입하여 초반에 우왕좌왕하느라고 시간을 많이 지체했다.
          • 일정관리를 대충해서 프로젝트가 지연되고 있다는 징후를 눈치채지 못했다.
          • 리스크 관리를 하지 않아서 리스크로 인해서 프로젝트를 실패했다.
          • 프로젝트 막판에 경영진이나 주요 고객이 프로젝트 방향을 완전히 틀어서 거의 처음부터 다시 개발해야 했다.
          • 프로젝트 팀원들의 팀워크에 문제가 있어서 지속적으로 불화가 발생하여 프로젝트가 산으로 갔다.
          • 도입한 외부 필수 기술이 기대처럼 동작하지 않았다. 이것을 프로젝트 막바지에 알게 되었다.
          • 테스트 팀에 제대로 된 스펙을 전달하지 못해서 테스트 준비를 제대로 하지 못했다.
          • 회사의 표준 프로세스를 강요하여 문서를 너무 많이 만들다 보니 정작 개발에는 소홀해졌다.


          이외에도 실패 원인은 끝도 없이 많을 것이다. 이를 분류해보면 스펙, 프로젝트팀, 프로젝트 관리, 고객, 기술 등 다양하다. 필자는 이중에서 가장 중요하게 생각하는 요인은 “스펙”이다. 가장 많은 원인이 스펙과 관련이 있다. 또한 소프트웨어 버그의 절반 이상은 스펙으로부터 발생한다고 알려져 있다.

          프로젝트가 아주 작다면 스펙을 제대로 적지 않고 요구사항 몇 줄로 개발해 나가도 소프트웨어를 무사히 완성하기도 한다. 소수의 경험 많은 개발자가 개발을 주도하는 경우 요구사항을 대충 알려줘도 찰떡 같이 알아듣고 개발을 잘하기도 한다. 하지만, 수백명이 투입되는 대규모 프로젝트에서는 매우 잘 정리된 스펙 문서가 필요한 경우가 일반적이다. 외국에 외주를 줄 경우 자세히 적힌 스펙 문서와 인수 테스트 계획이 필요하다.

          소규모 프로젝트에서의 성공 경험을 대규모 프로젝트에 적용해서 실패를 하기도 하고, 반대로 대규모 프로젝트의 방법론이 중소규모 프로젝트에서 실패의 원인이 되기도 한다.

          요구사항이 누락되거나 충분히 분석이 안된 스펙도 문제지만 너무 자세히 적거나 많은 문서를 적는 것도 문제가 된다. 대규모 방법론을 따르는 회사에서는 이런 함정에 종종 빠진다. 개발은 문서대로 진행되지 않을 뿐만 아니라 문서가 너무 많아서 수시로 바뀌는 요구사항을 문서에 제대로 반영하지 못한다.

          따라서 엄격한 프로세스로 규제를 하는 것도 어렵다. 자율에 맡겨도 쉽지 않다. 필자가 생각하는 가장 좋은 방법은 원칙만 지킬 수 있는 최소한의 프로세스가 있는 환경에서 좋은 문화를 가지는 것이다. 빨리빨리 문화를 지양하고 적절히 분석하고 설계를 한 후 프로젝트를 진행하는 것이 더 빠르다는 인식을 공유해야 한다. 실제로 가장 빠른 방법이다. 모든 이해관계자들이 스펙을 철저히 리뷰하고 쉽게 요구사항을 바꾸지 않아야 한다. 이런 문화와 관행을 만들어가는 것이 프로세스보다 더 중요하다. 그래야 회사에 역량이 축적된다. 그렇게 좋은 문화와 축적된 역량이 충분해야 어떠한 프로젝트라도 성공으로 이끌 수 있다.

          좋은 환경이 있어도 스펙을 제대로 적을 수 있는 역량이 부족하다면 소프트웨어 프로젝트 성공은 어렵다. 스펙을 제대로 적는 역량은 소프트웨어를 개발하는데 있어서 가장 어려운 역량이며 소질이 있는 개발자도 제대로 하려면 10년 이상의 경험과 노력이 필요하다. 꾸준히 투자하는 방법 외에 기가 막힌 방법은 없다.

          share with abctech.software

          2017년 8월 9일 수요일

          소프트웨어 프로젝트는 왜 실패하는가?

          우리는 주변에서 실패한 소프트웨어 프로젝트를 보는 것이 그리 어려운 일은 아니다. 프로젝트의 규모가 커지고 기간이 길어지며 많은 인원이 투입될수록 프로젝트 실패 확률은 증가한다. 

          프로젝트 성공을 위해서는 프로젝트를 제대로 진행하는 방법을 연구하는 것도 필요하지만 프로젝트가 왜 실패했는지 살펴보는 것도 도움이 될 것이다. 프로젝트 실패에 대한 기준은 제각각이다. 그래서 어떤 경우에 프로젝트가 실패했다고 할 수 있는지 알아보자.

          • 약속된 일정 내에 제품 또는 서비스를 출시 못했다.
          • 소프트웨어가 시장에서 요구되는 품질을 충족하지 못했다. (요구사항, 성능, 안정성, 사용성 등)
          • 프로젝트에 꼭 필요한 기술 개발에 실패했다. 
          • 아키텍처가 엉망진창이 되어서 유지보수가 어렵게 됐다.
          • 프로젝트에 계획된 예산보다 많은 비용을 지출했다.
          • 프로젝트 내내 야근을 거듭하여 조직의 사기가 떨어지고 퇴사자가 많이 발생했다.

          직접적인 실패와 억지로 일정을 맞추려다 보니 다른 문제를 야기하는 간접적인 실패까지 예로 들어봤다. 이런 저런 이유로 실패하는 프로젝트는 매우 많다. 또한 실패하는 이유도 매우 다양한다. 필자는 이 중에서 가장 중요하다고 생각하는 하나에 대해서 얘기를 하려고 한다. 우선은 프로젝트를 왜 실패하는지 다양한 원인을 알아보자. 

          • 고객의 요구사항을 충분히 파악하지 못함
          • 제품의 방향을 빨리 정하지 못하고 우왕좌왕하면서 프로젝트 앞부분에서 상당부분의 시간을 소모하여 개발 기간이 부족하게 됨
          • 스펙/설계를 제대로 작성하지 않고 코딩을 시작해서 엉뚱한 방향으로 개발을 함
          • 작성된 스펙을 관련자들이 충분히 리뷰 하지 않아 잘못된 스펙으로 개발함
          • 프로젝트를 진행할수록 새로운 요구사항이 계속 발견되어서 프로젝트가 한없이 늘어짐
          • 변경된 요구사항을 제대로 관리하지 않아서 프로젝트 팀원들이 서로 다른 기준으로 개발을 함
          • 상명하복식으로 지정된 출시 일정을 맞추기 위해서 급하게 코딩부터 시작함. 나중에 잘못된 코드를 고치느라고 시간이 더 소요됨
          • 충분히 훈련되지 않은 개발자들을 투입하여 초반에 우왕좌왕함
          • 일정관리를 대충 해서 프로젝트가 지연되고 있다는 징후를 눈치채지 못함
          • 리스크 관리를 하지 않아서 리스크로 인해서 프로젝트를 실패함
          • 프로젝트 막판에 경영진이나 주요 고객이 프로젝트 방향을 완전히 틀어서 거의 처음부터 다시 개발해야 함
          • 프로젝트 팀원들의 팀웍에 문제가 있어서 지속적으로 불화가 발생하여 프로젝트는 산으로 감
          • 도입한 외부 필수 기술이 기대처럼 동작하지 않는다.
          • 테스트 팀에 제대로 된 스펙을 전달하지 못해서 테스트 준비를 제대로 하지 못함
          • 회사의 표준 프로세스를 강요하여 문서를 너무 많이 만들다 보니 정작 개발에는 소홀해짐

          이외에도 실패 원인은 끝도 없이 많을 것이다. 이를 간단히 분류해보면 스펙, 프로젝트팀, 프로젝트 관리, 고객, 기술 등 다양하다. 필자는 이중에서 가장 중요하게 생각하는 요인을 “스펙"이라고 생각한다. 
          다른 영역도 중요한 것이 사실이지만 스펙을 적는 것은 소프트웨어를 개발하는데 가장 중요하면서 가장 어렵다. 스펙을 적는 것을 “분석” 또는 “분석/설계”라고 한다. 설계가 여기에 왜 포함되었는지 의아한 사람도 있을 텐데, 분석 시에 상위 설계의 상당부분이 포함이 되는 경우가 많고 프로젝트에 따라서 다르지만 분석과 설계는 그 경계가 모호하기 때문에 같이 다루는 경우가 많다.

          프로젝트가 아주 작다면 스펙을 제대로 적지 않고 요구사항 몇 줄로 개발해 나가면서 소프트웨어가 무사히 완성을 하기도 한다. 소수의 경험이 많은 개발자가 개발을 주도하는 경우 요구사항을 대충 알려줘도 개발을 잘하기도 한다. 수백명이 투입되는 대규모 프로젝트에서는 매우 잘 정리된 스펙 문서가 필요한 경우가 일반적이다. 외국에 외주를 줄 경우 자세히 적힌 스펙 문서와 테스트 문서도 전달하기도 한다.

          소규모 프로젝트에서의 성공의 경험을 대규모 프로젝트에 적용해서 실패를 하기도 하고, 대규모 프로젝트의 방법론이 중소규모 프로젝트에서 실패의 원인이 되기도 한다.

          요구사항이 누락되거나 충분히 분석이 안된 스펙도 문제지만 너무 자세히 적거나 많은 문서를 적는 것도 문제가 된다. 대규모 방법론을 따르는 회사들에서는 이런 함정에 종종 빠진다. 개발은 문서대로 되지도 않을 뿐만 아니라 수시로 바뀌는 요구사항을 문서가 너무 많아서 문서에 반영도 제대로 못한다.
           
          따라서 엄격한 프로세스로 규제를 하는 것도 어렵다. 자율에 맡겨도 쉽지 않다. 필자가 생각하는 가장 좋은 방법은 원칙만 지킬 수 있는 최소한의 프로세스가 있는 환경에서 좋은 문화를 가지는 것이다. 빨리빨리 문화를 지양하고 적절히 분석하고 설계를 한 후 프로젝트를 진행하는 것이 더 빠르다는 인식을 공유해야 한다. 실제로 가장 빠른 방법이다. 모든 관련자들이 스펙을 철저히 리뷰하고 쉽게 요구사항을 바꾸지 않아야 한다. 이런 문화와 관행을 만들어가는 것이 프로세스보다 더 중요하다. 그래야 회사에 역량이 축적된다. 그렇게 좋은 문화와 축적된 역량이 충분해야 어떠한 프로젝트라도 성공으로 이끌 수 있다.

          좋은 환경이 있어도 스펙을 제대로 적을 수 있는 역량이 부족하다면 말짱 공염불일 뿐이다. 스펙을 제대로 적는 역량은 소프트웨어를 개발하는데 있어서 가장 어려운 역량이며 소질이 있는 개발자도 제대로 하려면 10년 이상의 경험과 노력이 필요하다.


          이 방대한 얘기를 짧은 글로 어떻게 소개할 수 있을지 걱정은 되지만, 개발자가 어떻게 하면 소프트웨어 분석, 설계 역량을 가질 수 있으며 회사는 어떻게 그런 역량을 축적할 수 있는지 다음에 몇 개의 글을 통해서 조금 더 자세히 얘기를 해보고자 한다.

          share with abctech.software

          2026년 4월 15일 수요일

          1인 창업자의 멀티 프로젝트 관리: 산만함을 체계로 바꾸기


           "아이디어는 많은데 관리가 안 돼요."

          1인 창업자 최씨는 아이디어가 넘쳐납니다. 온라인 강의 플랫폼, 모바일 앱, 유튜브 채널, 블로그, 제품 개발...

          "머릿속에는 10개 프로젝트가 돌아가는데, 정작 완성되는 건 하나도 없어요. 이것저것 시작하다가 흐지부지되고, 결국 번아웃만 오더라고요."

          30년 넘게 개발자로 일하면서, 그리고 수많은 1인 창업자들을 지켜보며 느낀 점은, 1인 창업자의 가장 큰 적은 경쟁사가 아니라 산만함이라는 것입니다. 제가 직접 경험한 사례에서 1인 창업자가 10개 프로젝트를 동시에 진행했는데, 정작 완성된 건 하나도 없었고, 결국 번아웃이 왔습니다.

          어떻게 혼자서도 여러 프로젝트를 체계적으로 관리할 수 있을까요? 오늘은 현장에서 검증된 실전 방법들을 공유해드리겠습니다.

          1인 창업자의 전형적인 하루: "오늘도 아무것도 제대로 못했네"

          혼돈의 멀티태스킹

          오전 9시에 "오늘은 앱 개발에 집중하자!"라고 다짐하지만, 오전 10시에 유튜브 영상 아이디어가 떠올라서 메모하고, 오전 11시에 강의 업데이트 요청 메일을 보고 급히 수정하고, 점심시간에는 블로그 글 써야 한다는 생각에 스트레스를 받습니다. 결국 오후 2시에 앱 개발은 30분밖에 못하고, 오후 6시에 "오늘도 아무것도 제대로 못했네..."라고 한숨을 쉽니다.

          이런 하루가 반복되면서 모든 프로젝트가 50% 정도에서 멈춰있게 됩니다.

          왜 이런 일이 생길까요?

          멀티태스킹의 환상 때문입니다. 여러 일을 동시에 하면 더 많이 할 수 있을 거라는 착각이 있지만, 실제로는 컨텍스트 스위칭 비용으로 생산성이 저하됩니다.

          우선순위 혼란도 있습니다. 모든 게 중요해 보이니까 무엇부터 해야 할지 모르겠고, 결정 피로로 인해 지연됩니다.

          진행 상황 추적 부재도 문제입니다. 각 프로젝트가 어디까지 진행됐는지 체계적으로 관리하지 않아서 90% 완료 착각에 빠지게 됩니다.

          제가 여러 1인 창업자들을 지켜보며 이런 패턴을 반복적으로 목격했습니다.

          체계적 멀티 프로젝트 관리법: 산만함을 체계로 바꾸기

          1. 두뇌 외장하기: "모든 걸 머리로 기억하려 하지 마세요"

          모든 걸 머리로 기억하려는 것이 문제입니다. 외부 시스템에 모든 것을 기록해야 합니다.

          아이디어가 떠오르면 즉시 기록하고, 각 프로젝트의 다음 단계를 명확히 정의하고, 언제 어떤 프로젝트에 집중할지 미리 계획합니다.

          프로젝트 관리 도구로 모든 프로젝트를 시각화하고, 포트폴리오 뷰로 전체 상황을 한눈에 파악하고, 진행률과 마감일을 명확히 표시하면 됩니다.

          💡 Plexo의 AI Task Breakdown 기능을 활용하면, "온라인 강의 플랫폼 MVP 개발"처럼 아이디어를 입력하는 것만으로 AI가 세부 작업·예상 시간·우선순위를 몇 초 만에 자동 산정합니다. 머릿속의 아이디어가 즉시 체계적인 WBS로 변환되어, 1인 창업자의 두뇌 외장이 훨씬 빠르고 정확해집니다.

          제가 여러 1인 창업자들을 도와본 결과, 두뇌 외장을 하면 훨씬 집중할 수 있게 되었습니다.

          2. 시간 박스 전략: "시간을 미리 배정하고 그 시간에만 집중"

          시간을 미리 배정하고 그 시간에만 집중하는 것이 핵심입니다.

          주간 계획을 세웁니다. 월요일 오전에는 프로젝트 A에 4시간, 오후에는 프로젝트 B에 4시간을 할당하고, 화요일에는 프로젝트 A에 집중해서 8시간, 수요일에는 프로젝트 B에 집중해서 8시간, 목요일에는 프로젝트 C에 8시간, 금요일에는 회고 및 계획에 4시간을 할당합니다.

          에너지 관리도 중요합니다. 오전(집중력 MAX)에는 가장 중요한 프로젝트를, 오후(에너지 중간)에는 마케팅이나 고객 응대를, 저녁(피곤할 때)에는 간단한 정리 작업을 배정합니다.

          효과는 컨텍스트 스위칭을 최소화하고, 깊은 집중 시간을 확보하고, 모든 프로젝트에 공정한 시간을 배분할 수 있다는 것입니다.

          3. 완료주의 원칙: "10개를 50%씩 하는 것보다 5개를 100% 완료하는 게 낫다"

          10개를 50%씩 하는 것보다 5개를 100% 완료하는 게 낫습니다.

          왜 중요한가요? 90% 완료 착각이 있기 때문입니다. 실제로는 마지막 10%가 가장 어렵습니다. 하나를 완료하면 동기 부여가 되고, 완전한 경험을 통한 학습 효과가 있습니다.

          실행 방법은 진행률을 시각화해서 "착각"을 방지하고, 완료 기준을 명확히 하고, 정말 끝났을 때만 "완료"로 표시하는 것입니다.

          제가 여러 1인 창업자들을 지켜보며, 완료주의 원칙을 따르는 사람들이 훨씬 성과가 좋았습니다.

          4. 우선순위 매트릭스: "Eisenhower Matrix로 명확하게"

          Eisenhower Matrix를 활용하면 우선순위가 명확해집니다.

          중요하고 긴급한 것은 즉시 처리합니다(예: 고객 지원). 중요하지만 긴급하지 않은 것은 시간 박스로 계획합니다(예: 제품 개발). 중요하지 않지만 긴급한 것은 자동화하거나 위임합니다(예: 소셜 미디어). 중요하지도 않고 긴급하지도 않은 것은 제거합니다(예: 불필요한 회의).

          제가 여러 1인 창업자들을 도와본 결과, 우선순위 매트릭스를 사용하면 무엇에 집중해야 할지 명확해졌습니다.

          실전 적용 가이드

          Step 1: 프로젝트 정리 (오늘 저녁 20분)

          1. 현재 진행 중인 모든 프로젝트 나열 (5분):

          • 머릿속에 있는 모든 아이디어/프로젝트를 종이에 적어보세요
          • 완료된 것, 진행 중인 것, 계획만 있는 것 구분

          2. 우선순위 정하기 (10분):

          • 가장 중요한 3개만 선택
          • 나머지는 과감히 "나중에" 폴더로
          • 각 프로젝트의 목표와 완료 기준 명확히

          3. 프로젝트 관리 도구에 입력 (5분):

          • 3개 프로젝트를 도구에 입력
          • 각각의 다음 단계 명확히 정의
          • 시간 박스 계획 수립

          Step 2: 일일 루틴 구축 (내일부터)

          아침 루틴 (5분):

          • 오늘 할 프로젝트 선택
          • 오늘의 목표 설정
          • "오늘 하나만 집중하기" 다짐

          작업 시간:

          • 시간 박스에 따라 집중
          • 다른 프로젝트 생각은 메모만 하고 계속 진행
          • 컨텍스트 스위칭 최소화

          저녁 루틴 (5분):

          • 오늘 한 일 업데이트
          • 내일 할 일 미리 정해두기
          • 진행률 확인

          Step 3: 주간 리뷰 (매주 금요일)

          리뷰 항목:

          • 이번 주 완료한 것
          • 다음 주 계획
          • 우선순위 조정
          • 시간 배분 재검토

          실제 성공 사례: 1인 창업자 김씨의 변화

          제가 직접 도와본 1인 창업자 김씨의 사례를 공유하겠습니다.

          Before (혼돈의 멀티태스킹): 프로젝트 A는 60% 완료 후 중단되었고, 프로젝트 B는 30% 완료 후 방치되었고, 프로젝트 C는 아이디어만 있고 시작하지 않았습니다. 스트레스 레벨은 9/10이었습니다.

          After (체계적 관리): 포트폴리오 뷰로 전체 상황을 한눈에 파악하고, 시간 박스 할당으로 각 프로젝트에 집중하고, 완료주의 원칙으로 하나씩 완료했습니다.

          6개월 후 결과: 완료된 프로젝트가 0개에서 7개로 증가했고, 평균 집중 시간이 1.2시간에서 3.8시간으로 늘었고, 스트레스 레벨이 9/10에서 4/10로 감소했고, 매출이 300만원/월에서 1,200만원/월로 증가했습니다.

          이런 변화는 체계적 관리의 힘을 보여줍니다.

          실전 체크리스트

          멀티 프로젝트 관리 시작 전:

          •  모든 프로젝트 나열 완료
          •  우선순위 3개 선택 완료
          •  프로젝트 관리 도구 설정 완료
          •  시간 박스 계획 수립 완료
          •  일일 루틴 구축 완료
          •  주간 리뷰 일정 확정

          글을 마치며: 1인 창업자의 산만함은 체계로 바꿀 수 있습니다

          1인 창업자의 산만함은 체계로 바꿀 수 있습니다.

          핵심 원칙을 다시 정리하면:

          • 두뇌 외장: 모든 것을 외부 시스템에 기록
          • 시간 박스: 시간을 미리 배정하고 집중
          • 완료주의: 하나를 완료하는 것이 여러 개를 반쯤 하는 것보다 낫다
          • 우선순위: 중요한 것에 집중

          이 원칙을 따르면, 혼자서도 여러 프로젝트를 체계적으로 관리할 수 있습니다.

          오늘부터 체계적인 멀티 프로젝트 관리를 시작해보세요. 작은 변화가 큰 차이를 만듭니다.


          AI Task Breakdown으로 아이디어를 즉시 WBS로 변환하고, 멀티 프로젝트를 체계적으로 관리하는 가장 스마트한 방법, Plexo를 통해 프로젝트를 점검해 보세요.

          AI Task Breakdown으로 아이디어를 즉시 실행 계획으로 변환하고, 포트폴리오 뷰로 전체 상황을 한눈에 파악할 수 있는 도구가 있다면, 1인 창업자의 산만함을 체계로 바꾸는 것이 훨씬 쉬워집니다.

          2009년 1월 19일 월요일

          프로젝트는 연습이 아니다.

          필자는 수많은 소프트웨어를 개발해왔고, 주위에서 여러 프로젝트를 봐왔습니다.
          그러면서 성공한 프로젝트와 실패한 프로젝트도 많이 봐 오면서 그 차이에 대해서도 많이 생각해 왔습니다.

          물론, 성공한 프로젝트는 모두들 알고 있는 요소들이 있습니다. 
          상세하고 꼼꼼한 일정관리, 꾸준한 리스크관리, 인력관리, 품질관리 등등 이미 알려진 것들입니다. 비단 S/W 프로젝트가 아니더라도, 빌딩을 만들 때도 당연히 필요한 프로젝트 관리의 요소들입니다.

          그런데, 유독 소프트웨어 개발 프로젝트에서 종종 벌어지는 현상이 있습니다. 이것이 프로젝트에 큰 리스크가 되고 프로젝트를 실패하게 만드는 원인이 되기도 합니다.

          이것은 바로 "프로젝트를 연습처럼 생각한다"는 겁니다. 연구, 공부처럼 생각합니다.

          "요즘 Python이 인기인데, A모듈에서는 Python을 써야겠다."
          "이번 프로젝트는 UML로 설계를 하겠다."
          "Flex로 UI를 만들면 쉽다고 하는데, Flex를 쓰자"
          "A라는 DB가 빠르고 가볍다고 하는데, 그걸 써보자"
          "요즘 B기술이 대세인데, 어차피 공부해야 할 거 프로젝트 하면서 배우자"

          실제로 개발자들은 실제 프로젝트에서 많이 배우는 것이 사실이지만, 거의 경험이 없는 기술을 단지 "배우기 위한 목적"이나 "좋아 보여서" 사용한다면 이는 프로젝트에 큰 리스크가 될 수 있습니다.

          필자는 개발자들에게 늘 강조하는 것이 "프로젝트는 연습이 아니다.", "프로젝트는 검증된 기술을 가지고 하는 것이다."입니다. 물론 검증된 기술과 아닌 것의 경계는 모호하지만 이는 경험으로 판단해야죠. 충분히 성공할 수 있는 기술의 조합으로 프로젝트를 해야죠. 그렇다고 하더라도, 프로젝트 중간에는 수많은 변수들이 있어서 성공이 보장된 것이 아닙니다. 아직 검증이 안되었지만, 프로젝트에 꼭 필요한 기술이라면, 미리 또는 요구분석 시에 Prototype을 만들어보면서 검증을 하는 것이 좋습니다. 모든 기술을 다 검증할 필요는 없지만, 검증이 필요한 기술을 프로젝트에 직접 사용할 경우 실패할 수도 있습니다.

          또 개발자들이 충분히 연습이 되어 있지 않아서 능숙하게 사용하지 못한다면, 일정을 지연시키는 큰 원인이 됩니다. 이런 경우는 이미 익숙한 옛날 기술을 사용하는 것이 나은 경우가 많습니다. 

          Research Project라면 얘기가 다르죠. Research Project의 목적은 연구이기 때문에 검증 안된 기술을 얼마든지 사용해도 되죠. 이 경우 요구사항의 상세도도 일반 프로젝트와 다르고 일정의 중압감도 다르기 때문에 기술에 집중할 수 있습니다. 평상 시에 크고 작은 Research Project를 자주 수행해야 실제 프로젝트에 적용할 수 있는 기술을 풍부하게 보유할 수 있습니다.

          프로젝트를 연습이라고 생각한다면, 프로젝트 실패로 가는 지름길로 가고 있는 것입니다. 자신이 지금 어떤 프로젝트를 하고 있는지 잘 구분해야 합니다.

          2020년 1월 19일 일요일

          [Software Spec Series 4] 스펙의 역할

          소프트웨어 프로젝트에서 스펙의 역할을 알아보자.

          모든 프로젝트 이해관계자가 사용, 프로젝트의 중심


          스펙은 프로젝트의 모든 요구사항이 모이며 프로젝트의 중심이 되는 문서다. 프로젝트의 모든 이해관계자가 스펙을 참조하거나 작성에 참여한다. 스펙은 다시 여러 프로젝트 이해관계자들이 받아서 자신의 역할을 수행한다. 프로젝트에서 가장 중요한 문서 하나를 꼽으라고 하면 스펙이다.


          (프로젝트의 모든 이해관계자가 참조해야 하는 SRS)


          고객, 마케팅 부서, 영업 부서는 어떠한 제품이 만들어지는지 알 수 있다.


          스펙이 없거나 부실한 상태로 진행하는 프로젝트는 프로젝트가 완료되기 전까지 어떠한 소프트웨어가 개발될지 알기가 어렵다. 그러면 영업부서는 소프트웨어 개발이 완료되기 이전에 판매 준비를 하거나 계약을 할 수가 없다. 스펙이 잘 작성된 프로젝트인 경우 스펙만 보고도 최종적으로 개발될 소프트웨어가 무엇인지 정확하게 알 수 있다. 영업부서에서는 이를 보고 판매에 필요한 준비를 할 수 있다. 영업망을 확충하거나 세일즈 자료를 준비할 수 있다. 또한 고객을 만나서 개발도 완료되지 않은 소프트웨어를 미리 팔 수도 있다. 소프트웨어 개발이 완료된 후에 부랴부랴 판매를 시작한다면 이미 상당한 판매 기회를 놓치게 된 것이다. 그 외에 안전, 의료, 보안 등의 인증이 필요한 경우도 스펙이 잘 작성되어 있다면 소프트웨어 개발이 완료되지 않았음에도 인증을 신청해서 인증을 미리 획득할 수 있다. 인증은 종류에 따라서 1년 넘게 또는 수년이 걸리기도 한다. 소프트웨어 개발이 완료된 후에서야 인증을 진행하면 수년의 영업 기회를 날려버릴 수도 있다.

          프로젝트관리자(PM)에게는 스펙이 프로젝트 관리의 기준이 된다. 일정산정, 인력 배분, 리스크 분석 등을 할 수 있다.


          스펙이 제대로 작성되지 않는 프로젝트에서 프로젝트 관리자는 별로 할 일이 없다. 일정을 제대로 예측하기도 어렵고, 리스크 파악도 어렵다. 적정한 리소스 계획을 세우지 못한다. 프로젝트가 진행이 되도 정확하게 진척률을 파악할 수가 없다. 그래서 1년짜리 프로젝트가 8개월쯤 지나도 정확하게 1년 안에 프로젝트가 종료될지 예측이 안된다. 그러면 프로젝트 관리자는 프로젝트 성공을 위해서 무엇을 더 해야 하는지 알 수 없다. 그저 운에 맡기는 수밖에 없다. 프로젝트의 성격에 따라서는 단계별로 진행을 하여 짧은 주기로 여러 차례 업그레이드를 하면서 진행하는 경우도 있다. 이 경우도 주기만 짧을 뿐이지 짧은 주기에 해당하는 스펙을 적절히 작성하는 것도 똑같이 필요하다.

          개발팀은 스펙을 통해서 개발팀이 개발해야 할 제품이 무엇인지 정확하게 알 수 있다.


          스펙을 제대로 작성하지 않았다면 개발팀은 정확하게 무엇을 개발해야 하는지 파악하기 어렵다. 기획자나 분석 아키텍트에게 너무 많은 것을 수시로 물어봐야 해서 시간을 매우 낭비해야 한다. 개발자가 임의대로 생각해서 기능을 구현하게 되면 기획의 의도와는 완전히 다르게 되기도 한다. 개발자에게 주어진 너무 높은 자유도가 소프트웨어 아키텍처를 부실하게 만들기도 한다. 개발자에게 자유도는 필요하지만 소프트웨어 전체 아키텍처는 분석, 설계 시에 정해져서 개발자에게는 한정된 자유도만 주어야 한다. 그래야 기획 시 의도된 소프트웨어가 제대로 개발될 수 있다.


          (프로젝트에서 SRS의 위치)


          테스트팀은 스펙을 통해서 테스트 계획 및 테스트 케이스를 작성할 수 있다.


          보통은 스펙 작성 후에 개발자들이 구현을 하는 동안 테스트팀은 테스트 준비를 한다. 테스트 계획을 세우고 테스트 설계를 해야 한다. 하지만 스펙이 없거나 부실하다면 테스트팀은 테스트 준비를 제대로 할 수가 없다. 소프트웨어가 개발된 후에 소프트웨어를 보면서 테스트 준비를 해야 하는데 이 방법으로는 테스트 일정도 예측할 수 없고 부실한 테스트를 할 수 밖에 없다. 소프트웨어 품질이 나빠지는 것은 당연한 결과다.

          기술문서팀은 스펙을 통해서 매뉴얼과 도움말을 작성할 수 있다.


          소프트웨어 스펙이 완성된 후에는 많은 일들이 벌어진다. 기술문서팀은 소프트웨어를 동작시켜 보지도 않고 매뉴얼을 미리 작성한다. 단지 화면 캡쳐만 소프트웨어 개발 후 추가할 뿐이다. 이뿐만 아니다. 고객지원 부서는 고객 지원에 필요한 준비를 해 놓고 교육팀은 교육 준비를 한다. 이처럼 소프트웨어 스펙을 보고 많은 사람들이 자신의 일을 수행해야 하는데 바쁘다고 스펙 없이 개발을 하는 것은 개발자 중심의 사고방식이며 프로젝트가 효율적으로 진행되지도 않는다.

          외주 업체는 스펙을 통해서 외주 업무를 정확하게 파악하고 SRS를 기준으로 계약을 할 수 있다.


          우리나라에서는 많은 소프트웨어 프로젝트가 스펙도 없이 진행이 된다. 대략의 요구사항을 기반으로 계약하고 진행되는 프로젝트는 정상적으로 진행되기 어렵다. 고객이 수시로 요구사항을 무리하게 바꿔도 하소연하기 어렵다. 또한, 분석을 제대로 하지 않고 진행을 하므로 요구사항만으로는 프로젝트의 규모를 제대로 산정하기 어렵다. 그래서 계약 시는 성공적인 계약으로 생각되지만 프로젝트를 진행할수록 손해를 보는 경우도 허다하다. 우리나라도 스펙을 기준으로 계약을 하는 관행이 자리잡아야 한다.

          share with abctech.software

          2009년 3월 2일 월요일

          좋은 PM은 훌륭한 리스크 관리자

          프로젝트에서 가장 중요한 활동 중에 하나가 리스크 관리입니다. 프로젝트 실패의 원인의 대부분이 리스크 관리를 하지 않거나 하더라도 부실하게 하는 데 있습니다. 성공하는 프로젝트관리자는 우수한 리스크 관리자입니다.

          성공하는 프로젝트는 대부분 성공 가능한 범위 및 일정을 가지고 리스크를 잘 관리한 프로젝트입니다. 반면, 성공 가능한 범위 및 일정을 가지고 시작한 프로젝트라도 리스크 관리에 거의 신경을 쓰지 않으면 예상치 못한 돌발 변수에 프로젝트는 실패하기 쉽습니다.
          프로젝트 리스크 관리를 하다 보면 소프트웨어 프로젝트는 정말 가시밭길을 걷고 있다는 생각이 듭니다. 웬만한 크기의 프로젝트에서 리스크 수십 개를 찾아내기란 그리 어렵지 않기 때문입니다. 하지만 미리 발견되고 관리되는 리스크들은 그 위험을 현저히 낮출 수 있고, 다른 대처 방법들을 얼마든지 찾을 수 있습니다.

           프로젝트에서 리스크 관리는 다음과 같은 절차로 진행됩니다.

          1. 리스크관리 책임자 임명 - 대부분의 중소규모의 프로젝트는 프로젝트관리자가 리스크관리자도 겸하지만 프로젝트가 대단히 크거나 특수한 경우 리스크관리자를 별도로 임명합니다.

          2. 리스크 인지 - 리스크는 프로젝트에 관련된 모든 사람이 찾아내야 합니다. 추후 인지하지 못한 리스크 때문에 프로젝트가 지현되거나 실패하면, 리스크 인지가 소흘했기 때문입니다. 리스크 인지는 프로젝트 초기에 한번만 하는 것이 아니고, 프로젝트가 끝날 때까지 꾸준히 찾아야 합니다. 리스크관리자는 사소하게 흘려버리는 걱정거리들을 정리하고 계수화해서 리스크 관리 항목으로 끌어들여야 합니다.

          3. 리스크 분석 - 인지된 리스크는 분석하여 분류를 해야 합니다. 그리고 발생가능성(P)과 파급효과(I)로 나누어서 분석하여 수치화를 해야 합니다. 각각은 1~5까지의 수치로 정량화를 할 수 있는데, 이때 주관적인 판단이 필요합니다. 발생가능성이 몇%가 될지를 정확하게 예측한다는 것이 거의 불가능하기 때문입니다. 그에 비하여 파급효과는 예측이 좀더 쉽습니다. 그 일이 일어났을 때 발생할 수 있는 피해를 일정이나 금액으로 환산해서 예측할 수 있습니다.

          4. 리스크 우선순위화 - 프로젝트에서 관리하는 리스크는 대단히 많은 수가 됩니다. 이를 모두 동일하게 관리하기란 쉽지 않고 비효율적입니다. 따라서 우선순위가 높은 리스크를 집중적으로 관리하는 것이 좋습니다.

          아래 노출도 계산 공식을 엑셀의 수식으로 변화하면 입력하면 자동으로 해당 리스크의 노출도가 계산이 됩니다.
          노출도(E, Exposure) = (P/5-0.1)*0.05*(2^(I-1))
          P = 발생가능성(Probability)
          I = 파급효과(Impact)


          낮은 노출도: 0.05 미만
          중간 노출도: 0.05 이상 0.15 미만
          높은 노출도: 0.15 이상

          5. 리스크 대처 계획 - 리스크가 문제가 되지 않도록 미리 대처를 하거나 리스크가 발생해도 되도록 대비를 하는 것입니다. 예를 들어 개발자가 퇴사할 징후가 보일 때 다음과 같은 대응책을 마련할 수 있다.
          • 개발자가 퇴사하지 않도록 노력한다.
          • 개발자가 퇴사하더라도 보충할 개발자를 미리 사내에서 물색해 놓는다.
          • 사내에서 보충한 개발자를 찾지 못하면, 외부 채용 활동의 준비 단계를 해 놓는다. 즉, 채용 공지를 하고, 이력서를 분석하여 채용자 후보를 미리 물색해 놓는다.
          • 해당 개발자의 모듈을 다른 개발자와 많은 부분 공유하도록 계획 한다.
          • 아예 해당 개발자를 프로젝트에서 제외하고 진행한다.

          6. 리스크 감시 - 프로젝트가 진행되면서 리스크는 계속 변합니다. 따라서 리스크를 지속적으로 감시해야 합니다. 리스크의 모든 기록은 리스크관리대장을 만들어서 기록해야 합니다. 리스크관리대장에는 다음과 같은 것들이 적힙니다.
          • 리스크 제목
          • 리스크 내용
          • 리스크 분류
          • 리스크 발생 가능성
          • 리스크 파급 효과
          • 리스크 관리계획
          • 리스크 발생 시 대처 계획
          • 리스크 대처 기록
          • 리스크 재평가 기록
          리스크를 주기적으로 재평가하고 우선순위를 재정렬하고, 리스크 대처 계획을 갱신해야 합니다. 이와 더불어 새로운 리스크를 인지하기 위해서 지속적인 리스크 감시를 해야 합니다. 리스크관리대장에 내용이 꾸준히 쌓이면, 프로젝트가 끝난 후에도 다른 프로젝트에서 참조할 수 있습니다. 이 때 놓치기 쉬운 리스크를 쉽게 찾아낼 수도 있고, 리스크에 어떻게 대처해서 문제를 해결했는지도 도움을 얻을 수 있습니다.