규도자 개발 블로그

개발자라면 개발을 모르는 사람들의 탓을 해선 안 된다. 본문

소프트웨어 공학/요구사항 분석

개발자라면 개발을 모르는 사람들의 탓을 해선 안 된다.

규도자 (gyudoza) 2020. 4. 2. 12:17

개발자라면 개발을 모르는 사람들의 탓을 해선 안 된다.

※일단 개발자와 비개발자가 협업하여 어떤 어플리케이션을 만들어야 한다는 상황을 가정한다.

 

개발자와 비개발자의 협업은 필연적이다. 어차피 세상 거의 모든 어플리케이션은 실세계의 반영일 뿐더러 개발자가 세상 모든 도메인지식을 습득할 순 없기 때문이다. 하지만 그렇게 개발자와 비개발자의 협업이 이뤄진다면, 그 과정에서 불협화음이 발생할 수밖에 없다. 서로 다른 세계를 보고 있는데 아무런 마찰이 없다는 것 자체가 어불성설이다.


그럼에도 불구하고 협업의 목적이 어플리케이션 개발이라면 개발자는 아무리 답답하다고 하더라도 비개발자의 탓을 해선 안 된다.


어찌보면 당연한 얘기를 왜 그렇게 구구절절 써놨나 했겠지만 예를 들어서 설명하면 어느정도 와닿을 것이다. 당신이 어떤 회사의 ERP 시스템을 만든다고 해보자. 예전에도 썼던 예제인데 그 회사의 담당자가 인사관리에 대한 부분에 대해서 회의할 때 "해당 직원의 관리자와 인사부에서만 그의 기록을 열람할 수 있게 해주세요." 요구사항을 제시한다고 해보자. 이 요구사항을 들은 당신은 아무런 질문 없이 해당부분을 하드코딩으로 구현하였다. 그리고 유지보수기간이 끝나기 전에 그 회사의 담당자가 이런 요구를 해온다.


"회사 정책이 바뀌어서 그런데 해당 직원의 관리자가 권한을 특정 사람에게 위임할 수 있게도 만들어주세요."


앗. 당신은 벌써 해당부분을 특정 권한이라는 속성값을 조정하는 방법이 아닌 직책 자체에 열람권한을 갖게 하드코딩해버렸다. 변경을 할 수는 있지만 유지보수의 범주가 아닌 기능개발의 범주에 들어갈 정도의 스쿱이 나온다. 당신은 담당자에게 유지보수라고 하기엔 많은 개발소요가 예상되니 기능개선이나 새로운 개발 건으로 하여 신청해달라고 답장하지만 담당자는 이해할 수 없다는 반응을 보이며 당신과 논쟁을 벌인다. 개발자는 무슨 말도 안되는 요구를 하며 담당자에게 열을 내지만 담당자는 이게 무슨 말도 안되는 요구냐며 반격한다. 개발자는 개발의 개자도 모르면서 쉽게 말하는 담당자에게 화가 나고 담당자는 개발을 업으로 하는 사람이 이렇게 간단해 보이는 문제도 쉽지 않다며 해결해주려하지 않는 개발자에게 화가 난다.


 

익숙하지 않은가? 과연 이 상황은 누구의 잘못일까? 둘 다 잘못이다. 하지만 이건 미연에 방지할 수 있는 문제였다. 누구의 손에서? 바로 개발자의 손에서.

 프로그래밍은 물레방아나 수레 같이 물리적으로 현상관찰이 불가능하다. 아날로그와 디지털의 차이라고 할 수 있겠다. 만약 이 상황이 중세시대 때 일어났고 열람권한이라는 것을 명부에 기록해놓고 담당 서기가 관리하는 체제였다면 담당 서기가 열람권한을 다른 사람에게도 체크함으로써 간단하게 해결할 수 있었을 것이다. 아니면 그냥 외우던가.

 하지만 디지털 세계에서는 골치 아픈 문제일 수도 있다. 개발자는 이 디지털 세계에서 현실의 문제를 해결해주는 임무를 부여받은 사람이기 때문에 개발자의 손에서 해결해야할 문제인 것이다. 그러므로 미연에 비개발자들의 탓할 방법을 방지하는 개발자의 기량이 필요하다. 이것은 어찌보면 결과론적인 얘기이고 불가능해보이기만 한 것으로 보이지만 확률을 줄이는 건 가능하다. 

 어떻게? 비개발자들의 변덕에 대응할 수 있게, 혹은 요구사항을 타이트하게 정의하면 된다. 물론 요구사항을 타이트하게 정의하는 게 작업할 때 편하지만 실제 사람들끼리 하는 일들이 그렇게 되지 않는다는 걸 우리는 잘 안다. 그러므로 우리는 비개발자들의 변덕에 대응할 수 있게 설계 및 제작해야한다. 이렇게 서술하면 꼭 비개발자인 사람들을 변덕쟁이로 치부하는 것 같지만 그냥 서술하기 편하게 하기 위해 이렇게 표현한다는 점을 알 것이다. 엄밀히 말하면

"비개발자들의 변덕에 대응할 수 있게 설계 및 제작해야 한다"가 아니라

"정책의 변경에 유연할 수 있게 요구사항은 정책을 제외한 채 설계 및 제작해야 한다"가 된다.

 


개발자들은 현실세계의 문제를 컴퓨터의 힘을 통해 해결하기 위해 일을 하는 사람이지 문제를 가중시키려고 일을 하는 사람이 아니라는 것을 꼭 명심해야 한다. 개발자들의 머릿속에선 익숙하게 굴러가는 논리의 흐름은 일반세계에서는 통용되지 않는 지엽적인 작용이며 그것에 대한 비개발자들의 이해를 바라는 것은 마치 자동차가 고장났을 때 전문가 시점에서 이정도 예산으론 이정도까지밖에 고칠 수 없는데 왜 이것밖에 안되냐고 불평하는 진상손님이나 다름없다. 서로의 전문분야가 있고 공통 목적이라는 "문제 해결"을 향해 정진하면 될 것이다.

Comments