옛날엔 소프트웨어라고 하면 컴퓨터에 직접 설치하는 프로그램을 뜻하는 것이 일반적이었다. 하지만 시대가 흘러 인터넷과 스마트폰이 사회 중심에 자리 잡으면서, 소프트웨어의 형태도 정말 다양해졌다. 휴대폰에 설치하는 인스타그램 앱부터, 브라우저에서 돌아가는 넷플릭스, 유튜브의 영상 추천 알고리즘까지 모두 소프트웨어의 한 형태라고 볼 수 있다.
소프트웨어 하나가 세상에 등장하기까지는 수많은 단계를 거쳐간다. 어느 날 갑자기 혜성처럼 짠하고 등장하지 않는다. 작은 프로그램이야 개발자 혼자서도 만들 수 있지만, 어느 정도 규모를 갖춘 소프트웨어는 개발자뿐만 아니라 프로덕트 매니저와 디자이너 등 여러 명의 협업이 필수다.
소프트웨어는 어떤 과정을 거쳐 세상에 나오는 것일까? 총 7단계로 나누어서 알아보자(물론 회사마다, 프로젝트마다 다를 수 있다는 점 참고!).
모든 것이 그렇듯 일단 무엇을, 왜 만들어야 하는지 정해야 한다. 책을 쓸 때도 무작정 쓰기보다는 대충 어떤 장르의 글인지, 누구를 위해 쓰는 글인지 정해놓고 시작하는 것과 같다.
만들고 싶은 소프트웨어를 대충이라도 정했다면 이제 그 아이디어를 구체화해야 한다. 여럿이서 협업하는 작업이니 더욱 그렇다. 사람들의 머릿속은 다 비슷비슷한 것 같으면서도 전혀 다르기 때문에 만들고 싶은 것을 최대한 구체적으로 계획해야 한다.
여기서 계획이란 일정뿐만 아니라 작업 내용도 포함된다. "풍경 사진을 공유하는 앱을 만듭시다!"라고 외쳐봤자 그 앱이 어떻게 생겼는지는 아무도 모른다. 무엇을 개발하고 디자인해야 그 앱이 완성되는지 잘게 쪼개어 우선순위를 정해야 한다. 누가 보더라도 같은 기능과 디자인을 떠올릴 수 있게끔 명확하게 만들어 보여주어야 한다.
잘게 나뉜 작업 하나하나를 일반적으로 '티켓(ticket)'이라 부르는데, 전체 퍼즐의 한 조각이라고 보면 된다. 여러 개의 조각을 하나씩 맞추다 보면 어느새 퍼즐이 완성되듯이, 작업 내용을 담은 티켓을 완성하다 보면 소프트웨어 전체가 완성되는 것이다.
당연하게도 소프트웨어를 만들려면 코딩을 하고 디자인을 해야 한다. 계획 단계에서 만든 티켓을 처리하면서 하나씩 만들어가야 한다. 확인 버튼은 어떤 모양을 하고 있는지, 버튼을 눌렀을 때 화면이 어떻게 바뀌어야 하는지, 새 화면으로 이동할 때 걸리는 시간을 어떻게 하면 줄일 수 있는지 모든 부분을 뚝딱뚝딱 만들어야 한다.
안타깝게도 100% 계획대로 진행되는 경우는 없다. 기술적인 한계로 인해 화려한 디자인을 버려야 하는 경우도 생기고, 새로 생긴 법 때문에 계획에 없던 보안 프로그램을 넣어야 할 때도 있다.
찌개를 끓일 때 맛을 보면서 간을 맞추는 것처럼, 소프트웨어도 테스트가 필요하다. 원래 의도대로 작동하는지부터 시작해 디자인이 깨져 보이지는 않는지, 스마트폰 메모리를 너무 많이 잡아먹지는 않는지, 화면에 보이는 수치와 실제 수치가 일치하는지(은행 앱에서 보여주는 잔액과 실제 잔액이 다르면 얼마나 끔찍하겠는가) 수많은 테스트가 반복적으로 이루어지는 단계다. 남에게 보여주기 부끄럽지 않을 정도가 되기 위해서는 여러 번의 담금질이 필요하다.
소수의 유저들에게 소프트웨어를 배포해 반응을 살펴보는 단계다. 진짜 사용자의 눈으로 평가받기 때문에 귀중한 피드백을 얻을 수 있다. 사용하기는 편리한지, 예상치 못한 버그는 없는지, 과연 지속적으로 쓸 만한 소프트웨어인지를 검증해볼 수 있다. 영화 시사회 느낌이라고 보면 된다. 사람들의 반응과 평가를 기반으로 소프트웨어를 더욱 다듬을 수 있다.
내부 테스트도 통과했고 외부에서도 쓸만하다는 소리를 들었다면 이제 소프트웨어를 배포하는 일만 남았다. 모바일 앱이라면 스토어에 앱 파일을 업로드할 것이고, 리포팅 툴이라면 유저들이 로그인할 수 있는 URL을 공개할 것이다. 수많은 계획 변경과 작업을 통해 탄생한 하나의 소프트웨어가 드디어 세상을 만나는 단계다.
소프트웨어를 CD 형태로 판매했던 시절에는 한 번 배포하고 끝이었다. 하지만 요즘은 대부분 클라우드 기반으로 돌아가기 때문에 지속적인 최적화와 업데이트는 이제 당연한 시대가 되었다. 첫 버전을 배포한 후에는 유저의 사용 패턴에 맞춰 디자인을 바꾸고, 기능을 추가하고, 로딩 속도를 단축하는 작업이 계속해서 이루어져야 한다. 요즘처럼 업데이트의 중요성이 강조되는 때도 없다.
이상 소프트웨어를 총 7단계로 나누어 정리해보았다. 개발 단계는 회사마다, 프로젝트마다 천차만별일 것이다. 그러나 확실한 것은 소프트웨어가 마법처럼 짠하고 등장하는 경우는 없다는 사실이다. 실제로 코딩하고 디자인하는 시간보다 계획을 짜고 세부 내용을 논의하는데 더 많은 시간을 할애할 때도 있다. 그런 시간이 쓸데없이 느껴질 수도 있지만, 여러 사람이 협업하기 위해서는 탄탄한 계획과 효율적인 절차가 반드시 있어야 한다.
*본 내용은 요즘IT와 함께 작성한 글입니다.