24P by neo 3일전 | ★ favorite | 댓글 1개

“그거 만드는데 얼마나 걸릴 것 같아요?”

  • 소프트웨어 개발자들이 두려워 하고 싫어하는 이 질문에 대해서 내 세탁기가 생각을 일깨워줌
  • 세탁기가 알려준 소프트웨어 노력 추정(Software Effort Estimation)의 어려움
    • 새 집으로 이사하면서 세탁기를 설치하는 과정에서 예상보다 많은 시간이 많이 소요됨
    • 보통 10분이면 끝나는 작업이었지만, 이번에는 4시간이 소요됨
    • 사전에 예상하지 못한 장애물(블로커)들이 발생하여 설치가 지연되었음
    • 이 과정이 소프트웨어 개발에서 노력 추정을 어렵게 만드는 이유와 유사하다는 점을 깨닫게 됨
  • 장애물과 해결책
    • 장애물 1: 전원 연결을 위한 구멍이 없어 세탁기를 전원에 연결할 수 없음
      • 해결책 1: 하드웨어 상점에서 60mm 홀쏘를 구입하여 구멍을 뚫음
    • 장애물 2: 소비자용 드릴로는 홀쏘를 사용할 수 없음
      • 해결책 2: 더 강력한 드릴을 빌려와서 사용함
    • 장애물 3: 배수 및 급수 호스가 새 집에서는 예상보다 짧았음
      • 해결책 3: 새로운 확장형 호스를 구입하려 했으나 기존 호스가 확장되지 않음을 깨닫고 다시 새 호스를 구입
    • 장애물 4: 수도꼭지에 단단히 고정된 금속 캡이 제거되지 않았음
      • 해결책 4: 더 큰 스패너를 구입하여 캡을 제거함
    • 장애물 5: 배수구의 스피곳(Spigot)이 PVC 벽으로 막혀 있음
      • 해결책 5: 드릴로 PVC 벽을 뚫고 배수 호스를 연결함
    • 총 5번의 하드웨어 매장 방문과 4시간의 작업 끝에 세탁기를 정상적으로 설치할 수 있었음
  • 소프트웨어 개발 노력 추정이 어려운 이유
    • 익숙한 작업이라고 하더라도 환경이 다르면 예상치 못한 변수가 발생할 가능성이 높음
    • 과거 경험을 기반으로 한 추정이 종종 틀리는 이유는 “알려지지 않은 미지의 요소(Unknown Unknowns)” 때문임
    • 몇 가지 예시:
      • 사용하려던 라이브러리가 더 이상 유지보수되지 않아 직접 수정해야 하는 상황
      • 개발 도구가 업데이트되면서 기존 방식이 더 이상 적용되지 않는 문제
      • OS 버전이 바뀌면서 기존 종속성이 정상적으로 작동하지 않는 경우
      • 인프라에 새 컴포넌트가 추가되었는데 예상과 다르게 동작하는 상황
  • 결론
    • 새로운 집에서의 경험은 소프트웨어 개발에서의 노력 추정이 얼마나 어려운지를 보여줌
    • 개발을 시작하기 전에 요구 사항을 최대한 철저히 조사해야 하지만, 예상치 못한 블로커가 발생하는 것은 불가피함
    • 소프트웨어 프로젝트가 익숙한 작업처럼 보여도, 새로운 환경에서는 전혀 다른 도전 과제가 등장할 수 있음
    • 이러한 변수를 감안하여 일정 및 리소스를 유동적으로 조정하는 것이 필요함
Hacker News 의견
  • 소프트웨어 추정은 농담과 같음. 과소평가에 대한 처벌이 없기 때문임

    • 영화 제작 추정과 비교할 수 있음. 영화 제작에 완료 보증을 판매하는 회사들이 있음
    • 완료 보증은 제작 비용의 약 2%가 소요됨. 보통 예산이 300만 달러에서 7000만 달러 사이인 인디 영화에 사용됨
    • 보증 회사는 일부 초과 비용을 부담하지만, 너무 크면 감독을 해고하고 제작을 인수함. 이런 방식이 실질적인 효과를 줌
    • 완료 보증 회사는 과거 데이터를 기반으로 추정함. 많은 영화의 실제 비용을 가지고 있음
    • 각 장면의 비용을 상세히 기록하고 있음. 예를 들어, 자동차 추격 장면의 경우, 데이터베이스에서 과거 100개의 자동차 추격 장면 비용을 참조함
    • 감독, 프로듀서, 배우에 대한 정보도 가지고 있으며, 이들이 장면 촬영에 드는 비용을 동료들과 비교함
    • 이는 로켓 과학이 아닌 보험 인수임
  • 훌륭한 기사지만, 소프트웨어 경험과의 주요 차이점이 빠져 있음

    • 고객이 실제로 원하는 것을 알지 못할 수 있음. 사전에 아무리 물어봐도 이 정보를 얻을 수 없음
    • 시간 단위로 청구하고 프로젝트 단위로 청구하는 것을 절대 거부해야 함
  • DIY 프로젝트는 항상 이런 식임

    • 소유물에 대한 논의가 많지만, 도구와 부품은 공간을 많이 차지함
    • 저자는 이미 많은 도구를 가지고 있었지만, 여전히 몇 가지가 부족했음
    • 결국 하드웨어 상점에 가는 일이 줄어들지만, 작업장은 물건으로 가득 참
  • 드릴링 후 25분 동안 직선으로 유지하는 방법과 소음 차단 이어폰의 놀라움을 배움

    • 소음 차단 헤드폰은 청력 보호 장치가 아님. 청력 보호 장치는 소음원과 귀 사이에 물리적 장벽을 만듦
    • 소음 차단 헤드폰은 주변 소리를 듣고 반대 음파를 생성함. 완벽하지 않기 때문에 귀를 충분히 보호하지 못함
  • 이야기는 좋음. 하지만 내 경험은 거의 정반대임

    • 90%가 쉬운 일이 아니라 90%가 헤매는 것임
    • 같은 제품을 여러 회사에서 반복해서 작업하는 경우가 많음
  • "현실은 놀라운 세부 사항을 가지고 있음"이라는 말이 생각남

    • 알지 못하는 것들은 새로운 것과 가까워질 때까지 그대로 남아 있음
  • 저자가 전원 케이블을 위한 구멍을 뚫을 때, 깔끔하게 플라스틱 삽입물을 맞춤

    • 건축업자들은 물 호스를 위한 구멍을 대충 자르고 담배를 피우러 감
    • 이는 과거 경험과 일치함
  • 대부분의 동료들은 프로젝트 시작 전 조사와 인벤토리가 많은 시간을 차지한다고 말하면 놀람

    • 대부분의 동료들은 프로젝트를 빨리 끝내고, 많은 시간이 사후 관리에 소요됨
    • 나는 프로젝트 초기에 많은 시간을 투자하여 사후 관리가 필요하지 않음
  • 다음에 기술자의 가격에 놀랄 때 고려할 만한 흥미로운 점

    • 배관공이 세탁기를 연결하는 데 몇 분 만에 300달러를 청구하는 이유는 배수구에 구멍을 뚫는 방법을 알기 때문임
  • 소프트웨어 프로젝트를 시작하기 전에 어떤 질문을 해야 할지 모를 때 어떻게 해야 할까?

    • 탐색 작업을 요구 사항 수집 연습으로 보는 것에 반대하지 않음
    • 하드웨어 상점에 한 번 가서 큰 쇼핑 목록과 열린 질문 세트를 가지면 더 효과적이고 간단하게 작업할 수 있음