Windows Vista가 나온지 얼마 되지도 않은 시점에서 Windows7이 나온다고 하더나 이제는 Windows8이 출시될 것이라는 얘기가 떠돌고 있습니다.
아이폰4도 출시된지 알마 안된 시점에서 아이폰5가 출시될 것이란 얘기가 나왔습니다. 어쩔 때는 이것이 진짜인지 그냥 루머인지 구분이 안되기도 합니다.
소프트웨어 개발을 제대로 이해하고 있는 사람들이라면 Windows7이 출시됨과 동시에 또는 이미 그 이전에 Windows8은 시작이 되었다는 것을 알 수 있습니다.
소프트웨어는 끊이 없이 업그레이드가 되어야 합니다. 그러다보면 새로운 요구를 더이상 담을 수 없는 시점이 오게 됩니다. 그래서 소프트웨어의 아키텍쳐도 끊이 없이 발전하게 됩니다.
지금의 소프트웨어가 새로운 요구를 더이상 담을 수 없는 그릇이 되게 되면 이미 상당히 늦었다고 볼 수 있습니다.
미래에 생길 요구사항을 미리 예상하여 그 구조를 만드는 것이 소프트웨어 아키텍쳐링입니다. 물론 예언자처럼 미래의 모든 상황을 예측할 수는 없지만 상당부분 예측을 해야 하며 여기서 성공을 하느냐, 실패를 하느냐에 따라서 비즈니스의 성공이 달려있습니다.
그런데 현실에서 보면 소프트웨어 아키텍쳐를 바꿔야할 시점을 놓친 회사들이 매우 많습니다. 이런 회사의 특징은 다음과 같습니다.
- 소프트웨어에 기능을 추가하거나 버그를 수정하려고 해도 기존의 소스코드가 워낙 복잡해서 분석도 어렵고 고치는데 시간이 많이 들어간다.
- 버그를 수정해도 이전에 없었던 문제가 자꾸 다시 생겨난다.
- 유지보수에 바빠서 신규 제품 개발은 꿈도 못 꾼다.
- 기존 제품을 잘 알고 경험이 많은 개발자들은 유지보수하느라고 바빠서 새로운 아키텍쳐를 연구할 시간이 없다. 그래서 신규 개발자를 투입했는데 진도가 안나간다.
뻔히 다 알다시피 우리나라 대부분의 소프트웨어 회사들은 초창기에 뛰어난 몇몇 개발자들이 주먹구구식으로 상당히 좋은 소프트웨어를 개발해서 좋은 평가를 받으면서 성장해왔습니다. 그런데 회사가 커지고 소프트웨어가 커지면서 작은 조직일 때는 드러나지 않은 주먹구구 방식 때문에 효율성이 급격히 떨어지게 됩니다. 그러다보니 항상 유지보수에만 매달리고 신규 개발에는 투자를 못하게 됩니다. 대부분의 경우 소프트웨어 아키텍쳐가 4~5년 넘어가게 되면 더이상 버티기 어려운 상황에 닥치게 됩니다.
이미 마지막 기회를 놓친 회사들은 끊임 없는 유지보수에 매달리면서 회사의 쇠락을 지켜볼 수 밖에 없습니다. 수많은 회사들이 지금이 마지막 기회라는 것을 인지하지 못하고 지나쳐 버리는 것을 보면 안타깝습니다. 그나마 영업이 잘되는 회사는 막대한 인원과 자금을 투입하여 점점더 되돌아 오기 어려운 길로 가버리기 때문에 회생하기 더 어려워 집니다. 이렇게 침몰하는 거대한 여객선 같은 소프트웨어 회사들이 상당히 많고 경영진들이 이를 알지 못하는 경우도 매우 많습니다. 경영진들은 개발에서 구멍이 났다는 것을 알아도 그 구멍을 어떻게 매워야 하는지 정확하게 모르는 경우가 대부분입니다. 그래서 이런 저런 시도를 하다가 침몰만 가속화 시키곤 합니다. 그래도 시도를 안할 수는 없겠죠.
그럼, "언제 다시 만들어야 하는지?" 질문으로 돌와와 보죠.
회사마다 제품의 성격과 규모마다 다르지만 대부분은 첫번째 제품이 개발되면서 이미 두번째 제품의 기획도 시작이 되어야 합니다. 또한 두번째 제품을 누가 개발을 할지 언제 개발을 할지 계획을 미리 가지고 있어야 합니다.
첫번째 제품은 개발 후에 유지보수는 어떻게 진행을 하고, 누구는 두번째 제품에 투입이 되어야 하는지 등의 계획을 미리 가지고 있어야 한다는 뜻입니다.
이 얘기는 무슨 뜻이냐면 처음부터 개발을 체계적으로 하면 된다는 뜻입니다. 분석이 제대로 되고 설계가 제대로 되어야 해결이 된다는 얘기 입니다.
그럼 이미 첫번째 제품을 주먹구구식으로 개발을 한 회사는 어떻게 해야 할까요? 지금이라도 두번째 제품을 체계적으로 다시 기획을 해야겠죠. 주먹구구의 결과로 필요한 상당히 많은 자료는 개발자들의 머리속에 들어 있습니다. 이것들을 끌어내서 문서화 하면서 두번째 제품을 기획하고 분석을 해내야 합니다. 개발자들은 이미 기본의 제품이 가지고 있는 문제점과 개선점을 아주 잘 알고 있습니다. 문제는 이것들이 문서화가 되어 있지 않고 리뷰가 안되었다는 겁니다. 이것들을 문서로 끌어내는 것만으로도 두번째 제품의 상당한 스펙이 됩니다. 또한 업계 동향과 신기술도 끊임 없이 조사를 해야 합니다.
그럼 이미 두번째 제품을 만들 마지막 기회를 놓친 회사들은 어떻게 해야 할까요?
늦었다고 생각할 때가 가장 빠른 때입니다. 쉽지는 않겠지만, 큰 고통이 따른 변화가 필요합니다. 기존의 영업의 손실을 감수하고라도 유지보수 정책의 전면적인 변화가 필요하며 새로 투자를 더 해야 할 수도 있습니다. 회사의 조직과 프로세스의 전면적인 개혁도 필요할 것입니다. 즉, 다시 원칙에 충실해야 한는 거죠. 이 과정에서 개발자나 회사 모두 고통이 따르겠지만 이렇게 해서 성공할 것 같으면 시도를 할 수도 있고 그런 확신이 없다면 그냥 지켜보는 수 밖에 없을 겁니다.
귀사의 소프트웨어는 어느 시점에 와 있나요? 곰곰히 생각해보시기 바랍니다.