요구 사항을 안정성과 확장성의 균형을 맞춰 제시간에 개발하는 능력
개발자에게 있어 역량이란 요구 사항을 안정성과 확장성의 균형을 맞춰 제시간에 개발하는 능력이다.
기획 단계에서 정의된 요구 사항을 의미한다. 보통 스펙(Spec)이라고 부른다.
역량이 뛰어난 개발자는 요구 사항을 분명히 정리하는 것으로 일을 시작한다. 현재 코드에 요구 사항을 반영할 수 있는지 확인하고 에러를 포함한 여러 상황을 감안해 요구 사항을 분석하고 정리한다.
안정성은 요구 사항이 반영된 제품(서비스)이 안정적으로 운영되는 것을 의미한다. 예상하지 못한 장애, 기대와 다른 동작 등이 적을수록 안정적인 제품이다.
확장성은 또 다른 요구 사항을 반영해 서비스가 확장될 수 있도록 유지하는 것을 의미한다. 새로운 기능을 추가할 때 시간이 적게 소요된다면 확장성이 높은 서비스다.
안정성과 확장성은 두 마리 토끼다. 현실적으로 매번 두 마리 토끼를 잡긴 어렵다. 그 때문에 역량이 뛰어난 개발자는 둘 사이에서 적절한 균형을 맞춘다. 장애를 의도적으로 방치하기도 하고 확장성을 무시한 채 코드를 짜기도 한다.
취미로 개발하는 게 아니라면 제한된 시간 안에 요구 사항을 완성해야 한다. 굳이 표현하자면 적시성이다.
제품이 시장에서 살아남기 위해선 적절한 시기에 새로운 기능이 추가되고 개선되어야 한다. 그 때문에 적시성은 고객, 비즈니스 관점에서 더욱 중요한 요소다. 역량이 뛰어난 개발자는 이점을 잘 알고 제시간에 요구 사항을 반영하기 위해 갖은 노력을 아끼지 않는다.
요구 사항을 받아 든 순간부터 역량이 드러난다. 기획자, 디자이너와 요구 사항에 대해 함께 논의하고 구체적인 요구 사항을 정리한다. 때론 제시간에 개발하기 위해 요구 사항을 줄이는 제안을 하기도 한다.
코드를 작성하는 순간에는 안정성과 확장성 사이에서 균형을 맞춘다. 상상하고 싶지 않은 에러 상황들을 하나씩 상상해 가며 세심하게 코드를 써 내려간다. 변수명 하나에도 분명한 이름을 붙여 동료와 미래의 내가 이해할 수 있는 환경을 갖추기 위해 노력한다.
약속한 시각을 지켰다면 제품을 내보낸다. 만약 시간을 맞추기 어렵다면 미리 상황을 공유하고 시간을 다시 정한다. 일이 마무리된 이후에는 시간을 맞추지 못한 이유에 대해 회고한다. 다시 요구 사항을 받아 드는 순간에 어떤 부분을 다르게 행동할지 정리해 둔다.