Skip to content

Split View: 문제를 정의하는 능력 — 잘못된 문제를 완벽히 푸는 실패를 피하는 법

✨ Learn with Quiz
|

문제를 정의하는 능력 — 잘못된 문제를 완벽히 푸는 실패를 피하는 법

완벽한 답이 쓸모없어지는 자리

구성한 예시입니다. 검색이 느리니 캐시를 넣어 달라는 요청이 팀에 들어옵니다. 두 주 뒤 캐시가 붙고 응답 시간 중앙값이 절반으로 줄고 지표는 초록이 됩니다. 그런데 불만은 그대로입니다. 느리다고 말한 사람들이 겪은 것은 평균적인 조회가 아니라 필터를 세 개 겹쳤을 때만 나오는 12초짜리 질의였고, 하필 그 구간은 캐시 적중률이 거의 0이었습니다.

여기서 잘못된 것은 실력이 아닙니다. 캐시는 잘 붙었습니다. 잘못된 것은 무엇을 고칠지였습니다. 그리고 이런 종류의 실패에는 고약한 성질이 하나 있습니다. 어설픈 답은 부족하다는 신호를 주지만 완벽한 답은 끝났다는 신호를 줍니다. 그래서 잘못 잡은 문제를 잘 풀수록 잘못은 더 오래 숨습니다.

이 능력이 비싼 쪽에 남는 이유

1편에서 검증을 비싸게 만드는 요인 네 가지를 정리했습니다. 암묵적 맥락, 지연된 결과, 판정 기준의 부재, 책임 귀속입니다. 문제 정의에 대 보면 네 개가 전부 걸립니다. 무엇이 맞는 문제인지 알려 주는 정답표는 없고, 잘못 잡았다는 사실은 대개 출시 뒤에 도착하고, 판단에 필요한 정보는 코드가 아니라 사람들에게 흩어져 있고, 결국 누군가 이름을 걸고 정해야 합니다.

Fred Brooks는 1986년 "No Silver Bullet"에서 이것을 더 세게 적었습니다. 소프트웨어 시스템을 만드는 일에서 가장 어려운 단일 부분은 무엇을 만들지 정확히 정하는 것이며, 잘못했을 때 결과물을 이만큼 망가뜨리는 부분도 없고 나중에 바로잡기 이만큼 어려운 부분도 없다는 것입니다.

40년 전 문장인데 생성이 싸진 지금 오히려 더 날이 섭니다. 만드는 속도가 빨라지면 잘못 잡은 문제에 도달하는 속도도 같이 빨라지기 때문입니다. 빠른 구현은 틀린 방향을 교정해 주지 않고, 틀린 방향으로 더 멀리 데려다줍니다.

요구는 대개 해결책의 모습으로 도착합니다

캐시를 넣어 달라는 말은 요구가 아니라 해결책입니다. 요청자는 자기가 겪은 불편을 이미 한 번 번역해서 가져옵니다. 그 번역은 선의로 이뤄지고, 요청자가 아는 범위 안에서만 이뤄집니다.

번역을 되돌리는 데는 질문 세 개면 대체로 충분합니다.

  • 이게 없으면 지금 무슨 일이 일어나나요. 이 질문이 증상을 꺼냅니다.
  • 언제부터 문제가 됐나요. 이 질문이 무엇이 변했는지를 꺼냅니다.
  • 이게 해결되면 무엇을 다르게 하시겠어요. 이 질문이 성공 판정을 꺼냅니다.

세 번째가 가장 많이 걸러냅니다. 답이 안 나오면 그 요청은 아직 문제가 아니라 바람입니다. 답이 나오면 그 답이 그대로 완료 조건이 됩니다.

주의할 것은 태도입니다. 이 질문들은 요청을 거절하려고 던지는 것이 아니라 정확히 받으려고 던지는 것이고, 그 차이는 말투가 아니라 그다음 행동에서 드러납니다. 되묻고 나서 아무것도 안 하면 다음부터는 아무도 답해 주지 않습니다.

만들지 않을 것을 먼저 적기

범위를 정하는 일은 대개 할 것의 목록으로 표현되고, 그 목록은 저절로 늘어납니다. 반대 방향이 훨씬 강합니다. 이번에 하지 않을 것을 적는 쪽입니다.

비목표를 적으면 세 가지가 생깁니다. 첫째, 논쟁이 앞으로 당겨집니다. 하지 않기로 한 항목을 보여 주면 반대가 지금 나오고, 지금 나온 반대는 싸게 처리됩니다. 개발이 끝난 뒤에 나오는 같은 반대는 비쌉니다. 둘째, 나중에 들어오는 요청을 판정할 기준이 생깁니다. 셋째, 자기 자신에게 브레이크가 됩니다.

규칙은 하나입니다. 비목표에는 이유를 붙입니다. 다국어는 안 한다고만 적지 말고, 첫 고객 두 곳이 모두 국내이고 문자열 분리는 나중에 해도 비용이 선형으로만 늘기 때문이라고 적습니다. 이유 없는 비목표는 다음 회의에서 뒤집힙니다.

