InfoGrab Docs

튜토리얼: GitLab으로 스크럼 촉진

요약

이 튜토리얼은 GitLab의 애자일 계획 및 추적 기능을 사용하여 핵심 스크럼 행사와 워크플로를 촉진하는 단계별 안내를 제공합니다. Martin Fowler의 Agile Fluency Model에 따르면 Scrum을 실천하는 팀은:

이 튜토리얼은 GitLab의 애자일 계획 및 추적 기능을 사용하여 핵심 스크럼 행사와 워크플로를 촉진하는 단계별 안내를 제공합니다. 그룹, 프로젝트, 보드 및 기타 기능을 의도적으로 설정하여 팀이 향상된 투명성, 협업 및 납품 주기를 실현할 수 있습니다.

Martin Fowler의 Agile Fluency Model에 따르면 Scrum을 실천하는 팀은:

...스폰서, 고객 및 사용자가 소프트웨어에서 볼 이점의 관점에서 생각하고 계획합니다.

그들은 매월 진행 상황을 시연하고, 더 많은 비즈니스 및 고객 가치를 제공하기 위해 프로세스와 작업 습관 개선을 정기적으로 반성함으로써 이를 달성합니다.

이 튜토리얼은 다음 주제를 다룹니다:

그룹 및 프로젝트 설정#

GitLab에서 스크럼 관행을 촉진하려면 먼저 그룹과 프로젝트의 기초 구조를 설정해야 합니다. 그룹을 사용하여 해당 그룹 아래에 중첩된 프로젝트가 상속할 수 있는 보드와 레이블을 만듭니다. 프로젝트에는 각 스프린트의 실제 작업 항목을 구성하는 이슈와 작업이 포함됩니다.

GitLab의 상속 모델 이해#

GitLab은 그룹이 프로젝트를 포함하는 계층적 구조를 가집니다. 그룹 수준에서 적용된 설정 및 구성은 하위 프로젝트로 연계되므로 여러 프로젝트 전체에서 레이블, 보드 및 이터레이션을 표준화할 수 있습니다:

