개발해야할 이슈가 많아질 수록 프로젝트를 체계적으로 관리하는 것은 정말 중요하다. 그렇지 않으면, 우리가 집중해야할 것이 무엇인지 놓치거나, 꼭 해결해야할 이슈를 놓칠 수 있기 때문이다.
오늘은 우리 회사에서 asana로 제품 개발 프로젝트를 관리하는 방법을 소개할까 한다.
2주 전 만해도 우리는 프로젝트 관리를 위해 notion과 zenhub를 같이 썼었다. 그 배경에는 우선 기존 PM 분이 만들어주신 제품 backlog가 notion에 있었고, 또 버그를 대대로 수정하기 위해서 notion 버그 모음 문서에서 이슈를 잠시 관리했었으며, 다른 개발 이슈들은 zenhub으로 관리하고 있었다. 여러 개의 notion문서들과 zenhub 에서 이슈를 관리하고 있었기 때문에, 이슈 상태 추적 및 관리가 불편해졌다.
사실 근 한 달간 개발해야하는 이슈들이 너무 많아서 정신이 없어 이런 부분들을 챙기고 있지 못하다가, 스프린트 종료 후 회고하면서 체계적인 이슈 관리 방법이 필요하다고 느껴서 프로젝트 관리 방법을 설계 및 도입하였다.
우선 효율적인 프로젝트 관리를 위한 우리 팀의 요구사항은 다음과 같았다.
zenhub
, asana
, jira
, github proejct
등 후보군이 여러 가지가 있었으나 우리 팀은 asana를 활용하기로 결정하였다.
asana
를 선택한 이유는
github
→ asana
데이터 마이그레이션이 어렵지 않다. (개발자 한정.. API를 활용하여 스크립트 짜면…)zenhub
의 경우는 기존에 사용하고 있었기 때문에 데이터 마이그레이션이 필요 없다는 장점이 있고, 웬만한 요구사항을 만족하나, 추가적인 커스텀 필드 지원이 어렵다는 단점이 있다.
jira
는 정말 많은 기능을 지원하긴 하나, 기능 자체가 어려워서 배우는 데 시간이 좀 걸릴 것 같으며, asana랑 거의 비슷한 느낌인 것 같았다.
github project
는 UI가 도저히 불편해서 쓰기가 어려웠다. github project
에서 이슈를 생성하려면 이슈 템플릿을 바로 지정 못하고, 레포지토리에서 이슈 생성 할 때 템플릿을 활용한 후 해당 이슈에 프로젝트를 지정해야하는 불편함이 있었다.
asana
는 우리 팀의 요구사항을 다 만족하며, 또 비개발 업무(경영지원/ 투자관리) 의 전부를 원래 asana
로 관리하고 있었기 때문에 asana
를 프로젝트 관리 툴로 사용하기로 결정하였다.
우선 우리 팀의 구성은 디자이너 1명, 백엔드 개발자 2명, 프론트엔드 개발자 1명, ML 개발자 1명이다. 대부분의 비개발 업무들은 엔지니어들이 어느정도 담당하고 있는 상황이다.
제품이라는 한 단위에서 각자가 담당하고 있는 개발/비개발 업무가 혼재하고 있기 때문에, 공유가 잘 되어야 하며 원활한 관리가 필요하다.
우리는 “제품 개발” 의 측면에서 세 가지 asana 프로젝트를 관리한다.
Epic 프로젝트에는 사용자 스토리를 기반으로 큰 기능 단위 태스크들이 존재한다. 유저 스토리의 성격에 따라 파이프라인을 나누었다.
제품 개발 프로젝트는 실제 제품이 개발되기 위한 기획& 디자인 & 개발 이슈들을 관리한다. 제품 개발 이슈를 정확하게 관리하기 위해 이슈 성격에 따라 템플릿을 만들었다.
각 태스크들의 상태를 용이하게 관리하기 위해 여러가지 파이프라인이 존재한다. 우리는 이 파이프라인을 보고 기획 & 디자인 파트의 태스크가 얼만큼 진행되고 있는지 파악하고, 개발을 진행한다.
파이프라인 관리
각 파이프라인을 설명하면
New Issues
: 새로 발견된 이슈이다. 아직 진행하기로 검증된 이슈는 아니다.
In Design
: 디자인 및 기획이 진행중인 이슈이다.
Design Complete
: 디자인 및 기획이 완료된 이슈이다. 작업이 완료되면 figma 링크를 태스크에 삽입하여, 개발자가 바로 확인하고 관련된 개발 작업들을 추가한다.
Backlog
: 바로 진행 가능한 이슈들의 모음이다. New Issues들 중 진행하기로 한 작업을 Backlog에 옮긴다.
In Progress
: 개발 진행 중인 이슈들이다.
Code Review
: 개발이 완료되어 코드 리뷰가 진행중인 이슈들이다. 우리는 asana와 github 을 연동하는 github action을 짜서 PR description에 asana URL을 넣으면 자동으로 asana 태스크에 해당 PR이 연결되도록 구성하였다.
연결된 이슈는 다음과 같이 볼 수 있다.
Complete
: 개발이 완료된 이슈들이다. PR이 머지되면 자동으로 연관된 asana 태스크는 complete 처리되고 해당 파이프라인으로 이동된다.
Icebox
: 지금 당장 진행하기에 어렵거나, 중요도가 낮은 이슈이다.
태스크 생성 탬플릿
태스크 생성 탬플릿을 지정해서 이슈에 대한 상세한 설명을 작성하도록 하여, 어느 팀원들도 태스크 설명을 읽고 진행할 수 있도록 하였다.
다음은 Enhancement 이슈 템플릿의 예시이다.
스프린트 프로젝트의 경우 2주 단위의 스프린트 기간마다 생성 되며, 제품 개발 프로젝트의 태스크들 중 이번 스프린트에 진행해야할 것들을 추가한다. 이 프로젝트의 목적은 우리가 스프린트 회고 시 달성율을 확인하기 위함이다.
스프린트 파이프라인은 최대한 단순화 시켰다.
사실 너무 바쁠 때는 이런 프로젝트 관리 프로세스가 생산성을 떨어뜨린다고 생각한 적이 있었다. 그러나, 회고를 해보니 체계적인 프로젝트 관리 방법이 없다면 일을 두 번하게 되거나, 중요한 이슈를 놓치는 경우가 많다는 것을 깨달았다.
이러한 프로세스 도입한 이후 스프린트 기간 내 하기로 했는데 놓친 이슈들 혹은 뜻하지 않게 발견하여 해결이 필요한 이슈들을 스프린트 기간 내 꼭 챙길 수 있게 되었고, 또 기획 & 디자인 업무의 진행상황도 보고 바로 개발 태스크로 진행할 수 있어서 팀의 생산성이 많이 증대되었다고 느꼈다.