
학생, 소규모/개인 개발자를 위한 애자일 프로젝트 관리 툴
개발 경험이 많지 않은 학생, 신입 개발자들에게 쉽게 제품의 백로그를 생성하고 관리하도록 도와주는 프로젝트 관리 툴입니다.
프로젝트 관리를 위해 사용해본 Jira는 유용한 프로그램이었지만, 높은 학습곡선으로 인해 처음 사용하기에는 굉장히 어려웠던 경험이 있습니다. 특히, Jira의 높은 학습 곡선의 원인은 처음 개발을 접하는 사람들에게 너무 높은 자유도와 많은 기능으로 판단했습니다.
예를 들어, Jira는 “이슈 유형” 설정에서 자유롭게 이슈의 단계와 종류, 그리고 이슈의 기능을 설정할 수 있습니다. 하지만 처음 프로젝트를 만들고 관리하는 개발자나 학생의 경우, 프로젝트 관리방법 / 이슈에 대한 지식 / 지라의 복잡한 사용 방법이라는 큰 학습 곡선에 가로막혀 Jira의 좋은 기능들을 잘 활용하지 못할 수 있습니다.
Jira에는 굉장히 높은 자유도로 프로젝트를 관리하기 편하지만, 너무 높은 자유도로 인해 프로젝트 관리를 어떻게 하는지 모르는 경우 오히려 사용하기 어려울 수 있다.
저희는 이 문제를 해소하기 위해, 더 적은 자유도와 더 적은 기능으로 추려 개발자들에게 프로젝트 관리를 위한 핵심 기능만을 제공하는 서비스를 개발하고자 했습니다. 특히, 처음 프로젝트를 개발하는 개발자 및 학생들이 자연스럽게 애자일한 프로젝트 관리를 할 수 있도록 이끄는 서비스를 완성하고자 고민했습니다.
코드를 설계하는 과정 하나 하나를 직접 고민하고 선택하여, 주체적으로 개발하자
LESSER 이전에도 몇몇 프로젝트를 수행해 본 경험이 있었습니다. 예전 프로젝트를 개발하고 회고할 때마다, 가장 아쉬웠던 점은 “그냥 되는대로 개발했던 경험”입니다.
당시에는 근본적으로 코드를 “왜 이렇게 구현해야할까”, 근본적인 부분까지 생각하지 않았었습니다. 예를 들어, 개발을 할 때 TypeScript를 사용한 이유는 다른 사람들도 다 Typescript를 사용하기 때문이었습니다. 프로젝트의 코드 구조를 이렇게 만들었던 이유는 그저 만들었더니 동작했기 때문이었습니다. 주변과 상황에만 맞추어 수동적인 태도로 개발을 수행하다 보니, 더 빠르게 코드를 동작하기 위해서 해야 할 고민이나, 다른 사람들이 내 코드를 쉽게 사용할 수 있도록 하는 방식은 고민하지 못했습니다.
나의 주체적인 의도로 TypeScript를 학습하지 않았기 때문에, 이전에 수행한 프로젝트에서 TypeScript의 이해가 낮은 모습을 확인할 수 있었다.
이러한 수동적인 개발은 넘어서기 위해, 개발 중 마주하는 선택의 순간마다 “왜”라는 질문을 스스로에게 던지고 답을 찾아보았습니다. 사용자의 경험을 향상 시키기 위해서, 즉 더 좋은 프로젝트를 만들기 위해 어떻게 해야할까? 내가 만든 코드를 다른 개발자들이 쉽게 이해하고 유지 보수하기 위해선 어떻게 해야할까? 이런 기준을 바탕으로 직접 선택하고 설계하는 주체적인 코드를 만드는 것을 LESSER 개발 간 가장 큰 목표로 삼았습니다.
의도와 효율에 대해 의식하며 개발을 수행하다보면, 수 많은 선택의 기로에 마주하였습니다. 혼자 혹은 다른 개발자들과 함께 선택지를 마주하고 고민하며, 점차 어떤 것을 고르는 것이 우리에게 더 효율적일지 고민하고 적절한 기준을 세우는 법을 익힐 수 있었습니다.
예를 들어, 웹소켓 통신을 위해 Socket.io를 사용하여 코드를 작성하는 중 어떠한 구조로 React 코드를 설계해야 가장 좋을지 팀원과 함께 고민하게 되었습니다. 여러 방향을 설계하고 논의하며, “데이터 관리 효율성”, “유지 보수 및 가독성”의 기준을 세우고 이를 중점으로 고민하여 설계 방향성을 정할 수 있었습니다.
이외에도 기술의 동작을 구현하기 위한 라이브러리의 선택 과정에서도 우리가 사용가능한 시간, 비용과 같은 리소스 그리고 최적화와 같은 이유를 근거로 선택하려 노력했고, 덕분에 Socket.io / yjs와 같은 여러 라이브러리를 적절한 근거와 함께 선정할 수 있었습니다.
개발에 있어 여러 선택지를 찾아보고 올바른 기준을 세워 고민하는 습관을 기른다면, 사용자의 경험을 향상시킬 수 있는 좋은 프로젝트, 유지 보수하기에 좋은 프로젝트로 이끄는 좋은 방향이 될 것이라 생각합니다.
어떤 기술을 선택하기 위해서, 그리고 주어진 시간 안에 선택한 기술을 배우고 활용하는 과정 속에서 점차 더 효율적으로 기술을 배우고 활용하는 방법을 체계화 할 수 있었습니다.
text 타입의 데이터를 관리하는데 집중하여 기술을 익히고 학습하는 목표를 정했습니다.개발 중 고민이 되는 내용을 글로 작성하고 작업이 완료 된 이후 개발일지로 관리한 경험 덕분에, 문서화의 중요성을 체득할 수 있었습니다.
머리 속의 추상적인 이미지를 구체화하다
문서화하며 개발 과정을 회고하다
한번 사용한 기술들에 대한 트래킹이 되어가고 있지 않습니다. 해당 기술을 적용하기만 하는 것이 다가 아니라, 그 기술을 현재 제대로 사용하고 있는지도 굉장히 중요한 문제라고 생각합니다. 예를 들어, MSW를 최초 적용할 때에는 잘 사용했지만, 현재에는 MSW가 적절하게 관리되고 있지 않는 점이 아쉬웠습니다.
어떻게 개선할 수 있을까?
프로젝트의 회고 방식으로 KPT를 적용하여 전체적인 프로젝트 수행 방식에 대해 점검하고 개선방안을 적용하고 있습니다. 프로젝트의 KPT 회고 방식을 기술 회고에도 동일하게 시도하여, 기술의 활용 여부를 트래킹할 수 있을 것입니다. 예를 들어, 계속해서 적용해야 하는 기술(MSW, Test Code, Error Handling)과 이번 스프린트에 일시적으로 적용한 기술들을 KPT 방식으로 점검하고 개선할 수 있는 방안을 만들고자 합니다.
회고에서 발견한 문제점인 MSW 기술을 트래킹하기 위해, 어제 MSW 기술을 사용방식 개선 및 트랙킹 방식 회의를 FE 팀원화 함께 진행했다.
LESSER를 개발하면서 대부분의 시간을 기능 개발에 대한 시간에 투자하였습니다. 새로운 기술을 배우고 이를 적용하는 것에 대부분의 시간을 사용했습니다. 하지만, 개발만큼이나 사용자들에게 기능을 최적화한 형태로 제공하고, 나의 코드를 더욱 읽고 관리하기 좋은 형태로 다른 개발자들에게 제공하는 것도 중요함을 깨닫게 되었습니다.
그렇기 때문에 너무 개발에만 시간을 투자한 탓에 테스트 코드를 통한 점검이나 코드 리팩토링을 통한 최적화/유지 보수성 개선과 같은 점들이 제대로 투자하지 않은 지난 스프린트들이 굉장히 아쉽게 느껴집니다.
어떻게 개선할 수 있을까?
스프린트 중 1일 ~ 2일을 지난 코드를 점검하고 개선하는 과정으로 할애하고자 합니다.
(단, 스프린트 중 발행된 태스크 티켓을 잘 해결했을 경우에 한함)
LESSER 프로젝트에서 팀원들의 도움 덕분에 제가 하고 싶은 여러 일들에 도전해볼 수 있는 좋은 기회입니다.
웹소켓 통신, CRDT를 사용한 동시 편집 등을 만들며 제가 평소 해보고 싶었던 여러 기능들을 개발하며 큰 뿌듯함과 도전하고 있다는 충실함을 느낄 수 있엇습니다.
팀원 모두가 팀의 시스템을 살펴보고 더욱 발전하고자 노력하는 환경 속에서 저도 스스로를 살펴보고, 있습니다. 특히 매 스프린트마다 수행하는 KPT 회고를 통해 우리의 애자일 방식을 어떻게 더 개선할 수 있을지 고민하고 실제로 이것이 적용되는 과정을 보며 큰 뿌듯함을 느끼고 있습니다.
KPT 방식을 통해 프로젝트 수행 간 문제를 파악하고, 개선하려 노력하고 있다.
실제로, 스프린트 회의 방식과 회고 방식을 개선한 덕분에 스프린트를 점검하는 시간을 2시간에서 30분으로 줄여 더욱 효율적인 회의를 수행할 수 있었습니다.
운이 좋게도 이런 좋은 환경과 좋은 팀원들 속에서 개발하며 공부할 수 있는 만큼, 이 기회를 놓치지 않고 팀원들과 더 높은 곳을 향해 성장해나가고자 더욱 노력해보겠습니다.