결정을 서둘지 말라. 하룻밤을 자고 나면 좋은 지혜가 생긴다. - 푸시킨
'게임 개발/관리'에 해당되는 글 145건
- 2010/01/17 즉흥적인 결정을 피할 것 (2)
- 2010/01/17 데이터 수동 입력을 줄이기 위해서 네이밍(Naming)을 활용할 것
- 2010/01/17 회의를 효율적으로 하는 방법
- 2010/01/10 기획자와 현장 고객의 비교
- 2010/01/09 스크럼(Scrum) 프로세스에 대한 의문 (2)
- 2010/01/09 퍼포스(Perforce)에서 잘못된 체인지리스트(Changelist)를 지우는 방법
- 2009/09/13 추정하지 말고 측정할 것 (2)
- 2009/09/10 TortoiseBlame을 활용해 보아요
- 2009/09/06 외주 결과물에 의존하는 것을 줄일 것
- 2009/09/06 의존적 공동 작업은 폴링(Polling) 방식이 아니라 이벤트 드리븐 (Event-Driven) 방식이 돼야 합니다 (2)
- 2009/08/09 TortoiseSVN에서 ignore-on-commit을 활용해서 불필요한 커밋 막기
- 2009/07/09 문제를 편법으로 해결하려고 하지 말고, 되도록 장기적 관점에서 접근하고 해결하세요
- 2009/07/04 외부 도구의 갱신 필요성을 판단하는 기준
- 2009/06/21 서브버전(Subversion) 저장소 일부를 다른 저장소와 동기화하는 방법
- 2009/06/13 서브버전(Subversion) 서버 없이 TortoiseSVN으로 로컬 저장소 만들기 (2)
- 2009/06/08 효율적인 소프트웨어 형상 관리 저장소 관리 방법
- 2009/06/07 게임에서 스크립트 언어의 올바른 활용 방안
- 2009/06/07 게임 리소스 파일 무결성 보장 방법
- 2009/06/05 서브버전(Subversion) 한글 메시지 표시 끄기
- 2009/03/03 능력은 직책에, 실적은 성과급에 반영해야 합니다 (2)
- 2009/02/26 피드백 주기를 최대한 짧게 할 것 (4)
- 2009/01/09 SK아이미디어 구조조정, 120명 해고 (2)
- 2009/01/08 Game Developer's Front Line Awards 2008 (2)
- 2008/11/25 형상 관리 디렉토리는 빌드와 관련된 모든 것을 하나의 루트 디렉토리 밑에 둘 것 (2)
- 2008/11/16 제리 로이스터(Jerry Royster) 롯데 자이언츠 감독과 김경문 올림픽 야구 대표팀 감독의 리더십
- 2008/09/27 게임 개발 기간 단축 방법 (2)
- 2008/09/15 개발 지연의 주된 이유는, 안 해도 되는 일을 하느라 해야 할 일을 못한 것 (2)
- 2008/07/06 우리가 블리자드(Blizzard)로부터 배워야 할 집단 지성의 힘 (2)
- 2008/06/26 업무 능력은 경력 연차나 근무 기업 규모와 별개
- 2008/06/10 책 '애자일 회고: 최고의 팀을 만드는 애자일 기법' 감상문
p4 change -d [번호]예: p4 change -d 1000
어떤 사람은 문제를 정공법으로 공략하려고 하지 않고, 지금 당장 쉽고 편해 보이는 방법으로 해결하려고 합니다. 재치가 있다거나 영리하다는 평가를 받는 사람이 대개 이런 경향을 갖습니다. 이런 사람이 제안하는 방법을 관리에 도입하면 나중에 상당히 골치 아파집니다.
임시방편은 그 순간엔 유용한 해결책이 될 수 있습니다. 하지만, 임시방편은 시간이 지날수록 아무것도 하지 않는 것보다 못하게 되는 때가 잦습니다. 문제는 되도록 장기적 관점에서 접근해서 근본적인 부분을 해결해야 합니다. 임시방편은 어디까지나 임시로 쓰여야 합니다.
문제를 해결하는 방법을 선택하는 기준은, 어떤 방법이 지금 당장 제일 편한가가 아니라, 어떤 방법이 제일 합리적인가입니다.
게임 개발을 하다 보면, 외부에서 제작한 도구를 많이 사용하게 됩니다. 예를 들어, 컴파일러, 그래픽 소프트웨어, 게임 엔진, 그리고 기타 라이브러리 등입니다. 이런 도구는 새 버전이 계속 나오는데, 과연 새 버전을 계속 적용해야 하는지 판단하기 어렵습니다. 이럴 때엔 제일 많은 사람이 사용 중인 버전으로 계속 갱신하는 게 좋습니다.
외부 도구를 지속적으로 갱신하면 다음과 같은 장점이 있습니다. 지원을 쉽게 받을 수 있고, 필요한 기능이 이미 구현돼 있을 수 있으며, 최적화나 버그 수정이 더 돼 있을 수도 있습니다. 반면에 외부 도구를 갱신하지 않으면 다음과 같은 장점이 있습니다. 예상치 못한 부분에서 문제가 생길 확률이 적고, 커스터마이제이션(customization)이 좀 더 쉬우며, 손에 익숙하므로 생산성이 높습니다.
위와 같이 어느 방식이 항상 더 낫다고 말할 순 없어서, 프로젝트의 상황에 따라 결정하는 게 바람직합니다. 하지만, 기본적으로는 제일 다수가 사용하는 버전을 그대로 따라가는 게 장기적으로 봤을 때 편합니다. 장기적으로 볼 때엔 유지보수라는 측면이 제일 중요한데, 어떤 버전이 얼마나 지원을 쉽게 받을 수 있고 얼마나 다수의 개발자가 그 일을 할 수 있는지 생각해 보면, 왜 다수가 사용 중인 버전을 따라가는 게 좋은지 알 수 있습니다.
저장소의 내용 일부를 외부 저장소에 그대로 반영시켜야 할 때가 있습니다. 예를 들면, 개발팀의 소프트웨어를 QA팀에 제공한다든지 할 때입니다. 이런 일을 할 때에도 어떤 방법이 가장 효율적일지 생각해 봐야 합니다.
우선 이럴 때 접근 권한을 어떻게 할 것인지 정해야 합니다. 예를 들어, 개발팀의 저장소를 열어 주고 QA팀에게 읽기 권한만 줄 수도 있을 것이고, QA팀에게 저장소를 열어 달라고 하고 쓰기 권한을 얻을 수도 있을 것입니다. 전자의 방법을 채택하면 동기화를 고민할 필요가 없으니까 제일 좋습니다. 여기서는 후자의 방법을 채택해야만 하는 상황을 가정합니다.
동기화 방법으로 제일 쉽게 떠오르는 것은 변경된 파일을 모았다가 QA팀의 저장소에 복사하고 직접 커밋하는 방법일 것입니다. 하지만 이 방법은 변경된 파일 목록을 일일이 관리해야 하는 문제가 있으므로 추천하지 않습니다.
대안은 서브버전이 관리해 주는 변경된 파일 목록을 이용해 합병(merge)을 사용하는 방법입니다. 이 방법은 개발팀에서 QA팀에게 최신 소프트웨어를 항상 제공하고 싶지는 않을 때 좋습니다. 개발팀에서 소프트웨어를 넘겨 줘야 할 때마다 QA팀 저장소에 합병하면 됩니다.
만약 QA팀이 개발팀의 최신 버전을 항상 자동으로 얻고 싶어 한다면, 서브버전의 external 기능을 사용하면 됩니다. 동기화가 자동으로 되므로, 특별한 문제가 없다면 이 방법이 좋겠습니다.
형상 관리를 하려면 대개 서버 애플리케이션을 설치해야 하는 번거로움이 있습니다. 하지만 TortoiseSVN을 사용하면, 서버를 설치하지 않고도 로컬 저장소를 만들고 형상 관리를 할 수 있습니다. 이 기능은 개인적으로만 사용하는 자료가 있는데, 백업만으로는 충분하지 않고 버전 관리를 해야 하는 파일이 있을 때 유용합니다.
로컬 저장소를 만드려면 탐색기에서 마우스 오른쪽 버튼 클릭으로 컨텍스트 메뉴를 띄운 다음에 'Create Repository here...'를 선택하면 됩니다. 로컬 저장소의 경로는 file:///D:/work와 같은 형태입니다. 자세한 사용법은 Chapter 3. The Repository을 참고하시면 됩니다.
기본적으로, 하나의 형상 관리 저장소에 들어가야 할 자료는 해당 소프트웨어의 빌드에 필요한 모든 자료입니다. 소스 코드(.cpp, .h, .sln 등), 모델링 데이터 원본(.max 등), 이미지 데이터 원본(.psd등), 각종 기획 문서(.doc, .xls), DB 스키마 등 해당 소프트웨어를 빌드하고 유지보수할 때 필요한 모든 자료를 다 넣어야 합니다. 소스 코드를 제외한 데이터의 원본을 저장소에 넣지 않는 개발팀이 많은데, 이러면 나중에 데이터를 수정해야 할 때 원본이 없어서 수정을 못 하는 불상사가 생깁니다. 빌드에 필요한 각종 외부 소프트웨어는 버전 관리가 필요없고 용량을 많이 차지하므로 저장소에 넣지 말아야 합니다. 그런 소프트웨어는 다른 파일 공유 서버에 보관하고 링크만 저장소에 넣어 두는 게 좋습니다.
배포용 데이터가 모여 있는 폴더엔 소스를 넣지 말아야 합니다. 소스를 넣어 놓으면 사용자에게 공개할 우려가 있고, 나중에 배포할 때 불필요한 파일을 걸러 내는 작업을 해야 하는 번거로움도 생깁니다.
trunk(main line)엔 항상 배포 가능한 기능만 들어가 있어야 합니다. 아직 구현이 안 끝나서 배포할 수 없는 기능을 개발하고 있다면, 담당자들끼리 브랜치를 만들거나 공유 폴더 등을 이용해 파일을 관리해야 합니다. 그렇게 하지 않고 구현이 끝나지 않은 기능도 trunk에 올려 놓으면, 나중에 배포할 때 해당 기능을 걸러 내는 일을 해야 합니다. 그 작업은 실수할 가능성이 높으므로 좋지 않습니다.
브랜치는 소프트웨어 개발에서 필요악입니다. 브랜치가 적으면 적을수록 관리하기 좋지만, 그렇다고 브랜치 없이 개발을 진행하는 것은 거의 불가능합니다. 브랜치는 최소한 두 개는 있어야 합니다. 하나는 릴리즈된 버전용이고, 다른 하나는 릴리즈 준비 버전입니다. 주 개발 버전에서 기능 추가가 끝나면, 릴리즈 준비 버전 브랜치로 병합합니다. 릴리즈 준비 버전 브랜치에서 버그 수정이 끝나면, 배포하고 릴리즈 버전 브랜치로 병합합니다. 각 브랜치의 수정은 수정이 완료될 때마다 주 개발 버전으로 병합해야 합니다. 주기적으로 자동 병합하게 하는 것도 좋겠습니다.
빌드를 통해 만들어 낼 수 있는 파일은 저장소에 올리지 않는 게 저장소 용량을 아낄 수 있고 충돌이 생기지 않으므로 좋습니다. 하지만 예외적으로, 파일 패킹 등의 추가 과정을 거쳐야 최종 배포본을 얻을 수 있을 때엔 최종 결과물도 저장소에 올려 놓는 게 편합니다. 사내 QA 팀 등에 실제 사용자의 것과 최대한 비슷한 배포본을 빠르게 배포할 수 있기 때문입니다. 그런데 큰 파일을 올려 놓으면 저장소의 크기가 너무 커지는 게 아닌가 걱정할 수 있습니다. 하지만 서브버전 등의 소프트웨어는 파일의 변경 사항만 누적 기록하는 방식을 쓰므로, 파일 내용이 버전마다 많이 바뀌지 않는다면 크게 문제가 되지 않습니다.
빌드로 생성 가능한 실행 파일도 저장소에 넣지 않는 게 원래 원칙입니다. 하지만 시험용으로 배포할 때 실행 파일도 같이 받을 수 있게 하면, 실행 파일과 데이터의 버전이 안 맞을 우려도 없고 배포하기도 편해서 좋습니다. 따라서 로컬 빌드된 실행 파일이 위치할 폴더를 하나 만들고, 빌드 서버가 배포할 실행 파일을 커밋할 폴더는 따로 두는 게 좋습니다. 예를 들어, 빌드된 실행 파일이 위치할 폴더가 local_binary라면 빌드 서버가 배포할 실행 파일 폴더는 binary로 하면 됩니다. 데이터 참조는 "../data" 식으로 똑같이 참조할 테니 문제가 없습니다.
참고:
Chapter 4. Branching and Merging
High-level Best Practices in Software Configuration Management
Ned Batchelder: Subversion branching quick start
브랜치(Branch) 어떻게 활용하고 계신가요?
요즘 게임 개발자는 스크립트 언어를 많이 사용하고 있습니다. 문제는 스크립트 언어를 남용하는 때가 적지 않다는 것입니다.
스크립트 언어를 프로그래머만 사용하고 편집이나 디버깅이 까다롭다면, 스크립트 언어 사용의 큰 장점을 살리지 못하는 것입니다. 게임 개발에서 스크립트 언어를 사용하는 최대 장점은, 프로그래머가 아닌 사람이 게임 로직을 제어할 수 있다는 것입니다. 이 장점을 살리지 못하는 스크립트 사용은, C++ 대신에 다른 언어를 사용하는 것일 뿐입니다. 프로그래머만 스크립트 언어를 사용한다고 해도, 빌드와 게임 로딩에 걸리는 시간을 줄인다거나 코드가 간결해지는 장점이 있을 수도 있습니다. 하지만 낯선 언어, 기능이 부족한 편집기와 디버거, 그리고 C++과의 연동 작업 등을 고려하면, 단점이 더 많습니다.
텍스트 데이터 표현을 스크립트 언어로 하는 것도 스크립트 남용의 좋은 예입니다. 스크립트 언어는 로직을 제어하는 데에만 써야 합니다. 텍스트 데이터 표현엔 XML이나 엑셀 문서 등의 좋은 포맷이 많이 있습니다.
스크립트 언어는 분명히 장점을 갖고 있지만, 단점이 더 많은 일에도 스크립트 언어를 사용하는 것은 좋은 선택이 아닙니다.
무효한 자료 입력을 막는 제일 좋은 방법은 입력 시 무효한 값을 입력할 수 없게 원천봉쇄하는 것입니다. 엑셀(Excel)이나 액세스(Access)에서는 필드 값의 범위를 정할 수 있고, VBA를 써도 유효성 검사를 할 수 있다고 합니다. 써 보진 않았지만, XML에서도 스키마를 이용하면 유효성 검증이 된다고 합니다.
두 번째로 고려해야 할 방법은 유효성 검사 도구를 만드는 것입니다. 직접 도구를 제작하지 않고는 유효성 검사가 불가능한 때도 있으므로, 거의 필수적인 도구입니다. 이 도구를 만들어서 빌드 서버가 빌드할 때 유효성 검사도 함께하게 하면 좋습니다. 각 리소스 작업자가 이 도구를 커밋 전에 항상 실행할 수도 있겠지만, 그건 좀 불편합니다.
리소스 파일 관리를 어떻게 할 것인가는 게임 개발에서 상당히 중요한 일입니다. 따라서 관리자는 이런 문제를 어떻게 하면 쉽게 해결할 수 있을지 계속 고민해야 합니다.
참고:
엑셀을 이용한 데이터 입력의 딜레마
엑셀로 작업한게임데이터의 유효성검사에대해..
도대체 공 있는 자가 후한 녹을 받고 유능한 자가 큰 벼슬자리에 있게 된다면 임협의 인사가 어찌 사사로운 용맹을 떠나서 적을 막는 데 힘쓰지 않을 수 있겠으며 벼슬길 찾는 인사가 어찌 권세가를 꺾고서 결백을 힘쓰지 않을 수 있겠는가. - 책 <한비자>많은 기업이 말로는 인재 경영을 외치지만, 인재를 실제로 소중하게 생각하는 곳은 드뭅니다. 좋은 인재를 찾아 뽑는 일도 중요하지만 인재를 잘 관리하는 것도 중요한데, 그 관리를 어떻게 할 것인지 심각하게 고민하는 기업은 거의 못 봤습니다.
대부분 기업은 다음처럼 운영됩니다. 학력이나 경력이 화려하거나, 직급이 높은 사람과 친한 사람은 많은 연봉에 중요한 직책을 맡게 됩니다. 반면에 능력이 있어도 학력이나 경력이 특별하지 않고 인맥도 없는 사람은 연봉도 적고 중요한 자리를 맡을 수 없습니다. 회사가 이렇게 운영되니 과거의 영광에 안주한 사람이 기업의 혁신을 막고, 능력 있는 인재는 그 능력을 펼치지 못하는 것입니다.
어떤 사람이 정말 능력 있는 인재라면, 그 사람의 학력이나 경력과 무관하게 중책을 맡겨야 합니다. 반면에 직책에 맞지 않는 능력을 갖춘 사람이라면, 그 사람이 과거에 어떤 일을 했던지 간에 과감히 교체해야 합니다.
그리고 실적에 대한 보상은 성과보수 등의 일회성으로 끝나야 합니다. 과거에 실적이 좋았다고 해서, 직급이나 연봉을 올려 주는 장기적 보상은 지속적인 도전의 의지를 감퇴시킬 뿐입니다. 과거는 과거일 뿐이고, 중요한 건 지금 얼마나 잘하고 있는가입니다.
게임 개발에서 제일 중요한 건 사람입니다. 따라서, 게임 개발사의 경영진과 관리자가 해야 할 제일 중요한 일은, 어떻게 하면 훌륭한 인재를 모아 능력을 발휘하게 할 수 있을지 고민하는 일입니다. 특히 개인의 능력과 실적을 어떻게 반영할 것인가는 그 일의 핵심에 속합니다.
피드백은 좋은 결과를 얻고자 할 때 필수적인 요소입니다. 계속 노력하는데도 결과가 좋지 않다면, 그 원인은 피드백을 제대로 활용하지 못한 것일 확률이 높습니다. 피드백을 잘 활용하려면 여러 가지 생각해야 할 것이 많은데, 그중에서 주기에 대해 생각해 보겠습니다.
애자일(Agile) 방법론 중의 하나인 스크럼(Scrum)에서는 반복 주기를 한 달로 할 것을 권장합니다. 이것은 보통 프로토타입 시연 이후 알파 테스트 전까진 프로젝트를 한 번도 점검하지 않는 일반적인 게임 개발 과정보다는 피드백을 상당히 적극적으로 활용하려는 편입니다. 하지만, 저는 이 정도 주기도 상당히 긴 편이라고 봅니다. 물론 애자일 문화가 정착되지 않은 팀에는 한두 달 정도의 반복 주기도 벅찹니다. 그러나 팀에 애자일 문화가 뿌리내렸거나 처음부터 그런 자세를 가진 사람이 모였다면, 반복 주기는 최대 1주를 넘지 않는 게 좋습니다.
왜 피드백 주기가 짧을수록 좋을까요? 피드백이 잦을수록 일이 크게 잘못될 확률이 낮아지기 때문입니다. 모니터를 보지 않고 타자하다 보니 한영 전환이 잘못돼 있어서 엉뚱한 글씨가 나온 경험을 누구나 갖고 있을 것입니다. 이처럼 작고 쉬운 일조차도 피드백 주기가 길면, 일이 많이 잘못된 후에야 실수했다는 걸 알기 쉽습니다. 더구나 게임 개발처럼 크고 어려운 일이라면 두말할 이유가 없습니다.
피드백은 어떤 일을 할 때 제일 유용한 도구 중 하나이고, 그 피드백의 주기를 짧게 가져가는 것은 피드백을 잘 활용하기 위해 꼭 필요한 일입니다.
디스이즈게임닷컴에 SK아이미디어 구조조정 기사가 떴습니다. 그 구조조정은 그동안 SK의 행보로 볼 때, 충분히 예측 가능했던 당연한 일입니다. 참고로, 방만한 경영을 하던 CJIG가 대규모 구조조정을 한 지 얼마 지나지 않았습니다.
예전에 왜 일반 기업은 Game 개발에 실패하는가란 글에서 지적했듯이, 일반 기업이 게임 개발 산업에 뛰어들어서 성공할 확률은 극히 낮습니다. 불행하게도 SK, KT, 그리고 CJ 등은 이익을 남기지 못하는 게임 개발 사업을 계속 하고 있으며, 획기적인 개선이 일어나지 않는 한, 앞으로 몇 년 안에 그 사업을 완전히 정리할 가능성도 큽니다.
항상 저는 주변의 게임 개발자에게 일반 기업보다 전문 게임 개발사에 취업할 것을 권합니다. 그리고 아무리 전문 게임 개발사더라도 경영진이 게임 개발에 대해 잘 모른다면, 그 개발사는 잘되지 않습니다. 게임 개발에 대해 모르는 경영진도 훌륭한 관리자와 개발자를 채용하고 사업에 맞게 경영할 수 있다고 생각하신다면, 반드시 다시 생각해 보시길 바랍니다.
아직도 많은 일반 기업이 준비도 제대로 하지 않고, 단지 대박을 바라며 게임 산업에 뛰어드는 게 참 바보 같아 보입니다.
게임 디벨로퍼 잡지 편집자들이 선정한, 2008년의 우수 게임 개발 도구입니다. 어떤 도구가 선정됐는지, 그리고 후보작으론 어떤 게 있는지 알아 두면 나중에 도움이 많이 됩니다. 물론, 대다수 현업 개발자의 의견이 제대로 반영된 것은 아니므로, 선정된 도구가 꼭 훌륭하다는 보장은 없습니다.
흔히 저장소를 여러 개로 나누고, 각각을 따로 관리하는 경우가 있습니다. 예를 들면, 게임 데이터 폴더와 소스 폴더를 분리하는 것입니다. 얼핏 보면 합리적이라고 생각할 수 있지만, 사실은 불필요한 분할일 뿐입니다. 이렇게 저장소를 따로 나누면 변경 사항을 추적하기도 어려울 뿐만 아니라, 커밋 단위가 원자적 단위가 되지도 않아 더 문제입니다. 만약 특정 그룹에게만 특정 폴더를 접근할 권한을 주고 싶다면, 형상 관리 시스템에서 제공하는 권한 설정 기능을 활용하는 게 더 낫습니다.
반대로, 어떤 곳은 회사의 모든 프로젝트를 하나의 저장소 폴더 밑에 두기도 하는데, 한 제품의 빌드와 관련 없는 데이터를 이렇게 하나에 몽땅 넣어 두는 것은 커밋 데이터만 많아져서 작업만 불편해질 뿐입니다. 형상 관리 시스템은 하나의 프로젝트를 완전히 빌드하는 데 꼭 필요한 데이터만 묶어 두어야 합니다.
형상 관리 시스템을 어떻게 사용하는가에 따라 작업 효율은 차이가 크게 날 수 있습니다. 관리자는 팀원들이 도구를 어떻게 하면 편하게 쓸 수 있을지 항상 공부하고 고민해야 합니다.
제리 로이스터 감독과의 인터뷰를 언젠가 TV에서 우연히 보게 되었는데, 그는 정말 제대로 된 관리자라는 생각이 들었습니다. 그런 훌륭한 감독이 있었기에, 7년 동안 하위권을 맴돌던 롯데 자이언츠라는 팀이 정규 리그 3위를 차지하게 되었을 것입니다.
이런 감독에 대해 글을 쓰지 않을 수 없어서, [Weekly Biz] "자신감을 업그레이드 시켜라" 로이스터가 말하는 '로이스터 리더십' 기사를 읽고, 일부를 인용합니다.
로이스터는 "한국에서는 통역을 거친다는 제약 때문에라도 나는 불가피하게 간결하고 명쾌한 지시를 내려야 하는데 이는 오히려 리더에게 긍정적 제약"이라며 "어떤 비즈니스에서도, 어떤 조직에서도 간결하고 명쾌하고 반복적인 커뮤니케이션은 매우 유익하다"고 단언했다.간결한 커뮤니케이션은 중요도가 작은 정보를 걸러 내서 전달하기에, 수용자가 핵심을 좀 더 빨리 파악하게 합니다. 그리고 명쾌한 커뮤니케이션은 오해의 소지를 없애므로 불필요한 재작업을 줄일 수 있습니다. 마지막으로, 반복적인 커뮤니케이션은 상황의 변화에 따른 피드백을 자주 반영할 수 있게 합니다. 그는 이렇게 커뮤니케이션에 필요한 덕목을 알고 있으니, 한국어를 잘 못한다 해도 별로 문제될 것이 없습니다.
앞의 기사에 다음과 같은 내용도 있어서, 역시 인용합니다.
로이스터에게 "당신은 선수를 평가할 때 어떤 지표에 가장 비중을 두느냐"고 묻자 "나는 숫자나 통계를 보지 않고 선수를 본다"는, 매우 의외의 대답이 돌아왔다.
"숫자에는 함정이 있다. 1게임에 3안타를 쳤다는 기록만 보면 그 선수는 굉장히 잘한 것 같다. 하지만 빗맞은 공이 높은 바운드 덕분에 운 좋은 안타가 될 수 있다. 숫자에만 집착하면 이를 알아낼 수 없다. 나는 선수를 주시하고, 그들의 플레이를 관찰해 판단한다."
"올해 롯데의 실책 수가 작년보다 늘어났으니 수비가 나빠졌다고 보는 전문가가 있더라. 절대 그렇지 않다. 과거에는 수비 시도조차 하지 못해서 아예 손도 못 대던 어려운 타구를 이제는 수비수가 잡게 되니 송구 실수가 나오고 실책 수가 늘어난 것이다."많은 관리자가 객관적으로 측정하기 쉬운 수치만 맹신합니다. 목표 대비 업무량을 측정하고, 출퇴근 시간을 확인하며, 문제를 몇 개나 일으켰는지 셉니다. 그에 비해 정작 중요한, 고객 만족도, 작업 품질, 협업 능력, 문제 해결 능력, 작업 과정 개선 능력, 아이디어 창출 능력 등은 객관적으로 측정하기 어렵다는 이유로 무시합니다. 이러니 조직이 제대로 돌아갈 리가 없습니다.
그리고 로이스터 감독은 선수를 믿고 자신감을 키워 줄 것도 강조하는데, 김경문 감독도 그 부분은 만만치 않습니다. 김경문 감독의 금메달 리더십을 읽어 보시면 아시겠지만, 자질이 있는 선수를 믿고 그 선수의 역량을 최대한 이끌어 내는 능력이 탁월합니다.
士爲知己者死 女爲悅己者容(사위지기자사 여위열기자용: 선비는 자신을 알아주는 이를 위해서 죽고, 여자는 자기를 사랑해 주는 이를 위해 화장을 한다.) - 전국책(戰國策)두 감독이 전국책을 읽었는지는 모르겠지만, 전국책의 지혜를 알고 있군요.
훌륭한 리더는 프로야구계뿐만 아니라 어느 분야에나 있고, 게임 개발사의 관리자는 그들에게서 배워야 합니다. 그들은 살아 있는 경영 교과서입니다.
아래에 여러 가지를 적어 보았습니다만, 개발 기간을 단축하는 주된 방법은 경험의 활용이 아닐까 생각합니다.
1. 엔진 사용 경험
사용하려는 엔진을 써 본 사람이 있으면, 그 한 사람 때문에 개발 속도가 상당히 향상됩니다. 어떤 엔진을 쓰느냐보다 그 엔진을 잘 다룰 수 있는가가 더 중요한지도 모르겠습니다.
2. 게임에 맞는 엔진 사용하기
다른 장르의 게임을 만들려고 하는데, FPS에 적합한 엔진을 쓰는 것은 위험 부담이 큽니다. 개발 도중 발생하는 많은 문제를 스스로 해결해야 하기 때문입니다.
3. 엔진에 맞는 게임을 제작하기
위와 비슷한 얘기지만, 반대의 상황일 때입니다. 이미 특정 엔진을 보유하고 있고 그 엔진을 잘 다룰 수 있는 개발자가 있다면, 그에 맞춰서 게임을 제작하는 게 좋습니다.
4. 비슷한 형태의 게임 제작 경험
어떤 게임을 만들든지, 비슷한 게임을 만들어 본 사람이 있으면 이 또한 큰 도움이 됩니다. 개발 도중 발생하는 많은 문제를 미리 준비할 수 있고, 문제를 어떻게 해결해야 하는지 알 수 있기 때문입니다.
5. 지식 공유
어떤 문제가 생겼을 때, 개인이 처음부터 해결책을 찾는 것보다 여러 사람이 이미 가진 경험을 활용하는 게 훨씬 이득인 경우가 많았습니다. 많은 개발사가 팀 단위로 나뉘고 회사 전체의 지식이 공유되지 않는 경우가 많은데, 개발 기간을 단축할 수 있는 좋은 방법을 놓치는 것 같습니다.
6. 쉬운 방법으로 개발하기
처음부터 최적화되고 일반적이지만 복잡한 방법으로 개발하려고 하지 말고, 경험이 있거나 간단한 방법으로 개발하는 게 좋은 것 같습니다. 연구가 필요한 것은 개발과 별도로 진행해야 합니다.
7. 직무에 맞는 일을 하기
경험이 있는 일을 하는 게 아무래도 효율이 좋습니다. 했던 일을 또 하기 때문에 의욕이 좀 떨어진다는 문제가 있지만, 그렇다 하더라도 경험은 중요한 것 같습니다. 또 실제 업무를 담당하는 사람이 관련 작업을 해야 합니다. 예를 들어 기획자가 수치 하나를 바꿔 보고 싶은데, 프로그래머에게 부탁해야 하는 일이 자주 생긴다면 문제가 있습니다.
8. 도구의 활용
엔진뿐만 아니라 다른 도구의 중요성도 상당히 큽니다. 컴파일시간을 줄이도록 분산 컴파일 도구를 쓰기, 검증된 라이브러리를 쓰기, 최대한 다른 사람의 라이브러리를 활용하기, 그리고 익숙한 도구를 쓰기 등이 있겠습니다.
9. 우선순위 설정
세부적인 부분은 서비스 이후에 추가하거나 변경하고, 핵심적인 부분부터 만드는 방법도 있겠습니다. 전체 개발 기간은 그대로지만, 서비스를 좀 더 빨리 시작할 수 있다는 장점이 있습니다.
어떤 개발 프로젝트가 지연되는 제일 주된 이유는, 시간을 불필요한 일에 투자하느라 꼭 필요한 일엔 투자하지 못하는 것입니다.
여기서 불필요한 일은 고객에게 필요하지도, 그렇다고 개발자에게 불가피하게 필요하지도 않은 모든 일입니다. 구체적으로 나열해 보면, 필요 이상의 문서화, 하나 마나 한 회의, 중요도가 낮은 기능 추가, 비병목지점 최적화, 불필요한 확장성, 일회용 데모 제작, 관리를 위한 관리, 그리고 최신 기술 도입 등 주로 개발자 위주의 결과에 집착하는 것입니다.
반대로, 필요한 일은 사용자에게 꼭 필요하거나, 사용자에겐 중요하지 않지만 개발자에게 꼭 필요한 것들입니다. 기능 충실히 구현하기, 버그 관리, 사용자 의견 피드백, 거시적 최적화, UI 다듬기, 개발 과정 개선, 그리고 필수 문서 작성 등이 있습니다.
개발자는 제품을 언제나 사용자 처지에서 생각하고 개발해야 합니다. 사용자에게 중요하지 않은 것은 대개 개발자에게도 중요하지 않습니다. 하루 중 얼마나 많은 시간이 불필요하게 쓰이고 있는지 확인해 봐야 합니다.
린 소프트웨어 개발(Lean Software Development)에선 이와 비슷한 내용을 언급하고 있습니다. 거기에서는 이렇게 고객에게 가치를 전달하지 못하는 일을 낭비라고 표현합니다. 관심 있는 분은 살펴보시면 도움이 많이 될 것입니다.
어떤 게임 개발사가 작품 하나로 우연히 성공하는 일은 많지만, 그 성공을 꾸준히 이어가며 성장하는 개발사는 아주 드뭅니다. 왜 그럴까요? 단 한 번 성공하려면 운만으로도 가능하지만, 여러 번 연속해서 성공하려면 운이 아니라 내공이 뒷받침돼야 하기 때문입니다. 그 내공에서 가장 중요한 두 가지 요소는, 직원 개개인의 능력, 그리고 모든 직원의 능력을 최대한 발휘하게 하는 기업 문화입니다.
성공한 게임의 유명 개발자 한두 명을 모셔 오고 그들에게 절대 권력을 주면, 저절로 성공하리라 생각하는 사람이 많은 것 같습니다. 그러나 그들에게 무한한 권력을 주면 그게 독이 되어, 다른 직원의 의견은 듣지도 않고 대상 게이머의 취향도 무시한 채로 자신이 원하는 게임을 원하는 방식대로 만드는 때가 잦습니다.
참고로, 美블리자드 한국인 개발자 강형원씨 '디아블로3' 개발자 되다에서 새겨볼 만한 부분을 아래에 인용합니다.
'블리자드는 어떤 회사인가'라는 질문에 강씨는 "일단 개발이 시작되면 모든 사람이 아이디어를 쏟아냅니다. 현실성이 없더라도 절대 버리거나 무시하지 않아요. 각자 자기 역할을 하지만 궁극적으로 전체에 이익이 될만한 아이디어는 언제든 제시할 수 있고, 받아들여질 가능성이 열려 있는 곳"이라고 말했다.
아무리 오랫동안 일을 했어도, 일의 핵심을 깨닫지 못한 사람은 아무것도 모르는 것이나 마찬가지입니다. 오히려 자신이 아는 부분에만 집착한 나머지, 쓸데없는 일에 노력을 들이는 때가 잦습니다. 따라서, 대다수 기업이 채택하고 있는, 근무 연수에 따라 연봉이 자동으로 올라가는 체계는 잘못됐습니다.
한편, 근무하는 곳의 규모를 업무 능력과 같게 생각하는 사람도 있습니다. 만약 모든 사람이 큰 기업에 더 취업하고 싶어한다면, 그 논리는 어느 정도 타당할 것입니다. 하지만, 큰 기업에서 뒤치다꺼리 일이나 하는 걸 싫어하거나, 분위기, 연봉, 그리고 장래성 등의 이유로 작은 기업을 선호하는 사람도 많습니다. 따라서, 큰 기업에 근무한다고 해서 능력이 뛰어나다는 보장은 없습니다. 어떤 게임 개발사는 근무했던 기업의 직원 수를 직무 경력서에 적으라고 요구하는데, 한심하다는 생각이 들었습니다. 그리고 당연하게도, 그 개발사는 인원과 자금을 많이 투입했음에도 불구하고, 회사 설립 이후 이렇다 할 성공작을 못 내놓고 있습니다.
왜 한국 게임 업계는 점점 퇴보할까요? 중요한 이유 중 하나는, 능력 있는 사람이 제대로 대우받지 못하기 때문입니다. 가능성 있는 인재들이 게임 업계를 형편없는 대우 탓에 피하고 있고, 업계에선 무능력한 사람이 결정권을 쥐고 있으니 재미있는 게임이 나올 수가 없습니다. 능력 있는 사람이 대접받지 못하는 이 관행이 바뀌지 않는 한, 한국 게임 업계의 미래는 암울합니다.
- 옮긴이: 김경수
- 펴낸 곳: 인사이트
- 펴낸 날: 2008년 1월 20일
- ISBN: 978-89-91268-38-8(9788991268388)
원서 정보
- 제목: Agile Retrospectives: Making Good Teams Great
- 지은이: 에스더 더비(Esther Derby)와 다이애나 라센(Diana Larsen)
- 펴낸 곳: Pragmatic Bookshelf
- 펴낸 날: 2006년 7월 26일
- ISBN: 978-0977616640(9780977616640)
평점
★★☆☆☆
평가
회고의 내용을 어떻게 하면 좋은가보다는 회고를 진행하는 방법에 초점을 맞춘 책입니다. 회고에 참여하면서 아쉬웠던 것은 회고의 방법보다는 내용이었는데, 그 부분에 대해 해결책을 별로 제시하지 않아서 만족스럽지 않습니다. 회사에 있던 책이 아니라 제 돈으로 산 책이라면, 돈이 상당히 아까울 것 같습니다.
인상깊은 부분
33쪽:
설명이 끝났다면 방에 있는 모든 사람이 돌아가며 한마디씩 이야기하는 시간을 갖는다. 회고를 시작할 때부터 말을 하지 않은 사람은 이후에도 계속 말을 하지 않아도 괜찮다고 생각하기 쉽기 때문이다. 회고의 목적은 사람들이 함께 생각하고 배우는 것이니만큼 진행자는 모든 사람을 참여시켜야 한다.
44쪽:
회고를 시간낭비라고 생각하는 팀들은 일상적인 작업 계획과 개선 계획을 분리시킨다. 이렇게 계획이 분리되어 있으면 일상 작업외의 일을 할 여유가 전혀 나지 않는다.

댓글을 달아 주세요
전 게임 개발이 아니라 이번에 전세집을 구하면서 너무 즉흥적으로 결정한듯... 막상 계약걸고 난 다음에 이것저것 체크해야할게 많다는걸 뼈져리게 느꼈습니다!!!
전세는 전세금 돌려 받기 어려운 일도 종종 생겨서, 꼼꼼하게 확인하고 계약하는 게 좋다고 하더라구요. ㅎㅎ