본문 바로가기

개발 Note/it 이야기

SW를 개발하기 위해서는 가장 중요한것이 무엇인가??

반응형

SW를 개발하기 위해서는 가장 중요한것이 무엇인가??

 

사용자 인터페이스나 비지니스 로직을 다루는 부분이 아닌 핵심 알고리즘이나 프래임워크(Framework) 을 주로 다루는 개발자로서 평소에 사용자의 요구사항부터 사용자 시나리오에서의 Usecase 까지 고려해서 이와 같은 질문을 해볼 기회가 별로 없었습니다.

 

그리고 일반적으로 개발자들은 사용자의 요구사항이나 시나리오보다는 SW 의 구조, 기술적 난이도, coding 방식에 더 관심이 많고 S/W의 중요한 부분도 이 부분에 있다고 생각하죠.

 

"이번에 새로 알게된 기법인데... 적용해봐야지" "잘 구현하면 되지!" "성능을 어떻게 높일까?" "다른 기기에 포팅 해볼까?" 

이런것에 더 흥미를 느끼고 이를 손으로 구현 해 냈을 때 만족을 느낄 겁니다.

저도 개발자이다 보니 당연히 이런것에 더 흥미를 느끼고 재미를 느끼기 때문에 200% 공감하는 바이고요.

 

그렇지만, 프로젝트를 진행하면서 개발자들이 슬픈 상황이 맞이하게 되는 경우가 많은데요.

분명 좋은 아이디어를 찾아내고 구현해서 훌륭한 퍼포먼스를 내는 모듈을 개발했는데, 그리고 누가 봐도 멋지다라고 생각하는데, 기존 대비 훨씬 좋아진 성능에도 불구하고, 프로젝트의 비전이 점점 흐려지고, 성공에 대한 가능성이 낮아지면서, 경쟁 프로젝트들과의 격차가 발생하는 등 개발자가 스스로가 느끼기에도 뭔가 분위기가 안좋아 지는 것입니다.

그리고 나서는 프로젝트는 종료되거나, 성공적으로 런칭해도 시장에서 반응이 싸늘한 경우일 것입니다.

 

저도 여러번의 대형 프로젝트에 소속되어 개발자로 활동 했었고, 실제로 프로젝트는 성공 했었고 회사에서도 큰 수익이 발생했었습니다. 그러나 몇년 후 시스템은 시대에 맞지 않아서 프로젝트는 종료되었고, 신규 프로젝트가 실행되었고 새로운 모듈을 담당하게 되고 개발을 진행했었지만, 이 시스템도 시대의 요구에 부합되는 그런 프로젝트는 아니었는지 상품화 되지 못하고 종료되었습니다.

 

그러나 개발자 입장에서는 "내 모듈에는 크게 문제가 없고 열심히 하면 프로젝트에 이상이 없을것 같은데, 왜 그만 두려고 하지?" 라는 의문이 있었습니다.

 

도대체 뭐가 문제 였을까요? 프로젝트 기획이 좀 잘못되었어, 디자인이 별로야, 에니메이션 요소를 더 많이 사용했어야 하는데 UX가 첨에는 세련되 보이지만 오래 사용하다보면 질려, 성능이 너무 안나와, 안정성이 너무 떨어져서...

다양한 이유를 말할 수 있겠지요.

 

그런데 진짜 원인은 무엇이었다 라고 자신있게 말할 수 있는 사람이 있을까요? 

 

프로젝트의 성공을 바라는 관점에서 

 

개발을 오래 하다보면 나름의 인사이트가 생긴다. 프로젝트의 난이도라든가, 시대에 부합하는지, 기술적으로 경쟁력이 있는지 등등은 그냥 감으로 느껴집니다.

 

그리고 다른 팀의 팀원들과도 (한회사에서 오래 다니다 보면, 한팀에 있다가 쪼개지고, 다시 합쳐지고 해서 친한 사람이 많아진다.) 커피한잔 하면서 얘기하다보면, 어떻게 흘러가는지 감이 옵니다.

 

그러면서 드는 생각들이 "아.. 왜 이걸 이렇게 진행하지..?? 이게 경쟁력이 있다고 생각하나?" 라는 생각부터 해서 "나라면 이렇게 하겠다." 그리고 나서는 조금 깊게 생각하려고 하다가 머리속에서 분명 명확하다고 생각했던 해답이 없어지고, "아.. 그냥 시키는대로 개발 해야지.. 복잡해.." 라고 하는 개발자 전형의 루틴으로 하루를 보내고 퇴근하게 되죠.

 

한번 생각해보자.!! 프로젝트를 성공 시키기 위해서는 도대체 뭐가 필요한걸까?

시대를 앞서가는 비전? 사용자들이 감동할만한 UI? 빠른 성능? 대박을 터트릴 수 있는 수익 모델?

