카운터 앱을 하나 냈습니다. 탭할 때마다 숫자가 오르고, 특정 구간과 목표에 도달하면 다른 진동이 옵니다. 신호가 세 단계인 셈입니다.
출시 당일 신고가 왔습니다. "99까지 눌렀는데 아무 느낌이 없다."
앱 설정의 진동 토글은 켜져 있고, 기기 터치 피드백도 켜져 있고, 절전 모드는 꺼져 있고, 키보드 타이핑 진동은 정상입니다.
진동이 "안 온다"는 신고를 받으면 무엇부터 확인합니까?
눈으로는 못 봅니다
진동은 화면에 안 보이고 에뮬레이터에서는 감각이 없습니다. 그래서 시스템 덤프를 읽었습니다.
dumpsys vibrator_manager여기에 요청이 도달했는지, 재생됐는지, 무시됐는지, 폴백으로 대체됐는지가 다 적힙니다. 확인해보니 우리 요청은 시스템에 도달했고 재생됐으며 무시된 건 0건이었습니다.
즉 호출 경로는 멀쩡했습니다. 문제는 고른 효과였습니다.
세 가지를 찾았습니다
첫째, 구간 경계 진동이 사양과 달랐습니다. 사양에는 짧은 클릭 두 번이라고 적혀 있는데 코드는 더 약한 틱을 쓰고 있었고, 유닛 테스트가 그 틀린 값을 단언해 고정하고 있었습니다.
둘째, 진동 프리미티브를 지원하지 않는 기기에서 8밀리초짜리 생파형으로 떨어지고 있었습니다. 8ms는 대부분의 모터가 물리적으로 낼 수 없는 길이입니다.
셋째, 매 탭 진동의 진폭이 낮아 보였습니다. 0.6에서 0.85로 올렸습니다.
셋을 고쳐 출하했습니다.
사용자가 확인해줬습니다
"구간이랑 목표는 느껴지는데 매 탭은 여전히 무감각."
이 한 문장이 원인을 확정했습니다.
그 기기는 진동 프리미티브를 지원하지 않아서 미리 정의된 효과 사다리를 탑니다. 제가 고친 건 그 사다리 중 두 칸(구간·목표)이었고, 매 탭은 수정 전과 같은 값 그대로였습니다.
그리고 세 번째 수정, 진폭 0.6 → 0.85는 프리미티브를 지원하는 기기에만 걸리는 변경이었습니다. 이 사용자의 기기에는 애초에 닿지 않습니다.
제가 커밋 메시지에 "이건 판단이지 증거가 아니다"라고 적어둔 그 변경이, 실제로 아무것도 설명하지 못했습니다.
여기서 선택이 갈립니다
"구간은 느껴진다"는 보고를 받았을 때, 두 가지로 읽을 수 있습니다. "고쳐졌다" 또는 "고쳐진 것과 안 고쳐진 것이 갈렸다".
당신이라면 어느 쪽으로 읽겠습니까?
이 신고가 없었다면 저는 첫 번째로 읽고 닫았을 겁니다. 사용자가 무엇이 안 되는지까지 말해줘서 갈렸습니다.
남은 한 칸을 고쳤습니다
폴백 사다리에서 매 탭 진동이 가장 약한 효과를 쓰고 있었습니다. 한 칸 위로 올렸습니다. 근거는 추측이 아니라 그 기기의 사실입니다 — 같은 폰에서 키보드 타이핑 진동은 느껴진다고 했으니까요.
세 칸이 서로 다른 효과라는 것을 이제 테스트가 고정합니다.
자가진단
- 신호가 여러 단계인 기능에서, 수정할 때 모든 단계를 같은 표에 놓고 봅니까?
- 기기 능력에 따라 분기하는 코드에서, 당신이 고친 분기가 신고자의 기기가 타는 분기입니까?
- 사용자 확인 요청에 "되나요?" 대신 **"무엇이 되고 무엇이 안 되나요?"**를 묻습니까?
솔직한 부분
하루에 네 번 출하했습니다. 심사가 30~40분이라 가능했지만, 그건 제가 정확히 고쳤다는 뜻이 아니라 틀린 수정을 빠르게 반복할 수 있었다는 뜻입니다.
증거 없이 넣은 변경은 고쳐진 것처럼 보이는 데만 기여합니다. 진폭 변경이 딱 그랬습니다.
당신이 마지막으로 고친 다단계 기능에서, 고치지 않은 단계가 몇 개인지 세어보세요.