Primary metric
실험이 개선하려는 핵심 행동 지표
예: invite_accepted rate, checkout_completed rate분류: Layer 13 - Product Engineering & Growth Systems
Product Engineer는 기능을 “배포했다”에서 끝내지 않는다. 어떤 사용자에게 언제 노출할지, 변경의 효과를 어떻게 분리해서 볼지, 문제가 생기면 얼마나 빨리 끌지까지 설계한다. 이때 A/B 테스트와 feature flag는 제품 학습과 출시 안전성을 연결하는 핵심 도구다.
Experimentation & Feature Flags는 제품 변경을 실험 가능한 가설로 만들고, 기능 플래그로 사용자 노출을 제어하며, guardrail metric과 rollback으로 출시 위험을 관리하는 역량이다.
새 UX가 좋아 보인다고 해서 모든 사용자에게 바로 노출하면 세 가지를 잃는다.
Feature flag는 release를 제어하고, experimentation은 변경 효과를 비교한다. 둘을 함께 쓰면 Product Engineer는 “코드는 이미 배포했지만 아직 5% 사용자에게만 노출”, “conversion은 올랐지만 error rate guardrail이 악화되어 중단” 같은 판단을 할 수 있다.
전통적인 release는 배포 단위와 사용자 노출 단위가 같았다. 배포가 끝나면 모든 사용자가 새 기능을 보았고, 문제가 생기면 rollback이나 hotfix가 필요했다. 이 방식은 작은 서비스에서는 단순하지만, 제품 규모가 커질수록 위험하다. 기능이 특정 plan, region, role, cohort에만 영향을 줄 수도 있고, 지표 변화가 우연인지 기능 효과인지 분리하기도 어렵다.
GrowthBook은 experiment health에서 Sample Ratio Mismatch, multiple exposures, guardrail 같은 데이터 품질 체크를 중요하게 다룬다. LaunchDarkly는 flag variation이 customer action, application performance, business outcome에 어떤 영향을 주는지 metric으로 연결한다. 두 관점은 같은 메시지를 준다. 실험은 통계만의 문제가 아니고, flag는 설정 UI만의 문제가 아니다. 둘 다 제품 변경을 안전하고 학습 가능하게 만드는 엔지니어링 장치다.
따라서 이 문서는 테스트 전략의 연장선이지만, 코드 정합성 검증이 아니라 제품 가설 검증과 사용자 노출 제어를 다룬다.
좋은 실험은 variant보다 가설이 먼저다.
가설:첫 workspace 생성 직후 팀원 초대 CTA를 보여주면신규 admin의 invite_accepted rate가 증가한다.
대상:처음 workspace를 만든 admin
Primary metric:7일 내 invite_accepted rate
Guardrail metric:workspace_created -> first_project_created conversion,invite_create_failed rate,support ticket rate가설에는 대상, 변경, 기대 행동, 시간 범위가 있어야 한다. “새 버튼이 더 좋을까?”는 약한 가설이고, “신규 admin의 첫 팀원 초대 완료율이 7일 안에 증가하는가?”는 실험 가능한 가설이다.
Randomization unit은 사용자를 어떤 단위로 control/treatment에 배정할지 정하는 것이다.
| 단위 | 적합한 경우 | 위험 |
|---|---|---|
| User | 개인별 UX 변경 | 같은 workspace 안에서 사용자마다 다른 UX를 볼 수 있음 |
| Workspace/Account | 협업·권한·결제 기능 | 표본 수가 줄어들 수 있음 |
| Session | 일회성 UI 노출 | 같은 사용자가 여러 variant를 볼 수 있음 |
| Request | 인프라/알고리즘 비교 | 사용자 경험 일관성이 깨질 수 있음 |
협업 제품에서는 user 단위 실험이 항상 맞지 않는다. 초대, 권한, billing처럼 account 상태가 바뀌는 기능은 workspace 단위 randomization이 더 안전할 수 있다.
퀴즈
힌트: 초대는 개인 UI가 아니라 팀 상태를 바꾼다.
같은 workspace 안의 admin들이 서로 다른 초대 UX를 보거나, 한 variant에서 만든 상태가 다른 variant 사용자에게 영향을 줄 수 있다. 협업·권한·결제 흐름은 workspace/account 단위 randomization을 검토해야 한다.
Primary metric은 좋아졌지만 제품이 망가지는 경우가 있다. Guardrail metric은 실험이 넘어서는 안 되는 안전 경계다.
실험이 개선하려는 핵심 행동 지표
예: invite_accepted rate, checkout_completed rate효과를 해석하기 위한 보조 지표
예: modal_opened, invite_created, time_to_accept악화되면 실험을 중단하거나 재검토해야 하는 안전 지표
예: error rate, latency, support ticket, cancellation실험 배정과 이벤트 수집이 정상인지 확인하는 지표
예: SRM, multiple exposure, missing propertyProduct Engineer는 제품 metric과 시스템 metric을 함께 본다. conversion이 올라가도 latency, error, accessibility issue가 악화되면 좋은 release가 아니다.
실험 결과를 보기 전에 먼저 실험이 정상인지 확인해야 한다.
이 문제가 있으면 p-value나 uplift를 보기 전에 instrumentation과 assignment를 고쳐야 한다.
Feature flag는 단순한 on/off 스위치보다 넓다.
| 패턴 | 목적 | 예시 |
|---|---|---|
| Release flag | 배포와 노출 분리 | 새 onboarding을 5%만 노출 |
| Experiment flag | variant 비교 | control vs treatment |
| Permission flag | 특정 사용자/plan만 접근 | beta customer allowlist |
| Operational flag | 장애 시 기능 축소 | heavy export 기능 임시 off |
| Kill switch | 위험 기능 즉시 중단 | 결제 webhook 오류 시 신규 checkout off |
flag가 늘어나면 flag debt도 생긴다. 실험이 끝난 flag, 임시 allowlist, 오래된 kill switch는 코드 복잡도를 키운다. Product Engineer는 flag 생성만큼 제거 조건도 정해야 한다.
출시는 한 번에 열지 않아도 된다. 일반적인 rollout은 다음처럼 진행한다.
시나리오
treatment variant의 checkout_completed rate는 올랐지만, payment_failed rate와 support ticket이 같이 증가했다.
primary metric만 보고 승리 선언하지 않으려면 어떤 guardrail과 세그먼트를 확인할 것인가?실험과 flag는 제품 상태 모델과 강하게 연결된다. 권한, plan, workspace, subscription 같은 도메인 상태가 명확해야 안전하게 노출을 제어할 수 있다.
Product Domain Modeling: flag와 experiment가 참조하는 account, workspace, role 상태를 모델링한다.Billing, Subscription & Entitlement: plan과 entitlement 기반 feature exposure를 설계한다.Frontend Product Quality & RUM: rollout 중 성능·접근성 guardrail을 확인한다.