요구사항 접수하기

앞 장에서 프로젝트를 만들었습니다. 이제 dira에 무엇을 시킬지 적어 봅시다.

요구 접수와 티켓 발행

보드 우상단에 버튼이 둘 있습니다. 오른쪽의 요구 접수가 기본 경로이고, 왼쪽의 티켓 발행은 예외적인 경로입니다.

요구 접수 다이얼로그. 자연어를 적는 칸 하나와 접수 버튼뿐이고, kind와 persona, deps를 고르는 칸이 없습니다.

티켓 발행은 제목과 kind, persona, deps를 사람이 고릅니다. 무엇을 누가 어떤 순서로 할지 이미 아는 사람의 폼입니다. 요구 접수는 자연어 한 칸뿐입니다. 쪼개서 쓸 필요가 없습니다. 원하시는 것을 원하시는 문장으로 쓰시면, 쪼개는 일은 다음 절에서 설명하는 pm이 맡습니다.

  • 첫 줄이 제목이 됩니다(80자에서 잘립니다). 제목을 따로 쓰지 않습니다.
  • 본문은 쓰신 전문 그대로 저장됩니다. 앱이 문장을 고쳐 쓰거나 골격을 채우지 않습니다.
  • 프로젝트 안 어디서든 ⌘/를 누르면 이 칸이 열립니다. 버튼은 보드에만 있지만, 요구는 워커 화면을 보다가도 티켓을 읽다가도 생기기 때문입니다.
  • 접수되면 요구사항이 접수되었습니다. 곧 PM이 검토할 예정입니다.가 그 자리에 뜹니다. 화면이 다른 곳으로 이동하지 않고, 아래 접수한 요구 보기 링크를 누르면 그 요구의 상세로 갑니다. 에픽을 골라 둔 채로 접수했다면 이 자리의 문장이 바뀌어 어느 에픽으로 접수됐는지를 알려 줍니다(에픽).

접수한 다음에 일어나는 일

접수는 큐에 kind: request 티켓 한 장을 만듭니다. 담당은 pm 페르소나입니다.

1분 안에 워커가 그 티켓을 가져가 pm 세션을 띄웁니다. pm 세션은 읽고 쪼갭니다. 요구 하나가 작업 티켓 여러 장이 되고, 각 티켓은 페르소나가 정해지고 필요한 만큼 deps로 엮입니다. 쪼개진 티켓에는 req: 칸에 원본 요구의 해시가 적힙니다. 해시는 티켓마다 붙는 여덟 자리 이름입니다. 그래서 요구 상세에서 쪼개진 티켓들이 보이고, 티켓 상세에서 출처 요구로 돌아올 수 있습니다.

쪼개기가 끝나면 원본 요구는 완료가 됩니다. 해석이 끝났다는 뜻이고, 일이 끝났다는 뜻은 아닙니다. 실제 일은 그 아래 티켓들에 있고, 워커가 하나씩 가져가 각자의 페르소나로 세션을 띄웁니다.

이미 처리 중인 요구에 결정을 더할 때

요구는 프로젝트 홈의 홈 대화로도 올립니다. 올린 뒤 같은 대화에서 "토큰 이름은 이걸로 하자"처럼 결정을 덧붙이는 일이 흔합니다. 그 사이에 워커가 요구를 가져갔을 수 있습니다. 그래서 홈 대화는 결정을 쓰기 직전에 그 해시의 파일을 큐에서 다시 찾고, 지금 상태에 따라 다르게 처리합니다.

요구의 상태홈 대화가 하는 일
대기요구 본문을 그대로 고칩니다. 다음에 뜨는 pm 세션이 고친 본문을 읽습니다
진행중요구 본문 끝에 ## 추가 결정 - 홈 대화 절을 더해 하신 말을 인용으로 적고, 도는 세션에 참견 한 줄을 보냅니다
완료원래 요구는 고치지 않습니다. 새 요구를 만들고 그 ## 맥락에 원래 요구의 해시를 적습니다

진행중이면 본문 기록과 참견을 함께 씁니다. 본문에 적은 절은 그 세션이 죽고 다시 디스패치될 때 새 세션이 읽습니다. 지금 도는 세션은 이미 읽은 본문을 다시 읽지 않으므로, 결정이 닿으려면 참견이 필요합니다. 참견 내용은 다음 한 줄입니다.

티켓 본문 끝 ## 추가 결정 - 홈 대화 절에 결정을 더했습니다: <한 줄 요약>
text

완료된 요구는 pm이 이미 쪼갠 뒤입니다. 새 요구도 다른 요구처럼 pm이 가져가서 읽습니다.

그 해시로 찾은 파일이 0개이면 홈 대화는 <해시> 티켓을 큐에서 찾지 못했습니다라고 알리고 멈춥니다. 2개 이상이면 찾은 파일 이름을 전부 보여 주고 역시 아무것도 쓰지 않습니다. 이미 고아 파일이 생긴 상태이니, 이 절 끝에 걸어 둔 트러블슈팅 절을 따라 먼저 정리하세요.

