펫 프로젝트
내게 있어 최고의 자가 학습, 자가 훈련 방법은 펫(Pet) 프로젝트다. 펫 프로젝트는 취미생활과도 비슷한 나만의 소프트웨어 프로젝트다. 대신 일정이나 예산 등 압박 요인이 아무 것도 없다. 수익을 낼 필요도 없고 요구사항도 내 마음대로다. 특히 어떤 기술과 방법론을 적용할 것인지는 내키는 대로 정할 수 있다. 내가 바로 사장이다. 회사의 실제 업무 프로젝트에서는 가장 먼저 문제 도메인을 이해하고 그 다음에 기술적인 결정을 내리고 코드를 작성한다. 제품 오너, 사용자, 비즈니스 담당, 마케팅 담당 등 프로젝트에 참여한 모든 이해 관계자들과 대화하면서 비즈니스 아이디어에 기여하게 된다. 건강한 애자일 환경이라면 이러한 대화가 프로젝트 내내 자주 일어난다. 고객이 성취하려는 것과 프로젝트가 다루는 범위를 고려하여 가장 적합한 기술을 선택하여 개발한다. 펫 프로젝트는 완전히 반대로 진행한다. 먼저 무엇을 배울지, 즉 어떤 실행 관례, 실행 원칙, 방법론, 기술을 배울지 정하고 그 다음에 그것을 이용해서 해결할 문제를 찾는다. 미리 시험해 볼 수 있는 펫 프로젝트가 있으면 특정 기술이 어떤 문제를 해결하는 데 적합한지 훨씬 쉽게 파악 가능하다. 펫 프로젝트는 매우 안전한 환경에서 시험하고, 발견하고, 배우고, 즐길 수 있는 기회를 만든다. 실제 프로젝트에 적용할 수 있는 좋은 경험도 얻을 수 있다.
펫 프로젝트는 실제 프로젝트의 몇 가지 측면을 미리 경험할 수 있다는 점에서도 중요하다. 예를 들면 먼저 프로젝트 아이디어가 필요하다. 프로젝트 아이디어를 찾았다면, 기능들을 상세화하고 백로그에 할 일들을 정리하여 준비해야 한다. 백로그를 준비한다는 것은 작업을 분할하고, 그 우선순위를 생각하고, 대략적인 일정을 추산하고, 사용자 스토리를 작성하는 것들을 의미한다. 그 밖에도 여러 가지가 있다. 테스트, 애플리케이션 배포(deploy), 버전 컨트롤, 지속적인 통합(integration), 사용성, 사용자 인터페이스, 코드 베이스, 설계, 데이터베이스와 같은 것들도 필요하다. 애플리케이션을 처음으로 구동해서 시험하는 순간부터, 적용된 기술이나 기능(비즈니스)을 바꾸고 싶을 것이다. 실제 프로젝트에서도 그런 일이 똑같이 일어난다. 이 모든 것들을 펫 프로젝트에서 꼭 해야만 하는 것은 아니지만 원한다면 할 수도 있다. 우리는 펫 프로젝트로 실제 프로젝트의 어떤 측면이든 배울 수 있다. 심지어 프로젝트에 대한 비즈니스 계획까지 작성해도 된다. 사장이자 모든 결정권자이기 때문에 무언가를 배울 수만 있다면 원하는 것은 무엇이든 할 수 있다. 이것이 펫 프로젝트의 핵심이다.