본문 바로가기
Homo Faber/Techniques

신중하게 행동하라

by javauser 2010. 6. 16.
- Seb Rose

"무엇을 하든지 간에, 신중하게 행동하고 결과를 생각하라" Anon

어떠한 반복주기(iteration)든지 초반에는 일정이 편안하게 느끼게 됩니다. 하지만, 그렇다 할지라도 특정 시간에는 압박 상황을 피할 수는 없습니다. "올바르게 수행할 것"과 "빨리 수행할 것" 사이에서 선택하라고 하면 나중에 수행한 내용을 수정할 것이라는 생각에 "빨리 수행할 것"을 종종 선호하게 됩니다. 여러분 자신과 팀, 고객에게 지금 빨리 수행하고 이후에 수정할 것이라고 약속할 때에는 여러분은 분명 그러한 의도를 가지고 있습니다. 그러나 그 다음 반복주기에서는 새로운 문제가 나타나고 여러분은 이에 몰두하게 되는 일이 비일비재합니다. 이와 같이 지연된 작업과 같은 유형을 기술적인 빚(technical debt)이라 하며 여러분에게 좋은 친구는 아닙니다.특별히 마틴 파울러(Martin Fowler)는 기술적인 빚에 대한 용어 정의에서 이를 의도적인 기술적인 빚(deliberate technical debt)이라고 했으며, 이는 부주의한 기술적인 빚(inadvertent technical debt)과는 혼동해서는 안됩니다.

기술적인 빚은 대출과 비슷합니다. 여러분은 대출을 통해서 짧은 기간 동안에는 이익을 보게되지만, 이를 완전히 갚기 전까지 이자를 지불해야 합니다. 코드 상에서의 손쉬운 방법들은 기능을 추가하거나 리팩토링하는 것을 더 어렵게 만듭니다. 결함과 깨지기 쉬운 테스트 케이스를 증가시키는 원인입니다. 손쉬운 방법을 그대로 두는 시간이 길어질수록 상황이 더 악화됩니다. 여러분이 원래 코드를 수정하기 위해 작업을 수행하는 시점까지 원래의 문제 위에 코드를 리팩토링하고 수정하는 것을 더 어렵게 만드는 결코 바람직하지 못한 여러차례의 설계로 덧붙여진 덩어리가 만들어질 수 있습니다. 사실 실제로 기존 코드를 수정하려고 되돌아가는 일은 어떤 것이 매우 나빠져서 수정해야만 하는 시점인 경우가 대부분입니다. 그리고 그때까지도 코드를 수정하기 너무나 어려워서 정말로 시간이나 위험을 감수할 수 없는 경우가 종종 있습니다.

마감일정을 맞추거나 기능의 일부분을 구현하기 위해 기술적인 빚을 져야 하는 경우가 여러번 있습니다. 이러한 상황에 빠지지 않도록 하십시오. 하지만 만일 상황이 어쩔 수 없이 기술적인 빚을 지도록 한다면, 일단 그대로 진행하십시오. 그렇지만 (이 부분이 중요한 부분입니다) 기술적인 빚을 추적하고 빠른 시간 안에 이를 되갚거나 기능을 빠르게 완성하십시오.(번다운 차트에서 빠르게 기울기를 낮추십시오.) 빚을 지는 것에 대해 결정을 한 순간 이를 잊어버리지 않기 위해서 작업 카드를 작성하고 이슈 추적 시스템에 등록하십시오.

만일 그 다음 반복주기에서 빚에 대한 부분을 갚는 일정을 만들었다면, 비용을 줄어들 것입니다. 갚지 않은 빚을 그대로 둔다는 것은 이자가 증가하는 것이고 그 이자는 비용을 가시화시키도록 추적되어야 합니다. 이와 같이 함으로써 프로젝트의 기술적인 빚에 대한 비즈니스 가치에 대한 영향을 강조하게 되며 빚에 대한 변제의 적절한 우선순위를 가능하게 합니다. 빚을 계산하는 방법과 그에 대한 이자를 추적하는 방법은 특정 프로젝트에 따라 다르지만, 반드시 추적해야 합니다.

가능한 한 바로 기술적인 빚을 갚으십시오. 그렇지 않으면 경솔한 짓이 될 것입니다.


반응형

'Homo Faber > Techniques' 카테고리의 다른 글

빌드 시간을 더 빠르게 하라  (0) 2012.05.12
Spring의 AOP로 구현한 테스트 스파이(Spy)  (0) 2009.12.04
비즈니스 컴포넌트와 데이터 ownership  (4) 2009.10.05
m2eclipse 설치  (0) 2009.09.22
m2eclipse 소개  (0) 2009.09.22