ReleaseGate
릴리즈 직전, GO / HOLD를 데이터로 결정하게 해주는 AI 평가 SaaS.
- SaaS
- AI
- FastAPI
- React
Setup
- Problem
릴리즈 직전 회의에서 "이거 내보내도 괜찮을까"가 매번 감과 목소리 큰 사람의 직관으로 결정된다. QA 엔지니어가 정리한 결함 목록은 트래커에, PM이 본 사용자 영향도는 슬랙 스레드에, 개발자가 아는 변경 위험 영역은 PR 코멘트에 흩어져 있다. 같은 정보를 같은 화면에서 같은 점수로 비교할 자리가 없으니, 결정 책임이 가장 자신감 있는 한 사람에게 쏠리고 그 사람의 컨디션과 발언권 크기가 결정에 끼어든다. "릴리즈 신뢰도"를 두고 모두가 같은 한 줄을 보지 못한다는 게 진짜 문제다.
- Context
QA 엔지니어로 14년 동안 들여다본 릴리즈 미팅의 반복 패턴. 체크리스트와 회귀 케이스는 많지만 "릴리즈 신뢰도"라는 한 줄 답이 없어서, 결정 책임이 가장 자신감 있는 한 사람에게 쏠리는 구조였다. 도구가 없는 게 아니라 "결정 자체에 도구가 없는 것"이 문제라는 가설로 출발했다. JIRA·테스트 리포트·코드 리뷰가 다 있는 회사에서도 같은 질문이 반복된다는 게 그 가설을 뒷받침한다.
- Users
릴리즈 결정에 책임을 지는 PO/PM, 리스크를 보는 QA 리드, 출시 일정을 잡는 엔지니어링 매니저.
- Hypothesis
릴리즈 준비 상태를 0-100점의 단일 신뢰도 점수와 GO / HOLD 권고로 표현해 주면, 의사결정이 토론에서 검증으로 옮겨갈 것이다.
Build
- What I did
- Release Confidence Score (0-100) 설계 - 테스트 커버리지·미해결 결함·변경 위험 영역을 가중합으로 묶음
- GO / HOLD 권고와 그 근거가 함께 보이는 리포트 UI
- AI 기반 테스트 케이스 초안 생성 - QA 엔지니어가 빈 화면이 아닌 "수정할 초안"부터 시작하게
- 이해관계자 공유용 PDF 리포트 export
- Product decisions
- 점수를 단일 숫자로 노출 - 회의실에서 "몇 점?" 한 마디로 합의가 시작되도록
- GO/HOLD는 권고로만 표시하고 최종 결정은 사람이 - 자동화의 신뢰 한계를 인정
- MVP에서는 통합 대신 PDF export 우선 - 도입 마찰을 최소화
- QA considerations
- 점수 재현성 - 같은 입력(커버리지·미해결 결함·변경 위험)에 같은 신뢰도 점수가 나오는가(루브릭 결정론)
- GO/HOLD 권고와 최종 결정 사람 개입의 경계가 흐려지지 않는가 - 자동 판정으로 오인되지 않게
- 입력 경계값 - 빈 입력·50,000자 초과 같은 극단 입력에서 안전하게 막히는가(TC-P0-001·002)
- 블로커 유무에 따라 출력 구조가 일관되게 갈리는가(TC-P0-012~015 회귀 고정)
- LLM 응답을 결정론적 목으로 고정해 점수 산출을 회귀 대상으로 유지하는가
- 리스크 레지스터(docs/03)의 대부분 항목에 "검증 방법"과 Mitigated/Open 상태를 붙여 위험 기반 검증이 문서에서 추적되는가
- 자기 게이트에 스스로 못 미치는 구간을 정직하게 드러냈는가 - 커밋된 자동화는 CLI 루브릭에 집중되고
test_go_nogo.py는 빈 플레이스홀더, 웹앱 E2E·커버리지 목표(docs/05)는 아직 문서상 목표
Outcome
- Metrics
MVP 단계. 초기 사용자 인터뷰 진행 중, 정량 지표는 측정 전.
- Result / Learning
"릴리즈 결정"이라는 단어가 가진 무게를 한 화면에 담아내는 게 만만치 않다는 걸 확인. 점수 한 줄을 띄우는 건 쉽지만, 회의실에서 그 점수가 받아들여지려면 "어떻게 그 점수가 나왔는지"가 같은 화면에서 즉시 보여야 했다. 점수가 결정의 시작점이라면 근거 화면은 결정의 안전망이라는 구분이 보이기 시작했고, 점수 자체보다 근거 디자인이 채택을 좌우한다는 가설로 다음 라운드를 짠다.
- Retrospective
- 첫 라운드에서 단일 점수를 헤드라인으로 강조한 게 "숫자에 대한 신뢰" 질문을 너무 빨리 끌고 왔다. 다음 라운드는 점수의 근거 디자인부터.
- MVP에서 통합 대신 PDF export로 도입 마찰을 낮춘 결정은 첫 진입에는 옳았지만, 회의에서 실제로 어떻게 쓰이는지의 흔적이 얇게 남는다는 부작용도 있었다.
진행 과정 (기획 → 개발)
문제·가설에서 스코프·스펙(SSOT)·개발·QA 게이트·배포까지, 같은 틀로 이 앱을 어떻게 기획하고 끌고 갔는지.
진행 과정 (기획 → 개발)
문제 · 가설
릴리즈 회의에서 "이거 내보내도 되나"가, 결함 목록·사용자 영향·변경 위험이 트래커·슬랙·PR에 흩어진 채 가장 자신감 있는 사람의 감으로 결정된다. 가설은 릴리즈 준비 상태를 0-100 신뢰도 점수와 GO / CONDITIONAL / HOLDING / NO-GO 권고 한 줄로 압축하면, 결정이 토론에서 검증으로 옮겨간다는 것이다(docs/00_context.md·docs/02_prd.md).
역량 · 문제 정의 · 가설
스코프 · 우선순위
docs/01_mvp_scope.md가 In Scope 13개(점수·4단계 권고·테스트케이스 CSV 분석·AI 제안 테스트케이스)와 Out of Scope를 P1/P2/P3로 나눠 명시해, Jira·Slack 연동과 예측 모델·자동 회귀 테스트 제안은 뒤로 미뤘다. 기능은 플랜으로 게이팅했고(PDF는 Pro+, 판정 기준 커스터마이징은 Max+, API 키는 Team), 다만 P1로 미뤄둔 GitHub 연동은 커밋 리뷰 형태로 먼저 당겨 붙였다(docs/10_changelog.md).
역량 · 스코핑 · 우선순위
스펙 우선 (SSOT)
README가 "docs/ 폴더가 단일 진실(SSOT)이고 모든 변경은 docs를 먼저 갱신한 뒤 구현한다"고 못박았고, docs/02_prd.md는 FR-001~006을 입출력 표·AC(Given/When/Then)·NFR-001~006까지 내려 적었다. docs/07 릴리즈 Exit Criteria가 "관련 요구사항" 칸에서 그 FR/NFR ID와 docs/04 API 계약을 도로 참조해, 스펙이 구현과 검증의 단일 기준점 역할을 한다.
역량 · 스펙 · 문서화
개발 · 이터레이션
초기 CLI MVP(src/rubric.yaml 10점 루브릭 + go_nogo.py)에서 풀스택 웹 SaaS로 키웠다 - FastAPI evaluator 모듈(evaluator·prompts·recommendations)과 SQLAlchemy async 위에 Google·GitHub OAuth, Stripe, R2 스토리지, WeasyPrint PDF, Sentry를 얹었다. 프런트는 React 18 + Vite로, 릴리즈 입력 폼을 기획·리스크·QA 상태·제안 테스트케이스 섹션으로 쪼개고 결과를 TriRadar 차트로 보여준다(web/src/components/ReleaseForm, ResultBoard.tsx).
역량 · 실행 · 전달
검증 (QA 게이트)
QA 배경이 제품에 이중으로 박혀 있다 - 파는 것 자체가 릴리즈 게이트인데, docs/07_release_exit_criteria.md에 GO 조건·NO-GO 조건·롤백 기준(5XX 분당 10건↑, 로그인 실패율 50%↑)을 명시해 자기 릴리즈에도 같은 게이트를 걸었고, docs/03_risk_register.md는 대부분의 리스크에 "검증 방법"과 Mitigated/Open 상태를 붙여 위험 기반 검증을 했다. 테스트는 TC ID가 문서에서 코드까지 추적되게 짰다 - test_input_validation은 빈 입력과 50,000자 경계값(TC-P0-001·002)을, test_output_format은 블로커 유무별 출력 구조(TC-P0-012~015)를 잠그고, OpenAI 응답은 conftest의 결정론적 목으로 고정해 LLM 출력까지 회귀 대상으로 만들었다. 다만 커밋된 자동화 테스트는 CLI 루브릭 엔진에 집중돼 있고(test_go_nogo.py는 빈 플레이스홀더) 웹앱 E2E·커버리지 목표(docs/05)는 아직 문서상 목표로 남아, 자기 게이트 기준에 스스로 못 미치는 구간을 정직하게 드러낸다.
역량 · 품질 · 리스크
배포
프로덕션 라이브 - 프런트는 GitHub Actions로 Cloudflare Pages에(main=프로덕션·staging 분리), API는 Railway(railway.toml·Procfile·nixpacks)에 배포되고 Sentry로 관측한다. 상태는 MVP·초기 사용자 인터뷰 단계이며, 변경 로그는 태그 없이 git 커밋 기반으로 관리한다(docs/10_changelog.md). docs/00에 적힌 베타 종료일(2026/01/31)은 현재 시점 기준 이미 지나, 문서 갱신이 밀려 있다.
역량 · 릴리스
- Tech stack
- FastAPI
- React
- PostgreSQL
- OpenAI API
- Links