본문 바로가기
Homo Architect/Things Every SW Architect Should Know

표준화(standardization)와 혁신(innovation)

by javauser 2009. 8. 25.

표준화는 일에 대한 생산성을 높이는데 일조를 담당한다. 즉, 일을 수행하는데 있어서 표준화가 되어 있으며, 생산성이 날 수 있다. 하지만, 표준화라는 말을 잘 살펴보면, 표준화를 통해 일을 수행하는 것은 동일한 입력과 동일한 산출물을 내는 작업에 적합하다고 볼 수 있다. 만일, 해당 작업을 수행하는 동안 이전과 다른 입력물을 가지고 작업하게 되면 다른 산출물을 내는 것은 당연한 결과이다. 표준화는 이러한 다양성에 대한 부분을 감독 및 통제하는 형태로 나타나게 되며, 결국 프로세스 통제라는 형태로 나타나게 된다.

소프트웨어 개발은 그럼 위와 같은 표준화라는 의미에서 표준화가 가능한 작업을 수행할 수 있을까? 결론을 말하자면, 결코 그렇지 못하다는 것이다. 어느 한 프로젝트에서의 설계 작업은 다른 프로젝트에서의 설계 작업과 결코 동일할 수 없다. 실제로 동일한 결과가 나타나지도 않는다. 이 프로젝트가 동일한 도메인이라고 하더라도 동일한 결과를 낼 수 없다. 작업을 하는 입력물 또한 동일하지 못하기 때문에 동일한 결과물을 낼 수도 없다. 그럼, 동일한 도메인에 대해서 서로 다른 사람이 작업하게 되면 동일한 산출물을 낼 수 있을까? 이 역시 사람마다 서로 다른 산출물이 나타나게 된다. 그럼 이와 같이 서로 다른 산출물에 대해 어떠한 평가를 내릴 수 있을까? 우선 평가를 하기 위해서는 기준이 있어야 하는데, 이 기준 역시 사용자에 따라, 이들의 관점에 따라 기준이 달라질 수 있다는 것이다. 이러한 기준은 아키텍처적인 관점이 될 것이고, 품질 속성이 되겠지만, 이 역시 100이면 100, 시스템을 바라보는 사람마다 달라진다. 결국, 소프트웨어 개발은 표준화되기가 상당히 어렵고 까다로운 작업 영역이라는 사실을 알 필요가 있다.

표준화는 동일한 입력과 동일한 산출물 결과를 얻을 수 있는 작업에서 의미가 있으며, 소프트웨어 개발과 같이 사람의 지식이 투여되는 작업에서는 큰 의미가 없다. 즉, 경험적인 형태의 작업을 수행할 수 밖에 없다는 의미이다. 경험적인 형태의 작업은 당연히 작업에 있어서 많은 사람의 손(지식)을 필요로 할 수 밖에 없으며, 이는 발전적인 형태와 퇴행적인 형태로 나타날 수 밖에 없다. 퇴행적인 형태는 소프트웨어 개발에 대한 통제와 관리가 제대로 이루어지지도 않으며, 실제 작업을 수행하는 담당자들에게는 고통만이 따른다. 그렇다면, 퇴행적으로 진행되는 소프트웨어 개발을 발전적인 형태로 만들기 위해서는 어떻게 해야 하는가? 결국 이것 또한 사람의 손(지식)이 갈 수 밖에 없다. 사람이 관여를 하되 더욱 발전적으로 작업이 이루어지도록 해야 한다. 즉, 혁신이라는 개념을 도입해야 한다. 혁신은 기존의 것과 대비해서 잘못되고 잘 안되는 부분을 과감하게 수정하여 다른 대안을 찾아 이를 수행하는 것이다. 요구사항을 파악하기가 어려운가? 그렇다면, 요구사항을 파악하는 작업이 잘못되었기 때문이며, 이는 무엇이 잘못되고 어떤 부분이 문제가 있는지를 파악하는 것으로부터 시작해야 한다. 설계 모델을 만들어내는 것이 힘든가? 그렇다면, 이 설계 모델이 왜 필요하고, 누구에게 도움이 되는지를 따지는 것에서 시작해야 한다. 개발을 하고 나서도 계속해서 에러가 발생되는가? 그렇다면, 에러가 발생하는 원인보다도 에러가 들어간 코드가 어떻게 만들어졌는지를 분석하는 것이 더 도움이 된다.

표준화와 혁신은 분명 반대되는 개념이다. 혁신을 하고자 하는데, 표준화를 지키라고 한다면 할일은 많은데 프로세스를 지키면서 수행하라는 결과를 낳게 된다. 소프트웨어 개발은 표준화가 필요한 작업이 아니라, 매번 매순간 혁신을 필요로 하는 작업이다. 비록 그 혁신이 매번 매순간 어려운 사고를 요한다고 하더라도 자신과 고객이 같이 만족하기 위해서는 어쩔 수 밖에 없는 선택이다.
반응형