솔직히 말하면, 저는 제 제품을 제대로 만든 사람이라고 말하기 어렵습니다. 제품을 여러 개 만들었고, 배포도 했고, 운영도 해봤지만 “잘 만들었다”는 기억보다 “왜 이렇게 오래 걸렸지”, “왜 사람들이 안 쓰지”, “왜 만들수록 더 복잡해지지” 같은 생각이 더 많이 남아 있습니다.
그래서 누군가에게 “제품은 이렇게 만들면 됩니다”라고 말하기는 조심스럽습니다. 대신 “이렇게 시작하면 거의 망합니다”라는 말은 조금 할 수 있습니다. 제가 여러 번 그렇게 시작해봤기 때문입니다.
그중 하나가 기능부터 시작하는 것입니다. 문제는 기능부터 시작하면 처음에는 꽤 그럴듯해 보인다는 데 있습니다.
기능부터 떠올리면 마음이 편합니다
기능부터 시작하면 당장 할 일이 보입니다. 로그인, 대시보드, 알림, 결제, 관리자 페이지, 통계, 자동화, 공유 기능 같은 것들은 손에 잡히고, 개발자 입장에서는 화면과 데이터 구조를 상상하기도 쉽습니다.
저도 그랬습니다. 무언가를 만들기 시작할 때 문제를 오래 붙잡고 있는 것보다, 기능 목록을 쓰고 화면을 만들고 코드를 짜는 쪽이 훨씬 편했습니다. 그렇게 하면 커밋이 쌓이고, 화면이 생기고, 배포 주소도 나옵니다.
겉으로 보기에는 분명히 앞으로 가고 있습니다. 그런데 나중에 알게 됐습니다. 개발이 진행되는 것과 제품이 앞으로 가는 것은 다릅니다.
이 차이를 늦게 알아차리면, 꽤 많은 시간을 쓰고 나서야 이상함을 느끼게 됩니다.
제품은 기능 목록이 아니라 문제에서 시작해야 합니다
기능은 제품의 재료일 뿐입니다. 진짜 먼저 봐야 하는 건 누가 불편한지, 어떤 상황에서 불편한지, 지금은 그 문제를 어떻게 버티고 있는지, 그 불편함이 줄어들면 무엇이 달라지는지입니다.
이 질문이 흐리면 기능은 계속 늘어납니다. 제가 만든 제품들에서도 비슷한 일이 반복됐습니다. 기능은 있었고, 설명할 수 있는 화면도 있었고, 나름대로 구조도 있었습니다. 그런데 “이걸 왜 지금 써야 하지?”라는 질문 앞에서는 약했습니다.
사용자가 이미 하고 있는 방식보다 충분히 나은지, 굳이 시간을 들여 바꿀 이유가 있는지, 제가 만든 것이 정말 문제를 줄여주는지 깊게 보지 못한 채 만든 적이 많았습니다. 그때는 기능이 부족해서 안 된다고 생각했습니다.
지금 돌아보면, 문제를 제대로 못 잡은 경우가 더 많았습니다. 그래서 요즘은 기능을 더 붙이기 전에 한 번 멈추려고 합니다. 이 기능이 부족한 걸까, 아니면 문제가 흐린 걸까.
제 문제든, 타인의 문제든 상관없습니다
문제는 꼭 거창한 시장 조사에서만 나오는 건 아니라고 생각합니다. 제가 반복해서 겪은 불편함이어도 됩니다. 매번 귀찮았던 일, 시간이 새던 일, 같은 설명을 반복해야 했던 일, 수기로 처리하다가 실수가 나던 일도 충분히 출발점이 될 수 있습니다.
타인의 문제여도 됩니다. 고객이 반복해서 말하는 불편함, 주변 사업자가 계속 겪는 병목, 팀에서 매번 막히는 운영 흐름도 출발점이 될 수 있습니다.
중요한 건 제가 만들고 싶은 기능이 아닙니다. 누가 어떤 문제를 겪고 있는가입니다. 문제가 선명하면 첫 버전은 작아집니다. 반대로 문제가 흐리면 기능은 계속 붙습니다.
그리고 기능이 계속 붙는 순간, 저는 보통 다른 신호를 놓치고 있었습니다.
기능이 많아질수록 불안했다는 뜻일 수 있습니다
기능을 많이 넣고 싶을 때가 있습니다. 이것도 있으면 좋겠고, 저것도 없으면 허전합니다. 경쟁 서비스에는 있는 것 같고, 나중에 필요할 것 같고, 없어 보이면 출시하기 민망합니다.
저도 그렇게 기능을 붙인 적이 많습니다. 그런데 돌아보면 기능이 늘어나는 순간은 확신이 커질 때보다 불안할 때가 더 많았습니다.
문제가 선명하면 이번 버전에서 확인할 것도 선명해집니다. 그러면 만들 기능과 미룰 기능을 나눌 수 있습니다. 문제가 흐리면 기능을 줄이기가 어렵습니다. 줄이면 너무 빈약해 보이고, 사용자가 안 쓸 이유만 떠오릅니다. 그래서 더 만듭니다.
하지만 더 만든다고 문제가 선명해지지는 않았습니다. 오히려 나중에는 무엇을 검증하려고 시작했는지도 흐려졌습니다.
그래서 지금은 기능이 늘어나고 싶을 때, 먼저 불안을 의심합니다.
요즘은 기능보다 먼저 묻는 질문이 있습니다
지금은 제품을 만들거나 외주 범위를 정리할 때, 기능보다 먼저 이런 질문을 보려고 합니다.
- 이 제품은 누구의 문제에서 시작하는가
- 그 사람은 지금 이 문제를 어떻게 해결하고 있는가
- 이 문제가 충분히 자주 반복되는가
- 이 문제가 해결되면 시간, 비용, 스트레스 중 무엇이 줄어드는가
- 첫 버전에서 확인해야 할 질문은 무엇인가
- 그 질문을 확인하는 데 꼭 필요한 기능은 무엇인가
- 없어도 되는 기능은 무엇인가
이 질문에 답이 안 나오면 개발을 시작해도 중간에 흔들릴 가능성이 큽니다. 물론 저도 완벽하게 못 합니다. 문제를 잡았다고 생각했는데 막상 만들어보면 빗나갈 때도 있습니다.
그래도 최소한 무엇을 확인하려고 만드는지는 잡고 시작해야 한다고 생각합니다. 그게 없으면 제품 개발은 금방 기능 개발로 바뀝니다.
그리고 기능 개발은 생각보다 쉽게 자기만족으로 흐릅니다.
저는 정답보다 실패 패턴을 기록하려고 합니다
저는 제품을 잘 만드는 사람처럼 말하고 싶지는 않습니다. 아직도 만들면서 배우는 중이고, 잘 된 것보다 잘 안 된 것들이 더 많이 남아 있습니다. 그래서 이 글은 조언이라기보다 기록에 가깝습니다.
다만 반복해서 겪은 실패 패턴은 있습니다. 기능부터 시작하면 망하기 쉽습니다. 문제를 보지 않고 만들면, 개발은 진행되는데 제품은 앞으로 가지 않습니다.
제 문제든, 타인의 문제든 상관없습니다. 출발점은 불편함이어야 합니다. 첫 버전은 그 불편함이 실제로 해결할 가치가 있는지 확인하는 정도면 충분합니다.
저는 아직도 제품을 제대로 만드는 법을 배우는 중입니다. 하지만 적어도 이것 하나는 계속 확인하려고 합니다.
지금 저는 기능부터 시작하고 있는가. 아니면 문제부터 보고 있는가.
📚 함께 읽으면 좋은 큐룸(QUROOM) 기술 아티클
- 🛠️ Codex·Claude 생성 코드를 실서버에 배포할 때 발생하는 기술적 장애 4가지와 해결 절차
- 💳 포트원 V2 결제 웹훅 멱등성 보장과 금액 위변조 방지 아키텍처
- 📋 외주 개발 계약 시 분쟁을 예방하는 5대 과업 제외 범위(Out-of-Scope)와 인수 검수 기준
- 🏗️ Codex·Claude로 만든 AI 프로토타입, 상용화할 때 '살릴 코드'와 '버릴 코드'의 기술적 기준
- 🖥️ 월 1~2만 원대 VPS에 Dokku로 구축하는 Heroku급 무중단 Git Push 배포 인프라 가이드
- 💰 스타트업 MVP 외주 개발 견적 분석: 에이전시 M/M 산정 방식 vs 1인 풀스택 린 아키텍처
- 🏠 큐룸(QUROOM) 8년 차 풀스택 개발사 소개 및 린 MVP 자문 안내
* 본 글은 8년 차 1인 풀스택 개발사 큐룸(QUROOM)의 실제 경험을 바탕으로 AI와 함께 작성했습니다.