- 게스트 수요를 미리 알 수 없음
- 매주 반복되는 모집 업무
- 채널마다 흩어진 모집 현황
- 직전 취소로 인한 높은 부담
- No visibility into guest demand
- Weekly repetitive recruitment tasks
- Recruitment status scattered across channels
- High burden from last-minute dropouts
[ 01 — Overview ]
수년간 아마추어 농구 경기의 게스트 모집은 메신저, 커뮤니티 카페 게시글, 댓글, 문자, 수기 입금 확인으로 흩어진 과정에 의존해 왔습니다. Shoot Shoot Penguin은 이 반복적인 업무를 하나의 시스템으로 묶어, 운영자는 경기를 더 효율적으로 운영하고 플레이어는 참여할 경기를 쉽게 찾을 수 있게 합니다.
For years, recruiting guest players for amateur basketball games relied on a fragmented process — Messenger, community cafe posts, comments, texts, and manual payment checks. Shoot Shoot Penguin ties this repetitive workflow into one system, so organizers run games more efficiently and players find games to join with ease.
[ 02 — The Problem ]
함께한 개발자가 농구팀을 운영하며 매주 겪던 문제였습니다. 정기 팀에는 정해진 체육관과 일정이 있지만, 농구는 팀 스포츠라 인원이 채워져야 비로소 경기가 성사됩니다. 그래서 경기 전마다 같은 사이클이 반복됐습니다. 참석 인원을 조사하고, 부족한 인원을 계산하고, 카카오톡 채팅방과 커뮤니티에 게스트 모집글을 올리고, 입금을 하나하나 확인하는 일. 이미 잡혀 있는 경기를 지키기 위해 매주 일곱 단계의 수작업을 거쳐야 했습니다.
This was a problem my developer teammate lived every week while running his basketball team. Regular teams have fixed gyms and schedules — but basketball is a team sport, and a game only happens when the roster is filled. So the same cycle repeated before every game: polling attendance, counting the shortfall, posting guest recruits to KakaoTalk chats and forums, and checking payments by hand. Seven manual steps, every week, just to protect a game that was already scheduled.
모든 경기는 매주 이 일곱 단계를 거치고 있었습니다. Every game went through these seven steps, every week.
[ 03 — The Core Question ]
진짜 과제는 모집 과정을 단순화하는 것이 아니었습니다. 운영자는 경기 전마다 부족한 인원을 손으로 계산했고, 그동안 출석 데이터는 조용히 쌓이기만 할 뿐 수요를 예측하거나 판단을 돕는 데 한 번도 쓰이지 않았습니다. 이 질문이 Shoot Shoot Penguin의 출발점이 되었습니다.
The real challenge wasn't simplifying recruitment. Organizers calculated the shortfall by hand before every game — while attendance data quietly piled up, never once used to predict demand or support the decision. That question became the starting point for Shoot Shoot Penguin.
[ 04 — System Architecture ]
출석 데이터가 필요한 게스트 수를 예측하고, 예측 결과는 모집글을 자동으로 생성합니다. 모집 중인 경기는 게스트 지도에 노출되어 쉽게 발견되고, 신청 데이터는 다시 시스템으로 돌아와 다음 예측을 개선합니다.
Attendance data predicts how many guests are needed, and predictions auto-generate recruitment posts. Open games surface on the guest map for easy discovery, and applications flow back in — improving the next prediction.
[ 05 — Side A · For Team Leads ]
경기마다 운영자는 같은 일을 반복해야 했습니다. 출석 투표를 만들고, 부족한 인원을 계산하고, 모집 공고를 올리는 일. 이 반복되는 과정을 자동화했습니다.
Every game required organizers to repeat the same workflow — creating attendance polls, calculating missing players, and posting recruitment notices. Our solution automated this recurring process.
경기가 쌓일수록 시스템은 누적된 출석 데이터를 학습해 예측 정확도를 계속 높여갑니다.
As more games are played, the system learns from accumulated attendance data, continuously improving its prediction accuracy.
[ 06 — Side B · For Players ]
게스트 플레이어가 원한 것은 경기 목록이 아니었습니다. "오늘 어디서 뛸 수 있지?"라는 질문에 대한 빠른 답이었습니다. 그래서 지도 중심의 경험을 선택했습니다.
Guest players didn't want a list of games — they wanted a fast answer to one question: "Where can I play today?" So we chose a map-first experience.
예전에는 커뮤니티 글을 뒤져 경기를 찾았습니다. 이제는 지도 위에서 참여 가능한 주변 경기를 바로 발견합니다.
Players used to dig through community posts to find a game. Now they discover joinable games nearby, right on the map.
[ 07 — Key Decisions & Collaboration ]
팀 리드와 플레이어를 각각의 앱으로 나누지 않고 하나의 시스템으로 묶었습니다. 두 니즈가 서로 다른 문제가 아니라 같은 데이터 흐름의 양쪽 끝이라고 판단했기 때문입니다.
We judged that team leads and players belonged in one system rather than two separate apps, because their needs aren't different problems — they're two ends of the same data loop.
플레이어 화면의 기본을 목록이 아닌 지도로 정했습니다. "오늘 어디서 뛸 수 있지?"는 결국 위치에 대한 질문이라고 판단했기 때문입니다.
We judged the player's default view should be a map rather than a list, because "where can I play today?" is fundamentally a question about location.
예측 결과를 자동으로 확정하지 않고, 운영자가 조정할 수 있는 제안으로 설계했습니다. 초기에는 데이터가 적어 예측이 빗나갈 수 있고, 경기에 대한 최종 책임은 운영자에게 있다고 판단했기 때문입니다.
We judged predictions should arrive as an editable suggestion rather than an automatic decision, because early data is sparse and the organizer still owns the final call on the game.
카카오톡과 커뮤니티를 대체하는 대신, 생성된 모집글을 그대로 내보낼 수 있게 했습니다. 사용자의 습관을 바꾸는 것보다 기존 흐름 위에 얹는 편이 실제로 쓰일 가능성이 높다고 판단했기 때문입니다.
We judged the product should export recruitment posts into KakaoTalk and forums rather than replace them, because riding an existing habit gets adopted faster than asking people to change one.
개발자와 함께 제품 방향과 핵심 기능을 정의하고, 유저 플로우부터 디자인 시스템, 개발 핸드오프까지 디자인 전 과정을 단독으로 리드했습니다.
Collaborated with a developer to define product direction and core features, while independently leading the end-to-end design process — from user flows to design system to developer handoff.
[ 08 — Where It Stands ]
백엔드 개발이 진행 중이며, 핵심 플로우와 디자인 시스템은 핸드오프를 마쳤습니다. 첫 클로즈드 베타는 개발자가 소속된 회사에서 시작할 예정입니다.
Backend development is in progress; core flows and the design system are handed off. The first closed beta will start at the developer's company.
베타에서 검증할 지표 — 아직 측정 전입니다. Metrics to validate in beta — not yet measured.
이 프로젝트는 화면이 아니라 시스템을 설계하는 법을 가르쳐줬습니다. 두 사용자의 니즈를 하나의 흐름으로 연결하는 일 — 그리고 그것을 첫날부터 개발자와 함께 하는 일은 디자인 방식 자체를 바꿨습니다. 모든 결정이 구현 가능성의 검증을 통과해야 했기 때문입니다. 검증은 다음 챕터이고, 제품은 측정될 준비가 되어 있습니다.
This project taught me to design a system, not screens. Connecting two users' needs into a single flow — and doing it alongside a developer from day one — changed how I design, because every decision had to survive a feasibility check. Validation is the next chapter; the product is ready to be measured.