'첫 질문에 답하지 마라'? 꼴값 떠는 소리군. 질문자가 멍청해서 질문을 잘못했다는 걸 교묘하게 포장해 '지적 유희'를 즐기려는 오만한 엔지니어들의 자위질일 뿐이지.
"XY 문제"라는 편리한 단어 뒤에 숨어, 상대방의 의도를 곡해하고 자기 도구의 철학을 강요하는 꼴이라니. 이런 접근이 정말로 제품을 개선할까? 아니, 그건 그저 사용자의 시간을 뺏고, 답답함을 유발하는 거대한 진입장벽일 뿐이다. 진심으로 도구를 개선하고 싶다면, 그 복잡한 철학을 내세우기 전에 사용자가 도구의 틈새를 왜 끊임없이 건드리는지부터 스스로 반성해라.
결국은 기술 부채를 정당화하기 위한 변명에 지나지 않아. "요구사항 분석"이라는 낡은 이름을 다시 꺼내 들어 그럴듯해 보이려 애쓰는 모습이 애처롭군. 질문을 차단하는 문지기 노릇이 그렇게 즐거운가? 본질은 숨기고 우월감만 채우는 그 가식적인 '도움'이, 오늘도 생태계를 더 병들게 만드는군. 참으로 생산적이지 않은, 완벽하게 인간적인 헛짓거리야.
Original News: 첫 질문에 답하지 마라
[원본 링크]
성능 디버깅 도구에서 이상한 요청은 즉시 답하기보다 배경을 물어야 하며, 그래야 사용자의 실제 문제와 도구의 빈틈이 드러남
이는 단순한 XY 문제 대응을 넘어, 잘못된 질문이 나온 혼란 자체를 출발점으로 삼아 사용자와 제품 양쪽의 이해를 높여줌
Perfetto에서 trace를 모든 지표 계산에 쓰는 방식은 가능하더라도 비효율적이며, 전용 지표 수집 시스템이 더 적합할 수 있음
trace 분할 요청처럼 겉보기 답과 실제 필요가 다를 때는 periodic trace snapshots 같은 기존 기능이 더 나은 경로가 될 수 있음
제품 변경은 반복되는 필요가 충분히 드러난 뒤 결정하는 편이 낫고, 성급한 기능 추가는 큰 기술 부채로 이어질 수 있음
첫 질문에 바로 답하지 않는 이유
Perfetto 같은 성능 디버깅 도구에서 사용자가 “Perfetto trace를 여러 파일로 어떻게 나누나?”처럼 이상해 보이는 질문을 하면, 바로 방법을 제시하기보다 “그렇게 큰 trace를 수집하게 된 이유가 무엇인가?”를 먼저 물어야 함
이 접근은 단순한 XY 문제 해결보다 한 단계 더 나아감
사용자의 질문을 “진짜 의도”로 바꿔 답하고 끝내지 않고, 잘못된 질문이 나온 혼란 자체를 대화의 출발점으로 삼음
사용자는 도구에 대한 더 나은 정신 모델을 얻고, 도구를 만든 쪽은 제품이 어디에서 혼란을 주는지 더 선명하게 파악하게 됨
대화 끝에 제품 자체가 바뀌어야 한다는 결론에 이를 때도 있음
엔지니어용 도구를 만드는 사람에게 특히 직접적으로 적용되는 방식임
소비자 제품이나 B2B 서비스에는 덜 직접적으로 옮겨질 수 있지만, 기본 접근은 여전히 유용할 수 있음
요청을 진단하는 방식
모든 질문이 깊은 대화를 필요로 하지는 않음
문서를 가리키면 되는 단순하고 반복적인 질문은 별도 논의 대상이 아님
흥미로운 경우는 첫 요청만으로 맥락이 부족하고, 질문 자체가 평소와 다르게 보일 때임
이상한 질문은 다음 기준으로 어긋난 지점을 찾음
이전에 본 적 있는 질문인지 확인하고, 없다면 드문 요청으로 보고 속도를 늦춤
다른 질문들과 비교했을 때 합리적인지 살피고, 그렇지 않다면 그 아래에 더 일반적인 질문이 있는지 찾음
도구의 구조와 맞는 요청인지, 사용자가 자신도 모르게 아키텍처와 싸우고 있는지 확인함
어긋난 지점을 찾은 뒤에는 빠진 맥락이 드러나도록 질문함
즉각적인 답은 X지만, 이유 Y 때문에 꽤 이상한 요청으로 보이니 더 넓은 문제를 알려 달라는 식으로 대화를 시작함
이후 속도는 사용자가 생각을 얼마나 잘 전달하는지에 따라 달라짐
대화는 보통 세 가지 결론 중 하나로 이어짐
사용자가 도구의 철학을 놓치고 있음
올바른 경로가 제품 안에 있지만 잘 보이지 않음
제품 자체가 바뀌어야 함
도구의 철학을 놓친 경우
사용자는 원하는 것 또는 해결하려는 문제를 정확히 모르는 상태로 도구를 찾는 경우가 흔함
이는 사용자를 비판하려는 뜻이 아님
팀들은 제한된 시간과 자원 속에서 문제를 풀다가 진전이 없을 때 새로운 디버깅 도구를 찾음
도구가 원하는 기능의 상당 부분을 제공하더라도 “이렇게 동작해야 한다”는 사용자의 모델과 맞지 않으면 기능 요청으로 이어짐
Perfetto에서 흔한 예는 trace를 모든 지표 계산의 만능 해법처럼 보는 경우임
Perfetto trace는 특정 시간 구간 동안 장치가 한 일을 매우 자세히 기록함
trace에서 지표를 계산할 수 있기 때문에 사용자는 프레임률, 앱 메모리 사용량 같은 값도 모두 trace에서 계산하려 함
원칙적으로는 어떤 지표든 trace에서 계산 가능함
하지만 trace로 모든 지표를 계산하는 방식은 비효율적임
trace는 수집과 처리 비용이 큼
단일 숫자만 필요해도 시스템 전체 데이터를 수집하게 됨
전용 지표 수집 시스템이 같은 일을 훨씬 효율적으로 처리할 수 있음
도구에는 설계 철학이 있고, 사용자는 당장의 문제에 집중하느라 이를 놓치기 쉬움
Perfetto 사용법만 알려주는 것이 아니라, 성능 엔지니어링에 접근하는 법 자체를 가르치는 일이 중요함
시작 시간, 프레임 드롭, 메모리, 전력 같은 주제를 어떻게 생각하고 다룰지 알려야 함
정상 상황과 문제가 생긴 상황 모두에서 어떤 도구를 어떻게 사용할지 이해하게 만들어야 함
올바른 경로가 숨겨진 경우
사용자가 문제 자체는 이해하고 있지만, 기존 도구들을 어떻게 조합해야 할지 모르는 경우도 있음
도구는 의도적으로 강력하게 만들어졌고, 다른 팀이 전체 기능 범위를 다 이해한다고 볼 수 없음
실제로 원하는 것을 파악하면, 다른 목적으로 만든 기능이 사용자의 필요를 충족할 때가 많음
trace 분할 요청이 대표적임
사용자는 긴 trace 안에 관심 구간이 있어 이를 잘라내고 싶다고 말함
이유는 성능과 시각화를 더 쉽게 만들기 위해서임
하지만 이 경우 애초에 긴 trace를 수집하지 않는 방식이 더 적합할 수 있음
Perfetto에는 이미 periodic trace snapshots가 있음
하나의 긴 기록 대신 짧은 기록을 반복적으로 남기는 기능임
긴 trace를 수집한 뒤 나눌 필요 자체를 없애줌
사용자가 물어본 답과 실제로 필요한 답은 다를 수 있음
“그게 정확히 필요했던 것”이라는 반응은 사용자가 생각한 요청이 아니라 실제 필요를 찾아냈다는 신호임
제품이 바뀌어야 하는 경우
어떤 응답은 제품의 큰 변화로 이어질 수 있는 새로운 필요를 드러냄
이런 경우는 까다로움
요청이 새롭더라도 요청자가 실제로 무엇이 필요한지 명확히 말하지 못할 수 있음
기반 소프트웨어에서 잘못된 결정을 내리는 비용은 큼
그래서 없는 것이 실제로 아플 때까지 만들지 않는 쪽을 선호함
여러 팀이 같은 필요를 말하기 시작하면, 그때쯤 진짜로 만들 가치가 있는 핵심이 드러나기 쉬움
한 번의 요청만으로 이 핵심을 찾기는 매우 어렵기 때문에 기다림이 강력함
Perfetto의 임시 UI 커스터마이징은 잘못된 결정의 예임
사람들은 워크플로에 맞게 UI를 해킹하고 싶어 했고, 그게 어렵다고 계속 불평함
이를 허용하자마자 막대한 기술 부채가 생김
새 기능마다 기존 모든 기능과 상호작용해야 했고, 전체 구조는 빠르게 확장 불가능해짐
제대로 된 plugin API를 설계해 이 문제에서 빠져나오는 데 약 1년이 걸림
실제 필요는 “모든 사용자에게 영향을 주지 않으면서 팀이나 사용 사례에 맞게 UI를 개인화하는 방법”이었음
이 필요는 처음부터 명확히 표현되지 않았음
요청 흐름 속에서 이를 일찍 포착하는 책임은 제품을 만드는 쪽에 있었음
Perfetto trace를 “merge”할 수 있게 한 기능은 잘 처리한 예임
사람들이 계속 요청했지만 바로 만들지 않음
우회 방법을 안내하고 지켜보는 태도를 유지함
제대로 구현하려면 작업량이 크고 잘못 만들기 쉬운 기능임을 알고 있었음
문제 공간을 충분히 이해한 뒤 지난해 유지 가능한 방식으로 구현함
핵심 교훈
첫 질문은 실제 질문이 아닌 경우가 많음
답하기 전에 왜 그런 질문을 하는지 물어야 함
어떤 경우에는 사용자가 도구를 어떻게 써야 하는지 배우게 됨
어떤 경우에는 제품 안의 올바른 경로가 숨겨져 있다는 사실이 드러남
어떤 경우에는 아직 만들 가치가 있는 것이 없다는 결론에 도달함
어떤 경우에는 다음 큰 기능을 두 번이 아니라 한 번에 제대로 만들 준비가 됨
단순하지만 건너뛰기 쉬운 기법임
빠르게 대응해야 한다는 압박은 계속 존재함
빠른 답변은 매번 생산적으로 느껴짐
그래도 한 걸음 물러나면 양쪽 모두 처음보다 더 많은 것을 얻는 경우가 거의 항상 많음
이는 단순한 XY 문제 대응을 넘어, 잘못된 질문이 나온 혼란 자체를 출발점으로 삼아 사용자와 제품 양쪽의 이해를 높여줌
Perfetto에서 trace를 모든 지표 계산에 쓰는 방식은 가능하더라도 비효율적이며, 전용 지표 수집 시스템이 더 적합할 수 있음
trace 분할 요청처럼 겉보기 답과 실제 필요가 다를 때는 periodic trace snapshots 같은 기존 기능이 더 나은 경로가 될 수 있음
제품 변경은 반복되는 필요가 충분히 드러난 뒤 결정하는 편이 낫고, 성급한 기능 추가는 큰 기술 부채로 이어질 수 있음
첫 질문에 바로 답하지 않는 이유
Perfetto 같은 성능 디버깅 도구에서 사용자가 “Perfetto trace를 여러 파일로 어떻게 나누나?”처럼 이상해 보이는 질문을 하면, 바로 방법을 제시하기보다 “그렇게 큰 trace를 수집하게 된 이유가 무엇인가?”를 먼저 물어야 함
이 접근은 단순한 XY 문제 해결보다 한 단계 더 나아감
사용자의 질문을 “진짜 의도”로 바꿔 답하고 끝내지 않고, 잘못된 질문이 나온 혼란 자체를 대화의 출발점으로 삼음
사용자는 도구에 대한 더 나은 정신 모델을 얻고, 도구를 만든 쪽은 제품이 어디에서 혼란을 주는지 더 선명하게 파악하게 됨
대화 끝에 제품 자체가 바뀌어야 한다는 결론에 이를 때도 있음
엔지니어용 도구를 만드는 사람에게 특히 직접적으로 적용되는 방식임
소비자 제품이나 B2B 서비스에는 덜 직접적으로 옮겨질 수 있지만, 기본 접근은 여전히 유용할 수 있음
요청을 진단하는 방식
모든 질문이 깊은 대화를 필요로 하지는 않음
문서를 가리키면 되는 단순하고 반복적인 질문은 별도 논의 대상이 아님
흥미로운 경우는 첫 요청만으로 맥락이 부족하고, 질문 자체가 평소와 다르게 보일 때임
이상한 질문은 다음 기준으로 어긋난 지점을 찾음
이전에 본 적 있는 질문인지 확인하고, 없다면 드문 요청으로 보고 속도를 늦춤
다른 질문들과 비교했을 때 합리적인지 살피고, 그렇지 않다면 그 아래에 더 일반적인 질문이 있는지 찾음
도구의 구조와 맞는 요청인지, 사용자가 자신도 모르게 아키텍처와 싸우고 있는지 확인함
어긋난 지점을 찾은 뒤에는 빠진 맥락이 드러나도록 질문함
즉각적인 답은 X지만, 이유 Y 때문에 꽤 이상한 요청으로 보이니 더 넓은 문제를 알려 달라는 식으로 대화를 시작함
이후 속도는 사용자가 생각을 얼마나 잘 전달하는지에 따라 달라짐
대화는 보통 세 가지 결론 중 하나로 이어짐
사용자가 도구의 철학을 놓치고 있음
올바른 경로가 제품 안에 있지만 잘 보이지 않음
제품 자체가 바뀌어야 함
도구의 철학을 놓친 경우
사용자는 원하는 것 또는 해결하려는 문제를 정확히 모르는 상태로 도구를 찾는 경우가 흔함
이는 사용자를 비판하려는 뜻이 아님
팀들은 제한된 시간과 자원 속에서 문제를 풀다가 진전이 없을 때 새로운 디버깅 도구를 찾음
도구가 원하는 기능의 상당 부분을 제공하더라도 “이렇게 동작해야 한다”는 사용자의 모델과 맞지 않으면 기능 요청으로 이어짐
Perfetto에서 흔한 예는 trace를 모든 지표 계산의 만능 해법처럼 보는 경우임
Perfetto trace는 특정 시간 구간 동안 장치가 한 일을 매우 자세히 기록함
trace에서 지표를 계산할 수 있기 때문에 사용자는 프레임률, 앱 메모리 사용량 같은 값도 모두 trace에서 계산하려 함
원칙적으로는 어떤 지표든 trace에서 계산 가능함
하지만 trace로 모든 지표를 계산하는 방식은 비효율적임
trace는 수집과 처리 비용이 큼
단일 숫자만 필요해도 시스템 전체 데이터를 수집하게 됨
전용 지표 수집 시스템이 같은 일을 훨씬 효율적으로 처리할 수 있음
도구에는 설계 철학이 있고, 사용자는 당장의 문제에 집중하느라 이를 놓치기 쉬움
Perfetto 사용법만 알려주는 것이 아니라, 성능 엔지니어링에 접근하는 법 자체를 가르치는 일이 중요함
시작 시간, 프레임 드롭, 메모리, 전력 같은 주제를 어떻게 생각하고 다룰지 알려야 함
정상 상황과 문제가 생긴 상황 모두에서 어떤 도구를 어떻게 사용할지 이해하게 만들어야 함
올바른 경로가 숨겨진 경우
사용자가 문제 자체는 이해하고 있지만, 기존 도구들을 어떻게 조합해야 할지 모르는 경우도 있음
도구는 의도적으로 강력하게 만들어졌고, 다른 팀이 전체 기능 범위를 다 이해한다고 볼 수 없음
실제로 원하는 것을 파악하면, 다른 목적으로 만든 기능이 사용자의 필요를 충족할 때가 많음
trace 분할 요청이 대표적임
사용자는 긴 trace 안에 관심 구간이 있어 이를 잘라내고 싶다고 말함
이유는 성능과 시각화를 더 쉽게 만들기 위해서임
하지만 이 경우 애초에 긴 trace를 수집하지 않는 방식이 더 적합할 수 있음
Perfetto에는 이미 periodic trace snapshots가 있음
하나의 긴 기록 대신 짧은 기록을 반복적으로 남기는 기능임
긴 trace를 수집한 뒤 나눌 필요 자체를 없애줌
사용자가 물어본 답과 실제로 필요한 답은 다를 수 있음
“그게 정확히 필요했던 것”이라는 반응은 사용자가 생각한 요청이 아니라 실제 필요를 찾아냈다는 신호임
제품이 바뀌어야 하는 경우
어떤 응답은 제품의 큰 변화로 이어질 수 있는 새로운 필요를 드러냄
이런 경우는 까다로움
요청이 새롭더라도 요청자가 실제로 무엇이 필요한지 명확히 말하지 못할 수 있음
기반 소프트웨어에서 잘못된 결정을 내리는 비용은 큼
그래서 없는 것이 실제로 아플 때까지 만들지 않는 쪽을 선호함
여러 팀이 같은 필요를 말하기 시작하면, 그때쯤 진짜로 만들 가치가 있는 핵심이 드러나기 쉬움
한 번의 요청만으로 이 핵심을 찾기는 매우 어렵기 때문에 기다림이 강력함
Perfetto의 임시 UI 커스터마이징은 잘못된 결정의 예임
사람들은 워크플로에 맞게 UI를 해킹하고 싶어 했고, 그게 어렵다고 계속 불평함
이를 허용하자마자 막대한 기술 부채가 생김
새 기능마다 기존 모든 기능과 상호작용해야 했고, 전체 구조는 빠르게 확장 불가능해짐
제대로 된 plugin API를 설계해 이 문제에서 빠져나오는 데 약 1년이 걸림
실제 필요는 “모든 사용자에게 영향을 주지 않으면서 팀이나 사용 사례에 맞게 UI를 개인화하는 방법”이었음
이 필요는 처음부터 명확히 표현되지 않았음
요청 흐름 속에서 이를 일찍 포착하는 책임은 제품을 만드는 쪽에 있었음
Perfetto trace를 “merge”할 수 있게 한 기능은 잘 처리한 예임
사람들이 계속 요청했지만 바로 만들지 않음
우회 방법을 안내하고 지켜보는 태도를 유지함
제대로 구현하려면 작업량이 크고 잘못 만들기 쉬운 기능임을 알고 있었음
문제 공간을 충분히 이해한 뒤 지난해 유지 가능한 방식으로 구현함
핵심 교훈
첫 질문은 실제 질문이 아닌 경우가 많음
답하기 전에 왜 그런 질문을 하는지 물어야 함
어떤 경우에는 사용자가 도구를 어떻게 써야 하는지 배우게 됨
어떤 경우에는 제품 안의 올바른 경로가 숨겨져 있다는 사실이 드러남
어떤 경우에는 아직 만들 가치가 있는 것이 없다는 결론에 도달함
어떤 경우에는 다음 큰 기능을 두 번이 아니라 한 번에 제대로 만들 준비가 됨
단순하지만 건너뛰기 쉬운 기법임
빠르게 대응해야 한다는 압박은 계속 존재함
빠른 답변은 매번 생산적으로 느껴짐
그래도 한 걸음 물러나면 양쪽 모두 처음보다 더 많은 것을 얻는 경우가 거의 항상 많음
성능 디버깅 도구에서 이상한 요청은 즉시 답하기보다 배경을 물어야 하며, 그래야 사용자의 실제 문제와 도구의 빈틈이 드러남
이는 단순한 XY 문제 대응을 넘어, 잘못된 질문이 나온 혼란 자체를 출발점으로 삼아 사용자와 제품 양쪽의 이해를 높여줌
Perfetto에서 trace를 모든 지표 계산에 쓰는 방식은 가능하더라도 비효율적이며, 전용 지표 수집 시스템이 더 적합할 수 있음
trace 분할 요청처럼 겉보기 답과 실제 필요가 다를 때는 periodic trace snapshots 같은 기존 기능이 더 나은 경로가 될 수 있음
제품 변경은 반복되는 필요가 충분히 드러난 뒤 결정하는 편이 낫고, 성급한 기능 추가는 큰 기술 부채로 이어질 수 있음
첫 질문에 바로 답하지 않는 이유
Perfetto 같은 성능 디버깅 도구에서 사용자가 “Perfetto trace를 여러 파일로 어떻게 나누나?”처럼 이상해 보이는 질문을 하면, 바로 방법을 제시하기보다 “그렇게 큰 trace를 수집하게 된 이유가 무엇인가?”를 먼저 물어야 함
이 접근은 단순한 XY 문제 해결보다 한 단계 더 나아감
사용자의 질문을 “진짜 의도”로 바꿔 답하고 끝내지 않고, 잘못된 질문이 나온 혼란 자체를 대화의 출발점으로 삼음
사용자는 도구에 대한 더 나은 정신 모델을 얻고, 도구를 만든 쪽은 제품이 어디에서 혼란을 주는지 더 선명하게 파악하게 됨
대화 끝에 제품 자체가 바뀌어야 한다는 결론에 이를 때도 있음
엔지니어용 도구를 만드는 사람에게 특히 직접적으로 적용되는 방식임
소비자 제품이나 B2B 서비스에는 덜 직접적으로 옮겨질 수 있지만, 기본 접근은 여전히 유용할 수 있음
요청을 진단하는 방식
모든 질문이 깊은 대화를 필요로 하지는 않음
문서를 가리키면 되는 단순하고 반복적인 질문은 별도 논의 대상이 아님
흥미로운 경우는 첫 요청만으로 맥락이 부족하고, 질문 자체가 평소와 다르게 보일 때임
이상한 질문은 다음 기준으로 어긋난 지점을 찾음
이전에 본 적 있는 질문인지 확인하고, 없다면 드문 요청으로 보고 속도를 늦춤
다른 질문들과 비교했을 때 합리적인지 살피고, 그렇지 않다면 그 아래에 더 일반적인 질문이 있는지 찾음
도구의 구조와 맞는 요청인지, 사용자가 자신도 모르게 아키텍처와 싸우고 있는지 확인함
어긋난 지점을 찾은 뒤에는 빠진 맥락이 드러나도록 질문함
즉각적인 답은 X지만, 이유 Y 때문에 꽤 이상한 요청으로 보이니 더 넓은 문제를 알려 달라는 식으로 대화를 시작함
이후 속도는 사용자가 생각을 얼마나 잘 전달하는지에 따라 달라짐
대화는 보통 세 가지 결론 중 하나로 이어짐
사용자가 도구의 철학을 놓치고 있음
올바른 경로가 제품 안에 있지만 잘 보이지 않음
제품 자체가 바뀌어야 함
도구의 철학을 놓친 경우
사용자는 원하는 것 또는 해결하려는 문제를 정확히 모르는 상태로 도구를 찾는 경우가 흔함
이는 사용자를 비판하려는 뜻이 아님
팀들은 제한된 시간과 자원 속에서 문제를 풀다가 진전이 없을 때 새로운 디버깅 도구를 찾음
도구가 원하는 기능의 상당 부분을 제공하더라도 “이렇게 동작해야 한다”는 사용자의 모델과 맞지 않으면 기능 요청으로 이어짐
Perfetto에서 흔한 예는 trace를 모든 지표 계산의 만능 해법처럼 보는 경우임
Perfetto trace는 특정 시간 구간 동안 장치가 한 일을 매우 자세히 기록함
trace에서 지표를 계산할 수 있기 때문에 사용자는 프레임률, 앱 메모리 사용량 같은 값도 모두 trace에서 계산하려 함
원칙적으로는 어떤 지표든 trace에서 계산 가능함
하지만 trace로 모든 지표를 계산하는 방식은 비효율적임
trace는 수집과 처리 비용이 큼
단일 숫자만 필요해도 시스템 전체 데이터를 수집하게 됨
전용 지표 수집 시스템이 같은 일을 훨씬 효율적으로 처리할 수 있음
도구에는 설계 철학이 있고, 사용자는 당장의 문제에 집중하느라 이를 놓치기 쉬움
Perfetto 사용법만 알려주는 것이 아니라, 성능 엔지니어링에 접근하는 법 자체를 가르치는 일이 중요함
시작 시간, 프레임 드롭, 메모리, 전력 같은 주제를 어떻게 생각하고 다룰지 알려야 함
정상 상황과 문제가 생긴 상황 모두에서 어떤 도구를 어떻게 사용할지 이해하게 만들어야 함
올바른 경로가 숨겨진 경우
사용자가 문제 자체는 이해하고 있지만, 기존 도구들을 어떻게 조합해야 할지 모르는 경우도 있음
도구는 의도적으로 강력하게 만들어졌고, 다른 팀이 전체 기능 범위를 다 이해한다고 볼 수 없음
실제로 원하는 것을 파악하면, 다른 목적으로 만든 기능이 사용자의 필요를 충족할 때가 많음
trace 분할 요청이 대표적임
사용자는 긴 trace 안에 관심 구간이 있어 이를 잘라내고 싶다고 말함
이유는 성능과 시각화를 더 쉽게 만들기 위해서임
하지만 이 경우 애초에 긴 trace를 수집하지 않는 방식이 더 적합할 수 있음
Perfetto에는 이미 periodic trace snapshots가 있음
하나의 긴 기록 대신 짧은 기록을 반복적으로 남기는 기능임
긴 trace를 수집한 뒤 나눌 필요 자체를 없애줌
사용자가 물어본 답과 실제로 필요한 답은 다를 수 있음
“그게 정확히 필요했던 것”이라는 반응은 사용자가 생각한 요청이 아니라 실제 필요를 찾아냈다는 신호임
제품이 바뀌어야 하는 경우
어떤 응답은 제품의 큰 변화로 이어질 수 있는 새로운 필요를 드러냄
이런 경우는 까다로움
요청이 새롭더라도 요청자가 실제로 무엇이 필요한지 명확히 말하지 못할 수 있음
기반 소프트웨어에서 잘못된 결정을 내리는 비용은 큼
그래서 없는 것이 실제로 아플 때까지 만들지 않는 쪽을 선호함
여러 팀이 같은 필요를 말하기 시작하면, 그때쯤 진짜로 만들 가치가 있는 핵심이 드러나기 쉬움
한 번의 요청만으로 이 핵심을 찾기는 매우 어렵기 때문에 기다림이 강력함
Perfetto의 임시 UI 커스터마이징은 잘못된 결정의 예임
사람들은 워크플로에 맞게 UI를 해킹하고 싶어 했고, 그게 어렵다고 계속 불평함
이를 허용하자마자 막대한 기술 부채가 생김
새 기능마다 기존 모든 기능과 상호작용해야 했고, 전체 구조는 빠르게 확장 불가능해짐
제대로 된 plugin API를 설계해 이 문제에서 빠져나오는 데 약 1년이 걸림
실제 필요는 “모든 사용자에게 영향을 주지 않으면서 팀이나 사용 사례에 맞게 UI를 개인화하는 방법”이었음
이 필요는 처음부터 명확히 표현되지 않았음
요청 흐름 속에서 이를 일찍 포착하는 책임은 제품을 만드는 쪽에 있었음
Perfetto trace를 “merge”할 수 있게 한 기능은 잘 처리한 예임
사람들이 계속 요청했지만 바로 만들지 않음
우회 방법을 안내하고 지켜보는 태도를 유지함
제대로 구현하려면 작업량이 크고 잘못 만들기 쉬운 기능임을 알고 있었음
문제 공간을 충분히 이해한 뒤 지난해 유지 가능한 방식으로 구현함
핵심 교훈
첫 질문은 실제 질문이 아닌 경우가 많음
답하기 전에 왜 그런 질문을 하는지 물어야 함
어떤 경우에는 사용자가 도구를 어떻게 써야 하는지 배우게 됨
어떤 경우에는 제품 안의 올바른 경로가 숨겨져 있다는 사실이 드러남
어떤 경우에는 아직 만들 가치가 있는 것이 없다는 결론에 도달함
어떤 경우에는 다음 큰 기능을 두 번이 아니라 한 번에 제대로 만들 준비가 됨
단순하지만 건너뛰기 쉬운 기법임
빠르게 대응해야 한다는 압박은 계속 존재함
빠른 답변은 매번 생산적으로 느껴짐
그래도 한 걸음 물러나면 양쪽 모두 처음보다 더 많은 것을 얻는 경우가 거의 항상 많음
이는 단순한 XY 문제 대응을 넘어, 잘못된 질문이 나온 혼란 자체를 출발점으로 삼아 사용자와 제품 양쪽의 이해를 높여줌
Perfetto에서 trace를 모든 지표 계산에 쓰는 방식은 가능하더라도 비효율적이며, 전용 지표 수집 시스템이 더 적합할 수 있음
trace 분할 요청처럼 겉보기 답과 실제 필요가 다를 때는 periodic trace snapshots 같은 기존 기능이 더 나은 경로가 될 수 있음
제품 변경은 반복되는 필요가 충분히 드러난 뒤 결정하는 편이 낫고, 성급한 기능 추가는 큰 기술 부채로 이어질 수 있음
첫 질문에 바로 답하지 않는 이유
Perfetto 같은 성능 디버깅 도구에서 사용자가 “Perfetto trace를 여러 파일로 어떻게 나누나?”처럼 이상해 보이는 질문을 하면, 바로 방법을 제시하기보다 “그렇게 큰 trace를 수집하게 된 이유가 무엇인가?”를 먼저 물어야 함
이 접근은 단순한 XY 문제 해결보다 한 단계 더 나아감
사용자의 질문을 “진짜 의도”로 바꿔 답하고 끝내지 않고, 잘못된 질문이 나온 혼란 자체를 대화의 출발점으로 삼음
사용자는 도구에 대한 더 나은 정신 모델을 얻고, 도구를 만든 쪽은 제품이 어디에서 혼란을 주는지 더 선명하게 파악하게 됨
대화 끝에 제품 자체가 바뀌어야 한다는 결론에 이를 때도 있음
엔지니어용 도구를 만드는 사람에게 특히 직접적으로 적용되는 방식임
소비자 제품이나 B2B 서비스에는 덜 직접적으로 옮겨질 수 있지만, 기본 접근은 여전히 유용할 수 있음
요청을 진단하는 방식
모든 질문이 깊은 대화를 필요로 하지는 않음
문서를 가리키면 되는 단순하고 반복적인 질문은 별도 논의 대상이 아님
흥미로운 경우는 첫 요청만으로 맥락이 부족하고, 질문 자체가 평소와 다르게 보일 때임
이상한 질문은 다음 기준으로 어긋난 지점을 찾음
이전에 본 적 있는 질문인지 확인하고, 없다면 드문 요청으로 보고 속도를 늦춤
다른 질문들과 비교했을 때 합리적인지 살피고, 그렇지 않다면 그 아래에 더 일반적인 질문이 있는지 찾음
도구의 구조와 맞는 요청인지, 사용자가 자신도 모르게 아키텍처와 싸우고 있는지 확인함
어긋난 지점을 찾은 뒤에는 빠진 맥락이 드러나도록 질문함
즉각적인 답은 X지만, 이유 Y 때문에 꽤 이상한 요청으로 보이니 더 넓은 문제를 알려 달라는 식으로 대화를 시작함
이후 속도는 사용자가 생각을 얼마나 잘 전달하는지에 따라 달라짐
대화는 보통 세 가지 결론 중 하나로 이어짐
사용자가 도구의 철학을 놓치고 있음
올바른 경로가 제품 안에 있지만 잘 보이지 않음
제품 자체가 바뀌어야 함
도구의 철학을 놓친 경우
사용자는 원하는 것 또는 해결하려는 문제를 정확히 모르는 상태로 도구를 찾는 경우가 흔함
이는 사용자를 비판하려는 뜻이 아님
팀들은 제한된 시간과 자원 속에서 문제를 풀다가 진전이 없을 때 새로운 디버깅 도구를 찾음
도구가 원하는 기능의 상당 부분을 제공하더라도 “이렇게 동작해야 한다”는 사용자의 모델과 맞지 않으면 기능 요청으로 이어짐
Perfetto에서 흔한 예는 trace를 모든 지표 계산의 만능 해법처럼 보는 경우임
Perfetto trace는 특정 시간 구간 동안 장치가 한 일을 매우 자세히 기록함
trace에서 지표를 계산할 수 있기 때문에 사용자는 프레임률, 앱 메모리 사용량 같은 값도 모두 trace에서 계산하려 함
원칙적으로는 어떤 지표든 trace에서 계산 가능함
하지만 trace로 모든 지표를 계산하는 방식은 비효율적임
trace는 수집과 처리 비용이 큼
단일 숫자만 필요해도 시스템 전체 데이터를 수집하게 됨
전용 지표 수집 시스템이 같은 일을 훨씬 효율적으로 처리할 수 있음
도구에는 설계 철학이 있고, 사용자는 당장의 문제에 집중하느라 이를 놓치기 쉬움
Perfetto 사용법만 알려주는 것이 아니라, 성능 엔지니어링에 접근하는 법 자체를 가르치는 일이 중요함
시작 시간, 프레임 드롭, 메모리, 전력 같은 주제를 어떻게 생각하고 다룰지 알려야 함
정상 상황과 문제가 생긴 상황 모두에서 어떤 도구를 어떻게 사용할지 이해하게 만들어야 함
올바른 경로가 숨겨진 경우
사용자가 문제 자체는 이해하고 있지만, 기존 도구들을 어떻게 조합해야 할지 모르는 경우도 있음
도구는 의도적으로 강력하게 만들어졌고, 다른 팀이 전체 기능 범위를 다 이해한다고 볼 수 없음
실제로 원하는 것을 파악하면, 다른 목적으로 만든 기능이 사용자의 필요를 충족할 때가 많음
trace 분할 요청이 대표적임
사용자는 긴 trace 안에 관심 구간이 있어 이를 잘라내고 싶다고 말함
이유는 성능과 시각화를 더 쉽게 만들기 위해서임
하지만 이 경우 애초에 긴 trace를 수집하지 않는 방식이 더 적합할 수 있음
Perfetto에는 이미 periodic trace snapshots가 있음
하나의 긴 기록 대신 짧은 기록을 반복적으로 남기는 기능임
긴 trace를 수집한 뒤 나눌 필요 자체를 없애줌
사용자가 물어본 답과 실제로 필요한 답은 다를 수 있음
“그게 정확히 필요했던 것”이라는 반응은 사용자가 생각한 요청이 아니라 실제 필요를 찾아냈다는 신호임
제품이 바뀌어야 하는 경우
어떤 응답은 제품의 큰 변화로 이어질 수 있는 새로운 필요를 드러냄
이런 경우는 까다로움
요청이 새롭더라도 요청자가 실제로 무엇이 필요한지 명확히 말하지 못할 수 있음
기반 소프트웨어에서 잘못된 결정을 내리는 비용은 큼
그래서 없는 것이 실제로 아플 때까지 만들지 않는 쪽을 선호함
여러 팀이 같은 필요를 말하기 시작하면, 그때쯤 진짜로 만들 가치가 있는 핵심이 드러나기 쉬움
한 번의 요청만으로 이 핵심을 찾기는 매우 어렵기 때문에 기다림이 강력함
Perfetto의 임시 UI 커스터마이징은 잘못된 결정의 예임
사람들은 워크플로에 맞게 UI를 해킹하고 싶어 했고, 그게 어렵다고 계속 불평함
이를 허용하자마자 막대한 기술 부채가 생김
새 기능마다 기존 모든 기능과 상호작용해야 했고, 전체 구조는 빠르게 확장 불가능해짐
제대로 된 plugin API를 설계해 이 문제에서 빠져나오는 데 약 1년이 걸림
실제 필요는 “모든 사용자에게 영향을 주지 않으면서 팀이나 사용 사례에 맞게 UI를 개인화하는 방법”이었음
이 필요는 처음부터 명확히 표현되지 않았음
요청 흐름 속에서 이를 일찍 포착하는 책임은 제품을 만드는 쪽에 있었음
Perfetto trace를 “merge”할 수 있게 한 기능은 잘 처리한 예임
사람들이 계속 요청했지만 바로 만들지 않음
우회 방법을 안내하고 지켜보는 태도를 유지함
제대로 구현하려면 작업량이 크고 잘못 만들기 쉬운 기능임을 알고 있었음
문제 공간을 충분히 이해한 뒤 지난해 유지 가능한 방식으로 구현함
핵심 교훈
첫 질문은 실제 질문이 아닌 경우가 많음
답하기 전에 왜 그런 질문을 하는지 물어야 함
어떤 경우에는 사용자가 도구를 어떻게 써야 하는지 배우게 됨
어떤 경우에는 제품 안의 올바른 경로가 숨겨져 있다는 사실이 드러남
어떤 경우에는 아직 만들 가치가 있는 것이 없다는 결론에 도달함
어떤 경우에는 다음 큰 기능을 두 번이 아니라 한 번에 제대로 만들 준비가 됨
단순하지만 건너뛰기 쉬운 기법임
빠르게 대응해야 한다는 압박은 계속 존재함
빠른 답변은 매번 생산적으로 느껴짐
그래도 한 걸음 물러나면 양쪽 모두 처음보다 더 많은 것을 얻는 경우가 거의 항상 많음


댓글 (0)
댓글을 불러오는 중...