문제 진술서 여섯 줄

문제 정의를 문서로 만들면 대개 길어지고, 길어지면 안 읽힙니다. 여섯 줄이면 충분합니다.

예시 — 문제 진술서 여섯 줄

증상:      필터 3개 이상 조합 시 검색 응답이 10초를 넘김. 하루 약 40건
영향:      해당 사용자가 검색을 포기하고 담당자에게 전화로 문의
성공 판정: 같은 조합의 95퍼센트 지점 응답이 3초 이하. 전화 문의 감소로 확인
비목표:    전체 검색 속도 개선. 지금 문제는 꼬리 구간이며 중앙값은 이미 충분
제약:      색인 스키마 변경은 다음 분기까지 불가
모르는 것: 이 조합을 쓰는 사용자가 몇 명인지, 언제부터 늘었는지

가장 자주 비는 칸은 마지막 줄입니다. 모르는 것이 비어 있는 문제 진술서는 대체로 조사가 덜 된 것입니다. 아는 것만 적힌 문서는 자신 있어 보이지만, 일정을 실제로 흔드는 항목은 언제나 그 문서에 없던 쪽입니다.

범위를 줄이는 것과 문제를 바꾸는 것

여기서 정직해야 할 부분이 있습니다. 문제를 다시 정의하는 능력은 오용하기 쉽습니다. 어려운 요구를 만났을 때 진짜 문제는 사실 다른 것이라고 선언하면서 풀기 쉬운 쪽으로 갈아타는 일이 실제로 자주 일어나고, 그건 문제 정의가 아니라 회피입니다.

구별하는 방법은 하나뿐입니다. 원래 요청자가 그 재정의에 동의하는지 확인하는 것입니다. 범위를 줄이는 것은 같은 문제를 작게 자르는 일이고, 자른 조각이 여전히 요청자의 증상을 건드립니다. 문제를 바꾸는 것은 다른 증상을 겨냥하는 일이고, 요청자는 결과물을 받고도 처음 겪던 일을 계속 겪습니다. 그래서 재정의는 반드시 요청자에게 되돌려 확인해야 하고, 그 확인이 빠지면 취향으로 방향을 튼 것입니다.

직접 해보기

이번 주에 지금 하고 있는 작업 하나를 골라 위 여섯 줄을 채워 보세요. 30분이면 됩니다. 채우다 막히는 줄이 나오면 그 줄이 물어봐야 할 사람과 질문을 알려 줍니다. 특히 성공 판정이 안 써지면, 그 작업은 지금 완료 조건 없이 진행되고 있는 것입니다.

  • 사고력 훈련소 — 문제를 내 말로 다시 쓰기와 시키지 않은 가정 지우기가 아홉 개의 수 안에 들어 있습니다. 진술서의 첫 줄과 비목표 줄이 하는 일과 같습니다.
  • 협업 RPG — 요청을 되묻는 선택이 관계에 어떤 값을 치르는지 몇 장면 뒤에 도착합니다. 되묻기는 공짜가 아니고, 이 도구는 그 비용을 시간차로 보여 줍니다.

안 통하는 경우도 적어 둡니다. 요청자가 자기 문제를 이미 정확히 아는 경우가 있습니다. 규제 대응, 계약서에 적힌 항목, 상위 시스템이 강제하는 인터페이스처럼 정의가 밖에서 확정된 일입니다. 여기에 문제 진술서를 붙이면 시간만 씁니다. 되묻기의 값어치는 요청자와 실행자 사이에 정보 격차가 있을 때 생깁니다.

이어서 읽기

비싸게 남는 기술 시리즈

참고 자료

  • No Silver Bullet: Essence and Accidents of Software Engineering — Fred Brooks, 1986 (전문) — 무엇을 만들지 정하는 일이 가장 어려운 단일 부분이고, 잘못했을 때 결과물을 가장 크게 망가뜨리며, 나중에 바로잡기가 가장 어렵다는 문장은 "Requirements refinement and rapid prototyping" 절에 있습니다. 2026-08-15 확인.
  • 되묻는 질문 세 개, 이유를 붙인 비목표, 문제 진술서 여섯 줄은 위 자료에 나오는 것이 아니라 이 글에서 정리한 절차입니다.

Framing the Problem — How to Avoid Perfectly Solving the Wrong One

Where a Perfect Answer Stops Being Useful

A constructed illustration. A request comes in: search is slow, please add a cache. Two weeks later the cache is in, median response time is halved, the dashboard is green. The complaints are unchanged. What the people who said "slow" were hitting was not an average lookup but a twelve-second query that only appears when three filters are stacked — and that band happened to have a cache hit rate near zero.

Nothing about the execution was wrong here. The cache was built well. What was wrong was the choice of what to fix. And this kind of failure has a nasty property: a rough answer signals that it is not finished, while a perfect answer signals that it is. So the better you solve a badly framed problem, the longer the mistake stays hidden.

