페널티로 지각을 방지하는 소셜 약속 관리 앱
| 프로젝트 관리 및 협업 | Slack, Notion, Jira, Kakaotalk |
|---|---|
| 프론트엔드 | React (TypeScript), React Query, Jotai |
| 백엔드 | Spring Boot (Java), JPA |
| DB | MySQL |
| 디자인 및 프로토타이핑 | Figma, Adobe Illustrator |
CS에서 서비스기획으로 커리어 전환을 결심하고, 첫 부트캠프를 수강하던 2024년 5월. 기획자들끼리 모여 붕 뜬 아이디어만 주고받는 조별 과제에 한창 지쳐가던 때였다. 실제 개발자 및 디자이너와 협업할 수 있는 사이드 프로젝트를 찾아보다 발견한 것이 바로 비사이드의 10일 단기 해커톤 프로그램 ‘포텐데이’. 약 7-8만 원의 적지 않은 참가비가 있었지만, 실무 협업 기회에 목말라 있던 나에게 그 정도 투자는 기회에 가까웠다.
적극적인 어필과 구애(?) 끝에 기획 1명(나), 프론트엔드 2명, 백엔드 2명, 디자이너 1명, 총 6인 체제의 든든한 팀이 꾸려졌다. 허락된 시간은 고작 10일. 지금처럼 AI가 기획과 개발을 뚝딱 도와주던 시절도 아니었기에, 기획-디자인-개발을 거의 동시에 쳐내야만 겨우 MVP를 완성할 수 있는 일정이었다.
게다가 100% 비대면으로 진행되어, 우리는 Slack Huddle과 Google Meet을 켜둔 채 며칠 밤낮을 모니터 앞에 좀비처럼 붙어살다시피 했다.
그렇게 우여곡절 끝에 10일 만에 탄생한 서비스, 그리고 그 이후 프로젝트 매니징의 쓴맛을 제대로 맛본 5개월 간의 이야기를 시작해 보려 한다.
지루할 정도로 브레인스토밍과 아이데이션을 반복하던 중이었다. 한정된 시간 속에서 좀처럼 뾰족한 아이템이 나오지 않아 지쳐갈 때쯤, 한 팀원의 뼈 있는 말 한마디가 분위기를 반전시켰다.
"저는 약속 시간 안 지키는 친구가 너~무 싫어요."
순간 화면 너머로 무수한 공감이 쏟아졌다. 6명의 팀원 중 5명이 격하게 고개를 끄덕였고, 나머지 한 명은 본인이 바로 그 ‘약속 시간 안 지키는 친구’ 같다며 머쓱하게 웃었다. 그렇게 우리는 늘 먼저 와서 기다리는 5마리의 토끼와, 매번 미안해하며 늦게 나타나는 1마리의 거북이가 되어 '토끼와 거북이(a.k.a 토북이즈)'로 팀명을 정했다.
이 가벼운 에피소드는 우리가 풀고자 하는 진짜 문제를 명확하게 짚어주었다. 인지심리학자 김경일 교수는 "일이 아닌 약속에서 지각을 많이 하는 건, 무의식적으로 '늦어도 되는 자리'라고 인지하기 때문"이라고 말한다. 친구들과의 편한 만남에는 지각에 대한 불이익(페널티)이 없기 때문에 긴장감이 떨어진다는 것이다. 심지어 보상보다 벌을 주는 게 행동 교정에 더 효과적이라는 리서치 결과도 있었다.
하지만 기존의 캘린더나 일정 앱들은 약속 시간을 단순히 기록할 뿐, 시간 준수를 유도하는 행동 교정 기능은 거의 전혀 없었다. 그렇다고 매번 벌금을 걷거나 정색하고 화를 내기엔 친구 사이의 감정만 상할 뿐이었다. 서로 기분 상하지 않으면서도, 지각을 했을 때 확실한 불이익을 줄 수 있는 장치가 필요했다.
단순한 약속 관리 앱이 아니라, 친구들끼리 장난스럽게 지각 페널티를 주고받으며 약속 시간을 지키게 만드는 일종의 놀이 앱을 기획했다.
항상 먼저 도착한 친구가 "야, 너 어디야? 출발했어?"라고 따져 물으면, 늦은 친구는 허겁지겁 "어, 출발했어!"라고 답하는 흔한 레퍼토리. 여기서 착안해 서비스 이름은 "출발했어?!"로 정했다. 반복되는 지각 문제를 진지한 감정싸움이 아닌, 유쾌한 티키타카로 풀어보자는 당찬 포부였다.
기획자로서 이 아이디어를 구체적인 솔루션과 기능으로 구현하기 위해 정의한 주요 정책은 다음과 같다.
사용자가 양심 고백하듯 버튼을 누르는 구조는 장기적으로 도움이 되지 않는다. 친구 한 명이 대표로 약속 유형, 날짜, 시간, 장소를 지정해 약속을 생성하고 초대 링크를 공유하면 방이 개설된다. 지도 API와 실시간 위치 정보 수집을 연동해, 사용자가 오차 범위 내에 실제로 진입해야만 ‘도착 완료’로 인정되도록 로직을 짰다. 정해진 시간까지 바운더리 안으로 들어오면 ‘일찍이’, 단 1분이라도 늦으면 ‘지각이’로 자동 판별된다.
아이데이션 단계에서 시장에 나와 있는 유사 서비스를 리서치했다. 지각자에게 벌칙을 준다는 콘셉트의 앱이 이미 존재했으나, 워딩이나 UI 분위기가 지각자를 너무 강하게 비난하고 수치심을 주는 부정적인 결을 띠고 있었다. 내가 지각자라면 애초에 가입조차 하기 싫고, 벌칙을 받는 순간 바로 앱을 지워버릴 것 같았다. 이러한 리텐션 저하를 막기 위해 전체적인 콘셉트와 UX 라이팅에 공을 들였다. 본인이 페널티를 받을 걸 알면서도 친구들과의 재미있는 놀이로 인지해 지각자의 마음을 움직이고 앱에 머무르게 만드는 것이 기획의 핵심이었다.
죄책감과 스트레스를 주는 대신, 귀엽고 키치한 감성을 전면에 내세워 페널티의 무거움을 덜어내는 방향으로 UX를 설계했다. 실제로 MVP 시연 단계에서도 콘셉트에 대한 칭찬이 가장 많았다. 디자이너의 능력도 한몫했다.
가장 먼저 약속 장소에 도착해 '도착 완료' 처리가 된 1등 일찍이에게는 지각이들에게 내릴 페널티를 직접 선택할 수 있는 독점 권한을 부여한다. “다음 약속에는 내가 무조건 1등으로 가서 복수해야지”라는 강력한 동기를 유도하기 위함이다.
페널티는 크게 벌금과 행동 페널티 두 가지로 나누었다. MVP임을 고려해, 벌금은 정산 시스템을 붙이지 않고 사용자끼리 오프라인에서 가볍게 주고받는 하나의 개념으로만 정의했다. 행동 페널티 또한 사용자의 선택 고민을 줄이기 위해 ‘밥 쏘기’, ‘길거리에서 숏폼 찍기’, ‘모르는 사람과 셀카 찍기’라는 3가지의 고정 페널티를 기본으로 제공했다. 여기에 사용자가 원하는 벌칙으로 마음대로 적을 수 있는 직접 입력 옵션을 더해 자유도를 챙겼고, 이마저도 고르기 귀찮은 사용자를 위해 무작위 선택 기능까지 알차게 배치했다.
아기자기한 티키타카 감성은 100% 살리면서도 불필요한 개발 리소스와 구현 범위를 최소화하기 위해 노력했다. 하지만…
아이디어와 UX 방향성은 완벽해 보였다. 하지만 막상 기획에 들어가니, 가벼운 줄로만 알았던 이 아이디어는 내 발목을 잡는 걸림돌이 되었다.
우리 서비스의 핵심은 모임 내에서 친구들의 도착 순위를 매기는 것이었다. 그런데 지각했을 때와 지각하지 않았을 때의 순위를 각각 매겨야 했고, 모두가 지각했을 때의 단체 페널티 등 엣지 케이스를 하나둘 챙기다 보니 상태값이 미친 듯이 늘어났다. (심지어 혼자만의 약속을 위한 상태값도 만들었다!) 결과적으로 변수는 27개까지 폭증했고, 이에 대응하는 화면을 밤새워 그리다 보니 110장이라는 어마어마한 와이어프레임이 탄생했다. 해커톤에 최적화된 가벼운 아이템이 아니었던 것이다.
화면을 수습하기도 바쁘건만, 이번에는 개발단에서 문제가 터지기 시작했다. 애초에 소셜 로그인만 넣기로 합의했는데, 어느 날 백엔드에서 자체적으로 이메일 회원가입을 만들어와서는 함께 추가하자고 했다. 정의되지 않은 기능들이 멋대로 추가되면서 안 그래도 부족했던 일정은 더욱 빠듯해졌고, 메인이었던 카카오 로그인은 제대로 붙이지도 못했다. 기획자가 프로젝트를 제대로 장악하지 못하면 프로덕트가 어떻게 산으로 가는지 뼈저리게 느낀 첫 번째 위기였다.
숨 막히는 일정 속에서도 우리는 어찌어찌 10일 만에 MVP를 뽑아냈고, 기세를 몰아 프로젝트를 자발적으로 연장해 시장에 앱을 출시하고자 했다. 그런데 갑자기 개발팀에서 코드 리팩토링을 하겠다며 한 달이 넘는 시간을 요구했다. 아무리 코드를 대충 짰어도 기획자가 단호하게 커트하고 기능 완성을 최우선으로 끌고 갔어야 했지만, 당시 나는 ‘개발자가 알아서 잘 하겠지’라는 생각으로 이를 수락하고 말았다. 이 잘못된 판단은 프로젝트를 끝없는 지연의 늪으로 빠뜨리는 계기가 되었다.
끝이 안 보이는 리팩토링 기간 동안 소통 부재는 극에 달했다. 리팩토링이 끝난 이후에도 개발팀은 진행 상황을 두루뭉술하게 넘기기 일쑤였고, 어느 순간부터는 협업 관련 질문을 남겨도 읽씹과 무응답이 이어졌다. PM으로서 프로젝트의 진척도를 전혀 파악할 수 없는 상태가 된 것이다.
사람인지라 결국 인내심이 바닥났다. 하지만 감정적으로 폭발하기보다 팀의 소통 방식을 건강하게 바로잡아야겠다고 생각했다. 팀원들을 모아놓고 조용하게, 하지만 확실하게 현재 상황과 나의 감정을 전달했다. 이른바 ‘정중한 솔직함’이었다. 개발 일정이 투명하게 공유되지 않아 일정을 관리하고 리스크를 통제하는 데 얼마나 큰 어려움을 겪고 있는지와, 무응답이 지속되면 팀의 신뢰가 깨질 수밖에 없음을 진솔하게 털어놓았다.
분위기만큼은 참 좋은 팀이었기에 개발팀도 심각성을 인지하고 미안함을 전했다. 우리는 무너진 협업 프로세스를 살리기 위해 Jira와 스프린트 체제를 적극 도입하기로 했다. 도입 직후 초기에는 효과가 확실했다. 매주 명확한 목표를 세우고 티켓 단위로 업무 상황을 공유하자 서로의 태스크가 한눈에 파악되기 시작했다. 직군 간 병목이 해소되며 목표 달성률도 50% 이상 상승했고, ‘진작 이렇게 일할 걸’ 싶을 만큼 모든 게 완벽하게 굴러가는 듯했다.
하지만 그 평화는 오래가지 못했다. 유일한 현직자였던 프론트엔드 팀원이 회사에서 쓰던 워크플로우를 따와서 세팅해 주었을 뿐, 다들 처음 써보는 툴에 ‘어떻게 상태를 공유하고 피드백할 것인지’에 대한 그라운드 룰이 전무했다. 나중에 회사에 가서 진짜 Jira를 써보고 나서야, 우리가 당시 얼마나 잘못된 방식으로 껍데기만 쓰고 있었는지 깨달았다.
결국 툴은 점차 방치되었고, 무한정 늘어진 일정 속에 팀원들은 서서히 의욕을 잃었다. 엎친 데 덮친 격으로 현직자 팀원이 현업의 바쁨으로 이탈하자, 줄줄이 탈퇴 러시가 이어졌다. 치열했던 우리의 첫 사이드 프로젝트는 앱 출시라는 결승선을 넘지 못한 채 허무하게 흐지부지되고 말았다.
비록 앱 출시도 하지 못하고 어영부영 끝이 났지만, 그렇다고 성과가 아예 없는 것은 아니다. 이 실패는 서비스기획 직무에 환상을 갖고 살던 나에게 어떤 성공담보다 명확한 레슨런을 남겼다.
디자이너와 함께 10일 중 일주일 가까이를 밤새워가며 정책을 정의하고 화면을 그렸다. 경력도 없는 내가 위치 기반의 도착 판별과 27개의 변수가 얽힌 서비스를 단 10일 만에 MVP 단계까지 구현해 낸 것은 지금 생각해도 놀라운 체력과 실행력이었다.
사실 우리 팀의 팀워크는 최고였다. 오죽하면 다른 팀에 갔던 팀원이 분위기가 너무 안 좋아 우리 팀으로 넘어와 만족했을 정도였다. 오프라인으로 만나 밥도 먹고, 개발자들끼리는 따로 모여 개발을 진행하기도 했다. 하지만 나는 이 분위기에 자만했다.
친목으로 인해 공사 구분이 흐려지기 시작하자, 한창 불타올라야 할 프로젝트가 어느새 대학생 조별 과제처럼 변해갔다. 프로젝트가 망가지는 걸 보며, 처음엔 단호하게 관리하지 못한 내 탓이라 자책하며 팀원들에게 미안하기도 했다. 기획자가 ‘좋은 게 좋은 거지’라는 태도로 타협하는 순간 프로젝트는 반드시 망한다. 이후 진행한 ‘단어쓱싹’ 프로젝트에서도 비슷한 문제를 마주하며, 일할 때만큼은 철저히 라포를 형성하되 적당한 거리를 두어야 함을 배웠다.
‘망프(망한 프로젝트)’를 만드는 지름길 중 하나가 ‘출시 일정 길게 잡기’라는 사실을 뒤늦게 알았다. 개발자와 직접 소통해 본 결과, 모든 것을 명확하게 정해주고 타이트하게 관리해야 한다는 것을 깨달았다. 잘 모른다는 이유로 개발자에게 의사결정을 일임하는 순간, 기획자는 권한을 뺏기고 프로젝트는 특정 개발자 한 명에게 멱살 잡혀 끌려가게 된다. 고로 기획자는 누군가에게 의존하는 것이 아니라, 프로젝트가 한 쪽으로 기울지 않도록 밸런스를 잡는 중심 추 역할을 해야만 한다.
첫 프로젝트였기에 자식처럼 애정을 쏟았고 끝내 놓고 싶지 않았지만, 나 혼자 안고 있는다고 해결될 일은 아니었다. 만약 부트캠프 안에서 기획자들끼리만 모여 머리를 싸매고 있었다면 이 매운맛 현실을 훨씬 더 늦게 알았을 것이다. 그렇기에 “출발했어?!”는 나를 환상에서 깨워 진짜 기획자로 눈뜨게 해준, 가장 사랑스러우면서도 아픈 오답 노트다.