기술적 선도할 수 있는 AI 기술? 

 

프로젝트는 과연 어떻게 해야 성공할 수 있을까? 

그냥 복불복 인가?? 하늘에 맡기면 되는가?

 

자신이 진행하고 있는 프로젝트를 제외하고 "프로젝트" 라는 단어를 떠올리면, 대부분 이런 생각이 들곤한다.

"세상에 없던 어떤것? 갑자기 멋진 아이디어가 떠올라서 뭔가 열씸히 코딩해서 짠.. 하고 나타나는것..."

회사에서 스트레스 받아가면서 프로젝트를 진행하면서도 이런 생각이 떠오른다는게 신기하죠.

 

프로젝트는 어떻게 시작 될까?

갑자기 개발자가 멋진 아이디어를 짠 하고 생각했다고 해서 프로젝트가 진행될 수 있을까요?

 

우리 모습을 살펴보면 아마 이런 모습일겁니다.

어느날 팀장이 개발 회의 시간에 "QR code를 인식하는 기능이 필요한데, 얼마나 걸릴까요?" 라고 물어볼겁니다.

흠...  과연 누가 기능이 필요하다고 했을까요?

 

아마 프로젝트를 기획 하는사람이 팀장이랑 얘기하다가 필요한 기능이 나왔을 겁니다.

기획하는 사람이랑 무슨 얘기를 했길래 그런 기능이 나왔을까요? "제품에 대한 상세 정보나 가격 정보를 보여주고 싶은데 어떻게 하면 좋을지 아이디어가 있을까요?" 같은 질문이 회의상에서 나왔겠죠.

그러면 참여자들은 여러 아이디어를 얘기하다 NFC, QR code, Bar code, 카메라로 제품 인식을 자동으로 하는 기능 등 다양한 얘기가 나왔다가 결국 QR code 로 정해졌겠죠.

 

그러면 제품에 대한 상세 정보를 보여주고 싶다고 하는 요청은 어디서 나왔을까요? 

어디선가 나왔겠죠... 기획 하는 사람이 아이디어를 냈을 수도 있지만, 기획 하는 사람에게 뭔가를 요청한 누군가가 있겠죠?? 

 

중고차량 매매 회사 사장님이 요청 했습니다.

"우리 중고차 매매회사에서는 온라인 서비스를 하고 싶어요.

어떤 사람이 지나가는 차를 보고 누군가가 와... 저차 멋지네, 가격 얼마지?? 이런 생각을 했을때 핸드폰으로 가격이나 스팩 정보를 쉽게 찾아 볼수 있도록 했으면 좋겠네요." 

 

라고 얘기 했다고 하네요. (가상입니다.)

 

그럼 다시 돌아가서,

이 요구사항을 가지고 기획 하는 사람이 중고 차량 정보를 확인할수 있는 기술적인 방법이 있는지 개발 팀장과 얘기 했습니다.

개발 팀장은 아이디어중 구현이 용이한 방법(QR 코드)을 찾았고, 기획자와 논의 했습니다.

그리고 개발팀에서 해당 기능을 개발 진행하기로 한것입니다.

 

어떤 생각이 드시나요. 얼핏 들으면 말이 되는것 처럼 보이는데 구멍이 숭숭숭 뚫려있죠?

QR code는 어디에 붙어있어야 할까요? 과연 성공적인 온라인 서비스가 될 수 있을까요?

 

만약 이 요구사항을 듣고, 제대로 된 논의 과정을 거쳤다고 한다면 다음과 같이 논의 되지 않았을까요?

 

개발자: 처음에 들었을때는  QR코드로 특정 제품 정보를 보여주는거로 알았는데, 지금 요구사항을 들어보니까. 이건 QR코드로 할게 아닌데요?

기획자: 다른 기술적인 내용은 잘 몰라서 그러는데 어떤 방법이 더 있을 까요?

개발자: 일단 기술적인 난이도를 떠나서 얘기해보자면, 카메라로 바로 해당 차를 찍어서 link가 뜨게 만들어야 될것 같아요. 남에 차에 QR코드가 있을 리가 없잖아요.

기획자: 그게 가능하면 그렇게 하면 좋겠네요.

개발자: 근데 이거 영상인식인데.... 기능이 엄청 어려울것 같아요. 영상인식쪽 잘 아는 개발자가 더 필요할것 같아요.

 

그럼 영상인식으로 기능이 들어가면 될까요?

여기서도 더 고민 해봐야 할 부분들이 있습니다.

일반 사용자는 과연 이 어플리케이션을 기본 카메라로 사용할까요?

그리고 저 차 얼마지? 라고 생각하고 해당 어플리케이션을 실행하고 사진 찍고 하는 수고를 할까요?

글쎄요. 좋은 기능이긴 하지만, 제 생각에는 이 기능으로는 고객을 만족 시킬 수 없을 것 같네요. 여러분의 생각은 어떤가요?

