"Recall 타임스탬프랑 사용자가 고른 챕터 점프는 기억된 위치를 이겨. resume 는 딥링크를 절대 엉뚱한 순간에 떨구지 않아."
'재생이 어디서 시작해야 하나' 의 두 출처
Ashen Reel 이 파일을 열 때, 시작 위치를 정하고 싶어 하는 목소리가 둘이야. 하나는 resume. "지난번에 22:14 였어, 거기서 이어." 사랑스러운 편의지. 다른 하나는 명시적 의도. "41:00 에서 시작" 이라는 Recall 딥링크, 또는 Jump to Time, 또는 챕터 선택. 둘 다 의견이 있으면 하나가 이겨야 해. 그리고 우선순위를 틀리면 제품 전체가 조용히 깨져.
상상해봐. 아빠가 자막을 검색하고, 41:00 줄을 클릭했어. 근데 앱이 지난주에 멈춘 데라고 22:14 에서 resume 해. Ashen Reel 이 존재하는 이유 통째인 그 딥링크가, 방금 19분 어긋나게 떨어진 거야. 도우려던 resume 이 제일 중요한 그 기능 하나를 방해한 거지.
명시적 의도가 기억된 편의를 이긴다. 사용자나 호출자가 방금 요청한 값은, 시스템이 전에 기억해둔 값을 항상 이겨. 기억은 호의고, 의도는 명령이야. 부딪히면 명령이 이기고.
규칙은 세 줄짜리 우선순위고, 그 순서가 기능 전부야.
resume 은 안전하게 저장된, 버려도 되는 편의 상태야. 위치는 debounce 된 트랜잭션 쓰기로 저장돼서 크래시가 데이터베이스를 못 망가뜨려. 통째로 잃어도 그냥 짜증날 뿐 피해는 절대 아니고. resume 은 더 시끄러운 게 아무것도 요청 안 할 때 도움 주고, 뭔가 요청하는 순간엔 비켜줘서 밥값을 해.
least astonishment 가 깊은 이유야
규칙 아래엔 어디든 가져갈 만한 원칙이 있어. 시스템은 제일 덜 놀라운 걸 해야 한다는 거. 네가 명시적으로 41:00 로 가라고 했는데 다른 데 떨어지면, 아무리 선의여도 놀랍거든. resume 은 네가 구체적인 걸 안 요청했을 때만 안 놀라워. 그러니 이 우선순위는 아무렇게나 고른 게 아니야. '사용자가 방금 말한 걸 존중해' 의 직접적 결과지. 기억된 기본값이랑 새 명시적 요청이 부딪힐 때마다, 새 요청이 거의 항상 사용자를 안 놀라게 지키는 쪽이고.