SW는 Slow (Steady) work가 아닐까..
함수 하나를 고쳐야 합니다.
함수 중간에 있는 비교문이 에러값을 반환하는데 경우에 따라서 정상인 경우에도 에러값을 반환합니다.
이 함수 하나를 고치는 것은 간단합니다.
그런데 마침 퇴근시간이 다 되서 메모를 해놓고 퇴근했습니다.
버스에서 멍하니 있다가 비슷한 방식으로 동작하는 함수가 두세개 더 있다는걸 생각했습니다.
그리고 나도 모르게 고민을 시작했고 결국 내가 고치려고 했던 방식이 잘못되었다는 생각이 들었습니다.
집에 도착하고 아내와 저녁을 먹고 산책을 나왔는데
아내와 대화가 될리가 없습니다. 계속 멍한 상태로 있으면서
무의식 컴퓨터를 돌려서 생각을 합니다.
결국 다음날 출근후 다른 개발자들과 이러이러한 경우에 대한 정책부터 논의하고
처음의 함수를 고치고, 그 함수와 유사한 다른 함수도 고치고
다른 부서에도 알려서 그 함수를 호출하는 코드들도 고치고...
기가 막히는 건 이 함수를 10개 서버에서 유닛테스트를 돌리고
그중 하나에서만 문제가 발생했었다는 것입니다.
게다가 다른 제품의 버그를 추적하다보니 몇단계를 트레이스하다가 발견했습니다.
최종 문제있는 함수를 찾는데만 이틀이 걸렸습니다.
버그하나가 에러 처리 정책까지 올라갔다가 다시 여러 코드에 영향을 미치게 되는데
이게 애초에 설계를 못해서인것 같기도 하고,
설계를 제대로 따르지 않은것 같기도 합니다.
변명할 거리가 없는 제 잘못이지요 뭐...
그때 퇴근하지 않고 바로 수정했더라면 어떻게 되었을지 생각해보지만
알수는 없는 것이지요.
단지 앞으로는 전체 그림을 항상 생각하면서 개발해야겠다
설계 문서나 디자인 회의에 빠지지 말아야겠다 반성했습니다.
너무 서두르지 말고 윗분들은 너무 재촉하지 말았으면 좋겠습니다.
댓글
그런 경우 가끔 있죠.
그런 경우 가끔 있죠. 저도 새벽에 아들녀석이 오는 바람에 잠을 설치고 다시 잠을 청하다가 어제 있었던 문제를 생각하기 시작했고 결국 새벽에 일어나서 동료에게 생각해낸 해결책에 대한 의견을 묻는 메일을 보낸 후 다시 잤습니다. 결국 오늘 그 일을 했는데, 동료가 처음에는 ok 사인 냈다가 2-3시간 후 아예 일관성 있고 더 간단하게 만들면 어떻겠냐고 해서 기능을 대폭 빼버린 해결책으로 구현했습니다. 아예 처음 디자인을 바꿔버린 것이죠.
이게 새 버전 소프트웨어 사용을 위한 기존 버전의 데이터를 마이그레이션 해주는 부분이었는데, 기존 것은 하나 이상의 버전을 마이그레이션 하도록 되어 있었습니다(즉, v1 -> v4, 마이그레이션 시 v2, v3, v4 마이그레이션을 한번에 순서대로 실행). 이것을 한번 실행마다 하나의 마이그레이션만 하도록 바꿔버렸습니다(즉, v1-> v4 마이그레이션 시 업데이트 3번 실행). 훨씬 간단하고 나중에 문제될 소지도 아예 다 없애버린 셈이 되더군요.
어제 RC1 컷 했는데, 벌써 곧 RC2 컷 해야 합니다. 그 버그 때문에.
비슷한 이야기는 아닌 것 같지만
ACM-ICPC 준비 한창 할 때 안 풀리던 문제를 2년 후에 친구에게 다른 문제(좀더 간단하다고 판단되지만 명확히 증명은 하지 않았던)를 설명해줄려고 노력하다가 안 풀렸던 문제의 해결책을 찾은 적이 있습니다.
실제 programming은 안 해봐서 맞는지는 모르겠는데 제 생각으로는 동일한 graph modeling이 되더군요.
NP Complete이라는게 이런 식이구나하고 생각했습니다.
댓글 달기