좋은 소프트웨어 개발자와 회사에서의 역할
개발자로서 우리는 어떤 모습이 되어야 하는가? 이 질문은 회사에서 소프트웨어 개발자로 일하며 꾸준히 생각해온 주제이다. 특히 팀에 속한 구성원으로서 개인의 성장과 회사의 발전을 동시에 추구하는 것이 무엇을 의미하는지에 대해 고민해왔다. 이 글에서는 좋은 개발자와 좋은 소프트웨어의 정의를 회사의 관점에서 이야기하고자 한다.
개발자로서 중요한 덕목 중 하나는 회사의 기술적 부채를 늘리지 않는 것이다. 기술적 부채는 유지보수성과 확장성을 저해하는 요인으로, 이는 단기적으로는 문제가 없더라도 장기적으로 조직의 효율성을 크게 떨어뜨린다. 따라서 좋은 개발자는 부채를 덜어내거나 최소한 부채를 더 늘리지 않는 방식으로 코드를 작성해야 한다.
좋은 소프트웨어는 내가 퇴사하더라도 살아남을 수 있는 소프트웨어이다. 내가 만든 코드가 내가 떠난 후에도 유지보수되고, 새로운 요구사항에 맞게 확장될 수 있다면 이는 좋은 소프트웨어의 특징이다. 반대로, 내가 만든 시스템이 지나치게 복잡하거나 독특한 기술을 남발하여 후임자들이 유지보수를 포기하고 처음부터 새로 만들어야 하는 상황을 초래한다면 이는 분명히 나쁜 사례로 볼 수 있다.
소프트웨어 개발은 팀워크가 필수적이다. 좋은 개발자는 마치 이어달리기에서 바통을 매끄럽게 넘겨주듯, 자신의 역할을 충실히 수행하면서도 다음 사람을 배려하는 방식으로 일한다. 이를 위해선 팀원들이 모두 이해할 수 있는 명확하고 단순한 코드를 작성하는 것이 중요하다.
반면, 어떤 개발자들은 새롭고 힙한 기술을 도입하거나 자신만의 독창적인 방식으로 프로젝트를 진행해 자신만의 업적을 쌓으려는 경우가 있다. 이는 기술적으로 흥미로울 수 있지만, 그 기술을 제대로 이해하지 못한 상태에서 남발하거나 팀의 수준과 맞지 않게 도입한다면 오히려 팀의 효율성을 저해할 수 있다. 이런 경우, 새로운 기술을 무작정 도입하기보다는 팀 전체가 학습하고 유지보수할 수 있는 적정 수준에서 기술을 선택하는 것이 중요하다.
회사에서의 개발은 개인 프로젝트와 다르다. 회사는 조직의 성장과 효율성을 우선으로 생각하며, 개발자는 이러한 목표에 기여해야 한다. 이 과정에서 개인적인 호기심과 성장이 배제되는 것이 아니다. 중요한 것은 적정 수준에서의 도전과 균형이다.
새로운 기술이나 도구를 도입할 때, 팀 전체가 그 기술을 학습하고 유지보수할 수 있는지 반드시 검토해야 한다. 이를 위해선 다음과 같은 두 가지를 고려해야 한다:
회사에서 일하는 개발자는 단순히 코드를 작성하는 사람이 아니다. 프로 개발자는 자신이 작성한 코드가 조직의 목표를 달성하고, 팀 전체의 성과를 높이는 데 기여할 수 있어야 한다. 이는 내가 사용하고 싶은 기술을 무조건 도입하거나, 내 커리어만을 위해 기술적 실험을 강행하는 태도와는 구분된다.
손흥민 선수가 축구 경기 중 갑자기 "축구가 지겹다"며 족구를 하겠다고 한다면, 팀에 어떤 영향을 미칠까? 이는 조직에서 개인의 역할을 이해하고, 팀 전체의 목표를 위해 행동해야 함을 상징적으로 보여준다. 개인의 성취만을 우선으로 두는 개발자는 팀에 부정적인 영향을 미칠 수 있다.