워드 커닝햄은 Wiki를 만든 유명한 프로그래머이다. 특히, 기술 부채(Technical Debt)라는 용어를 도입하기도 했다. 여기서는 이 기술 부채라는 용어를 다루고 있는 글을 이야기 해보자.
기술 부채라는 것은 [1]에서도 언급하듯이 소프트웨어 개발에서 발생하는 문제를 금융 부채에 비유한 것이다. 이글에서는, 초기 개발에서 빠르게 기능을 구현하기 위해 '부채'를 지는 것은 괜찮을 수 있지만, 이는 나중에 이는 갚아야 하는 '이자'와 함께 돌아오며 결국 원금까지 상환해야 한다는 점을 강조하는 것이라 볼 수 있다. 코드의 품질이 떨어지면 생산성이 낮아지는 것이 이자의 형태로 나타나는 것이고 이를 문제를 해결하는 것이 원금 상환하는 것까지 포함하는 것이다. 워드 커닝햄은 이 부채는 리팩토링을 통해 상환해야 한다고 한다. 상환하지 않으면 시간이 지남에 따라 문제들이 누적되어 전체 개발 조직이 만들 수 있는 진행 사항 자체가 멈출 수 있다고 보고 있다.
글에서도 이야기 하지만, 나는 기술 부채가 투자와 같은 것에 레버리지(Leverage)로서의 측면도 있다고 본다. 즉, 빠른 시장 출시를 위해 이 기술 부채를 활용하기도 한다. 기술 부채를 지는 것은 초기 제품을 더 빨리 시장에 출시하여 비즈니스 가치를 제공할 수 있게 한다는 것다. 이는 시장에 적기에 출시해서 이득도 얻을 수 있고, 또한 빠른 피드백을 얻고, 이를 바탕으로 제품을 개선하는 데 유리하기도 하다. 그러므로, 기술 부채를 전략적으로 사용하는 것은 스타트업이나 신제품 개발에서 중요한 전략이 될 수 있다. 즉, 단기적으로는 부채를 통해 빠르게 성과를 내고, 이후에 이 부채를 상환하는 방식으로 진행할 수 있는 것이다. 하지만, 우리가 자주 놓치는 것은 이 부채의 상환 계획이다. 다시 말해, 부채가 누적되지 않도록 지속적으로 관리해야 하는 것이다. 리팩토링 활동을 통해 생산성을 회복하고, 부채의 이자를 줄이는 것이 중요하다.
조금 더 구체적이지만 단순하게 생각해보자. 비유에 따라서 우리 접근 방법도 생각해 보자. 우리가 금전적으로 부채가 있다고 생각해보자. 무엇부터 해야 할까? 우선은 이자가 높은 부채 부터 갚아야 할 것이다. 그러므로, 기술 부채도 우선 순위를 정해서 이자와 원금을 먼저 갚는 것이 맞다. 우선 순위를 정했다면 실재로 내 금전적 상황에 따라서 아낄 것은 아끼고 이자와 원금을 갚아야 한다. 개발에서는 리팩터링과 개선 작업을 하는 것이다. 이는 코드의 구조, 중복, 복잡성 등 여러 측면에서 이루어질 수 있다. 부채를 갚아 본 이는 알지만, 정리가 되면 갚아야 하는 돈을 추가로 버는 듯한 느낌이어서 활력을 더 느끼기도 한다. 즉, 기술 부채 개념을 적절히 활용하면 초기 개발 속도를 높이고 장기적으로는 품질 유지와 개선을 할 수 있다. 하지만, 금융에 대한 비유에서 알 수 있듯이 시간을 어떻게 활용하고 밸런스 있게 운용하는지 고민하는 것이 더 중요하다.
참고 자료
[1] Jean-Louis Letouzey and Declan Whelan, " Introduction to the Technical Debt Concept ", https://www.agilealliance.org/wp-content/uploads/2016/05/IntroductiontotheTechnicalDebtConcept-V-02.pdf
'Technical Leadership' 카테고리의 다른 글
전문가로 가는 학습 - 그런데 AC2를 곁들인 (4) | 2025.02.26 |
---|---|
over-engineering vs under-engineering (0) | 2024.06.26 |
협업적 문제 해결 방법 - 함께 자라기 (0) | 2023.07.10 |
개발자를 위한 의도적 수련(Deliberate Practice) (0) | 2023.03.28 |
살리고 글쓰기 (4) | 2023.03.12 |