Mermaid 다이어그램 (34줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
    accTitle: GitLab inheritance model diagram
    accDescr: Shows how groups, projects, issues, labels, milestones, iterations, tasks, and epics relate to one another in GitLab
Group -->|Contains| Project
Group -->|Contains| Epics
Group -->|Contains| Labels
Group -->|Contains| Boards
Group -->|Contains| Iterations
Group -->|Contains| Milestones
Group -->|Contains| Roadmaps
Project -->|Contains| Issues
Project -->|Contains| Templates
Project -->|Contains| Tasks
Project -->|Contains| Milestones
Project -->|Contains| Labels
Labels .->|Cascades To| Project
Issues .->|Rolls up to| Group
Iterations .->|Cascades to| Project
Milestones .->|Cascades to| Project
Templates .->|Cascades to| Project
Templates .->|Configured in| Group
Issues .->|Child of| Epics
Issues .->|Visible in| Boards
Issues .->|Visible in| Lists
Issues .->|Assigned to| Iterations
Issues .->|Assigned to| Milestones
Tasks .->|Child of| Issues
Tasks .->|Assigned to| Iterations
Tasks .->|Assigned to| Milestones
Epics .->|Visible in| Boards
Epics .->|Visible in| Roadmaps
Epics .-&gt;|Visible in| Lists</code></pre></details></div>
  • 그룹에는 하나 이상의 프로젝트, 에픽, 보드, 레이블 및 이터레이션이 포함됩니다. 그룹의 사용자 구성원 자격은 그룹의 프로젝트로 연계됩니다.
  • 그룹 또는 프로젝트에서 보드와 레이블을 만들 수 있습니다. 이 튜토리얼에서는 단일 그룹의 여러 프로젝트에 걸쳐 표준화된 계획 워크플로와 보고를 촉진하기 위해 그룹에서 만들어야 합니다.
  • 프로젝트로 연계되는 모든 객체는 해당 프로젝트의 이슈와 연결될 수 있습니다. 예를 들어 그룹의 레이블을 이슈에 적용할 수 있습니다.

그룹 만들기#

스크럼 활동을 위한 전용 그룹을 만듭니다. 이것은 여러 프로젝트에서 표준화하려는 보드와 레이블과 같은 구성 및 프로젝트를 위한 부모 컨테이너가 됩니다.

이 그룹은 일반적인 스크럼 주기에서 다양한 활동의 주요 위치가 됩니다. 보드, 기능(에픽), 스토리(이슈) 롤업 및 레이블이 포함됩니다.

그룹을 만들려면:

  1. 오른쪽 상단에서 Create new(+)와 New group을 선택합니다.
  2. Create group을 선택합니다.
  3. Group name 텍스트 상자에 그룹 이름을 입력합니다. 그룹 이름으로 사용할 수 없는 단어 목록은 예약된 이름을 참조하세요.
  4. Group URL 텍스트 상자에 네임스페이스에 사용되는 그룹 경로를 입력합니다.
  5. 그룹의 Visibility level을 선택합니다.
  6. 선택 사항. GitLab 경험을 개인화하려면:
    • Role 드롭다운 목록에서 역할을 선택합니다.
    • **Who will be using this group?**에서 옵션을 선택합니다.
    • What will you use this group for? 드롭다운 목록에서 옵션을 선택합니다.
  7. 선택 사항. 그룹에 구성원을 초대하려면 Email 1 텍스트 상자에 초대하려는 사용자의 이메일 주소를 입력합니다. 더 많은 사용자를 초대하려면 Invite another member를 선택하고 사용자의 이메일 주소를 입력합니다.
  8. Create group을 선택합니다.

프로젝트 만들기#

만든 그룹에서 하나 이상의 프로젝트를 만듭니다. 프로젝트에는 부모 그룹으로 롤업되는 스토리가 포함됩니다.

빈 프로젝트를 만들려면:

  1. 오른쪽 상단에서 Create new(+)와 New project/repository를 선택합니다.
  2. Create blank project를 선택합니다.
  3. 프로젝트 세부 정보를 입력합니다:
    • Project name 필드에 프로젝트 이름을 입력합니다. 프로젝트 이름 제한 사항을 참조하세요.
    • Project slug 필드에 프로젝트 경로를 입력합니다. GitLab 인스턴스는 슬러그를 프로젝트의 URL 경로로 사용합니다. 슬러그를 변경하려면 먼저 프로젝트 이름을 입력한 다음 슬러그를 변경합니다.
    • 사용자의 프로젝트 보기 및 액세스 권한을 수정하려면 Visibility Level을 변경합니다.
    • Git 저장소가 초기화되고, 기본 브랜치가 있으며, 복제할 수 있도록 README 파일을 만들려면 Initialize repository with a README를 선택합니다.
  4. Create project를 선택합니다.

스크럼 라이프사이클의 다양한 단계를 지원하는 범위 레이블 만들기#

다음으로, 만든 그룹에서 이슈를 분류하기 위해 이슈에 추가할 레이블을 만듭니다.

이를 위한 최선의 도구는 상호 배타적인 속성을 설정하는 데 사용할 수 있는 범위 레이블입니다.

범위 레이블 이름의 이중 콜론(::)은 같은 범위의 두 레이블이 함께 사용되는 것을 방지합니다. 예를 들어 이미 status::ready가 있는 이슈에 status::in progress 레이블을 추가하면 이전 레이블이 제거됩니다.

각 레이블을 만들려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Manage > Labels를 선택합니다.
  3. New label을 선택합니다.
  4. Title 필드에 레이블 이름을 입력합니다. priority::now로 시작합니다.
  5. 선택 사항. 사용 가능한 색상에서 선택하거나 Background color 필드에 특정 색상의 16진수 색상 값을 입력하여 색상을 선택합니다.
  6. Create label을 선택합니다.

다음 단계를 반복하여 필요한 모든 레이블을 만듭니다:

  • Priority: 기능 수준의 릴리스 우선순위 지정을 촉진하기 위해 에픽 보드에 사용합니다.
    • priority::now
    • priority::next
    • priority::later
  • Status: 이슈 보드에서 스토리의 전반적인 개발 라이프사이클의 현재 단계를 이해하기 위해 사용합니다.
    • status::triage
    • status::refine
    • status::ready
    • status::in progress
    • status::in review
    • status::acceptance
    • status::done
  • Type: 일반적으로 단일 이터레이션으로 가져오는 다양한 유형의 작업을 나타내기 위해 사용합니다:
    • type::story
    • type::bug
    • type::maintenance

이터레이션 케이던스 만들기#

GitLab에서 스프린트는 이터레이션이라고 합니다. 이터레이션 케이던스에는 이슈 계획 및 보고를 위한 개별적이고 순차적인 이터레이션 타임박스가 포함됩니다. 레이블과 마찬가지로 이터레이션은 그룹, 서브그룹 및 프로젝트 계층으로 연계됩니다. 따라서 만든 그룹에서 이터레이션 케이던스를 만듭니다.

전제 조건:

  • 그룹에 대해 Reporter, Developer, Maintainer 또는 Owner 역할이 있어야 합니다.

이터레이션 케이던스를 만들려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Iterations를 선택합니다.
  3. New iteration cadence를 선택합니다.
  4. 이터레이션 케이던스의 제목과 설명을 입력합니다.
  5. Enable automatic scheduling 체크박스가 선택되어 있는지 확인합니다.
  6. 자동 스케줄링을 사용하기 위한 필수 필드를 작성합니다.
    • 이터레이션 케이던스의 자동화 시작 날짜를 선택합니다. 이터레이션은 시작 날짜와 같은 요일에 시작하도록 예약됩니다.
    • Duration 드롭다운 목록에서 2를 선택합니다.
    • Upcoming iterations 드롭다운 목록에서 4를 선택합니다.
    • Enable roll over 체크박스를 선택합니다.
  7. Create cadence를 선택합니다. 케이던스 목록 페이지가 열립니다.

이렇게 이터레이션 케이던스를 구성하면:

  • 각 스프린트는 2주 길이입니다.
  • GitLab은 미래에 4개의 스프린트를 자동으로 만듭니다.
  • 하나의 스프린트에서 완료되지 않은 이슈는 현재 스프린트가 종료될 때 다음 스프린트로 자동으로 재할당됩니다.

Automatic scheduling을 비활성화하고 케이던스에서 수동으로 이터레이션을 만들고 관리할 수도 있습니다.

기능 백로그 관리#

기능 백로그는 에픽 형태로 아이디어와 원하는 기능을 캡처합니다. 이 백로그를 세밀화함에 따라 에픽이 우선순위가 지정되어 다가오는 스프린트로 흘러들어갑니다. 이 섹션은 백로그 관리를 촉진하는 에픽 보드 만들기와 첫 번째 기능 에픽 작성을 다룹니다.

작업 구조화 방법 결정#

GitLab은 다양한 백로그 관리 방식을 지원하도록 확장할 수 있습니다. 이 튜토리얼에서는 다음과 같은 방식으로 산출물을 구조화합니다:

Mermaid 다이어그램 (7줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
    accTitle: Deliverables structure
    accDescr: Flowchart of features (epics) to job stories (issues) to implementation steps (tasks)
Epic["Feature (Epic)"] --&gt; Issue["Job Story (Issue)"]
Issue --&gt; Task["Implementation Step (Task)"]</code></pre></details></div>
  • 에픽은 팀이 단일 이터레이션에서 납품할 수 있는 기능을 나타냅니다.

  • 각 에픽에는 많은 작업 스토리가 포함됩니다.

    • 스토리는 실질적인 고객 가치를 제공하고, 명시적인 승인 기준을 포함하며, 개인이 하루 또는 이틀 안에 완료할 수 있을 만큼 작아야 합니다.
    • 팀으로서 스프린트당 4~10개의 스토리를 완료할 수 있어야 합니다.
  • 기능을 분리하는 많은 전략이 있지만, 훌륭한 전략은 사용자가 목표를 달성하기 위해 취해야 하는 개별적이고 독립적인 스토리로 기능을 수직으로 분할하는 것입니다.

    단일 스토리를 고객에게 제공할 수 없을 수도 있지만, 팀은 프로덕션의 기능 플래그를 사용하거나 스테이징 환경에서 각 스토리를 테스트하고 상호 작용할 수 있어야 합니다. 이는 스토리의 진행 상황에 대한 이해 관계자의 가시성을 제공할 뿐만 아니라, 더 복잡한 기능을 접근 가능한 개발 목표로 분해하는 메커니즘이기도 합니다.

  • 스토리의 복잡성에 따라 작업을 사용하여 스토리를 개발자가 스토리를 완료하기 위해 취해야 하는 개별 구현 단계로 분해할 수 있습니다.

시간적 관점에서 다음 가이드라인에 따라 작업 항목의 크기와 범위를 정합니다:

  • 기능은 단일 이터레이션에서 완료할 수 있습니다.
  • 스토리는 며칠 안에 완료할 수 있습니다.
  • 작업은 몇 시간에서 하루 안에 완료할 수 있습니다.

예제: 기능을 수직으로 분할#

다음은 최종 사용자의 여정을 기반으로 기능을 수직으로 분할된 작업 스토리로 나누는 예제입니다:

Mermaid 다이어그램 (8줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
  accTitle: Slicing a feature
  accDescr: Use the end user's journey to identify slices of work to be completed in iterations

Epic["Epic: When using the application,<br>I need to create an account,<br> so I can use the application features"] --> Issue1["Issue: When creating my account,<br> I need to specify my email address,<br> so I can receive future updates from the application"] Epic --> Issue2["Issue: When creating my account,<br> I need to specify a password,<br> so my account remains secure"] Epic --> Issue3["Issue: When creating my account<br> and entering the required info,<br> I need to finalize creating my account,<br> so I can sign in"]

애플리케이션의 수정되지 않은 계정 가입 기능을 가져와 세 가지 개별 스토리로 분해했습니다:

  1. 이메일 주소 입력.
  2. 비밀번호 입력.
  3. 계정 생성을 실행하는 버튼 선택.

기능을 스토리로 분해한 후 스토리를 개별 구현 단계로 더 분해할 수 있습니다:

Mermaid 다이어그램 (10줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
  accTitle: Break the story down further
  accDescr: Split apart a story into smaller steps

Issue1["Issue: When creating my account,<br> I need to specify my email address,<br> so I can receive future updates from the application"] Issue1 --> Task2["Task: Backend<br> Validate email formatting"] Issue1 --> Task3["Task: Backend<br> API endpoint to accept<br> POST request from client"] Issue1 --> Task4["Task: Frontend<br> Display email input"] Issue1 --> Task5["Task: Frontend<br> Display error message when validation fails"]

릴리스 계획 보드 설정#

산출물 구조를 정의했습니다. 다음 단계는 기능 백로그를 개발하고 유지 관리하는 데 사용할 에픽 보드를 만드는 것입니다.

새 에픽 보드를 만들려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Epic boards를 선택합니다.
  3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록을 선택합니다.
  4. Create new board를 선택합니다.
  5. 새 보드의 제목을 입력합니다: Release Planning.
  6. Create board를 선택합니다.

다음으로 priority::later, priority::nextpriority::now 레이블에 대한 목록을 만듭니다.

새 목록을 만들려면:

  1. 보드 오른쪽 상단에서 Create list를 선택합니다.
  2. New list 열에서 Select a label 드롭다운 목록을 확장하고 목록 범위로 사용할 레이블을 선택합니다.
  3. Add to board를 선택합니다.

왼쪽에서 오른쪽으로 보드를 통해 기능을 이동하는 것을 촉진하기 위해 이 목록들을 사용합니다.

릴리스 계획 보드의 각 목록을 사용하여 다음 시간 지평을 나타냅니다:

  • Open: 아직 우선순위 지정 준비가 되지 않은 기능.
  • Later: 이후 릴리스에 우선순위가 지정될 기능.
  • Next: 다음 릴리스에 잠정적으로 계획된 기능.
  • Now: 현재 릴리스에 우선순위가 지정된 기능.
  • Closed: 완료되거나 취소된 기능.

첫 번째 에픽 만들기#

다음으로 priority::now 목록에 새 에픽을 만듭니다:

  1. priority::now 목록 상단에서 New epic(+) 아이콘을 선택합니다.

  2. 새 에픽의 제목을 입력합니다:

    When using the application, I need to create an account, so that I can use the application features.
    
  3. Create epic을 선택합니다.

이 단계를 완료하면 보드가 다음과 같이 표시됩니다:

에픽 보드 예제

이제 Release Planning 보드를 사용하여 백로그를 빠르게 구축할 수 있습니다.

많은 기능을 개략적으로 만들고 Now, Next, Later 목록에 우선순위를 지정합니다. 다음으로 각 스토리를 스토리와 작업으로 더 세분화하는 데 시간을 투자합니다.

목록 내에서 또는 목록 간에 기능 에픽을 재정렬하려면 에픽 카드를 드래그합니다. 목록의 맨 위 또는 맨 아래로 카드를 이동할 수도 있습니다.

스토리 백로그 관리#

에픽으로 기능을 정의했으면 다음 단계는 해당 기능을 이슈로서 세분화된 수직 분할로 나누는 것입니다. 그런 다음 전용 백로그 보드에서 이터레이션 전반에 걸쳐 해당 이슈를 세밀화하고 순서를 정합니다.

기능을 스토리로 분해#

효율적인 스프린트 계획 회의를 위해 미리 기능을 수직으로 분할된 스토리로 분해합니다. 이전 단계에서 첫 번째 기능을 만들었습니다. 이것을 스토리로 분해해 보겠습니다.

첫 번째 스토리를 만들려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.

  2. 왼쪽 사이드바에서 Plan > Epic boards를 선택합니다.

  3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록에 Release Planning이 표시되는지 확인합니다. 그렇지 않으면 드롭다운 목록에서 해당 보드를 선택합니다.

  4. 에픽 카드의 제목을 클릭하여 에픽을 엽니다.

  5. Child issues and epics 섹션에서 Add > Add a new issue를 선택합니다.

  6. 이슈에 다음 제목을 입력합니다:

    When creating my account, I need to specify my email address so that I can receive future updates from the application
    
  7. Project 드롭다운 목록에서 이슈를 만들 프로젝트를 선택합니다.

  8. Create issue를 선택합니다.

  9. 다른 두 수직 분할에 대해 이 과정을 반복합니다:

    When creating my account, I need to specify a password so that my account remains secure
    
    When creating my account and entering the required information, I need to finalize creating my account so that I can sign in
    

스토리 백로그 세밀화#

이전 단계에서 기능을 완료하는 데 필요한 사용자 스토리로 분해했습니다. 다음으로 스토리 백로그를 관리하고 세밀화하기 위한 표준 위치로 사용할 이슈 보드를 설정합니다.

그룹에서 Backlog라는 새 이슈 보드를 만듭니다. 이 보드를 사용하여 스토리를 다가오는 스프린트(이터레이션)로 순서를 정하고 예약합니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Issue boards를 선택합니다.
  3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록을 선택합니다.
  4. Create new board를 선택합니다.
  5. 새 보드의 제목을 입력합니다: Backlog.
  6. Create board를 선택합니다.

보드를 만든 후 다가오는 각 이터레이션에 대한 새 목록을 만듭니다:

  1. 이슈 보드 페이지 오른쪽 상단에서 Create list를 선택합니다.
  2. 나타나는 열에서 Scope 아래에 Iteration을 선택합니다.
  3. Value 드롭다운 목록에서 이터레이션 중 하나를 선택합니다.
  4. Add to board를 선택합니다.
  5. 다른 다가오는 이터레이션에 대해 이전 단계를 반복합니다.

그런 다음 이터레이션이 끝나면 완료된 이터레이션 목록을 제거하고 케이던스 설정에 따라 자동으로 만들어진 새 미래 이터레이션에 대한 새 목록을 추가해야 합니다.

이 시점에서 스토리는 아직 추정되거나 작업으로 세밀화되지 않았습니다. 세밀화를 위해 표시합니다:

  1. 보드에서 각 이슈의 카드를 선택하고 status::refine 레이블을 적용합니다:
    1. 사이드바의 Labels 섹션에서 Edit를 선택합니다.
    2. Select labels 목록에서 status::refine 레이블을 선택합니다.
    3. 레이블 섹션 외부의 아무 곳이나 선택합니다.
  2. 세 가지 스토리를 원하는 다가오는 스프린트로 드래그하여 해당 스프린트 타임박스에 스토리를 할당합니다.

이 튜토리얼에서 이 시점까지 Backlog 보드가 다음과 같이 표시됩니다:

이터레이션 열에 걸쳐 사용자 스토리가 분배된 백로그 보드.

실제로 이 보드를 사용하여 많은 스토리를 다가오는 이터레이션으로 순서를 정합니다. 백로그가 커지고 여러 기능에 걸쳐 수십 개의 스토리가 있을 때 Group by epic을 활성화하면 해당 기능 에픽과 관련된 스토리를 볼 수 있습니다. 스토리를 그룹화하면 다가오는 스프린트로 순서를 정하기가 더 쉽습니다.

스프린트 계획 행사#

백로그가 준비되면 다가오는 스프린트를 계획할 시간입니다. GitLab에서 스프린트 계획 회의를 촉진하기 위해 동기적 및 비동기적 방법을 사용할 수 있습니다.

동기적 계획#

스프린트 계획 행사 시간이 되면 팀과 함께 Backlog 보드를 열고 각 스토리를 처리합니다. 현재 스프린트의 마지막 날에 다음 스프린트 계획을 시작해야 합니다. 각 이슈를 논의하면서:

  • 승인 기준을 검토하고 협업합니다. 체크리스트나 목록 항목을 사용하여 이슈 설명에 이것을 캡처할 수 있습니다.

  • 각 구현 단계에 대해 스토리를 작업으로 더 분해합니다.

  • 이슈의 스토리 포인트 노력이나 복잡성을 추정하고 이 값을 이슈의 Weight 필드에 설정합니다.

  • 팀이 이슈의 범위에 만족하고 스토리 포인트 값에 동의한 후 이슈에 status::ready 레이블을 적용합니다:

    1. 사이드바의 Labels 섹션에서 Edit를 선택합니다.
    2. Select labels 목록에서 status::ready 레이블을 선택합니다.
    3. 레이블 섹션 외부의 아무 곳이나 선택합니다.

다가오는 이터레이션의 모든 이슈를 순환한 후 스프린트 계획이 완료됩니다!

팀의 속도를 스프린트 커밋에 포함하는 것을 기억합니다. 각 이터레이션 목록 상단에서 각 스프린트에 할당된 총 스토리 포인트(가중치) 수를 찾을 수 있습니다. 이전 스프린트에서 넘어올 가능성이 있는 스토리 포인트도 확인하는 것이 좋습니다.

비동기적 계획#

동기 회의를 개최하는 대신 이슈를 사용하여 스프린트 계획을 실행합니다.

비동기 스프린트 계획의 특성상 현재 스프린트 종료 며칠 전에 시작해야 합니다. 모든 팀원이 기여하고 협업할 적절한 시간을 제공합니다.

  1. Backlog 이슈 보드를 엽니다:

    1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
    2. Plan > Issue boards를 선택합니다.
    3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록을 선택합니다.
    4. Backlog를 선택합니다.
  2. 다가오는 스프린트 목록에서 Create new issue(+)를 선택합니다.

  3. 이슈의 제목을 입력합니다: Release Planning.

  4. Create issue를 선택합니다.

  5. 이슈를 열고 다가오는 스프린트에 할당된 각 스토리에 대한 토론 스레드를 만듭니다.

    이슈 URL에 +를 추가하면 제목이 자동으로 펼쳐집니다. 이슈 URL에 +s를 추가하면 제목, 마일스톤 및 담당자가 자동으로 펼쳐집니다. 체크박스를 만들기 위해 이러한 스레드에 다음 템플릿을 사용할 수 있습니다:

    ## https://gitlab.example.com/my-group/application-b/-/issues/5+
    
    - [ ] Acceptance criteria defined
    - [ ] Weight set
    - [ ] Implementation steps (tasks) created
    

    예를 들어:

    체크리스트 항목이 있는 스프린트 계획 스토리에 대한 세 개의 토론 스레드.

  6. 모든 스토리에 스레드가 생기면 이슈 설명을 편집하고 각 팀원을 언급합니다. 팀원을 언급하면 각자의 할 일 목록에 자동으로 할 일 항목이 생성됩니다.

  7. 그런 다음 다가오는 스프린트 시작 전에 팀원들이 비동기적으로 다음을 수행해야 합니다:

    • 각 이슈를 논의하고, 질문하고, 계획된 각 이슈의 승인 기준에 동의하기 위해 협업합니다.
    • 스토리 포인트(가중치)가 무엇이어야 하는지에 대한 투표를 위해 :one:, :two:, :three:와 같은 반응 이모지를 사용합니다. 팀원들이 다른 스토리 포인트 값을 설정하면 합의가 이루어질 때까지 추가로 논의할 수 있는 좋은 기회입니다. 다양한 반응을 평균하여 스토리 포인트를 맞출 수도 있습니다.
    • 수직 분할(이슈)을 구현 단계(작업)로 분해합니다.
  8. 각 스토리 토론이 마무리되면 승인 기준의 변경 사항으로 이슈를 업데이트하고 Weight 필드에 스토리 포인트 값을 설정합니다.

  9. 스토리가 업데이트된 후 각 이슈에 status::ready 레이블을 추가합니다.

  10. 그런 다음 해당 수직 분할의 계획이 완료되었음을 알리기 위해 계획 이슈의 각 토론 스레드를 해결합니다.

스프린트 진행 상황 추적#

스프린트 동안 작업을 시각화하고 관리하기 위해 팀은 현재 스프린트 범위를 나타내는 전용 이슈 보드를 만들 수 있습니다. 이 보드는 팀의 진행 상황과 잠재적인 차단 요소에 대한 투명성을 제공합니다. 팀은 또한 번다운 차트를 통해 추가적인 가시성을 위해 이터레이션 분석을 사용할 수 있습니다.

현재 스프린트를 위한 보드 만들기#

그룹에서 Current Sprint라는 새 이슈 보드를 만듭니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Issue boards를 선택합니다.
  3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록을 선택합니다.
  4. Create new board를 선택합니다.
  5. 새 보드의 제목을 입력합니다: Current Sprint.
  6. Scope 옆에서 Expand를 선택합니다.
  7. Iteration 옆에서 Edit를 선택합니다.
  8. 이터레이션 케이던스 아래에서 Current를 선택합니다.
  9. Create board를 선택합니다.

보드는 이제 현재 이터레이션에 할당된 이슈만 표시하도록 필터링됩니다. 활성 스프린트에서 팀의 진행 상황을 시각화하는 데 사용합니다.

다음으로 모든 상태에 대한 레이블 목록을 만듭니다:

  1. 이슈 보드 페이지 오른쪽 상단에서 Create list를 선택합니다.

  2. 나타나는 열에서 Scope 아래에 Label을 선택합니다.

  3. Value 드롭다운 목록에서 다음 레이블 중 하나를 선택합니다:

    • status::refine: 이슈가 개발되기 전에 추가 세밀화가 필요합니다.
    • status::ready: 이슈가 개발 준비가 되었습니다.
    • status::in progress: 이슈가 개발 중입니다.
    • status::review: 이슈의 해당 MR이 코드 검토를 거치고 있습니다.
    • status::acceptance: 이슈가 이해 관계자 승인 및 QA 테스트 준비가 되었습니다.
    • status::done: 이슈의 승인 기준이 충족되었습니다.
  4. Add to board를 선택합니다.

  5. 다른 레이블에 대해 이전 단계를 반복합니다.

그런 다음 스프린트가 진행되면 이슈를 다른 목록으로 드래그하여 status:: 레이블을 변경합니다.

스프린트의 번다운 및 번업 차트 보기#

스프린트 동안 이터레이션 보고서를 검토하면 도움이 됩니다. 이터레이션 보고서는 진행 지표와 번다운 및 번업 차트를 제공합니다.

이터레이션 보고서를 보려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Iterations를 선택하고 이터레이션 케이던스를 선택합니다.
  3. 이터레이션을 선택합니다.

튜토리얼: GitLab으로 스크럼 촉진

Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

이 튜토리얼은 GitLab의 애자일 계획 및 추적 기능을 사용하여 핵심 스크럼 행사와 워크플로를 촉진하는 단계별 안내를 제공합니다. Martin Fowler의 Agile Fluency Model에 따르면 Scrum을 실천하는 팀은:

이 튜토리얼은 GitLab의 애자일 계획 및 추적 기능을 사용하여 핵심 스크럼 행사와 워크플로를 촉진하는 단계별 안내를 제공합니다. 그룹, 프로젝트, 보드 및 기타 기능을 의도적으로 설정하여 팀이 향상된 투명성, 협업 및 납품 주기를 실현할 수 있습니다.

Martin Fowler의 Agile Fluency Model에 따르면 Scrum을 실천하는 팀은:

...스폰서, 고객 및 사용자가 소프트웨어에서 볼 이점의 관점에서 생각하고 계획합니다.

그들은 매월 진행 상황을 시연하고, 더 많은 비즈니스 및 고객 가치를 제공하기 위해 프로세스와 작업 습관 개선을 정기적으로 반성함으로써 이를 달성합니다.

이 튜토리얼은 다음 주제를 다룹니다:

그룹 및 프로젝트 설정#

GitLab에서 스크럼 관행을 촉진하려면 먼저 그룹과 프로젝트의 기초 구조를 설정해야 합니다. 그룹을 사용하여 해당 그룹 아래에 중첩된 프로젝트가 상속할 수 있는 보드와 레이블을 만듭니다. 프로젝트에는 각 스프린트의 실제 작업 항목을 구성하는 이슈와 작업이 포함됩니다.

GitLab의 상속 모델 이해#

GitLab은 그룹이 프로젝트를 포함하는 계층적 구조를 가집니다. 그룹 수준에서 적용된 설정 및 구성은 하위 프로젝트로 연계되므로 여러 프로젝트 전체에서 레이블, 보드 및 이터레이션을 표준화할 수 있습니다:

Mermaid 다이어그램 (34줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
    accTitle: GitLab inheritance model diagram
    accDescr: Shows how groups, projects, issues, labels, milestones, iterations, tasks, and epics relate to one another in GitLab
Group --&gt;|Contains| Project
Group --&gt;|Contains| Epics
Group --&gt;|Contains| Labels
Group --&gt;|Contains| Boards
Group --&gt;|Contains| Iterations
Group --&gt;|Contains| Milestones
Group --&gt;|Contains| Roadmaps
Project --&gt;|Contains| Issues
Project --&gt;|Contains| Templates
Project --&gt;|Contains| Tasks
Project --&gt;|Contains| Milestones
Project --&gt;|Contains| Labels
Labels .-&gt;|Cascades To| Project
Issues .-&gt;|Rolls up to| Group
Iterations .-&gt;|Cascades to| Project
Milestones .-&gt;|Cascades to| Project
Templates .-&gt;|Cascades to| Project
Templates .-&gt;|Configured in| Group
Issues .-&gt;|Child of| Epics
Issues .-&gt;|Visible in| Boards
Issues .-&gt;|Visible in| Lists
Issues .-&gt;|Assigned to| Iterations
Issues .-&gt;|Assigned to| Milestones
Tasks .-&gt;|Child of| Issues
Tasks .-&gt;|Assigned to| Iterations
Tasks .-&gt;|Assigned to| Milestones
Epics .-&gt;|Visible in| Boards
Epics .-&gt;|Visible in| Roadmaps
Epics .-&gt;|Visible in| Lists</code></pre></details></div>
  • 그룹에는 하나 이상의 프로젝트, 에픽, 보드, 레이블 및 이터레이션이 포함됩니다. 그룹의 사용자 구성원 자격은 그룹의 프로젝트로 연계됩니다.
  • 그룹 또는 프로젝트에서 보드와 레이블을 만들 수 있습니다. 이 튜토리얼에서는 단일 그룹의 여러 프로젝트에 걸쳐 표준화된 계획 워크플로와 보고를 촉진하기 위해 그룹에서 만들어야 합니다.
  • 프로젝트로 연계되는 모든 객체는 해당 프로젝트의 이슈와 연결될 수 있습니다. 예를 들어 그룹의 레이블을 이슈에 적용할 수 있습니다.

그룹 만들기#

스크럼 활동을 위한 전용 그룹을 만듭니다. 이것은 여러 프로젝트에서 표준화하려는 보드와 레이블과 같은 구성 및 프로젝트를 위한 부모 컨테이너가 됩니다.

이 그룹은 일반적인 스크럼 주기에서 다양한 활동의 주요 위치가 됩니다. 보드, 기능(에픽), 스토리(이슈) 롤업 및 레이블이 포함됩니다.

그룹을 만들려면:

  1. 오른쪽 상단에서 Create new(+)와 New group을 선택합니다.
  2. Create group을 선택합니다.
  3. Group name 텍스트 상자에 그룹 이름을 입력합니다. 그룹 이름으로 사용할 수 없는 단어 목록은 예약된 이름을 참조하세요.
  4. Group URL 텍스트 상자에 네임스페이스에 사용되는 그룹 경로를 입력합니다.
  5. 그룹의 Visibility level을 선택합니다.
  6. 선택 사항. GitLab 경험을 개인화하려면:
    • Role 드롭다운 목록에서 역할을 선택합니다.
    • **Who will be using this group?**에서 옵션을 선택합니다.
    • What will you use this group for? 드롭다운 목록에서 옵션을 선택합니다.
  7. 선택 사항. 그룹에 구성원을 초대하려면 Email 1 텍스트 상자에 초대하려는 사용자의 이메일 주소를 입력합니다. 더 많은 사용자를 초대하려면 Invite another member를 선택하고 사용자의 이메일 주소를 입력합니다.
  8. Create group을 선택합니다.

프로젝트 만들기#

만든 그룹에서 하나 이상의 프로젝트를 만듭니다. 프로젝트에는 부모 그룹으로 롤업되는 스토리가 포함됩니다.

빈 프로젝트를 만들려면:

  1. 오른쪽 상단에서 Create new(+)와 New project/repository를 선택합니다.
  2. Create blank project를 선택합니다.
  3. 프로젝트 세부 정보를 입력합니다:
    • Project name 필드에 프로젝트 이름을 입력합니다. 프로젝트 이름 제한 사항을 참조하세요.
    • Project slug 필드에 프로젝트 경로를 입력합니다. GitLab 인스턴스는 슬러그를 프로젝트의 URL 경로로 사용합니다. 슬러그를 변경하려면 먼저 프로젝트 이름을 입력한 다음 슬러그를 변경합니다.
    • 사용자의 프로젝트 보기 및 액세스 권한을 수정하려면 Visibility Level을 변경합니다.
    • Git 저장소가 초기화되고, 기본 브랜치가 있으며, 복제할 수 있도록 README 파일을 만들려면 Initialize repository with a README를 선택합니다.
  4. Create project를 선택합니다.

스크럼 라이프사이클의 다양한 단계를 지원하는 범위 레이블 만들기#

다음으로, 만든 그룹에서 이슈를 분류하기 위해 이슈에 추가할 레이블을 만듭니다.

이를 위한 최선의 도구는 상호 배타적인 속성을 설정하는 데 사용할 수 있는 범위 레이블입니다.

범위 레이블 이름의 이중 콜론(::)은 같은 범위의 두 레이블이 함께 사용되는 것을 방지합니다. 예를 들어 이미 status::ready가 있는 이슈에 status::in progress 레이블을 추가하면 이전 레이블이 제거됩니다.

각 레이블을 만들려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Manage > Labels를 선택합니다.
  3. New label을 선택합니다.
  4. Title 필드에 레이블 이름을 입력합니다. priority::now로 시작합니다.
  5. 선택 사항. 사용 가능한 색상에서 선택하거나 Background color 필드에 특정 색상의 16진수 색상 값을 입력하여 색상을 선택합니다.
  6. Create label을 선택합니다.

다음 단계를 반복하여 필요한 모든 레이블을 만듭니다:

  • Priority: 기능 수준의 릴리스 우선순위 지정을 촉진하기 위해 에픽 보드에 사용합니다.
    • priority::now
    • priority::next
    • priority::later
  • Status: 이슈 보드에서 스토리의 전반적인 개발 라이프사이클의 현재 단계를 이해하기 위해 사용합니다.
    • status::triage
    • status::refine
    • status::ready
    • status::in progress
    • status::in review
    • status::acceptance
    • status::done
  • Type: 일반적으로 단일 이터레이션으로 가져오는 다양한 유형의 작업을 나타내기 위해 사용합니다:
    • type::story
    • type::bug
    • type::maintenance

이터레이션 케이던스 만들기#

GitLab에서 스프린트는 이터레이션이라고 합니다. 이터레이션 케이던스에는 이슈 계획 및 보고를 위한 개별적이고 순차적인 이터레이션 타임박스가 포함됩니다. 레이블과 마찬가지로 이터레이션은 그룹, 서브그룹 및 프로젝트 계층으로 연계됩니다. 따라서 만든 그룹에서 이터레이션 케이던스를 만듭니다.

전제 조건:

  • 그룹에 대해 Reporter, Developer, Maintainer 또는 Owner 역할이 있어야 합니다.

이터레이션 케이던스를 만들려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Iterations를 선택합니다.
  3. New iteration cadence를 선택합니다.
  4. 이터레이션 케이던스의 제목과 설명을 입력합니다.
  5. Enable automatic scheduling 체크박스가 선택되어 있는지 확인합니다.
  6. 자동 스케줄링을 사용하기 위한 필수 필드를 작성합니다.
    • 이터레이션 케이던스의 자동화 시작 날짜를 선택합니다. 이터레이션은 시작 날짜와 같은 요일에 시작하도록 예약됩니다.
    • Duration 드롭다운 목록에서 2를 선택합니다.
    • Upcoming iterations 드롭다운 목록에서 4를 선택합니다.
    • Enable roll over 체크박스를 선택합니다.
  7. Create cadence를 선택합니다. 케이던스 목록 페이지가 열립니다.

이렇게 이터레이션 케이던스를 구성하면:

  • 각 스프린트는 2주 길이입니다.
  • GitLab은 미래에 4개의 스프린트를 자동으로 만듭니다.
  • 하나의 스프린트에서 완료되지 않은 이슈는 현재 스프린트가 종료될 때 다음 스프린트로 자동으로 재할당됩니다.

Automatic scheduling을 비활성화하고 케이던스에서 수동으로 이터레이션을 만들고 관리할 수도 있습니다.

기능 백로그 관리#

기능 백로그는 에픽 형태로 아이디어와 원하는 기능을 캡처합니다. 이 백로그를 세밀화함에 따라 에픽이 우선순위가 지정되어 다가오는 스프린트로 흘러들어갑니다. 이 섹션은 백로그 관리를 촉진하는 에픽 보드 만들기와 첫 번째 기능 에픽 작성을 다룹니다.

작업 구조화 방법 결정#

GitLab은 다양한 백로그 관리 방식을 지원하도록 확장할 수 있습니다. 이 튜토리얼에서는 다음과 같은 방식으로 산출물을 구조화합니다:

Mermaid 다이어그램 (7줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
    accTitle: Deliverables structure
    accDescr: Flowchart of features (epics) to job stories (issues) to implementation steps (tasks)
Epic["Feature (Epic)"] --&gt; Issue["Job Story (Issue)"]
Issue --&gt; Task["Implementation Step (Task)"]</code></pre></details></div>
  • 에픽은 팀이 단일 이터레이션에서 납품할 수 있는 기능을 나타냅니다.

  • 각 에픽에는 많은 작업 스토리가 포함됩니다.

    • 스토리는 실질적인 고객 가치를 제공하고, 명시적인 승인 기준을 포함하며, 개인이 하루 또는 이틀 안에 완료할 수 있을 만큼 작아야 합니다.
    • 팀으로서 스프린트당 4~10개의 스토리를 완료할 수 있어야 합니다.
  • 기능을 분리하는 많은 전략이 있지만, 훌륭한 전략은 사용자가 목표를 달성하기 위해 취해야 하는 개별적이고 독립적인 스토리로 기능을 수직으로 분할하는 것입니다.

    단일 스토리를 고객에게 제공할 수 없을 수도 있지만, 팀은 프로덕션의 기능 플래그를 사용하거나 스테이징 환경에서 각 스토리를 테스트하고 상호 작용할 수 있어야 합니다. 이는 스토리의 진행 상황에 대한 이해 관계자의 가시성을 제공할 뿐만 아니라, 더 복잡한 기능을 접근 가능한 개발 목표로 분해하는 메커니즘이기도 합니다.

  • 스토리의 복잡성에 따라 작업을 사용하여 스토리를 개발자가 스토리를 완료하기 위해 취해야 하는 개별 구현 단계로 분해할 수 있습니다.

시간적 관점에서 다음 가이드라인에 따라 작업 항목의 크기와 범위를 정합니다:

  • 기능은 단일 이터레이션에서 완료할 수 있습니다.
  • 스토리는 며칠 안에 완료할 수 있습니다.
  • 작업은 몇 시간에서 하루 안에 완료할 수 있습니다.

예제: 기능을 수직으로 분할#

다음은 최종 사용자의 여정을 기반으로 기능을 수직으로 분할된 작업 스토리로 나누는 예제입니다:

Mermaid 다이어그램 (8줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
  accTitle: Slicing a feature
  accDescr: Use the end user's journey to identify slices of work to be completed in iterations

Epic["Epic: When using the application,<br>I need to create an account,<br> so I can use the application features"] --> Issue1["Issue: When creating my account,<br> I need to specify my email address,<br> so I can receive future updates from the application"] Epic --> Issue2["Issue: When creating my account,<br> I need to specify a password,<br> so my account remains secure"] Epic --> Issue3["Issue: When creating my account<br> and entering the required info,<br> I need to finalize creating my account,<br> so I can sign in"]

애플리케이션의 수정되지 않은 계정 가입 기능을 가져와 세 가지 개별 스토리로 분해했습니다:

  1. 이메일 주소 입력.
  2. 비밀번호 입력.
  3. 계정 생성을 실행하는 버튼 선택.

기능을 스토리로 분해한 후 스토리를 개별 구현 단계로 더 분해할 수 있습니다:

Mermaid 다이어그램 (10줄)
소스 코드 보기
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
  accTitle: Break the story down further
  accDescr: Split apart a story into smaller steps

Issue1["Issue: When creating my account,<br> I need to specify my email address,<br> so I can receive future updates from the application"] Issue1 --> Task2["Task: Backend<br> Validate email formatting"] Issue1 --> Task3["Task: Backend<br> API endpoint to accept<br> POST request from client"] Issue1 --> Task4["Task: Frontend<br> Display email input"] Issue1 --> Task5["Task: Frontend<br> Display error message when validation fails"]

릴리스 계획 보드 설정#

산출물 구조를 정의했습니다. 다음 단계는 기능 백로그를 개발하고 유지 관리하는 데 사용할 에픽 보드를 만드는 것입니다.

새 에픽 보드를 만들려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Epic boards를 선택합니다.
  3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록을 선택합니다.
  4. Create new board를 선택합니다.
  5. 새 보드의 제목을 입력합니다: Release Planning.
  6. Create board를 선택합니다.

다음으로 priority::later, priority::nextpriority::now 레이블에 대한 목록을 만듭니다.

새 목록을 만들려면:

  1. 보드 오른쪽 상단에서 Create list를 선택합니다.
  2. New list 열에서 Select a label 드롭다운 목록을 확장하고 목록 범위로 사용할 레이블을 선택합니다.
  3. Add to board를 선택합니다.

왼쪽에서 오른쪽으로 보드를 통해 기능을 이동하는 것을 촉진하기 위해 이 목록들을 사용합니다.

릴리스 계획 보드의 각 목록을 사용하여 다음 시간 지평을 나타냅니다:

  • Open: 아직 우선순위 지정 준비가 되지 않은 기능.
  • Later: 이후 릴리스에 우선순위가 지정될 기능.
  • Next: 다음 릴리스에 잠정적으로 계획된 기능.
  • Now: 현재 릴리스에 우선순위가 지정된 기능.
  • Closed: 완료되거나 취소된 기능.

첫 번째 에픽 만들기#

다음으로 priority::now 목록에 새 에픽을 만듭니다:

  1. priority::now 목록 상단에서 New epic(+) 아이콘을 선택합니다.

  2. 새 에픽의 제목을 입력합니다:

    When using the application, I need to create an account, so that I can use the application features.
    
  3. Create epic을 선택합니다.

이 단계를 완료하면 보드가 다음과 같이 표시됩니다:

에픽 보드 예제

이제 Release Planning 보드를 사용하여 백로그를 빠르게 구축할 수 있습니다.

많은 기능을 개략적으로 만들고 Now, Next, Later 목록에 우선순위를 지정합니다. 다음으로 각 스토리를 스토리와 작업으로 더 세분화하는 데 시간을 투자합니다.

목록 내에서 또는 목록 간에 기능 에픽을 재정렬하려면 에픽 카드를 드래그합니다. 목록의 맨 위 또는 맨 아래로 카드를 이동할 수도 있습니다.

스토리 백로그 관리#

에픽으로 기능을 정의했으면 다음 단계는 해당 기능을 이슈로서 세분화된 수직 분할로 나누는 것입니다. 그런 다음 전용 백로그 보드에서 이터레이션 전반에 걸쳐 해당 이슈를 세밀화하고 순서를 정합니다.

기능을 스토리로 분해#

효율적인 스프린트 계획 회의를 위해 미리 기능을 수직으로 분할된 스토리로 분해합니다. 이전 단계에서 첫 번째 기능을 만들었습니다. 이것을 스토리로 분해해 보겠습니다.

첫 번째 스토리를 만들려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.

  2. 왼쪽 사이드바에서 Plan > Epic boards를 선택합니다.

  3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록에 Release Planning이 표시되는지 확인합니다. 그렇지 않으면 드롭다운 목록에서 해당 보드를 선택합니다.

  4. 에픽 카드의 제목을 클릭하여 에픽을 엽니다.

  5. Child issues and epics 섹션에서 Add > Add a new issue를 선택합니다.

  6. 이슈에 다음 제목을 입력합니다:

    When creating my account, I need to specify my email address so that I can receive future updates from the application
    
  7. Project 드롭다운 목록에서 이슈를 만들 프로젝트를 선택합니다.

  8. Create issue를 선택합니다.

  9. 다른 두 수직 분할에 대해 이 과정을 반복합니다:

    When creating my account, I need to specify a password so that my account remains secure
    
    When creating my account and entering the required information, I need to finalize creating my account so that I can sign in
    

스토리 백로그 세밀화#

이전 단계에서 기능을 완료하는 데 필요한 사용자 스토리로 분해했습니다. 다음으로 스토리 백로그를 관리하고 세밀화하기 위한 표준 위치로 사용할 이슈 보드를 설정합니다.

그룹에서 Backlog라는 새 이슈 보드를 만듭니다. 이 보드를 사용하여 스토리를 다가오는 스프린트(이터레이션)로 순서를 정하고 예약합니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Issue boards를 선택합니다.
  3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록을 선택합니다.
  4. Create new board를 선택합니다.
  5. 새 보드의 제목을 입력합니다: Backlog.
  6. Create board를 선택합니다.

보드를 만든 후 다가오는 각 이터레이션에 대한 새 목록을 만듭니다:

  1. 이슈 보드 페이지 오른쪽 상단에서 Create list를 선택합니다.
  2. 나타나는 열에서 Scope 아래에 Iteration을 선택합니다.
  3. Value 드롭다운 목록에서 이터레이션 중 하나를 선택합니다.
  4. Add to board를 선택합니다.
  5. 다른 다가오는 이터레이션에 대해 이전 단계를 반복합니다.

그런 다음 이터레이션이 끝나면 완료된 이터레이션 목록을 제거하고 케이던스 설정에 따라 자동으로 만들어진 새 미래 이터레이션에 대한 새 목록을 추가해야 합니다.

이 시점에서 스토리는 아직 추정되거나 작업으로 세밀화되지 않았습니다. 세밀화를 위해 표시합니다:

  1. 보드에서 각 이슈의 카드를 선택하고 status::refine 레이블을 적용합니다:
    1. 사이드바의 Labels 섹션에서 Edit를 선택합니다.
    2. Select labels 목록에서 status::refine 레이블을 선택합니다.
    3. 레이블 섹션 외부의 아무 곳이나 선택합니다.
  2. 세 가지 스토리를 원하는 다가오는 스프린트로 드래그하여 해당 스프린트 타임박스에 스토리를 할당합니다.

이 튜토리얼에서 이 시점까지 Backlog 보드가 다음과 같이 표시됩니다:

이터레이션 열에 걸쳐 사용자 스토리가 분배된 백로그 보드.

실제로 이 보드를 사용하여 많은 스토리를 다가오는 이터레이션으로 순서를 정합니다. 백로그가 커지고 여러 기능에 걸쳐 수십 개의 스토리가 있을 때 Group by epic을 활성화하면 해당 기능 에픽과 관련된 스토리를 볼 수 있습니다. 스토리를 그룹화하면 다가오는 스프린트로 순서를 정하기가 더 쉽습니다.

스프린트 계획 행사#

백로그가 준비되면 다가오는 스프린트를 계획할 시간입니다. GitLab에서 스프린트 계획 회의를 촉진하기 위해 동기적 및 비동기적 방법을 사용할 수 있습니다.

동기적 계획#

스프린트 계획 행사 시간이 되면 팀과 함께 Backlog 보드를 열고 각 스토리를 처리합니다. 현재 스프린트의 마지막 날에 다음 스프린트 계획을 시작해야 합니다. 각 이슈를 논의하면서:

  • 승인 기준을 검토하고 협업합니다. 체크리스트나 목록 항목을 사용하여 이슈 설명에 이것을 캡처할 수 있습니다.

  • 각 구현 단계에 대해 스토리를 작업으로 더 분해합니다.

  • 이슈의 스토리 포인트 노력이나 복잡성을 추정하고 이 값을 이슈의 Weight 필드에 설정합니다.

  • 팀이 이슈의 범위에 만족하고 스토리 포인트 값에 동의한 후 이슈에 status::ready 레이블을 적용합니다:

    1. 사이드바의 Labels 섹션에서 Edit를 선택합니다.
    2. Select labels 목록에서 status::ready 레이블을 선택합니다.
    3. 레이블 섹션 외부의 아무 곳이나 선택합니다.

다가오는 이터레이션의 모든 이슈를 순환한 후 스프린트 계획이 완료됩니다!

팀의 속도를 스프린트 커밋에 포함하는 것을 기억합니다. 각 이터레이션 목록 상단에서 각 스프린트에 할당된 총 스토리 포인트(가중치) 수를 찾을 수 있습니다. 이전 스프린트에서 넘어올 가능성이 있는 스토리 포인트도 확인하는 것이 좋습니다.

비동기적 계획#

동기 회의를 개최하는 대신 이슈를 사용하여 스프린트 계획을 실행합니다.

비동기 스프린트 계획의 특성상 현재 스프린트 종료 며칠 전에 시작해야 합니다. 모든 팀원이 기여하고 협업할 적절한 시간을 제공합니다.

  1. Backlog 이슈 보드를 엽니다:

    1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
    2. Plan > Issue boards를 선택합니다.
    3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록을 선택합니다.
    4. Backlog를 선택합니다.
  2. 다가오는 스프린트 목록에서 Create new issue(+)를 선택합니다.

  3. 이슈의 제목을 입력합니다: Release Planning.

  4. Create issue를 선택합니다.

  5. 이슈를 열고 다가오는 스프린트에 할당된 각 스토리에 대한 토론 스레드를 만듭니다.

    이슈 URL에 +를 추가하면 제목이 자동으로 펼쳐집니다. 이슈 URL에 +s를 추가하면 제목, 마일스톤 및 담당자가 자동으로 펼쳐집니다. 체크박스를 만들기 위해 이러한 스레드에 다음 템플릿을 사용할 수 있습니다:

    ## https://gitlab.example.com/my-group/application-b/-/issues/5+
    
    - [ ] Acceptance criteria defined
    - [ ] Weight set
    - [ ] Implementation steps (tasks) created
    

    예를 들어:

    체크리스트 항목이 있는 스프린트 계획 스토리에 대한 세 개의 토론 스레드.

  6. 모든 스토리에 스레드가 생기면 이슈 설명을 편집하고 각 팀원을 언급합니다. 팀원을 언급하면 각자의 할 일 목록에 자동으로 할 일 항목이 생성됩니다.

  7. 그런 다음 다가오는 스프린트 시작 전에 팀원들이 비동기적으로 다음을 수행해야 합니다:

    • 각 이슈를 논의하고, 질문하고, 계획된 각 이슈의 승인 기준에 동의하기 위해 협업합니다.
    • 스토리 포인트(가중치)가 무엇이어야 하는지에 대한 투표를 위해 :one:, :two:, :three:와 같은 반응 이모지를 사용합니다. 팀원들이 다른 스토리 포인트 값을 설정하면 합의가 이루어질 때까지 추가로 논의할 수 있는 좋은 기회입니다. 다양한 반응을 평균하여 스토리 포인트를 맞출 수도 있습니다.
    • 수직 분할(이슈)을 구현 단계(작업)로 분해합니다.
  8. 각 스토리 토론이 마무리되면 승인 기준의 변경 사항으로 이슈를 업데이트하고 Weight 필드에 스토리 포인트 값을 설정합니다.

  9. 스토리가 업데이트된 후 각 이슈에 status::ready 레이블을 추가합니다.

  10. 그런 다음 해당 수직 분할의 계획이 완료되었음을 알리기 위해 계획 이슈의 각 토론 스레드를 해결합니다.

스프린트 진행 상황 추적#

스프린트 동안 작업을 시각화하고 관리하기 위해 팀은 현재 스프린트 범위를 나타내는 전용 이슈 보드를 만들 수 있습니다. 이 보드는 팀의 진행 상황과 잠재적인 차단 요소에 대한 투명성을 제공합니다. 팀은 또한 번다운 차트를 통해 추가적인 가시성을 위해 이터레이션 분석을 사용할 수 있습니다.

현재 스프린트를 위한 보드 만들기#

그룹에서 Current Sprint라는 새 이슈 보드를 만듭니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Issue boards를 선택합니다.
  3. 왼쪽 상단에서 현재 보드 이름이 있는 드롭다운 목록을 선택합니다.
  4. Create new board를 선택합니다.
  5. 새 보드의 제목을 입력합니다: Current Sprint.
  6. Scope 옆에서 Expand를 선택합니다.
  7. Iteration 옆에서 Edit를 선택합니다.
  8. 이터레이션 케이던스 아래에서 Current를 선택합니다.
  9. Create board를 선택합니다.

보드는 이제 현재 이터레이션에 할당된 이슈만 표시하도록 필터링됩니다. 활성 스프린트에서 팀의 진행 상황을 시각화하는 데 사용합니다.

다음으로 모든 상태에 대한 레이블 목록을 만듭니다:

  1. 이슈 보드 페이지 오른쪽 상단에서 Create list를 선택합니다.

  2. 나타나는 열에서 Scope 아래에 Label을 선택합니다.

  3. Value 드롭다운 목록에서 다음 레이블 중 하나를 선택합니다:

    • status::refine: 이슈가 개발되기 전에 추가 세밀화가 필요합니다.
    • status::ready: 이슈가 개발 준비가 되었습니다.
    • status::in progress: 이슈가 개발 중입니다.
    • status::review: 이슈의 해당 MR이 코드 검토를 거치고 있습니다.
    • status::acceptance: 이슈가 이해 관계자 승인 및 QA 테스트 준비가 되었습니다.
    • status::done: 이슈의 승인 기준이 충족되었습니다.
  4. Add to board를 선택합니다.

  5. 다른 레이블에 대해 이전 단계를 반복합니다.

그런 다음 스프린트가 진행되면 이슈를 다른 목록으로 드래그하여 status:: 레이블을 변경합니다.

스프린트의 번다운 및 번업 차트 보기#

스프린트 동안 이터레이션 보고서를 검토하면 도움이 됩니다. 이터레이션 보고서는 진행 지표와 번다운 및 번업 차트를 제공합니다.

이터레이션 보고서를 보려면:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Plan > Iterations를 선택하고 이터레이션 케이던스를 선택합니다.
  3. 이터레이션을 선택합니다.