개요
저희 팀에서는 Jira를 이용해 스프린트를 2주단위로 운영하면서 개발 자원과 일정을 관리합니다.
뭔가 정석적인 애자일의 그 스프린트와는 조금 다른데, 그 이유는 회사 전체 개발 프로세스가 아무래도 워터폴과 유사하기 때문에 기획, 디자인, 개발 모두가 같이 한 스프린트에서 어떤 결과를 내는 것을 목표로 하지 않고 있기 때문입니다.
그래서 저희 스프린트에는 저희 엔지니어링 팀만 참여하면서 스프린트를 작업 자원과 일정 관리용으로 사용하고 있습니다.
이번 글에서는 저희 팀에서 스프린트를 운영하고 개선해나가면서 느꼈던 점들을 적어보고자 합니다.
단순한 시작
제가 처음 입사했을 때에 팀은 스프린트를 막 도입한 시기였습니다. 이 당시에 저희 팀의 스프린트는 다음 정도의 역할을 했던 것 같습니다.
- 2주간 우리 팀이 무엇을 할 것인지 정리하고 공유하기
- 너무 업무가 적어보이거나 많아보이면 분배하기
보통 업무의 양을 판단하고 분배하는건 대부분 팀장님이나 시니어분께서 의견을 주시는대로 진행했던 것 같습니다. 쌩 주니어로서 저는 '이런이런 요청이 들어왔고 이런걸 하고싶어요!'라고 공유하고 의견을 받아서 조정하는 느낌이었던 것 같습니다.
개인 능력상으로도 정확히 일감이 얼마나 걸릴지 예측하지 못하기도 했지만, 시스템적으로도 계획은 세우지만 피드백은 잘 못하는 상태여서 조금 단순한 형태로 지난 2주간 뭘 했고 앞으로 2주간 뭘 할지를 이야기하는 정도였던 것 같습니다.
그래서 개개인의 자원을 관리하는 느낌 보다는 팀의 업무를 관리하는 느낌이 조금 더 강했던 것 같습니다. 어떻게 보면 팀의 업무 관리는 당연한 거고 개개인의 자원을 관리하는게 조금 부족했던 것일 수도 있구요 ㅎㅎ
이 당시에도 스토리포인트를 쓰기도 하고 듀데이트를 적기도 했지만 그 내용에 대한 피드백은 거의 없었던 것 같습니다. 티켓의 처리 순서도 중요하게 고려하지는 않았습니다.
스크럼도 진행하곤 했지만 자유로운 출퇴근 시간으로 인해 불참율도 높았고(ㅜㅜ) 정해진 방식 없이 단순하게 오늘 뭐할건지 이야기하고, 잡담도 조금 하고 정도로 진행했었습니다.
아련해지는 스토리포인트와 듀데이트의 존재, 이대로는 어렵다
어느정도 잘 진행되는 것 같자, 스프린트를 도입하시고 추진해주시던 저희 팀 담당 PM분이 다른 팀으로 이동을 하시게 됩니다(저희 팀보다 조금 더 혼돈의 상태에 있던 팀이었다는 후문..).
처음에는 당시의 규칙들이 어느정도 지켜지고 있었지만, 시간이 조금 지나자 하나 둘 씩 스토리포인트를 안쓰고 듀데이트도 안쓰게 되었습니다.
스프린트 미팅때는 정말 어떤 일이 들어왔고, 어떤 일을 해야하며 누가 할 것이냐 정도 이야기를 나누었던 것 같습니다. 중요도가 낮아 처리하지 못해서 남는 티켓은 그대로 몇 스프린트 동안 계속 보드의 Todo 란에 고이 자리잡고있기도 했습니다.
그러다가 2019년 회고를 기점으로 저희 팀에 새 바람이 불어오게 됩니다. 팀장님께서도 불완전했던 스프린트를 개선해보자 하셨고, 동시에 정말 애자일한 팀에서 일하시던 분이 팀에 합류하시면서 공유하신 경험과 함께 팀 스프린트를 점점 더 개선하려는 노력을 시작했습니다.
가장 먼저 시작한 것은 일단 회고를 잘하기였습니다. 이 때 도입한 것을 몇가지 소개해보자면 다음과 같습니다.
회의록 작성하기
그 전까지는 회의록 없이 진행했었고 어떤 정해진 포맷도 없었는데, 기록을 하고 미팅할 때에 이전 회의록을 복사해서 사용하다 보니 이전 스프린트때 이야기 했던 점 중 잘했던 것과 못했던 것을 이야기하게 되었습니다.
회의록에는 다음 내용들을 담기로 했습니다.
- 시작할 때 계획이나 이야기 한 점
- 종료할 때에 회고
- Good, So-So, Bad로 나누어서 의견 받기
- 그를 바탕으로 액션 아이템 잡기
당시의 기록을 참고하면서 글을 쓰는데 지금 스프린트 미팅 회의록과 비교해보면 너무나도 초라하네요 ㅋㅋㅋ
미리 개인별로 플래닝 해오기
회고 때 나온 문제점으로 개인이 미리 티켓을 만들어두지 않고, 매 스프린트마다 머리속에 있는 걸 내놓는 경향이 있다가 있었습니다. 자원 관리를 위해 사용하려 했지만 충분히 효과가 없었던 것 같다고 판단했습니다.
그래서 스프린트 미팅 전에 미리 개인 계획을 세워오기로 하였습니다. 당시에 세웠던 세부 룰은 다음과 같았습니다.
- 스프린트 미팅 전에 미리 모여서 각자 티켓 관리를 하자.
각자 자리에서 하면 '아 맞다!'하고 안해오는 경우가 종종 있었기에 억지로 모여서 하기로 했습니다. 그래서 성숙해질 때까지는 다같이 모여서 진행하기로 했습니다. - 작업을 시작할 때에 현재 스프린트가 아닌 전체 작업에 대해 플래닝하자.
기록이 남아있지 않아서 기억으로 되살려보면, 기능 개발이 있으면 보통 해당 기능 개발 마감 일정이 있으니, 전체 플래닝을 미리 해놓고 각 하위작업들로 플래닝을 미리 해보자는 취지였던걸로 기억합니다. - 스프린트 중에 급하게 들어오는 티켓은 rush 라벨을 달아보자.
중간에 급하게 요청 오는 일은 언제나 존재하고, 우리는 아직 어떻게 이를 계획해야할 지 모르겠으니 일단 기록이라도 해보자 하고 라벨을 달아보기로 했습니다. - 스토리포인트는 1시간당 1로 잡아보자.
기존에는 업무일 1일을 스토리포인트 1로 잡았는데, 이러면 작은 태스크들을 기록하기 위해서는 0.1, 0.2 단위로 기록하게 되어서 오히려 산정이 더 어려워지는 경험이 있었습니다. 이에 1시간을 1 스토리포인트로 적어보기로 합니다.
데일리 스크럼을 조금 더 확실하게
회고 때 지적된 또다른 문제점으로 데일리 미팅을 불참하는 경우도 많고, 티켓 기반으로 이야기 하지 않았다는 내용이 공유되었습니다. 이에 다음 룰을 세웠습니다.
- 스크럼 불참시 불이익을 설계한다.
- 스크럼 룰북을 만들자.
- 모여서 한 화면에 보드를 띄워놓고 이야기하자.
이 모든것을을 우리가 개인의 의지로 챙길 수 있을까..? 스프린트 마스터를 도입하자
이미 시간이 지나면서 흐지부지 되었던 경험을 가졌기에(..ㅋㅋ) 위 내용들을 누군가에게 책임을 주고 강제하지 않으면 안될 것 같은 강한 불안감이 있었고, 그를 위해 돌아가면서 스프린트 마스터를 맡아 사람들에게 리마인드를 해주고 룰을 강제할 수 있도록 시도해보기로 했습니다.
코로나 시기에는 재택이 아닐 때에는 전임 마스터가 신임 마스터에게 손소독제를 뿌려주며 권력(?)을 넘겨주었습니다
이런 계획들을 가지고 짝짝짝하고 해산한 우리는 모두 연말 휴가를 행복하게 보냈고, 격변의 2020년을 맞이하게 됩니다.
규칙을 세우고 연습하기
첫 몇주간 회의록에 계속 기록을 남기면서 회고하고 액션 아이템들을 뽑고 다시 액션 아이템을 잘 수행했는지 피드백하고를 반복하면서 저희는 몇가지 큰 변화와 새 규칙을 만들게 됩니다.
- 스크럼 룰북을 제작했습니다.
- 데일리 스크럼 불참 시 횟수를 기록하고, 그 횟수를 기반으로 weighted random을 돌려서 커피내기데일리 스크럼 불참에 대한 불이익을 마련하기 위해 사제커피 내기를 벌칙으로 정합니다. 사내 커피는 저렴하니까 부담이 덜할것이라는 의견으로(ㅋㅋ) 성실히 참여한 사람들은 스타벅스 커피와 할리스 커피를 공짜로 맛나게 얻어먹게 됩니다.
저는 굉장히 행복했습니다ㅎㅎ
- 데일리 스크럼 불참 시 횟수를 기록하고, 그 횟수를 기반으로 weighted random을 돌려서 커피내기데일리 스크럼 불참에 대한 불이익을 마련하기 위해 사제커피 내기를 벌칙으로 정합니다. 사내 커피는 저렴하니까 부담이 덜할것이라는 의견으로(ㅋㅋ) 성실히 참여한 사람들은 스타벅스 커피와 할리스 커피를 공짜로 맛나게 얻어먹게 됩니다.
- 작은 작업이더라도 무조건 티켓을 만들자.
기록의 의미로서 넣어놓고 트래킹 해보기로 합니다. - 라이브 대응 등 큰 이슈들도 우선 티켓을 잡아두고 생기는 태스크를 따로 티켓으로 잡으면서 진행해보자.
기존에는 기능개발과 요청사항들에 대해서만 티켓을 잡았으나 라이브 대응 등 큰 일을 하면서 해당 티켓들이 밀리게 되는 현상이 발생했습니다. 그래서 일정 상 분명 시간을 쓸 것 같은데 정확히 뭘 할지는 모르는 일에 대해서는 티켓을 먼저 잡아놓고 추가로 티켓을 만들면서 트래킹 해보기로 합니다. - 스토리포인트를 꼭 미리 잡자. 안잡고 진행했더라도 작업 완료하면 투자한 시간을 꼭 적어놓자.
이 당시에는 작업당 스토리포인트를 얼마를 적어야할 지 잘 모르는 상태였어서 일단 적어놓고 피드백하면서 정확한 추정으로 나아가기로 했습니다. 회고시 피드백을 하기 위해서는 모든 티켓에 스토리포인트를 적는게 필요했습니다.
코로나와 재택근무
두 달 가량 열심히 의견을 내고 개선하고 진행하면서 조금씩 익숙해지나 할 때 쯤, 코로나가 터지면서 2주간 전사 재택근무에 돌입하게 됩니다.
재택근무를 한 스프린트의 기록을 보니 삶과 일의 경계가 명확하지 않았다는 내용이 있네요 ㅋㅋ 그러다 보니 더욱더 플래닝을 열심히 해야겠다는 마음가짐을 가지고 진행하게 됩니다.
재택에서 복귀한 뒤에는 다들 처음해보는 재택근무에 너무 지쳐있어서 혹시 모를 재택근무를 대비하기로 합니다. 이를 위해 스크럼을 슬랙콜로 진행하기로 합니다.
실제로 그 스프린트 중간에 재택으로 전환이 되었고, 슬랙으로 스크럼을 하게 됩니다. (당시에는 몇달만 그럴 줄 알았지ㅋㅋㅋ 저희팀은 지금도 슬랙콜로 스크럼을 합니다)
이후로 위 내용들을 기반으로 지속적으로 연습하고 개선해 나가면서 회의록에 모든 걸 기록하고 남겨야 할 것은 계속 가져가게 됩니다.
이제는 익숙해졌다, 조금 더 고도화해보자
20년 2분기 부터는 플래닝과 피드백, 액션 아이템 세우기와 데일리 스크럼에 익숙해지면서 개선을 위한 습관이 만들어진 것 같습니다.
거의 일정한 패턴으로 진행하면서 부족한 점과 개선할 점을 하나씩 정리하면서 진행했습니다. 대표적인 내용을 정리하면 다음과 같습니다.
- 스프린트 내 태스크들의 우선 순위를 정하고 지키기
지속적으로 중간에 들어오는 작업들에 대해 컨택스트 스위칭 비용이 너무 많고, 정신이 혼미해지면서 기존 플래닝을 못지키게 되는 경우가 있었고, 우선순위를 산정하고 계속 그걸 지키려고 노력하는 훈련을 했습니다. - 스프린트 스토리포인트 목표를 세우고, 리포트를 보면서 관리해보자
Jira의 기능 중 스프린트 리포트와 Burndown chart, Burndup chart 등이 있는 걸 팀원 중 한분이 공유해주셨고, 스프린트 회고 때마다 재미로 보곤했는데 이를 이용해서 시작 전 팀 총 스토리포인트와 목표 스토리포인트를 기록하고 성공하면 서로 축하하고, 실패하면 그 원인이 무엇이었는지 기록하는 방식으로 스프린트 전체 플래닝을 고도화하였습니다. - 갑자기 치고 들어오는 일을 플래닝에 포함하기 - 버퍼 티켓 만들기
예상된 큰 일 이외에도 치고 들어오는 일들도 트래킹할 수 있도록 버퍼용 티켓을 만들고 실제로 요청을 처리할 때마다 서브티켓이나 티켓 나누기를 통해 실제 작업한 내용을 반영하였습니다.
이런 소소한 개선들을 거치면서 저희 팀은 계속 저희만의 스프린트를 발전시켜 나가고 있습니다. 그 과정에서 서로 더 많은 이야기를 하고 일정관리 뿐만 아니라 팀 문화나 기술적인 개선에 대한 논의도 추가적으로 계속 논의하고 피드백하게 되었습니다.
아직도 부족한 부분이 많을 것 같고 이제는 새로 어떻게 개선해 나갈까 하는 설레임은 조금 적지만, 이제는 팀원 모두 스스로 일의 범위를 정하고 예상 시간을 산정하며 우선순위를 정하는데에는 능력치가 많이 올라가게 되면서 플래닝한 예상 범위 내로 일을 마치고 스프린트 미팅에서 이번에는 제가 계획했던 티켓을 다 끝냈어요! 자랑하고 박수도 받는 뿌듯함을 즐기게 되는 것 같습니다.
개인적으로 생각하는 자원관리로써 스프린트의 핵심
기록을 통한 계획과 피드백
기록으로 계획과 피드백, 액션 아이템을 남기면서 확실히 우리가 잘하고 있는것, 못하고 있는것을 잊지 않고 유지하는데 큰 도움이 되었습니다.
스프린트 미팅 회의록을 매일 스크럼때마다 보면서 우리가 정한 룰을 잘 지키고 있는지 잊지 않고 지속할 수 있었던 것 같습니다.
추가로 모든 피드백에서 원인을 개인에게서 찾지 않는 것을 중요하게 여겼습니다. 회고와 개선의 목적은 질책할 대상을 찾는 것이 아닌, 우리가 더 일을 잘 할 수 있도록 시스템과 프로세스를 개선하는데에 있다고 믿고있습니다.
미팅에서 편하게 공유하기 - 좋은점, 나쁜점, 이상한점(?)
스프린트 미팅때에 잡담과 의견 공유를 편하게 하면서 프로세스의 문제점이나 팀의 문제점을 편하고 빠르게 공유해서 개선할 수 있도록 했습니다.
플래닝, 회고와 별도로 지난 2주간 좋았던 점, 나빴던 점, 그리고 이상한거나 재미있었던 소소한 이야기들을 공유하는 제도가 좋았던 것 같습니다. (애자일 경험자 팀원 분의 말을 빌리자면 서양식으로 편안~하게 진행하려 노력했던 것 같아요 ㅋㅋ)
그러한 발전에 덧붙여 대화에서 오는 팀원간의 유대감 향상도 너무나 좋았던 것 같습니다. 스프린트 미팅이 즐겁고 기다려지는 시간이었던 것 같습니다 ㅎㅎ
스토리포인트에 대해
예상 시간을 산정하는 건 완벽하게 내가 이정도까지 끝낼 것 같다, 끝낼 거다라고 정의하는게 아니라, 내가 생각하는 일의 소모 시간을 적어보고, 실제 수행한 뒤에 얼마나 걸렸는지 체크하면서 피드백하기 위함입니다.
스토리포인트를 산정하는 것 보다는 일을 마친 후에 실제로 어떠했는가 피드백 하는 것이 조금 더 중요한 과정이었던 것 같습니다. 그리고 원래대로라면 그 시간 안에 되어야 할 일이 안되었다면, 프로세스 상에서 어떠한 걸림돌이 있는건 아닌가 생각해보고 개선의 여지가 될 수 도 있습니다.
스토리포인트는 점진적으로 스스로 예상한 것과 실제 결과의 오차를 줄여나가는 것, 이 핵심이라고 생각하게 되었습니다.
마치며..
저희 팀이 어떻게 스프린트를 활용해서 성장해 왔는지를 조금은 두서없지만 기록해봤습니다.
적으면서 이전 기록을 보게 되니 재미있었던 일도 떠오르고 저희 팀에서 제가 많이 성장했다는 걸 한눈에 보게 되어서 뿌듯하기도 하네요 ㅎㅎ
저희가 진행한 방식이 당연히 정답은 아니겠지만, 서로 공유하고 피드백해서 개선해나가는 방법을 배웠다는것 만으로도 많은 것을 얻었다고 생각합니다.
기록과 회고, 피드백을 바탕으로 계획을 진행하다 보니 자원 관리 뿐만 아니라 팀 문화와 기술적인 개선에도 크게 도움이 되었던 것 같습니다.
코드리뷰나, 페어프로그래밍, 문서정리 관련해서도 스프린트와 함께 다양한 시도를 하면서 팀 문화를 만들고 정착시킬 수 있었습니다. 기회가 되면 다음 글에는 그런 과정들을 담아보면 재미있을 것 같습니다 ㅋㅋ
'개발' 카테고리의 다른 글
Go Viper로 환경변수를 config에 주입하는 도중 문제 - Windows와 Linux에서의 차이 (0) | 2021.06.10 |
---|---|
[실습] 스프링 부트와 aws로 혼자 구현하는 웹서비스 무작정 따라하기 (완) (0) | 2021.06.09 |
Express 앱에 passport와 Auth0로 계정 기능 추가하기 (0) | 2019.11.24 |