들어가며

오늘은 나의 개발철학을 정리해보려고 한다. 너가 뭔데?라고 스스로도 생각하지만, 미숙한 내가 성장을 하려면 지금 내 생각을 정리해야 문제점이 무엇인지 파악하고 성장을 할 수 있다고 생각하기 때문이다. 

 

제목의 뜻

경영학과에서 수업을 들은 적이 있다면, 효과성과 효율성에 대해서 매번 듣게 된다. 복수전공을 하면서 교수님께서 "2학년 여러분은 다들 아시겠지만 한 번 더 설명할게요~"라고 해주셔 알게 되었다(물론 나는 복전이라 처음 들었지만... 배려 감사합니다 교수님ㅠㅠ).

 

효과성은 "목표를 어느정도 달성했는가?"를 뜻한다. 

효율성은 "목표를 달성하는데 어느정도 비용을 사용했는가?"를 뜻한다.

아래는 당시 교수님이 예시로 들어주신 말씀을 그대로 인용한 것이다.

벽에 붙어 있는 파리를 잡을 때, 해머로 때려서 잡았다면 파리를 잡는 다는 목표는 100% 달성한 것이다. 하지만 가볍게 파리채를 휘둘러서 똑같이 파리를 잡았다면, 효과성은 같지만 힘을 덜 사용했으므로 효율적이라고 할 수 있다.

개발이랑 무슨 상관?

설명을 들으면서 번뜩 깨닫는 것이 있었다. 이거 개발과정이랑 비슷하지 않나? 개발자는 사용자를 위해 기능을 개발한다. 그리고 구현해야 할 기능 안에서 효율적으로 컴퓨팅 자원을 사용하기 위해서 항상 고민하고 있다. 지금까지 진행해왔던 프로젝트 들이 주마등처럼 스쳐갔다. 

 

지난 프로젝트에서도 잘못된 개발 과정을 경험한 적이 많다. 스프린트를 하면서 요구사항 분석-> 해결방법 선택 -> 디자인 -> 개발 과정을 진행했는데, 개발 이전 과정을 진행할 때마다 고객에게 검수를 받아 개발 과정에서 오류를 최소화하는 장치로 삼았지만 결국 개발과정에 와서야 오류를 찾은 경우가 많다. 왜냐면 고객이 기존의 요구사항을 개발이 다 되고 나서 바꿀 수도 있고 완성 후 다른 기능 구현 과정에서 기존 개발 코드를 수정해야 하는 경우도 많기 때문이다.(아무리 SOLID를 잘 준수해도 명세가 바뀐다면 어쩔수 없다.) 

 

그런데 문제는 내가 개발 과정에서 효율성을 굉장히 중시했다는 점이었다. "작은 기능에 집중하며 이 기능의 성능이 좋아야 다른 개발도 수월하겠지?"라고 생각하며 효율성에 굉장히 집착했다. CSV Parsing 라이브러리가 생각보다 느려서 직접 만들기도 하며 기능의 첫 번째 버전에도 효율성을 신경써서 만들었다. 

 

처음에는 만족스러웠다. 하지만 시간이 지나서 기능이 추가 될 수록 빡빡하게 만들었던 코드를 변경해야하는 경우가 많아 고뇌가 깊어졌다. SOLID 원칙을 준수해서 기능간 결합도를 낮게 유지한다고 해도 명세가 바뀌면 결국 코드도 바꿔야 했다. 그러면 신경써서 만든 코드들을 날리고 다시 만드는 경우가 있었다.  

 

Clean Agile책에 따르면 애자일 개발과정은 잘못된 것을 빠르게 파악하는 능력이 중요하다고 서술되어 있다. 즉, 최적화나 세부적인 과정에 집중하는 대신 일단 동작가능하게 만들어보고 이것이 맞는지 빠르게 판단해야 한다고 한다. 이것은 효율성보다 효과성을 우선시 한다는 것을 의미한다. 아무리 가벼운 파리채를 만들어서 휘둘러도 파리가 없는 부분을 때리거나 이제 새를 잡아야 한다면 결국 무용지물인지 않은가? 지금까지의 나는 개발자로서 효율성에 집중했지만 이제는 달라져야 한다고 생각한다.

기술을 위한 기술에서 고객을 위한 기술로

내가 효율성에 집착한 이유는 무엇일까? 아마 최적화를 통해 빠르고 아름다운 코드를 작성하고 싶은 욕심이었을 것 같다. 코드를 완성하고 나서의 뿌듯함과 성취감이 욕심을 계속 부추겼던 것 같다. 배달의 민족 CEO 대표님이 말씀하신 엘리베이터 문제콰이 강의 다리 문제와 비슷하지 않을까 생각한다. 

 

돌이켜보고 나니 나는 효율성이란 아름다움을 위해서, 기술을 위한 기술에 집중하고 있었다. 결국 기술이란 그 자체보다 사람들을 위한 것인데도 말이다. 이것을 깨닫고 나니 그 동안 화려한 프레임워크나 기술을 사용하여 작품을 만드는데 매혹되어 왔다는 것을 알게 되었다. 가장 중요한 것은 그걸 사용하는 사용자 인데 말이다.

 

따라서 나는 앞으로 효과성을 우선시 하기로 했다. 최적화도 중요하지만 일단 빠르게 동작가능한 코드를 만들어야 다른 개발자와의 협업, 사용자의 검증 그리고 다른 기능의 개발을 빠르게 진행 할 수 있기 때문이다. 그렇게 목표로 했던 기능을 모두 완성해 고객을 위한 효과성을 달성하고 고객의 요구사항 변경 요청이 잦아들 때쯤, 효율성을 위한 개발을 진행할 것이다. 

 

마치며

지금까지 나는 기술에 매료되어 개발을 위한 효율성에 빠져있었지만,

앞으로는 고객을 위한 효과성과 개발을 위한 효율성을 잘 조율하는 개발자로 성장하고 싶다.

아직 많이 부족한 개발자의 글이지만 읽어주셔서 감사합니다! 

 

+ Recent posts