기술적 측면
프로젝트는 2009년에 시작되었으며, 핵심 엔진 구축에 메타 프로그래밍을 활용하여 사용자 스스로 코드를 생성하고 개발 시간을 절약하도록 했습니다. 성능 문제 해결을 위해 PostgreSQL의 집합 연산을 활용하여 코드 간결성과 성능 향상을 이루었습니다. 또한, 독자적인 솔루션이 없는 도메인 특정 문제에는 별도의 위성 프로젝트를 개발하여 모놀리식 구조를 단순하게 유지했습니다. 강제 코딩이나 모범 사례 위반은 숨겨진 유지보수 비용을 초래한다는 교훈을 얻었습니다. 테스트(RSpec)는 프로젝트 초기부터 도입되어 16년간의 수많은 업그레이드(특히 Ruby 1.8에서 1.9로의 전환은 수개월 소요)를 가능하게 했습니다. ‘재설계’와 같은 내부 주도 변경은 점진적 배포의 중요성을 일깨웠습니다. 마이크로서비스로 전환하지 않고 모놀리식 구조를 유지했으며, 레거시 코드는 일본의 킨츠기(Kintsugi) 예술 철학을 통해 ‘숨길 것이 아니라 존중해야 할 역사’로 재해석하여 긍정적인 개선 기회로 삼았습니다.
팀의 진화와 도전 과제
장기 프로젝트는 개발자에게 겸손, 책임감, 회복탄력성, 적응력과 같은 중요한 자질을 길러줍니다. 팀 내 미해결 갈등은 ‘정원의 잡초’처럼 프로젝트를 질식시킬 수 있으므로, 초기 단계에서 공감과 친절로 해결해야 합니다. 개발자의 지루함을 방지하기 위해 새로운 기술 학습이나 오픈소스 참여를 장려하여 신선한 관점과 창의성을 불어넣는 것이 중요합니다. 비난과 죄책감을 피하기 위해 ‘소유권의 안전한 공간’을 만들어 실수를 성장의 기회로 보도록 합니다. 장기 프로젝트에서 스트레스와 번아웃은 축적되기 쉬우며, 초기 감지가 어렵습니다. 팀 리더는 스트레스와 번아웃에 대한 인식을 높이고, ‘괜찮지 않다’고 말할 수 있는 안전한 공간을 조성하며, 적극적인 예방 노력을 기울여야 합니다. 개인적인 경험으로는 ‘해야 한다’는 의무감에서 벗어나 의도적인 선택을 하고, 충분한 수면과 휴식을 취하며, 감사 일기를 쓰는 것이 도움이 되었습니다.
이해관계자와의 장기 파트너십
이해관계자의 가치, 필요, 목표를 이해하는 것이 프로젝트 성공의 핵심입니다. 성공적인 파트너십을 위해 기한, 기능, 우선순위에 대한 기대를 정기적으로 확인하여 오해를 방지하고 명확성을 확보해야 합니다. 이해관계자의 성장에 따라 접근 방식을 조정하고 그들의 요구를 올바르게 충족시키는 것이 신뢰 구축에 기여합니다. ‘목소리 큰 소수(vocal minorities)’의 의견에 지나치게 집중하여 프로젝트의 전략적 경로를 벗어나지 않도록 주의해야 합니다. 모든 기능이 고객의 비즈니스 목표 및 핵심 지표와 일치하는지 확인하고, 의사 결정 과정을 투명하게 설명하며, 객관적인 태도를 유지하는 것이 중요합니다.
생존 키트
길고 험난한 여정에서 팀과 프로젝트, 이해관계자의 핵심 가치를 나침반 삼아 길을 잃지 않도록 해야 합니다. 정직한 소통과 행동은 신뢰를 구축하여 어려운 대화를 가능하게 하고 최적의 해결책을 찾도록 돕습니다. 겸손한 자세와 열린 마음으로 배우고 새로운 관점을 수용하는 것은 창의적인 해결책으로 이끌 수 있습니다. 사람들을 존중하는 태도는 예상치 못한 도움을 얻게 합니다. 마지막으로, 포기하지 않고 지금까지 이룬 성과와 극복한 도전을 기억하는 것이 다음 도전을 마주하고 프로젝트를 더 나은 방향으로 이끌 힘이 됩니다.