개발자, 함께 일한다는 것에 대하여
개발자란 무언가를 개발하는 사람입니다. 2022년 현 시대에서 개발자라고 하면 대부분 컴퓨터 프로그램 개발자를 의미하며, 그렇지 않더라도 꽤나 높은 확률로 컴퓨터 프로그램, 혹은 웹 서비스를 겸하는 분야를 개발하는 경우가 많습니다. 역사적으로 개발이란 공학의 한 분야 혹은 결과물로써, 과학적인 지식을 활용하여 무언가를 만들어냅니다. 그 무언가는 우리의 삶을 편하게 해주는 도구가 되기도 하며, 우리의 삶을 파괴하는 무기가 되기도 합니다.
IT 분야의 개발자인 우리는 정보 산업 시대의 문명 위에 이룩한 정보 기술(Information Technology, IT Tech)을 개발합니다. 정보를 전달하기 위해 다방면에서 발전한 정보통신 기술, 암호학 기술, 네트워크 기술 등이 산업 혁명의 결과로 인한 기계 공학 기술과 전기, 전자 공학 기술 등과 맞물렸고, 그 모든 근간에는 전산학과 수학, 물리학이 있습니다. 그 모든 유산 위에서 웹이라는 새로운 시대가 도래하였습니다.
사람들이 너무나도 편하게 사용하는 스마트폰과 노트북에는 이 모든 것이 녹아 있습니다. 일반 사람들이 이렇게 편하게 사용하기 위해, 개발자인 우리는 우리의 일을 합니다. 누군가는 실재 존재하는 물건을 홍보하기 위한 웹 서비스를 개발할 것이며, 누군가는 공장의 기계를 제어하기 위한 프로그램을 개발할 것이고, 또 누군가는 스마트폰 안에 들어가는 애플리케이션을 개발할 것입니다. 너무나도 굉장히 많은 부분들이 서로 엮여 있으며, 어느 한 부분이라도 정상적이지 않으면 문제가 생기게 됩니다. 따라서, 개발자는 필연적으로 함께 일하는 것에 익숙해져야 합니다.
소프트웨어를 작성한다는 것은 눈에 보이지 않는 정교한 건물을 짓는 것과 같습니다. 필연적으로 한 사람이 모든 건물을 다 지어낼 수는 없습니다. 다른 사람들과 함께 일을 해야 합니다. 하지만 다른 모든 사람이 똑똑한 설계자의 생각을 이해하진 못합니다. 때로는 이미 검증되어 있는 함수를 버그 투성이 되도록 다시 작성합니다. 때로는 커밋 규칙을 어기고 브랜치에 푸시합니다. 심지어는 설계가 일부 잘못되었을 수도 있습니다.
IT 개발자로서 함께 일한다는 것은 매우 어려운 일이고, 또한 위대한 일입니다. 개발자로서 성장하면 처음 한 동안에는 어려운 지식을 습득하였으니 나 스스로가 대단하다고 생각하며 모든 것을 할 수 있을 것 같은 마음이 들곤 합니다. 하지만 어느 시점이 되면 나 스스로 모든 것을 전부 다 하는 것이 어렵다는 것을 깨닫게 됩니다. 그리고 어느 순간에는 나는 제대로 하는 것 같은데 다른 사람들이 제대로 못하는 것 같은 느낌도 받습니다. 개발은 필연적으로 복잡한 작업이며, 수많은 요소들이 맞물려 동작하기 때문에 내가 만든 부분이 제대로 되어도 다른 사람이 만든 부분에 문제가 있으면 그것은 문제가 있는 것이 됩니다. 다른 사람에게 설명하기조차 복잡하기 때문에, 여러 사람들과 함께 문제 없이 일을 하는 것은 어려운 일입니다.
어렵지만, 불가능하지는 않습니다. 이를 해결하기 위한 여러 가지 방법들이 있지만(폭포수 모델, 스크럼, 애자일 등), 무엇보다 중요한 것은 조직적이고 체계적인 문화와, 개개인의 열린 마음입니다. 조직의 리더는 본인이 속한 조직에 가장 알맞고 체계적인 방식의 문화를 도입하며 항상 그 기준으로 개발자들과 일을 하고, 개발자 개개인은 조직의 문화를 수용하고 받아들이며, 다른 개발자 혹은 조직의 문화에 문제가 있더라도 항상 상대의 입장에서 생각하고 개선해 나가면 됩니다.
가장 중요한 것은 결국 모두가 잘 되는 일입니다. 사용자가 사용할 B2C 웹 서비스를 개발하든지, 어느 공장에 납품할 프로그램을 개발하든지, 다양한 종류의 개발팀에 대해서 일관된 방법을 적용할 수는 없습니다. 내가 작성한 코드는 자동화가 잘 되어 CI/CD 파이프라인을 거쳐서 아름답게 배포될 수도 있고, 아니면 그냥 개발자가 테스트 하고 그대로 품질 검증 팀으로 넘어갈 수도 있습니다. 어느 방법이든지, 조직과 팀의 상황에 맞는 최적의 방법을 찾는 것이 중요합니다.
개발자로서 우리는 작성하는 코드가 문제 없도록 하는 것이 굉장히 중요합니다. 프로젝트 초기에 단위 테스트는 작성하지 못하더라도, 통합 테스트는 반드시 작성하도록 합시다. 또한 소프트웨어의 규모가 커질 수록 단위 테스트는 반드시 작성하도록 합시다. 신뢰성이 없는 소프트웨어는 아무런 가치가 없습니다. 컴퓨터가 매우 정교한 계산기 라는 사실을 잊지 맙시다. 틀린 답을 내는 계산기는 계산기로서의 아무런 가치가 없습니다.
또한 우리가 불완전한 존재임을 인정하고, 서로 실수할 수 있음을 항상 인지합시다. 팀 내에서 팀장은 좋은 문화를 만들도록 노력하고, 선임은 후임을 업무적으로 잘 지도해주며, 후임은 선임을 존경할 수 있도록 합시다. 업무에 미숙한 후임이 실수하는 것은 당연할 수 있지만, 선임도 실수할 수 있음을 인지합시다. 그럼에도 너그러운 마음으로 실수를 거울로 삼아 타산지석 하여 더 개선합시다. 결과적으로 잘 하면 되는 것입니다.