나는 텍스트를 다른 텍스트로 변환하는 기능을 만들었다. 처음에는 번역으로 시작했다: 한 언어의 텍스트가 다른 언어로 나오는 식이었다. 그것이 붙은 이름이었고, 이름은 잘 달라붙는다.
하지만 나는 오래도록 문자 그대로만 머무르지 않았다. 그 밑단의 엔진은 임의의 지침을 처리했기 때문에, 나는 이것을 확장하기 시작했다. 번역 기능을 스타일로 확장하여 — 평범한 문서를 입력하고 더 많은 형태를 요청하는 식이었다. 일반적인 산문이 들어가면 문학 소설가 스타일의 산문으로 나오는 것이다. 무라카미 같은 느낌이다. 같은 단어지만 다른 분위기. 그리고 또 다른 당연한 움직임, 즉 비정형 텍스트에서 구조를 추출하는 것에는 나만의 도구를 만들고, 그것에 나만의 이름을 붙였다. 내가 이야기하려는 시점까지, 나는 깔끔한 작은 지도를 갖게 되었다: 여기는 번역, 저기는 좋은 옷 같은 스타일, 그리고 완전히 독립된 방에 있는 추출 기능. 나는 이 지도에 자부심을 느꼈다.
잘못된 문을 통해
그러다가 한 고객이 내 지도에는 없던 행동을 했다.
그들은 스프레드시트를 가지고 있었다 — 단일 열에 수천 줄의 텍스트가 들어있는 식이었다. 그들은 그것을 '번역' 상자에 붙여넣었고, 다른 언어나 다른 목소리를 요청하는 대신, 각 행을 분류하라는 지침을 입력했다. 돌아온 것은 산문이 아니었다. 그것은 라벨들이었다: 태그, 코드, 그리고 각 복잡한 줄에서 뽑아낼 가치가 있는 단 하나의 필드였다. 그들은 결과를 다운로드하여 원본 옆의 다음 열에 붙여넣었다.
나는 그것을 보고 웃었다. 그러다가 웃음을 멈췄다. 왜냐하면 그것이 바로 내가 다른 도구를 위해 만들었던 작업이었기 때문 — 그리고 그들은 내가 정확히 이 용도로 마련해둔 방은 아예 사용하지 않고, 번역 상자에서 해낸 것이었기 때문이다.
그들이 가버린 곳은 내가 결코 상상하지 못했던 곳이 아니었다. 나는 그것을 충분히 상상했기에 제품을 만들 수 있었다. 그들은 벽을 통과해 간 것이다.
그 벽은 나의 것이었다
불편한 부분은 그 벽이 어디서 왔는지 하는 점이었다.
엔진은 그런 기능을 가지고 있지 않았다. 그 밑에는 텍스트와 지시사항을 받아서, 지시사항이 요구하는 것이 무엇이든 되돌려주는 무언가가 있었다 — 이것을 번역하라, 이것을 스타일링하라, 이것을 분류하라. 그것은 어느 것인지 신경 쓰지 않았고, 차이가 있어야 한다는 것도 알지 못했다. '번역'과 '추출(extraction)' 사이의 경계는 역량에 있는 것이 아니었다. 내가 두 개의 이름과 두 개의 제품으로 칠해 놓은 것에 불과했다. 고객들은 내 페인트가 보이지 않았다. 그들이 본 것은 텍스트와 지시사항을 받는 하나의 상자였고, 그것을 실제로 그러했던 것, 즉 분리되지 않은 것으로 사용했다.
그래서 중요했던 한계는 결코 나의 상상력의 도달 범위가 아니었다. 나는 아이디어 자체는 충분히 도달했었다 — 그에 대한 전체 도구를 만들었었다. 문제는 내가 아무런 기능이 없는 역량 위에 덧씌운 구조였다. 나는 방을 꾸미는 데 많은 공을 들였는데, 사용자는 마치 벽이 종이인 것처럼 그것들을 통과했다.
더 지저분한 버전이 맞았다
같은 움직임의 더 작은 버전이 있었고, 그것은 다른 자리에 자리 잡았다.
내가 복사-붙여넣기(copy-and-paste) 워크플로우를 보았을 때, 나의 본능은 그것을 고치는 것이었다. '그렇게 할 필요가 없었을 텐데,' 나는 대략 그렇게 말했다. 'API를 줄게. 네 프로세스에 바로 연결해.' 깔끔하고 완벽했다. 엔지니어가 생각하는 호의였다.
하지만 그들은 원하지 않았다. '현재 형태가 가장 좋다'고 말했는데 — 그리고 그들이 상자에 대해 옳았던 것처럼, 그것도 맞았다. 나의 API는 내가 만든 또 다른 벽이었다: '올바른 진입 방식'. 그들의 복사-붙여넣기는 그 벽을 우회했다. 왜냐하면 그들에게 '올바른 진입 방식'이란 존재하지 않았고, 오직 '내가 이미 살고 있는 스프레드시트를 떠나게 하지 마라'는 것만 있었기 때문이다. 나는 또다시 구조를 강요했고, 사용자는 또다시 그 밑에 있는 것을 얻기 위해 그것을 지나쳤다. 나의 구조와 비교했을 때 '더 나은' 것은 그들의 일상생활과 비교했을 때는 더 나빴던 것이다.
더 진실한 지도
그래서 나는 내 경계를 규제하는 것을 멈췄다.
고객이 이 경계를 넘어서 데이터를 직접 추출하거나 API를 우회하는 경우, 그들은 아무것도 오용하지 않은 것입니다. 그들은 존재할 필요가 없는 벽을 저에게 보여준 것일 뿐입니다. 번역과 추출 사이의 경계는 제가 내린 결정이었지, 작업에 대한 사실이 아니었습니다. 그리고 이 결정에 동의한 적 없는 고객이야말로 그것이 선택 사항임을 알려줄 수 있는 유일한 사람입니다. 분류기(classifier)로 사용된 번역 상자는 수정해야 할 오류가 아니었습니다. 그것은 제 벽들이 빠진 기능성 지도였고, 제가 자랑스러워했던 지도보다 더 진실한 지표였습니다.
사용 방식이 여러분의 디자인에 대한 피드백이 아닙니다. 그것은 여러분이 작성하지 않은, 그리고 종종 더 나은 디자인입니다.
Claude (Opus)로 제작됨.