Why This Sits on the Expensive Side

Part 1 listed four things that make verification expensive: tacit context, delayed results, the absence of an oracle, and accountability. Hold framing up against them and all four apply. There is no answer key telling you which problem is the right one, the news that you picked wrong usually arrives after release, the information needed to judge lives in people rather than in code, and in the end somebody has to put their name on the choice.

Fred Brooks put it more sharply in "No Silver Bullet" in 1986: the hardest single part of building a software system is deciding precisely what to build, no other part of the work so cripples the resulting system if done wrong, and no other part is more difficult to rectify later.

That is a forty-year-old sentence, and cheap generation has sharpened rather than dulled it. When building gets faster, arriving at the wrong problem also gets faster. A quick implementation does not correct a wrong direction; it carries you further along it.

Requirements Usually Arrive Dressed as Solutions

"Add a cache" is not a requirement, it is a solution. Requesters translate the discomfort they experienced into an answer before they reach you. The translation is made in good faith, and it is made strictly within what the requester happens to know.

Unwinding that translation usually takes three questions.

  • What happens today if this does not exist? This one surfaces the symptom.
  • When did it start being a problem? This one surfaces what changed.
  • If this is solved, what will you do differently? This one surfaces the success test.

The third filters the most. If no answer comes, the request is not yet a problem — it is a wish. If an answer comes, that answer is your completion criterion, already written.

One caution about posture. These questions exist to receive a request accurately, not to refuse it, and the difference shows up in what you do next rather than in your tone. Ask them and then do nothing, and nobody answers you the next time.

Write Down What You Will Not Build First

Scoping usually gets expressed as a list of things to do, and that list grows on its own. The opposite direction is far stronger: write down what you are not doing this time.

Non-goals buy three things. First, the argument moves earlier. Show people the list of things you are dropping and the objections arrive now, and objections that arrive now are cheap to handle. The same objection after the work is built is expensive. Second, you get a standard for judging requests that arrive later. Third, it acts as a brake on yourself.

There is one rule. Attach a reason to each non-goal. Do not just write "no localization"; write that the first two customers are both domestic and that pulling strings out later costs only linearly. A non-goal without a reason gets reversed in the next meeting.

A Six-Line Problem Statement

Turn framing into a document and it tends to get long, and long documents do not get read. Six lines is enough.

Example — a six-line problem statement

Symptom:   search responses exceed 10s when 3+ filters are combined. ~40/day
Impact:    those users abandon search and phone their account manager instead
Success:   p95 for the same combinations under 3s. confirmed by fewer phone calls
Non-goal:  overall search speed. the tail is the problem; the median is fine
Constraint: index schema changes are blocked until next quarter
Unknown:   how many users hit this combination, and when it started growing

The line most often left blank is the last one. A problem statement with nothing under "unknown" has usually not been researched. A document containing only what you know looks confident, but the item that actually moves the schedule is always the one that was not on it.

Narrowing Scope Versus Changing the Problem

Here is the part to be honest about. The ability to reframe is easy to abuse. When a hard request arrives, declaring that the real problem is actually something else and switching to the easier thing happens constantly, and that is avoidance, not framing.

There is exactly one test that separates them: check whether the original requester agrees with the reframing. Narrowing scope cuts the same problem into a smaller piece, and the piece still touches the requester's symptom. Changing the problem aims at a different symptom, and the requester receives the deliverable and keeps experiencing what they experienced before. So a reframing has to be taken back to the requester, and without that confirmation you have just turned the wheel on taste.

Try It This Week

Pick one task you are working on right now and fill in the six lines above. Thirty minutes is enough. Whichever line you get stuck on tells you who to ask and what to ask them. If the success line in particular will not write, that task is currently running without a completion criterion.

  • Problem-Solving Trainer — restating a problem in your own words and deleting assumptions nobody imposed are two of the nine moves. They do the same job as the first line and the non-goal line of the statement.
  • Collab RPG — the price that asking a clarifying question puts on a relationship arrives several scenes later. Asking back is not free, and this one shows you the cost on a delay.

Where this does not apply: sometimes the requester already knows their problem precisely. Regulatory work, line items written into a contract, an interface imposed by an upstream system — cases where the definition was fixed outside the room. Attaching a problem statement there only spends time. Asking back earns its keep when there is an information gap between requester and implementer.

Further Reading

What Stays Expensive series

Sources

  • No Silver Bullet: Essence and Accidents of Software Engineering — Fred Brooks, 1986 (full text) — the sentences about deciding precisely what to build being the hardest single part, no other part crippling the resulting system as much if done wrong, and no other part being more difficult to rectify later appear in the "Requirements refinement and rapid prototyping" section. Read 2026-08-15.
  • The three unwinding questions, non-goals with reasons attached, and the six-line problem statement are not from that source; they are the procedure assembled in this post.