이런 의견이 있을 수 있겠죠.

"그냥 카메라로 사진을 찍고, 해당 앱에서 갤러리의 사진을 읽어서 찾아주면 되지 않을까?" 이런 의견요.

 

그런데 좀 근본적인 고민을 해봅시다.

이 서비스의 핵심은 뭔가요?

중고차 사장님이 얘기한 내용의 핵심이 카메라로 지나가는 차를 검색하는 것이 아니라, 본인 화사가 가지고 있는 중고 차량의 가격, 사고 이력, 연식, 등등의 정보를 한눈에 살펴볼 수 있게 해주고 고객이 쉽게 선택할 수 있게 하는 부분입니다.

카메라를 활용하는 부분은 시스템(어플리케이션)의 일부 기능이죠.

 

만약 그렇다고 한다면, 

영상인식/이미지 인식(AI)에 구현할 수 있는AI 개발자 채용와 학습데이타 수집 비용, 개발시간등 많은 리소스를 보조적인 기능에 투자하는 것이 됩니다.

 

올바른 요구사항을 뽑기 위해서 프로젝트의 고객과 고객의 요구사항에 대해서 진지하게 논의 해보고 원하는 목표가 무엇인지를 그리고 우선순위가 무엇인지를  다시 고민했어야 할 것입니다.

 

고객님이 TV나 유투브 같은데서 카메라로 뭔가를 인식하고 하는것에 꽃혀서(좋은 말로 감명 받아서) 이 기능을 언급 했다고 하더라도, S/W를 개발하는 기획자, 개발자 입장에서는 요구사항에 대해서 진지하게 목적이 무엇인지 해당 기능으로 무엇을 하고 싶은지를 진지하게 고민하고 의견을 교환 했어야 한다고 생각되죠? 

 

"우리 중고차 매매회사에서는 온라인 서비스를 하고 싶어요.

어떤 사람이 지나가는 차를 보고 누군가가 와... 저차 멋지네, 가격 얼마지?? 이런 생각을 했을때 핸드폰으로 가격이나 스팩 정보를 쉽게 찾아 볼수 있도록 했으면 좋겠네요." 

=> 고객님의 중고매장에서 소유하고 있는 멋진차를 핸드폰에서 쉽게 가격과 스팩을 확인하여 구매할 수 있도록 하는 중고차 정보를 제공하는 어플리케이션을 먼저 개발 하는 것이 좋겠습니다.

그리고 카메라를 이용한 차량정보를 확인하는 기능은 사실 AI 분야이고 비용과 시간이 많이 발생하게 됩니다. 

이 부분은 어플리케이션 개발후 다시 논의 해보는 것이 어떨까요? 

 

 

프로젝트를 성공하기 위한 조건

프로젝트 성공이란 프로젝트의 진정한 목적을 찾고 그 목적을 제대로 수용하여 고객이 만족 할 수 있도록 하는것입니다. 단순하게 고객이 얘기한 내용을 그대로 반영한다고 해서 성공 하는 것이 아닙니다.

고객이 요구한데로 어플리케이션이 구현 되었다 하더라도, 고객은 분명 마음속으로

"어.. 카메라 부터 뜨네? 우리 회사 차량 정보는 어디서 봐?"

"음.. 이게 아니었는데.. 아.. 내가 생각했던거랑 달라"

라는 의문을 갖을 수 있습니다.

 

고객은 분명 기능을 통해서 서비스의 성공적인 모습을 머리속으로 그렸을 것입니다.

여기서 중요한 것은 "기능" 이 아니라 "서비스의 성공적인 모습", 요구공학에서 얘기하는 비지니스 골, 달성하고자 하는 목표 입니다.

 

달성하고자 하는 목표(비지니스 골) 이 중요한 것이지 기능은 고객이 제시한 기능이든 아니든 사실상 상관이 없습니다.

위 상황에 빗대어 얘기해보면, 모바일 어플리케이션에서 고객들이 쉽게 원하는 차를 고르고 구매할수 있도록 하는것이지, 카메라나 영상인식 이 중요한 것은 아니라는 의미입니다.

 

집중해야 할것을 찾는 것!

 

요즘처럼 어플리케이션들이 넘처나는 시대에 다른 어플리케이션과의 차이을 보여줄 수 있는 기능은 참 매력적입니다.

하지만 그게 다는 아니라는 것!!!

 

마무리

특정분야로 이야기를 좁히지 않고, 좀더 공감이 될 수 있을것 같아서 온라인 서비스를 예로 들어봤습니다.

(요즘은 Offline 시장을 Online으로 옮기는게 대새???  ^^)

트렌드에 뒤쳐지지 않기 위해서 온라인 서비스를 가지고 이야기를 해봤습니다.

 

!!해피코딩!!