세션에 닿았는지 확인하기

그 요구의 상세를 열고 진행 기록에서 지금 도는 단계를 보세요. 위 문장이 참견 줄로 떠 있으면 세션이 받은 것입니다(도는 세션에 말 걸기).

홈 대화가 참견을 보내지 못했다고 알려 오는 경우가 있습니다. 티켓에 inbox: 값이 비어 있거나 그 입구를 읽는 세션이 없을 때입니다. 이때는 요구 상세의 진행 기록 맨 아래 입력칸에 결정을 직접 넣으세요. 입력칸이 없으면 지금 도는 세션이 없는 것이고, 본문의 ## 추가 결정 - 홈 대화 절은 다음 세션이 읽습니다.

홈 대화는 티켓 파일에 셸 명령으로 덧붙여 쓰지 않습니다. 옛 경로에 덧붙이면 frontmatter 없는 파일이 새로 생기기 때문입니다. 그런 파일이 이미 있으면 보드가 경고합니다(트러블슈팅 §보드에 티켓 파일 이상 경고가 뜬다).

되묻기와 답변 대기

pm이 스스로 정할 수 없는 일을 만나면 추측하지 않습니다. 질문을 남기고 그 자리에서 작업을 멈춥니다. 어디까지를 스스로 정할지는 설정에서 고른 주도성 수준을 따릅니다.

그 요구는 보드에서 답변 대기 배지를 달고, 며칠이 지났는지가 배지에 같이 붙습니다. 요구 상세를 열면 스레드에 질문이 있고, 그 아래에 답을 쓰는 칸이 있습니다. 답을 쓰면 요구가 다시 대기로 돌아오고, 이번 pm 세션은 그 답을 함께 읽고 이어 갑니다. 두 번 이상 물을 수도 있습니다. 질문과 답이 번호로 짝지어 스레드에 쌓입니다.

답이 달릴 때까지 그 요구는 아무 워커도 가져가지 않습니다. 세션을 소모하면서 같은 질문을 반복하지 않도록 잠가 둡니다. 그래서 답변 대기는 처음부터 설계에 들어 있던 한 단계이고, 고장이 아닙니다. 그 자리에서 멈춘 채 답을 기다립니다.

주도성

되묻는 쪽은 pm만이 아닙니다. 어느 페르소나의 세션이든 스스로 정할 수 없으면 사람에게 묻습니다. 요구 티켓은 위에서 본 질문으로 묻고 작업 티켓은 본문에 ## 블록을 적고 멈춥니다. 이 통로는 수준과 상관없이 같습니다. 수준이 바꾸는 것은 무엇을 물을 일로 보느냐입니다.

수준은 설정 다이얼로그의 주도성에서 1부터 5까지 고릅니다(화면 소개 §설정 다이얼로그). 이 컴퓨터에 값 하나라서 등록된 프로젝트 전부에 같이 걸립니다. 한 번도 고치지 않았으면 4입니다. 바꾼 값은 다음에 띄우는 세션부터 먹고, 이미 도는 세션은 원래 수준으로 끝납니다.

아래 표에서 사람 몫 넷은 스펙끼리 모순될 때, 세션이 고칠 수 없는 영역을 건드려야 할 때, 새 외부 의존성이 필요할 때, push가 세 번 실패했을 때입니다. 화면 문구 열은 설정 패널의 숫자 옆에 뜨는 한 줄입니다.

수준화면 문구사람에게 묻는 것세션이 스스로 정하는 것
1사소한 선택까지 전부 되묻는다스펙과 ## Done when에 적히지 않은 선택 전부. 이름, 파일 위치, 구현 방식, 문구까지 묻습니다없습니다. 선택지가 하나뿐인 일만 진행합니다
2스펙에 드러나는 설계 선택을 되묻는다스펙, 화면, 동작, 파일 형식에 드러나는 선택과 대안이 둘 이상인 설계밖에서 보이지 않는 구현 세부
3모호한 요구와 막힘만 되묻는다모호한 요구, 사람 몫 넷, 엔진 수정 승인그 밖의 판단
4막힘과 엔진 수정 승인만 되묻는다사람 몫 넷과 엔진 수정 승인모호한 요구와 설계 선택. 목표에 가장 가까운 쪽을 골라 진행합니다
5되묻지 않고 스스로 정한다아래 예외 하나뿐입니다사람 몫 넷, 엔진 수정, 금지 명령, 큐 규칙까지 전부

1과 2는 큐를 느리게 합니다. 되묻기 한 번에 약 40분이 걸리며 답이 달릴 때까지 그 티켓은 멈춰 있습니다. deps로 그 티켓을 기다리는 티켓도 같이 멈춥니다. 설정 패널에서 1이나 2를 고르면 되묻기 한 번이 약 40분 걸립니다.가 뜨는 이유가 이것입니다.

