문제 공간은 "무엇을 왜 풀어야 하는가"를, 해결 공간은 "어떻게 풀 것인가"를 다루는 영역이다. 둘을 나눠 생각하고, 문제를 충분히 이해한 뒤에 해결책으로 넘어가라는 것이 요점이다.
문제 공간
- 사용자의 진짜 문제, 그 문제가 중요한 이유, 불편을 느끼는 상황, 업무 요구와 제약(시간·비용·정책)
- 예: "회원가입 중간에 이탈한다", "모바일에서 버튼이 잘 안 눌린다"
- 이 단계에서는 기술 스택이나 구현 방법을 이야기하지 않는다
해결 공간
- UI 설계, 아키텍처, 기술 선택, API와 상태 관리 방식
- 예: "가입을 단계별로 나눈다", "터치 영역을 44px 이상으로 키운다"(피츠의 법칙)
흔한 함정
문제 정의 없이 "일단 이 프레임워크로 만들죠"부터 시작하면 문제를 잘못 풀거나 과잉 설계가 된다. 문제는 그대로인데 코드만 늘어나는 상황이다.
- 디버깅에서도 같다. 증상을 고치기 전에 문제를 정확히 정의한다(디버깅 문제 정의 5단계)
- 도메인 주도 설계 (DDD)는 문제 공간의 언어와 구조를 해결 공간에 그대로 옮기려는 시도다
- 필요하지 않은 해결책을 미리 만들지 않는다는 점에서 YAGNI와 통한다