출판사 서평
기획자의 요구와 개발자의 현실을
모두 만족시키는 소통의 기술
개발자와 기획자, 한 배를 탔지만 서로 다른 언어를 쓰는 이들의 갈등은 어제오늘 일이 아니다. 분명 일하고 있는데 프로젝트는 제자리걸음이라면, 이제 소통의 방식을 점검해야 할 때다. 8년의 개발 경력과 5년의 기획 실무를 거치며 양쪽의 언어를 모두 섭렵한 저자의 경험에 따르면, 갈등을 풀 수 있는 실마리는 아주 높은 확률로 ‘기획자’에게 달렸다. 기획자가 개발 과정을 이해해야 비로소 협업의 병목 구간을 정확히 파악하고 절충해 프로젝트를 완수할 수 있는 실질적인 해법을 찾을 수 있기 때문이다. 따라서 이 책은 현업에서 발생하는 수많은 문제 상황에 대해 개발자의 입장을 ‘기획자의 시선’에서 풀어낸다.
1부 ‘화성에서 온 기획자, 금성에서 온 개발자’에서는 함께 일하는 개발자가 어떤 사람인지에 대해 알아본다. 개발자가 어떤 태도로 일을 대하고 어떻게 문제를 해결하는지 등 그들만의 고유한 특성을 파헤친다. 이를 통해 기획자가 흔히 겪는 소통의 벽이 사실은 서로를 향한 불신이 아니라 ’일‘을 바라보는 시각 차이에서 온다는 점을 깨닫고, 개발자의 사고방식을 입체적으로 이해하는 기초를 다진다.
2부 ‘개발자와의 흔한 갈등 사례’에서는 현장에서 가장 빈번하게 발생하는 생생한 갈등 사례를 중심으로 기획자가 한 번쯤 품었을 법한 의문들에 대해 개발자의 속사정을 들려준다. 그동안 ‘왜 안 된다는 거지?’라며 답답함을 느꼈던 근본적인 원인을 짚어보고, 갈등의 벽을 넘기 위한 대응책을 찾는다.
3부 ‘협업을 위한 개발 기초 지식’에서는 기획자로서 개발자와 원활히 소통하는 데 필요한 개발 지식을 살펴본다. 클라이언트와 서버의 관계부터 데이터베이스의 작동 원리, 그리고 Git이나 JSON 같은 협업 도구의 개념까지 폭넓게 다루며, 비개발자가 기술적 장벽을 넘어 데이터와 논리에 기반한 의사결정을 내릴 수 있도록 한다.
4부 ‘개발자와 함께 완벽한 기획자로 성장하는 법’에서는 앞서 배운 이해와 지식을 바탕으로 개발자와 함께 성장하는 구체적인 실천 전략을 제시한다. 개발자가 선호하는 기획서 작성법부터 기획자의 치트키가 될 API 검토 노하우, 그리고 질문 하나로 개발자의 방어 기제를 허무는 질문법까지, 기획자의 전문성을 증명하고 프로젝트의 성공을 이끄는 실무 생존 기술을 아낌없이 공개한다.
만약 개발자를 이해하기 위해 이 책을 집어 들었다면 이미 절반은 성공한 셈이다. 상대방을 이해하고자 하는 마음은 협업의 가장 강력한 무기가 되기 때문이다. 이 책을 통해 그들의 세계를 들여다보고 이해의 접점을 찾는 순간, 당신이 겪는 업무 스트레스의 대부분이 눈 녹듯 사라질 것이다.
책 속에서
개발자들에게 ‘된다’는 ‘모든 사항이 100% 작동함’을 의미한다. 따라서 이들은 업무 가능 여부에 관한 질문을 받으면 대부분 이 일이 수행 가능한 일인지, 또 불가능한지에 대해 답변해야 하고, 또 수행 가능하다면 언제까지 할 수 있는지, 어느 정도의 시간이 소요되는지도 이야기해야 한다. 그래서 질문을 듣는 동안 요청 내용이 실현 가능한지, 불가능한 요청은 없는지 꼼꼼히 따진다. 마치 조금이라도 끊어지면 열차가 달릴 수 없는 기찻길처럼, 중간에 무언가 하나라도 구현이 불가하다면 전체 개발이 불가능해진다. 그러다 보니 불가능한 부분을 찾는 그들의 태도는 종종 공격적이라고 오해를 사기도 한다. 이럴 때는 최대 속도로 달리고 있어 주변을 보지 못하는 경주마처럼 그저 목표 지점(실행 가능 여부)을 향해 전력 질주하고 있을 뿐이라고 이해하면 좋다. (65쪽)
기획자가 개발자에게 기능 구현 가능 여부를 물을 때, 자연스럽게 “언제까지 가능한가요?”라는 질문을 함께 던지곤 한다. 빠듯한 일정과 성과에 대한 압박 속에서, 어떻게든 빠르게 결과를 만들어 내고 싶은 마음은 기획자나 개발자나 마찬가지일 것이다. 그런데 종종 개발자로부터 이런 답변을 듣게 된다. “이거 지금 당장 하려면 하드코딩 해야 해요” 얼핏 들으면 ‘하드코딩’이라는 낯선 단어 뒤에 ‘된다’라는 긍정의 메시지가 숨어 있는 것처럼 느껴질 수 있다. ‘아, 뭔가 어려운 방법이긴 하지만 어쨌든 된다는 거구나! 그럼 일단 그렇게 하고, 나중에 시간 될 때 제대로 고치면 되지 않을까?’ 하는 안도감이 들 수도 있다. (중략) 하드코딩이란 특정 값이나 로직을 코드 안에 ‘직접 박아 넣어서’ 변경이나 확장이 어렵게 만드는 것을 말한다. 우스갯소리로 “고수들은 귀찮게 머리 쓰며 로직을 짜지 않고 그냥 돌아가게만 한다”라고도 표현하지만, 사실 하드코딩은 결코 ‘고수’의 방식이 아니다. 오히려 당장의 편의를 위해 미래의 불편함을 예약하는 것에 가깝다. 이렇게 하드코딩이 된 부분은 종종 잊히며 잠재적인 위협이 된다. 유연성이 없어 매번 수정 때마다 영향이 있는지 직접 챙겨야 하는 대상이 되기도 한다. (115-116쪽)
예쁘게 디자인된 버튼, 잘 정리된 텍스트, 사용자를 편리하게 이끄는 인터페이스. 눈에 보이는 화면은 말 그대로 ‘빙산의 일각’이다. 그 화면 뒤에는 수많은 코드와 로직, DB와의 복잡한 상호작용 그리고 알 수 없는 외부 시스템과의 연동까지 거대한 시스템이 있다. 마치 거실에 조명 하나 위치를 바꾸려고 봤더니, 그 전기선을 통해 다른 조명들이 릴레이처럼 엮여 있어서 전체 배선을 건드려야 수정이 가능한 상황과 같다. 겉으로 보기엔 간단한 수정 요청 같아도, 개발자에게는 이 거대한 시스템의 어느 부분을 건드려야 할지, 그 파장이 어디까지 미칠지 가늠해야 하는 복잡한 문제로 다가온다. 특히 골치 아픈 건, 내가 직접 짜지 않은 ‘남의 코드’를 수정해야 할 때다. 운 좋게 잘 짜이고 문서화까지 완벽한 코드를 만난다면 정말 큰 짐을 던 기분이 들지만, 현실은 시궁창일 때가 더 많다. 주석 하나 없이 수수께끼처럼 꼬여 있는 스파게티 코드, 왜 이렇게 만들었는지 도무지 이해할 수 없는 로직, 심지어 작성자는 이미 퇴사하고 없어서 물어볼 사람조차 없는 상황이라면? 개발자는 그야말로 맨땅에 헤딩하는 심정으로 코드 해독 작업에 들어가야 한다. (중략) 더 큰 문제는, 이런 복잡하게 얽힌 시스템과 해독 불가능한 코드 속에 ‘사이드 이펙트’라는 언제 어디서 터질지 모르는 시한폭탄이 숨어 있다는 것이다. 분명 버튼 A의 문구만 살짝 바꿨는데, 갑자기 관련 없는 페이지 B에서 데이터가 꼬이거나, 잘되던 결제 시스템에서 오류가 뿜어져 나올 수도 있다. (124-125쪽)
데이터 규격은 컴퓨터와 개발자들 사이에서, 혹은 시스템끼리 데이터를 주고받기 위해 만든 것이다. 즉 복잡한 데이터(정보)를 누구나 이해할 수 있도록 ‘규칙에 맞게’ 정리하기로 ‘약속’한 것으로 개발자들에겐 없어서는 안 될 중요한 매개체다. 서로 다른 시스템, 다양한 플랫폼이 공존하는 인터넷과 앱 서비스 환경(웹서버, 모바일앱, DB 외부 API 등)에서 데이터를 주고받는 데 표준화된 규격이 필요하다. 표준화된 규격이 없으면 데이터를 주고받을 때마다 데이터 구분을 콤마로 할지, 탭으로 할지, 어떤 값들을 보낼지 등을 매번 정해야 한다. 또 규격 없이 데이터를 주고받으면 서로 보낸 데이터를 해석하지 못하거나 오작동이 발생할 수 있고, 복잡한 서비스에서는 이런 문제로 큰 장애가 발생하기도 한다. 대표적으로 가장 많이 사용하는 데이터 규격이 JSON과 XML이다. (214쪽)
개발 과정에서는 큰 아키텍처 결정 외에도 수많은 작은 기술적 결정들이 이루어진다. 이러한 일상적인 결정들이 모여 프로젝트의 성공 여부를 결정한다. 예를 들어 서비스에서 간헐적으로 에러가 발생한다는 유저들의 민원이 어젯밤부터 리포팅 된 상황을 생각해 보자. 개발팀에 문의해 보니 “CPU가 피크를 찍어서 증설이 필요하다”라는 기술자로서의 의견을 냈다면, 기획자는 이 결정이 추가 비용이 발생할 수 있고, 상황에 따라 서비스 중단 시간이 발생할 수 있다는 점을 이해해야 한다. 왜 CPU가 피크를 찍었는지, 다른 해결책은 없는지 파악하고 의사결정에 고려하는 것 역시 중요하다. 또 다른 상황으로, “요청이 있을 때마다 처리하면 될 거라고 예상했던 개발 방향을 배치 작업을 만들어서 커버하겠다”라는 개발자의 제안을 들었다고 가정해 보자. 기획자는 이 결정이 왜 필요한지 이해해야 한다. 배치 처리는 시스템 부하를 분산시키고 효율성을 높일 수 있지만, 실시간성이 떨어질 수 있다. 이러한 트레이드오프를 이해하고 비즈니스 요구 사항과 맞는지 판단해야 한다. (351쪽)