Principal

린 소프트웨어 개발, 개발의 7대 낭비와 예방

팅리엔 2022. 4. 6. 22:32

린 소프트웨어 개발 방법론은 소프트웨어 개발 과정에서 불필요한 낭비 과정을 제거하고 신속하게 고객에게 가치를 전달하는 것을 목표로 한다. 

 

이를 위해 개발, 통합, 테스트, 문서화, 배포까지 하나의 흐름을 빠르게 진행한다. 이는 한 번에 처리하는 작업량을 작게 구성해 반복적으로 개발함을 의미한다.

 

린 개발 방법론은 1940년대 제조 업체에서 등장하여, 생산 비용은 대량 생산에서와 같이 낮게 유지시키면서 생산량은 줄여 품질을 향상시키는 역할을 하였다.

 

신고 시게오는 제조 7대 낭비를 정의했고, 이를 소프트웨어 개발에도 적용해볼 수 있다.

 

 

1. 미완성 작업 Partially Done Work

  • 설계 및 요구사항 문서는 있지만 코드로 구현되지 않은 작업
    설계 및 요구사항이 오래될수록 변경될 가능성도 커진다.
    고객 관점에서 요구사항이 너무 일찍 문서화되는 것은 문제가 될 수 있다.
  • 동기화되지 않은 코드
    코드가 동기화되지 않은 기간이 길어질수록 나중에 머지하기 어려워지기 때문에 자주 동기화되어야 한다.
  • 테스트되지 않은 코드
    테스트되지 않은 코드는 완성된 코드가 아니다.
  • 문서화되지 않은 코드
    문서화는 코드가 작성될 때 같이 이루어져야 한다.
    이상적으로는 코드 자체가 문서가 되어야겠지만, 일반적으로 사용자 문서나 도움말들이 필요하다.
  • 배포되지 않은 코드
    언제나 코드를 배포할 수는 없지만 가능한 일찍 배포하도록 한다.
    사용자는 작은 변경은 쉽게 수용한다.

 

2. 가외 기능 Extra Features

지금 필요가 명확하지 않은 기능은 개발하지 말아야 한다. 될 수록 기능을 추가하지 않는 방향으로 생각하라. 앞으로 일어날 일들은 예상할 수 없다.

 

3. 재학습 Relearning

지식을 잊어버리거나, 다른 이들에게 지식을 제공할 수 있는 기회를 놓쳐버려서는 안 된다. 

모든 지식은 문서화한다. 하지만 문서화해놓고 안 보거나 업데이트 하지 않는 경우가 많다.

주기적으로 팀의 목표를 다시 살펴보고 지식을 효과적으로 보존하는 방법을 고안하도록 한다.

 

4. 이관 Handoffs

업무를 이관하는 것은 단순히 문서를 전달하는 것이 아니다. 모든 단계에서 함께 일하며 적절한 조언을 해주는 것이다. 

업무를 이관할 때는 항상 정보가 손실된다. 이 낭비를 최소화해야 한다. 이관하는 횟수를 줄이고, 교차로 일할 수 있는 팀을 구성하고, 문서뿐만 아니라 면대면 토론/직접 관찰/프로토타입을 통해 상호작용 하고, 가능한 일찍 모든 코드를 자주 배포하여 피드백을 주고 받는다.

 

5. 작업 전환 Task Switching

어떤 코드라도 유지보수를 필요로 한다. 새로운 기능을 개발하며 유지보수도 하는 것은 일반적인 회사에서 필연적이다. 

코드를 유지보수하며 발생하는 혼란을 최소화하기 위해 제안된 몇 가지 방법이 있다.

  • 일정 주기마다 개발자 중 2명씩 교대로 그 기간 동안의 모든 유지보수 업무를 수행하도록 한다.
  • 지난 24시간동안 발생한 모든 이슈를 팀 전체가 매일 아침 2시간 정도를 할애하여 해결한다. 그 후 일일 미팅을 하고 나머지 시간에 새로운 개발에 전념한다.
  • 유지보수 요청 중 급박한 요청만 즉시 처리한다. 격주로 일정 시간을 따로 내어 중요한 유지보수 이슈를 처리한다. 
  • 이전 릴리스에 나타난 문제들을 모두 해결하여 매주 새 버전을 릴리스한다.

 

6. 지연 Delays

개발자들은 대략 15분마다 중요한 결정을 내린다. 이 결정을 내리는 데 큰 도움을 줄 수 있는 사람이 주위에 있다면 빨리 결정할 수 있겠지만 그렇지 않다면 개발자에게는 3가지 옵션이 있다. 하던 일을 멈추고 답을 구하거나, 다른 작업으로 전환하거나, 추측으로 결정을 내리고 일을 계속하는 것이다. 하지만 세 가지 모두 좋은 방법이 아니다.

필요한 인원이 모두 한 공간에서 일하는 팀과, 정기적으로 피드백을 주고 받을 수 있는 짧은 이터레이션은 의사결정의 지연을 줄여줄 수 있다.

 

7. 결함 Defects

코드에 테스트를 포함시킨다. 결함이 발견되면 그 결함을 검출하는 테스트를 만들어 이것이 다시 발생하지 않도록 한다. 또한 보안 테스트나 부하 테스트 도구가 필요한 수도 있다.

 

 

출처

메리 포펜딕, 린 소프트웨어 개발의 적용: 속도 경쟁에서 승리하기, 2007