TinyExperiment
Context
복잡한 소프트웨어 문제를 해결하거나 새로운 기능을 구현할 때, 또는 버그를 추적할 때. 불확실성이 높고 여러 가능성이 존재하는 상황.
Problem
큰 변경을 한 번에 시도하면 실패했을 때 원인을 찾기 어렵고, 되돌리기도 힘들다. 머릿속 추측만으로는 복잡한 시스템의 동작을 정확히 예측할 수 없다. 긴 피드백 루프는 학습을 늦추고 잘못된 방향으로 오래 가게 만든다.
Solution
아주 작은 가설을 세우고 빠르게 검증할 수 있는 환경을 만들어라.
가설(assumption)을 명확히 하고, 그것을 검증(validation)할 수 있는 최소한의 실험을 설계한다. 실패해도 쉽게 되돌아갈 수 있는 안전망(fail safe)을 준비하고, 결과를 빠르게 확인할 수 있는 피드백 루프(fast feedback loop)를 구축한다.
다른 요소들의 영향을 받지 않도록 격리(isolation)된 환경에서 실험하고, 한 번에 하나씩만 변경하여(baby step) 원인과 결과를 명확히 추적할 수 있게 한다. 관찰된 현상에서 가능한 원인을 추론하는 가추법(abduction)을 활용한다.
Examples
* TDD에서 실패하는 테스트를 먼저 작성하고, 최소한의 코드로 통과시킨 후 리팩토링하기 * 버그 디버깅 시 print문이나 디버거로 중간 상태를 확인하며 가설 검증하기 * 새로운 라이브러리 도입 전 작은 예제 프로젝트에서 먼저 실험해보기 * 성능 개선 시 프로파일링으로 병목점을 측정한 후 하나씩 개선하기
Resulting Context
불확실성이 줄어들고 학습이 가속화된다. 실패의 비용이 낮아져 더 과감한 시도가 가능해진다. 시스템에 대한 이해가 점진적으로 깊어진다.
Related Patterns
* Enables: BabyStep, UseAbduction, HereAndNowDebugging * Used by: TddIsDesignActivity, PiecemealGrowthCenterFirst * Complements: ShortFeedbackCycle, MicroCommit