[Agile] 린 소프트웨어 개발 알아보기
기원
도요타 자동차의 독특한 색산 방식 원칙과 실천법을 정리하는데서 시작되었다. 우리나라 제조/생산 업계에서는 이미 도요타 생산 방식(TPS)를 오래 전부터 벤치마킹 해왔다. 린 (Lean)에서 중요한 개념은 JIT(Just In Time)이다. JIT는 필요한 시점에 필요한 만큼만 생산하는 것을 의미하며 이를 통해 재고를 최소화하고 비용도 최소로 줄여나간다. 또 하나의 중요한 용어가 칸반(Kanban)이다. 칸반은 일종의 작업 지시서로서 Pull 방식의 생산시스템을 구축하는데 중요한 역할을 한다
린 소프트웨어 개발의 시작
생산 방식으로서 린을 SW 개발에 적용하려는 시도는 여러번 있었다. 이를 체계적으로 정리한 것은 포펜딕(톰 포펜딕, 메리 포펜딕)부부이다. 린의 중요한 목표인 재구 절감을 SW개발에 대입해 불필요한 낭비를 제거하자는 운동으로 발전한 것이 린 소프트웨어 개발이다
린 소프트웨어 개발의 원칙
낭비를 제거하라
파레토 법칙 (2:8의 법칙)에 의거해 개발에 정말 중요한 20%에만 집중하고 낭비되는 요소(가외기능, 혼란, 경계 넘기)를 제거한다
- 가외기능: 80%의 가치를 제공하는 20%의 기능에 초점을 맞춰라. 20%의 가치를 제공하는 80%인 가외기능은 나중으로 미룬다
- 혼란: 요구사항 혼란을 겪는다면, 스펙을 너무 일찍 결정한 것이다. 테스트하고 수정하는데 혼란을 겪는다면 테스트를 너무 늦게 하는것이다
- 경계 넘어가기: 조직간의 경계는 통상 20% 이상의 비용을 증가시키는데, 버퍼를 만들고 응답시간을 늦춰 커뮤니케이션을 방해하기 때문이다
품질을 내재화 하라
개발 초기부터 각각의 SW 모듈에 대한 품질을 강조하면 마지막에 빅뱅식 통합이나 테스트 때문에 발생하는 문제를 해결할 수 있다
- 테스트 주도 개발(TDD)을 통해 코드 실수를 방지하라: 요구사항 문서 대신 실행 가능한 명세를 작성하라
- 레거시 코드를 만들지 마라: 레거시 코드는 자동화된 단위테스트와 인수테스트가 없는 코드다
- 빅뱅 통합은 진부하다: 지속적인 통합과 중첩된 동기화 기법을 사용하라
지식을 창출하라
표준은 개선하기 위해 존재하는 것이며 과학적 방법을 통해 누구나 변경하고 장려할 수 있도록 해야한다고 이야기한다
- 과학적 방법을 사용하라: 가설을 세우고, 신속하게 다양한 실험을 해보고, 문서를 간결하게 작성하고, 최선의 대안을 구현할 수 있도록 답을 가르쳐라
- 표준은 도전 받고 개선되기 위해 존재한다: 모든 사람들이 따라 하고 잘 알려진 실천법을 표준에 포함하되, 누구든지 표준에 도전하고 변경하도록 장려하라
- 예측 가능한 성과는 피드백에 기반한다: 예측 가능한 조직은 미래를 추측하고 그것을 계획이랗고 하지 않으며, 그보다는 미래가 펼쳐질 때 신속하게 대응하기 위한 역량을 개발한다
확정을 늦춰라
마지막까지 변화를 수용할 수 있도록 코드를 작성하낟. 돌이킬 수 없는 결정은 마지막에 내려라
- 의존성을 깨트려라: 시스템 아키텍처는 언제 어떤 기능이 추가되더라도 그것을 수용할 수 있어야 한다
- 옵션을 유지하라: 코드를 실험으로 생각하라. 변화를 수용할 수 있게 작성하라
- 돌이킬 수 없는 결정은 마지막 결정의 순간에 하라: 돌이킬 ㅜㅅ 없는 결정을 내리기 전에 가능한 많이 학습하라
전체를 최적화하라
고객 요구에서 SW 배포까지 전체적인 흐름에 초점을 맞춰야 한다
- 전체 가치 흐름에 초점을 맞춰라: 컨셉에서 현금까지, 고객 요구에서 소프트웨어 배포까지
- 완전한 제품을 인도하라: 소프트웨어만이 아닌 완전한 제품을 개발하라. 완전한 제품은 완전한 팀에 의해 만들어진다
- 더 높은 것을 측정하라: 국지적인 성과측정은 부분 최적화를 야기하며 낭비를 발생시킨다. 전체 가치 사슬의 시작과 끝의 소요시간, 일명 사이클 타임을 측정하라. 또는 인도된 비즈니스 가치로 팀 성능을 측정하라
사람을 존중하라
팀의 공동 목표 달성을 위해 자부심, 신뢰, 칭찬으로 맺어진 상호간의 책임의식을 가져야한다
- 팀은 자부심, 책임감, 신뢰, 칭찬을 통해 번성한다: 뭉서이 팀을 만드는가? 팀원들은 공동 모굪를 달성하기 위해 상호간 책임의식으로 뭉쳐있다
- 효과적인 리더십을 제공하라: 효과적인 팀에는 팀을 최고로 이끄는 훌륭한 리더가 존재한다
- 파트너를 존중하라: 파트너/외주 업체와 상생적 관계를 유지해야 한다. 그들은 우리의 종이 아니라 우리 SW를 함께 만드는 동료다
빨리 전달하라
한번에 전달되는 제품의 크기를 작게 하고 작업량을 줄여야 한다
- 신속한 인도, 고품질, 저비용은 공존할 수 있다
- 대기행렬 이론을 개발에 적용하라
- 일의 양을 할 수 있는 만큼으로 제한하라: 반복 개발에 안정적이고 반복 가능한 속도를 가져라. 고객에게 인도할 수 있는 역량에 맞게 대기열의 길이를 정기적으로 제한하라
린 소프트웨어 개발과 칸반
칸반은 생산시스템에서 일하는 작업자들이 어떤 작업을 해야 하는지 알려주는 작업 지시서에 해당한다. 린 소프트웨어 개발에서 이 칸반을 활용하면 다음과 같은 장점을 얻을 수 있다
- 워크플로를 가시화한다
- 일을 작게 나누어 카드에 하나씩 써서 벽에 붙인다
- 각 항목이 현재 어느 단계에 있는지 알 수 있도록, 워크플로를 나타내는 열에 제목을 붙인다
- 작업중인 것을 제한한다 (WIP)
- 워크플로상에 얼마나 많은 항목이 진행되고 있는지 제한을 둔다
- 작업에 소요되는 시간을 측정한다
- 한 항목을 완료하는데 걸리는 평균 시간 (사이클 타임으로 부르기도 함)
- 예측 가능하고 소요 시간을 최소화 하기 위해 프로세스를 최적화 한다.