[SE100 #017] 요구사항 우선순위 — MoSCoW 와 Kano 모델
소프트웨어 공학 100 주제 시리즈의 17번째 글이다. (카테고리: 요구사항 공학)
한 줄 요약
MoSCoW 는 이번 기한 안에 무엇을 보장할지를 정하는 약속의 도구이고, Kano 모델은 어떤 기능이 고객 만족에 어떻게 작용하는지를 보는 진단 도구다. 둘은 질문이 다르다. Kano 로 기능의 성격을 알고, MoSCoW 로 이번 릴리스의 계약을 맺는다.
왜 필요한가
요구사항 분석 글에서 MoSCoW 의 네 칸을 소개했다. 실제로 써 보면 금세 이런 장면이 나온다.
- 이해관계자 모두가 자기 요구를 Must 에 넣는다. 백로그의 80% 가 Must 다.
- Must 를 다 끝냈는데 고객 반응이 미지근하다. 경쟁사의 사소한 기능 하나에 사용자가 열광한다.
- 반대로 “아무도 요청하지 않았던” 영수증 기능을 뺐더니 불만이 폭주한다.
첫 번째는 MoSCoW 를 원래 규칙 없이 쓴 탓이고, 나머지 둘은 만족과 불만이 같은 축이 아니라는 사실을 놓친 탓이다. 앞의 것은 DSDM 원전이, 뒤의 것은 Kano 의 1984년 논문이 답한다.
핵심 개념
MoSCoW 의 원래 규칙
MoSCoW 는 DSDM(현재 Agile Business Consortium 이 관리하는 애자일 프로젝트 프레임워크)의 우선순위 기법이다. 공식 설명의 정의를 옮기면 이렇다.
| 범주 | DSDM 의 정의 요지 | 판별 질문 |
|---|---|---|
| Must Have | 프로젝트가 인도를 보장하는 최소 사용 가능 부분집합. MUST 를 Minimum Usable SubseT 의 약자로도 읽는다 | 이게 없으면 이 릴리스를 내는 의미가 없는가? |
| Should Have | 중요하지만 필수는 아니다. 빼면 아프지만 솔루션은 여전히 성립한다 | 우회 방법이 있는가? |
| Could Have | 바라는 것이지만 덜 중요하다. 빼도 Should 보다 영향이 작다 | 시간이 남으면 할 것인가? |
| Won’t Have this time | 이번 기간에는 하지 않기로 합의한 것 | 다음에 다시 볼 것인가? |
이 정의에서 결정적인 단어는 보장이다. Must 는 “중요한 것” 이 아니라 “팀이 기한 안에 반드시 낸다고 약속하는 것” 이다. 그래서 DSDM 은 숫자 규칙을 둔다.
- Must 에 드는 노력은 전체의 60% 를 넘지 않게 한다. 넘으면 추정이 정확하고, 접근법이 잘 이해되고, 팀이 잘 돌아가고, 위험이 낮은 환경이 아닌 한 실패 위험이 커진다.
- Could 는 통상 약 20% 의 노력을 두어 우발 상황에 대비하는 완충으로 쓴다.
노력 배분(DSDM 권장)
|<──────── Must ≤ 60% ────────>|<── Should ──>|<─ Could ~20% ─>|
▲
일이 밀리면 여기부터 덜어 낸다 → Must 는 지켜진다
즉 MoSCoW 는 순위표가 아니라 위험 관리 장치다. Should 와 Could 가 완충이 되어 Must 를 지킨다. 모든 것이 Must 라면 완충이 없으니, 하나만 밀려도 약속이 깨진다.
또 하나: DSDM 은 우선순위를 여러 층위에 둔다. 프로젝트 전체, 프로젝트 증분, 타임박스마다 따로 MoSCoW 를 매긴다. 프로젝트 수준의 Should 가 이번 타임박스에서는 Must 일 수 있고, 타임박스 수준에서는 대부분의 요구가 “이번 타임박스에서는 Won’t” 다.
Kano 모델: 만족과 불만은 다른 축이다
狩野紀昭(Noriaki Kano) 등은 1984년 일본품질관리학회지 品質 14권 2호에 魅力的品質と当り前品質(매력적 품질과 당연한 품질)을 발표했다. 초록에 따르면 이 논문은 지금까지의 일차원적 인식(충족될수록 만족, 부족할수록 불만)을 이차원적 인식으로 바꿔야 한다고 제안하고, 품질 요소를 매력적·당연·일원적 품질 등으로 분류한 뒤, 텔레비전과 탁상시계에 대한 소비자 설문으로 이 이론의 실용성을 검토했다.
만족 ▲
│ ╱ 일원적(one-dimensional)
│ 매력(attractive)╱ 충족할수록 만족, 부족할수록 불만
│ ___________╱
│ ___╱ ╱
─────┼───────────────────────────────▶ 충족 정도
│ ╱ ____________
│ ╱ __╱ 당연(must-be)
│ ╱ _╱ 충족돼도 만족은 안 오르지만
│ ╱ ╱ 부족하면 불만이 급증
불만 ▼
| 범주 | 있을 때 | 없을 때 | 예(커피 주문 앱) |
|---|---|---|---|
| 당연(must-be) | 당연하게 여김 | 강한 불만 | 결제 영수증 |
| 일원적(one-dimensional) | 만족 | 불만 | 주문 진행 실시간 표시 |
| 매력(attractive) | 기쁨 | 아무렇지 않음 | 지난 주문 한 번에 다시 담기 |
| 무관심(indifferent) | 무덤덤 | 무덤덤 | 앱 테마 색 바꾸기 |
| 역(reverse) | 오히려 불만 | 오히려 만족 | 과도한 푸시 알림 |
당연 품질은 고객이 요청하지 않는다. 너무 당연해서 말할 생각을 못 한다. 그래서 인터뷰만으로 요구를 모으면 당연 품질이 빠지고, 빠진 것은 출시 후 불만으로 돌아온다. 앞의 “영수증 기능” 장면이 정확히 이것이다.
Kano 설문: 쌍으로 묻는다
Kano 분류는 한 기능에 대해 두 질문을 짝지어 묻는다.
- 기능형: “이 기능이 있다면 어떻게 느끼십니까?”
- 역기능형: “이 기능이 없다면 어떻게 느끼십니까?”
답은 각각 다섯 가지(좋다 / 당연하다 / 상관없다 / 참을 수 있다 / 싫다)이고, 두 답의 조합을 평가표로 범주에 대응시킨다. 이 평가표와 집계 방법은 Berger 등의 해설 논문(Center for Quality of Management Journal, 1993)으로 널리 퍼졌다.
없다면 → 좋다 당연 상관없음 참음 싫다
있다면 ↓ 좋다 Q A A A O
당연하다 R I I I M
상관없다 R I I I M
참을 수 있다 R I I I M
싫다 R R R R Q
A=매력 O=일원적 M=당연 I=무관심 R=역 Q=모순(질문 이해 실패)
실무 적용
설문을 집계하는 코드
응답자별 답 쌍을 평가표에 넣고, 가장 많은 범주를 고른다. 범주 비율로 “있으면 얼마나 좋아지나(better)”, “없으면 얼마나 나빠지나(worse)” 지표도 함께 본다.
from collections import Counter
# 답: 1=좋다 2=당연하다 3=상관없다 4=참을 수 있다 5=싫다
# 행 = 기능이 있을 때(기능형 질문), 열 = 없을 때(역기능형 질문)
TABLE = [
# 없을때: 1 2 3 4 5
["Q", "A", "A", "A", "O"], # 있을때 1 좋다
["R", "I", "I", "I", "M"], # 2 당연하다
["R", "I", "I", "I", "M"], # 3 상관없다
["R", "I", "I", "I", "M"], # 4 참을 수 있다
["R", "R", "R", "R", "Q"], # 5 싫다
]
NAMES = {"A": "매력", "O": "일원적", "M": "당연", "I": "무관심", "R": "역", "Q": "모순"}
def classify(answers):
c = Counter(TABLE[f - 1][d - 1] for f, d in answers)
a, o, m, i = (c[k] for k in "AOMI")
n = a + o + m + i or 1
better = (a + o) / n # 있으면 만족이 오르는 정도
worse = -(o + m) / n # 없으면 불만이 커지는 정도
top = c.most_common(1)[0][0]
return NAMES[top], round(better, 2), round(worse, 2), dict(c)
survey = { # 기능: [(기능형 답, 역기능형 답), ...] 응답자 10명 (가상 데이터)
"결제 영수증 발행": [(2,5)]*6 + [(3,5)]*2 + [(1,5)]*2,
"주문 진행 실시간 표시": [(1,5)]*5 + [(1,4)]*2 + [(2,5)]*3,
"지난 주문 한 번에 다시 담기": [(1,3)]*6 + [(1,4)]*2 + [(3,3)]*2,
"앱 테마 색 바꾸기": [(3,3)]*7 + [(1,3)]*2 + [(4,3)],
}
print(f"{'기능':<18}{'분류':<6}{'better':>8}{'worse':>8}")
for feat, ans in survey.items():
cat, b, w, _ = classify(ans)
print(f"{feat:<18}{cat:<6}{b:>8}{w:>8}")
기능 분류 better worse
결제 영수증 발행 당연 0.2 -1.0
주문 진행 실시간 표시 일원적 0.7 -0.8
지난 주문 한 번에 다시 담기 매력 0.8 0.0
앱 테마 색 바꾸기 무관심 0.2 0.0
데이터는 설명용 가상값이다. 읽는 법이 중요하다. 영수증은 better 가 낮아 “있어도 칭찬받지 못하지만” worse 가 -1.0 이라 빼면 모두가 불만이다. 다시 담기는 반대로 없어도 아무도 불평하지 않지만 있으면 만족이 크게 오른다.
Kano 에서 MoSCoW 로
두 도구를 이어 붙이는 기본 규칙은 이렇다.
| Kano 범주 | MoSCoW 기본값 | 이유 |
|---|---|---|
| 당연 | Must | 없으면 불만. 최소 사용 가능 부분집합에 들어간다 |
| 일원적 | Should (핵심 몇 개는 Must) | 경쟁력의 본체. 수준을 조절할 수 있다 |
| 매력 | Could (차별화 전략이면 Should) | 없어도 불만은 없으니 완충으로 쓸 수 있다 |
| 무관심 | Won’t this time | 노력 대비 효과가 없다 |
| 역 | Won’t, 또는 끌 수 있게 | 일부에게는 오히려 해롭다 |
그리고 마지막에 DSDM 규칙으로 검산한다. Must 의 노력 합이 60% 를 넘으면, Must 를 다시 들여다보거나 범위를 줄인다.
기타 기법과의 관계
MoSCoW 와 Kano 는 가치의 성격을 본다. 시간에 따른 가치 손실(지연 비용)이나 의존 관계는 따로 봐야 한다. 지연 비용 개념은 Donald G. Reinertsen, The Principles of Product Development Flow (Celeritas, 2009)가 원전이다. 일정 압박이 큰 팀이라면 “이 기능을 한 달 늦추면 무엇을 잃는가” 라는 질문을 추가한다.
흔한 오해와 함정
- Must 인플레이션. 이해관계자가 각자 매긴 Must 를 그대로 합치면 Must 가 60% 를 넘는다. Must 는 “보장 약속” 이므로 팀이 함께 정하고, 노력 합으로 검산한다.
- Won’t 를 “영원히 안 함” 으로 읽는다. 원래 뜻은 “이번 기간에는 안 함” 이다. 이 칸이 있어서 이해관계자가 덜 저항하고 합의할 수 있다.
- Kano 범주가 고정돼 있다고 본다. 범주는 고객층과 시점에 따라 다르다. 몇 년 전의 매력 기능이 지금은 당연 기능일 수 있다. 정기적으로 다시 조사한다.
- 응답자 집단을 섞는다. 신규 고객과 단골의 Kano 결과는 다를 수 있다. 세그먼트별로 따로 집계하지 않으면 범주가 희석된다.
- 인터뷰에서 나온 것만 우선순위에 올린다. 당연 품질은 말로 나오지 않는다. 경쟁 제품 점검, 지원 문의 기록, 관찰로 보충해야 한다.
확인 문제
- DSDM 이 Must 노력을 60% 이하로 두라고 하는 이유는?
- “Won’t Have this time” 에서 “this time” 이 빠지면 어떤 문제가 생기는가?
- Kano 의 1984년 논문이 제안한 “이차원적 인식” 이란 무엇인가?
- 당연 품질이 인터뷰로 잘 도출되지 않는 이유는?
- 위 코드에서 “결제 영수증 발행” 이 better 0.2, worse -1.0 이 나온 것을 제품 관점에서 해석하라.
풀이
- Must 는 인도를 보장하는 약속이고, Should·Could 가 일정 변동을 흡수하는 완충 역할을 한다. Must 비중이 너무 크면 완충이 사라져 하나만 밀려도 약속이 깨진다.
- 이해관계자가 영구 탈락으로 받아들여 저항하거나, 반대로 “다음에 할 것” 목록이 관리되지 않아 같은 요구가 다시 불쑥 나타난다.
- 품질 요소의 충족 여부와 만족·불만의 관계를 하나의 직선으로 보지 않고, 충족·불충족 각각에 대한 반응을 따로 보아 매력·일원적·당연 등으로 분류하는 관점이다.
- 고객에게 너무 당연해서 말할 필요를 느끼지 못하기 때문이다. 없을 때에야 불만으로 드러난다.
- 있어도 칭찬받지 못하지만 없으면 거의 모든 응답자가 불만을 느끼는 당연 기능이다. 화려하게 만들 필요는 없지만 반드시 넣어야 하는 Must 다.
더 읽을거리 (References)
- Agile Business Consortium, MoSCoW Prioritisation (DSDM Project Framework)
- 狩野紀昭, 瀬楽信彦, 高橋文夫, 辻新一, 魅力的品質と当り前品質, 品質 14(2), pp.147–156, 1984
- C. Berger et al., “Kano’s Methods for Understanding Customer-defined Quality”, Center for Quality of Management Journal 2(4), 1993 (서지 정보)
- Donald G. Reinertsen, The Principles of Product Development Flow, Celeritas, 2009 (서지 정보)
- CS300: 애자일과 스크럼