모두가 개발 문화를 이야기합니다. 요즈음에는 개발 문화에 대한 언급이 없는 채용 공고를 찾아 보기 어려울 정도입니다. 그러나 개발 문화가 무엇인지 제대로 이해하는 경우는 생각보다 흔치 않습니다.

개발 문화

세상의 어떤 기술도 완벽하지 않으며, 장단점을 갖고 있습니다. 사용하는 기술의 장점을 살리면서도 단점을 보완하여 최선의 결과를 만들어 내는 것이 개발 문화의 역할입니다. Python은 유연성이 뛰어나지만 잘못된 코드 작성을 막을 수 있는 언어적 장치가 부족합니다. 바보 같은 실수를 하기 쉬우며, 말도 안되는 방식으로 돌아가는 코드를 만들어내기 쉽습니다. Java는 최소한의 구조를 갖춘 코드를 보장하는 한편, 유연성이 부족합니다. 간단한 톱니바퀴 하나를 만들기 위해서도 추상화가 필요하며, 잘못된 코드의 구조를 수정하는 것도 쉽지 않습니다. Python에 안정성을 더하고 Java에 유연성을 더하는 것, RDB에 유연성을 더하고 NoSQL에 일관성을 더하는 것이 개발 문화의 역할입니다. 제대로 된 문제 해결에 대한 이윤 동기를 강화하고, 적당한 문제 회피에 Blame을 가하는 비기술적 요소들의 합으로 개발 문화를 정의할 수 있습니다.

사무실 문화

일반적으로 개발이 이루어지는 공간이 사무실이기 때문에, 사무실 문화와 개발 문화를 착각하기 쉽습니다. 모두가 좋은 현상이라고 느끼는 것이더라도, 더 좋은 개발을 하는 것과 상관이 없다면 이는 사무실 문화일 확률이 높습니다. 사무실에서 즐거운 분위기를 유지하는 것, 정기적인 모임을 만드는 것, 모두가 참여하는 논의 자리를 마련하는 것, 공개 행사를 여는 것 등에 그 자체로 특별한 의미가 있지는 않습니다. 그 결과로 더 좋은 개발을 하게 된다면 개발 문화가 될 것이고, 그렇지 않다면 사무실 문화에서 그치게 됩니다. 물론 일도 사람이 하는 것이기에 사람들이 만나는 공간인 사무실의 문화도 중요합니다. 다만, 사무실 문화를 개발 문화와 구분하지 못하여 도취하는 것을 경계해야 합니다.

실천적이며 자발적

선언적이거나 강제적인 것은 문화가 아닙니다. 선언하는 것은 구호에 불과하고, 실행하더라도 강제적인 것은 정책이며, 자발적으로 실행하는 것만을 문화라고 이야기할 수 있습니다. 좋은 의도가 좋은 결과로 이어지지 않기 때문에, 문화를 이야기할 때에는 목적이 아닌 결과로부터 생각해야 합니다. 문화로 착각한 선언/정책은 오히려 조직에 대한 신뢰를 낮추어, 없는 것보다 못한 결과로 이어질 수 있습니다.