HW 일정에 끌려다니는 SW 개발의 현실
나는 모바일 업계에서 소프트웨어 개발을 진행했었고 지금은 카메라 모듈 회사에서 소프트웨어를 개발하고 있다. 스마트폰이나 산업용 기기에 들어가는 카메라 모듈을 만드는 회사다. 제품의 핵심은 렌즈, 센서, 기구 설계 같은 하드웨어이고, 소프트웨어는 그 하드웨어를 움직이게 하거나 테스트 프로그램등을 개발하는 역할이다.
이런 환경에서 소프트웨어 엔지니어로 일하면 독특한 상황들을 자주 만난다. 순수 소프트웨어 회사(물론 순수 소프트웨어 회사에서 일해본적이 없어서 잘 모르기는 하지만)에서는 상상하기 어려운 일들이다. 몇 가지 경험을 정리해본다.
하드웨어 회사에서 소프트웨어를 하면 가장 많이 듣는 말이다.
한번은 하드웨어에서 디스플레이를 물리적으로 반대 방향으로 실장한 적이 있었다. 이미 조립이 끝난 상태에서 다시 떼어내 붙이는 건 비용도, 시간도 맞지 않는다. 그래서 소프트웨어에 돌아오는 요청은 하나다. "소프트로 화면 출력 방향을 뒤집어줘."
이게 한 번의 해프닝이 아니다. 하드웨어 설계에서 문제가 나오면, 수정 비용이 크기 때문에 소프트웨어 쪽으로 해결 요청이 넘어오는 일은 일상다반사이다. 소프트웨어 입장에서는 원래 계획에 없던 작업이 갑자기 들어오는 셈이다. 그렇다고 일정이 변경되는 것이 아니라 일정은 그대로다.
반대 패턴도 있다.
분명 코드 몇 줄 수정하면 끝나는 일인데, "이미 확정된 사항이니 변경 불가"라는 답이 돌아오는 경우가 있다. 하드웨어 중심 조직에서는 설계 확정 이후의 변경에 매우 보수적이다. 금형을 다시 깎거나 기판을 재설계하는 것은 실제로 큰 비용이 드니까, 그 사고방식 자체는 합리적이다.
문제는 그 기준이 소프트웨어에도 그대로 적용될 때다. 소프트웨어는 수정이 유연한 것이 본질적인 장점인데, 그걸 하드웨어와 같은 프로세스로 묶어버리면 비효율이 생긴다. 결국 단순 수정 대신 우회 로직을 추가하거나, 별도 기능을 얹어서 해결해야 하는 상황이 만들어진다. 코드는 점점 복잡해진다.
제품 개발에는 마감일이 있다. 클라이언트와 약속한 납기는 쉽게 바뀌지 않는다.
개발 순서는 보통 하드웨어가 먼저, 소프트웨어가 뒤다. 센서와 기구가 준비되어야 펌웨어를 올릴 수 있고, 실제 하드웨어 위에서 튜닝과 검증을 해야 하니까 당연한 순서다.
그런데 하드웨어 단계에서 설계 수정이나 부품 이슈로 일정이 밀리면, 전체 마감은 그대로인 채 소프트웨어에 주어진 시간만 줄어든다. 하드웨어팀은 자기 파트가 끝나면 "이제 넘겼으니 나머지는 소프트웨어에서 일정 안에 맞춰달라"는 입장이 된다.(아니면 위에서 이야기한 대로 어떻게든 소프트로 해결해 달라는 이야기가 된다.)
원래 한 달이던 소프트웨어 개발 기간이 2주가 되기도 한다. 하지만 해야 할 작업량은 줄지 않는다. 이런 상황이 한두 번이면 야근으로 버틸 수 있지만, 프로젝트마다 반복되면 당연하다는 듯이 되어 버린다.
불만만 늘어놓으려는 건 아니다.
이런 환경에서 일하면 자연스럽게 하드웨어를 이해하는 소프트웨어 엔지니어가 된다. 회로도를 읽을 수 있고, 물리적 제약 조건 위에서 소프트웨어를 설계하는 감각이 생긴다. 이건 순수 소프트웨어 환경에서는 얻기 어려운 경험이 아닐까 생각한다.
그리고 "하드웨어 문제를 소프트웨어로 풀어달라"는 요청에 대응하다 보면, 문제 해결 능력의 폭이 넓어진다. 정해진 요구사항을 구현하는 것과, 물리적 제약 안에서 창의적으로 우회하는 것은 다른 종류의 역량이다.
하드웨어 회사에서 소프트웨어를 한다는 건, 불편하지만 독특한 성장 환경이기도 하다.
카메라 모듈 회사에서 소프트웨어 개발을 하고 있습니다. 실무에서 겪는 이야기를 정리해서 공유합니다.