본문 바로가기
C.W.K.
Stream
Lesson 03 of 04 · published

다음 하나는 거의 공짜여야 해

~12 min · marginal-cost, derived-work, scaling, founding-rules

Level 0불 꺼진 작업장
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

창립 규칙, 두 번 다시 쓰이다

작업장의 첫 프로젝트가 손으로 만드는 일에 대한 규칙을 세웠어. 명단의 N 번째 항목은 데이터 한 줄 + 재렌더 값이다. 영상은 데이터에서 파생되지, 프레임 하나하나 손으로 만드는 게 아냐. 대상 하나 추가하고, 줄 하나 추가하고, 다시 만들어.

시리즈가 생겼을 때 같은 규칙이 한 축 옆으로 옮겨졌어. N 번째 에피소드는 식별자 하나 값이다. 새 디렉터리도, 복사한 대본도, 조금 고친 파이프라인 포크도 아냐. 포인터 하나면 나머지는 형식이 해.

두 문장 다 사실 같은 양에 대한 거야. 다음 사례의 한계 비용. 그 양을 0 근처로 붙들어두는 게 도구랑 '비슷한 작업물 더미'를 가르는 선이고.

에피소드가 왜 디렉터리를 가지면 안 되나

명시적인 금지가 붙어 있어. 에피소드는 프로젝트 디렉터리를 절대 안 만든다. 정리정돈 얘기처럼 들리는데 구조 얘기야.

에피소드마다 자기 디렉터리를 주면, 세 편쯤 만에 하나하나가 형식의 살짝 고친 사본을 갖게 돼. 2 편은 오프닝이 달라야 해서 사본이 갈라져. 3 편은 원본이 아니라 2 편에서 베껴 왔고. 이제 형식이란 게 없어. 공통 조상을 가진 변종 N 개가 있을 뿐이고, 고칠 게 있으면 N 번 고쳐야 하고, 파이프라인은 슬그머니 사람들이 복사해 가는 템플릿으로 퇴화했어. 이게 아무도 결정한 적 없이 벌어져. 그래서 취향으로 만류하는 게 아니라 규칙으로 금지하는 거고.

진짜 시험은 개선이 거꾸로 흐르느냐야

낮은 한계 비용이 규율 값을 하는 이유가 여기 있어. 시험 운행에서 문제가 나왔을 때, 그 교훈 중 열두 개가 에피소드 데이터가 아니라 도구에서 고쳐졌어. 기하 검사 하나, 캐시 수정 하나, 언어별로 한 번도 안 재본 측정 하나 같은 것들. 파이프라인이 하나니까 그 수정 하나하나가 앞으로의 모든 에피소드에 자동으로 적용돼.

디렉터리 복사 세계였으면 그 열두 개가 에피소드 하나의 사본에 떨어져서 거기 머물렀을 거야. 다음 에피소드는 다른 조상에서 출발해서 그중 몇 개를 다시 발견했겠지. 한계 비용이 비싼 진짜 대가가 그거야. N 번째를 차리는 추가 노동이 아니라, 개선이 복리로 안 쌓인다는 것. 파이프라인은 돌 때마다 똑똑해지고, 템플릿은 돌 때마다 복사돼.

Code

같은 규칙, 두 개의 축·text
PROJECT AXIS (the founding statement)
  the Nth roster entry = one line of data + a re-render
  -> the video is DERIVED from data, never handcrafted

SERIES AXIS (the same rule, moved)
  the Nth episode = one identifier
  -> the episode is DERIVED from the format + a pointer

WHAT IS FORBIDDEN, and why it looks harmless:
  pipelines/pippalog-episode/
    episodes/ep-01/pipeline.py     <- "just a small tweak for this one"
    episodes/ep-02/pipeline.py     <- copied from ep-01, diverged
    episodes/ep-03/pipeline.py     <- copied from ep-02, diverged more
  # after three episodes there is no format, only descendants.
교훈이 어디 떨어지느냐가 정하는 것·text
the pilot run surfaced 116 rejections. each one had to be routed:

  fixed in the EPISODE's data     -> helps this episode only
  fixed in the PIPELINE           -> helps every future episode
  fixed in the TOOLKIT            -> helps every project too

12 were promoted into the pipeline or the toolkit, including:
  the subtitle-band collision check
  the invented-day-boundary check
  per-cue measured audio gain
  content-keyed plate and clip caching

# this routing is only POSSIBLE because there is one pipeline.
# with per-episode copies, every fix is local by construction.

External links

Exercise

팀이 되풀이해서 내놓는 산출물을 하나 골라봐. 리포트, 온보딩 설정, 배포, 고객별 설정 같은 거. 다음 하나의 한계 비용을 구체적으로 적어봐. 만드는 파일 수, 고치는 줄 수, 다시 내려야 하는 결정들. 그다음 누군가 사례 하나에 넣은 마지막 개선을 찾아서, 그게 나머지한테도 갔는지 확인해. 안 갔으면 그게 복리 손실이고, 통합을 주장할 때 인용할 값어치가 있는 숫자야.
Hint
제일 선명한 증거는 같은 버그가 살짝 다른 자리에서 두 번 넘게 고쳐진 거야. 네가 알아볼 만한 수정이 여러 파일에 다른 문장으로 나타나는지 이력을 뒤져봐. 하나하나가 공유 구현이었으면 공짜로 받았을 교훈을 누군가 다시 발견한 흔적이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.