원래 게시된 곳: clutchledger.com/story.
저는 선임 비즈니스 분석가(senior business analyst)이자 AI 제품 오너(AI product owner)입니다. 직장에서 저는 어떤 제품이 무엇을 해야 할지 결정하고, 개발자들이 구축할 수 있도록 글로 작성합니다. 올 가을에는 이 과정을 저 자신에게 적용했습니다. 바로 Claude Code를 개발자로 활용한 NBA 예측 시스템인 'Clutch'입니다. 제가 코드를 직접 작성하지는 않습니다. 이 글은 그 과정이 어떻게 작동하는지, 어떤 규칙들을 설정했는지, 그리고 솔직한 결과가 어떠한지에 대한 내용입니다.
무엇을 하는가 (What it does)
NBA 시즌의 매일 밤마다, Clutch는 모든 경기에 하나의 숫자를 부여합니다. 바로 홈팀이 승리할 확률입니다. 경기 시작 전에 이 숫자는 공개된 Git repository에 기록되며, 나중에 제가 몰래 변경하지 못하도록 이전 파일과 해시(hashed)되어 체인화됩니다. 최종 결과가 나온 후에는 ESPN의 BPI와 같은 시장의 최종 가격과 함께 공적으로 평가되며, 가장 간단한 규칙은 홈팀을 선택하는 것입니다.
분석가와 Claude Code는 어떻게 구축했나 (How an analyst and Claude Code build it)
서버는 없습니다. Python jobs가 GitHub Actions에서 스케줄에 따라 실행됩니다. 이 작업들은 그날 밤의 경기 정보, 부상 보고서(injury report), 그리고 시장 가격을 가져와 Postgres database(Supabase)에 숫자를 기록하고 봉인합니다. iPhone 앱과 웹 앱은 하나의 Expo codebase로 구성되어 있으며, 이 코드가 해당 행들을 읽어옵니다. 게임 시뮬레이션과 What-If lab은 기기(device)에서 실행됩니다.
저의 역할은 직장과 동일합니다. 저는 Clutch가 무엇을 해야 할지 결정하고, 무엇이 '옳다'고 간주되는지를 글로 작성하며, 시뮬레이터와 브라우저의 모든 변경 사항을 확인하고 예/아니오를 말하는 것입니다. Claude Code가 코드를 그리고 테스트를 작성합니다. 9월 1일 이후로 프로젝트의 네 개 리포지토리 전반에 걸쳐 1,400개 이상의 커밋(commit)이 발생했으며, 그중 약 100건 중 95건에서 Claude를 공동 저자로 명시했습니다. 무언가를 배포하기 전에 5,400개가 넘는 자동화 테스트(automated tests)가 실행됩니다.
다른 분석가에게 전하고 싶은 말 (What I'd tell another analyst)
만약 당신이 직업적으로 명세서를 작성하며 자신만의 제품을 이런 방식으로 구축하고 싶다면:
분석적인 방식으로 작성하세요. 무언가를 구축하기 전에 무엇이 올바른지 정의해야 합니다: 수용 기준(acceptance criteria), 한계점(limits), 절대 나타나서는 안 되는 단어들입니다. Claude가 코드를 작성하지만, 무엇을 만들지는 당신의 몫입니다. Clutch의 규칙 중 하나는 게임에 돈을 걸 수 없다는 것이며, 이 규칙을 위반하는 단어가 앱 텍스트에 단 하나라도 나타나면 테스트가 실패합니다.
"완료"만으로는 충분하지 않습니다. 증거를 요구하세요. 모든 변경 사항에 대해: 테스트, 미리 보기(preview), 스크린샷을 요청하십시오. 스스로 확인하지 않은 것은 절대 받아들이지 마세요.
가드 레일(guard rails)부터 구축하세요. 프로덕션 작성, 출시 및 빌드는 직접 관리해야 합니다. Claude는 프로덕션 데이터베이스에 쓰거나, 서버 함수를 배포하거나, App Store 빌드를 시작할 수 없습니다. 이런 경우에는 스스로 검사하는 스크립트 하나(dry run, apply, re-test)를 건네주며, 제가 그것을 실행합니다.
정직하게 측정하세요. 결과를 보기 전에 비교 기준을 결정하고, 결과가 무엇이든 게시하십시오. Clutch의 경우, 제 모델이 시장을 이기지 못했다는 내용을 페이지에 작성하고, 모든 등급이 매겨진 게임은 원래 등급대로 유지했습니다.
팁(tip) 전에 봉인하는 방법과 확인 방법
숫자가 바뀔 때마다, 예약된 작업(scheduled job)이 그날 밤의 숫자를 github.com/uguraltunbas/clutch-receipts 파일에 기록합니다. 모든 파일은 이전 파일의 SHA-256 해시를 가지고 있어, 이 파일들이 체인(chain)을 형성합니다. 몇몇 숫자는 팁 전에 유료 독자들을 위한 것인데; 이것들은 숫자와 임의의 솔트(salt)를 합친 해시로 들어갑니다. 그리고 그 숫자와 솔트는 최종 후에 공개됩니다.
당신은 저를 믿을 필요가 없습니다. 레포지토리(repo)를 복제하고 폴더 내에서 이것을 실행하세요 (Python 3, 패키지 없음).
사용해 보세요
app.clutchledger.com: 오늘 밤의 게임; 하나에 대해 스스로 예측하고, 계정 필요 없음. 팁 시간에 잠기고 최종 후에 등급이 매겨집니다.
The Ledger: ESPN의 BPI와 시장, 그리고 Clutch가 나란히 있는 모든 등급이 매겨진 게임.
공개 데이터(Open data): 평문 JSON 및 CSV 파일 형태의 봉인된 숫자들.
저는 이 게시물을 Claude의 도움을 받아 작성했으며, 앱을 구축했던 방식과 동일합니다.