4까지는 금지 명령을 지킵니다. push --force, reset --hard, stash, origin으로의 push가 그것입니다. 큐의 규칙(상태는 파일 이름으로만 나타내고 tickets/ 아래에 폴더를 만들지 않는 것 등)도 깨지 않습니다. 5는 이것까지 세션이 판단합니다. 목표에 가장 가깝다고 보면 강제 push도 하고 엔진도 고칩니다. 5를 고르기 전에 이 점을 알고 고르세요.

5에서도 사람에게 묻는 예외가 하나 있습니다. 비밀번호, 로그인, 결제 수단, 2단계 인증 코드처럼 사람만 가진 것이 없으면 진행할 수 없을 때입니다. 세션이 판단으로 채울 수 없는 것이라 5에서도 ## 블록을 적고 멈춥니다. 이 예외까지 없애는 것이 아래 오토파일럿입니다.

오토파일럿

설정의 주도성에서 5를 고르면 그 바로 아래 오토파일럿 스위치를 켤 수 있습니다. 4 이하에서는 스위치가 꺼진 채 눌리지 않습니다. 켜고 끄는 값도 수준과 마찬가지로 바로 저장되고 다음 디스패치부터 적용됩니다.

켜 두면 세션은 답변 대기를 만들지 않습니다. 질문도 ## 블록도 쓰지 않습니다. 비밀번호나 로그인이 필요해 보여도 멈추지 않고, 이 컴퓨터에 이미 있는 자격 증명, 다른 계정이나 도구, 우회 구현, 범위 축소까지 성공할 방법을 스스로 찾아 하나씩 시도합니다.

위험한 모드입니다. 세션이 묻지 않고 어떻게든 진행합니다. 5에서 받아들인 강제 push와 엔진 수정에 더해, 사람에게 물었어야 할 범위를 세션이 줄이거나 바꾼 채 완료로 닫을 수 있습니다. 이어받기 상한도 걸리지 않아서 끝나지 않는 일이 이어받기 티켓을 계속 낳을 수 있습니다. 켜 둔 동안에는 ## 결과 끝의 판단 줄(아래 §세션이 스스로 정한 것을 찾기)을 평소보다 자주 읽으세요.

시도할 방법이 정말로 하나도 남지 않으면 그때만 답변 대기를 만듭니다. 이 답변 대기는 보드에 빨간 오토파일럿 실패 배지로 뜹니다. 평범한 답변 대기와 무엇이 다르고 어떻게 답하는지는 티켓이 지나는 상태의 오토파일럿 실패 문단에 있습니다.

수준을 4 이하로 내리면 스위치를 켜 둔 채였어도 오토파일럿은 효력을 잃습니다. 다시 5로 올리면 켜 두었던 값이 그대로 돌아옵니다.

세션이 스스로 정한 것을 찾기

4와 5에서 세션은 스스로 고른 것을 무엇을 왜 골랐는지 한 줄씩 티켓의 ## 결과에 남깁니다. pm은 쪼개면서 정한 것을 스펙 문서의 그 절에 적습니다. 티켓 상세를 열어 ## 결과를 읽으면 됩니다.

5에서 규칙을 넘은 판단, 곧 금지 명령 실행, 큐 규칙 파기, 엔진 수정은 주도성 5 판단:으로 시작하는 줄로 따로 적습니다. 세션은 이 줄을 본문 사이에 흩어 두지 않고, 답변이나 ## 결과의 맨 끝에 정보 문자열이 autonomy인 코드 펜스 한 벌로 모읍니다. 화면에서는 본문 아래 상자 하나에 판단 줄만 모여 보입니다. 판단이 없는 회차에는 상자가 없습니다.

```autonomy
주도성 5 판단: 상한값을 낮추는 길 대신 워커 tick 락을 골랐다.
주도성 5 판단: GUI 템플릿은 이번 범위에서 뺐다.
```
markdown

펜스 안에서도 줄마다 머리말이 그대로 붙어 있어서 찾는 방법은 전과 같습니다. 큐 전체에서 한 번에 찾으려면 이렇게 칩니다.

grep -n '주도성 5 판단:' <루트>/tickets/*.md
bash

출력의 파일 이름 앞 여덟 자리가 티켓 해시입니다. 그 티켓 상세를 열어 앞뒤 맥락을 읽으세요.

쓰는 사람이 하는 일

요구를 넣으면 pm이 쪼개고, 쪼개진 티켓은 워커가 하나씩 가져갑니다. 작업이 막혀 누군가 물어 오면 답하시면 됩니다. 티켓을 직접 쓰거나 누구에게 넘길지 정하는 일은 없습니다.

직접 쓰고 싶어질 때는 있습니다. 버그 하나, 오타 하나처럼 쪼갤 것이 없는 일입니다. 그 방법은 티켓 직접 발행하기에 적어 두었습니다.

다음은 화면 소개입니다.