이렇게 문제를 제대로 처리하지 못하는 상황은 매우 흔하다. 그 결과 상당수 개발자들이 대규모 소프트웨어 프로젝트가 잘 설계된 상태로 유지되는 건 불가능하기 때문에 ‘모든 소프트웨어는 결국 버리고 고쳐 써야 한다.’라고 생각한다.
하지만 맞는 말이 아니다. 나는 업계에 입문한 이후 꾸준히 지속 가능한 코드베이스를 바닥부터 새롭게 만들거나, 엉망인 코드베이스를 리팩토링해서 개선하는 작업에 많은 시간을 들였다. 처음에는 아주 엉망이었던 코드베이스도 얼마든지 고칠 수 있다. 하지만 이렇게 고치려면 소프트웨어 설계를 잘 이해해야 하고, 충분한 인력을 동원해서 문제가 다시는 재발하지 않을 때까지 제대로 처리해야 한다.
문제가 제대로 해결되었는지 확인하는 일반적인 가이드라인은 다음과 같다.
아무도 그 문제에 다시는 주의를 기울일 필요가 없을 정도가 되어야 한다.
절대적인 수준으로 완수하는 건 불가능한 일이다. 누구도 미래를 완전히 예측할 수 없기 때문이다. 이를 현실적인 목표가 아닌 철학적인 목표로 보는 게 현명하다. 현실적인 목표로는 당장 다른 누군가가 신경을 쓰지 않아도 될 정도, 현재 시점에서는 미래에도 신경을 쓸 필요가 없을 정도로 문제를 해결하는 수준이면 적당하다.