개발자와 커뮤니케이션 스킬 (1편) - 커뮤니케이션 스킬은 왜 중요할까?

안녕하세요. 멘티가 좋은 개발자로 성장할 수 있도록 서포트하는 개발자 멘토링 기관 F-Lab 입니다.

보통 사람들 사이에 “개발자는 커뮤니케이션이 중요하다” 라는 말이 돌고는 합니다.

그렇다면 커뮤니케이션 능력에는 정확히 어떤 능력들이 있는지 간단한 예시를 들면서 알아보겠습니다.

커뮤니케이션이란?

커뮤니케이션에 대해 간단히 요약하자면 “나의 머릿속에 있는 생각을 상대방에게 전달하는 것” 이라고 볼 수 있습니다.

우리는 평소에도 사람들과의 대화, 카톡 등을 통해 자신의 생각을 계속 전달하고 있습니다. 이렇게만 보면 커뮤니케이션이란 정말 쉽게 보이기도 하는데요.

하지만 커뮤니케이션 스킬은 “상대방이 모르는 것”에 대해 전달할 때 빛을 발휘합니다. 나만 알고 있는 개념을 상대방에게 이해시키는 것은 정말 어려운 일입니다.

커뮤니케이션 스킬이 부족하면 자신의 뜻을 상대가 잘 이해하지 못해 답답해하는 상황도 많이 발생합니다.

커뮤니케이션 스킬이 왜 중요할까?

의사 전달

개발자를 떠나서 회사원으로 업무를 하다보면 위에서 언급한 “상대방이 모르는 것”을 전달해야할 상황이 많이 발생합니다.

예를 들면 아래와 같은 상황 등이 있을 수 있습니다.

  • 내가 한 업무를 다른 사람에게 인수인계 하는 상황
  • 다른 부서와 협업하여 함께 업무를 진행하는 상황
  • 업무에 대한 아이디어를 제안하는 상황

이런 상황에서 커뮤니케이션 스킬을 잘 활용하면 자신이 갖고있는 지식을 상대방에게 더 잘 전달할 수도 있고, 혹은 지식 전달에 소요되는 시간을 단축시켜 업무의 효율성을 극대화시킬 수 있습니다.

이제 간단한 상황을 한번 가정해보면서 어떻게 커뮤니케이션 스킬을 활용할 수 있는지, 커뮤니케이션 스킬이 왜 중요한지 알아보겠습니다.

온보딩

일반적으로 회사에 입사하면 온보딩이라 불리는 신규입사자 교육을 받습니다. 그 과정에서 기존에 업무가 어떻게 진행되었었는지, 시스템은 어떻게 구성되어있는지 등을 전달받습니다.

일반적으로 이런 온보딩을 진행할 때에는 대부분 기존에 근무하고 있던 동료가 붙어서 대면으로 진행합니다. 하지만 커뮤니케이션 수단의 하나인 문서화를 잘 활용하면 이런 온보딩 과정을 조금 더 효율적으로 만들 수 있습니다.

잘 정리된 온보딩 문서가 존재한다면 신규입사자에게 붙어서 설명해주는 대신, 문서를 통해 업무를 파악하게 한다면 대화를 통해 업무 내용을 전달하는 시간이 줄어들 것이기에 동료는 그 시간에 자신의 업무를 더 할 수 있을 것이고 결과적으로 생산성은 향상될 것입니다.

물론 이러한 성과는 잘 정리된 문서가 있어야 가능합니다. 만약 문서의 내용이 잘 정리되어있지 않다면 결국 정보를 충분히 전달 받지 못할 것이고, 대면으로 붙어서 전달하는 시간이 늘어날 것입니다. 그래서 이런 내용을 잘 정리하는 것을 하기 위해서는 문서화라는 커뮤니케이션 스킬 중 하나가 필요한 것입니다.

채용 프로세스

회사에 지원하여 이력서를 제출하고 면접을 보는 등 채용 프로세스를 진행하는 과정에서도 커뮤니케이션 스킬을 활용할 수 있습니다.

이력서를 작성한다는 것은 자신을 회사에 판매하려는 카탈로그를 만드는 것과 같습니다. 몇 장 안되는 종이에 자신에 대해 자세하게 표현하면서도 핵심만 어필해야하기 때문에 이를 잘 하기 위해서는 문서화 스킬이 필요합니다.

이력서는 단순히 입사를 위해 제출하는 용도뿐만 아니라 회사가 그 이력서를 읽고 지원자에 대해 파악하는 용도로도 사용됩니다. 그렇다면 회사에는 자신이 제출한 이력서를 읽는 사람이 있을 것이고, 그 이력서를 읽는 사람이 최대한 이력서의 내용을 더 잘 파악할 수 있게 배려해줘야합니다.

배려해주는 방법으로는 기본적으로 깔끔한 양식 사용, 가독성 높은 폰트 사용, 서술형의 경우는 적절한 문단 나누기 등이 있고, 또한 글을 잘 쓰는 것도 중요합니다. 이러한 글을 쓰는 것들에 대해서는 개발자는 글을 잘 써야 한다, 개발자는 블로그를 해야한다 등등 공식처럼 통용되는 이야기들이 있는데 이런 내용들은 다른 포스트에서 다루겠습니다.

또한 면접을 진행할 때에는 대화와 관련된 스킬이 필요합니다.

면접관이 지원자에 대해 알고있는 정보는 제출한 이력서에 있는 것들과, 이력서에 첨부된 것들이 전부입니다. 즉 면접관은 지원자에 대해 잘 알지 못합니다.

그렇기 때문에 면접관에게 자신이 갖고있는 경험과 생각을 최대한 잘 전달해야 면접관이 본인에 대해 더 정확한 평가를 할 수 있습니다. 그러기 위해서는 대화의 구성을 잘 설계하는 등 대화에 대한 스킬이 매우 중요합니다.

예를 들면 자신이 했던 프로젝트를 설명할 때에는 먼저 프로젝트를 진행한 배경이나 주제 등을 설명하는 방식으로 이 프로젝트가 어떤 프로젝트인지 부터 이해시키면서 프로젝트에 대한 전체적인 그림을 면접관이 머릿속에 그릴 수 있도록 도와줘야합니다.

또한 더 뛰어난 커뮤니케이션 스킬을 갖고있다면 면접관에게 자신을 파악시키는 과정에서 자신에게 부족한 점은 커버하고, 장점을 더 잘 부각시킬 수도 있습니다.

기분이 나쁘지 않은 커뮤니케이션

다양한 방식으로 커뮤니케이션을 하다보면 의도치 않게라도 상대방의 기분을 나쁘게 할 수도 있습니다. 커뮤니케이션에서 중요한 점 중에 하나는 이렇게 상대방의 기분을 나쁘게 하지 않는 것입니다.

갑을관계

갑을관계에서는 상대방의 기분을 상하게 할 수 있는 커뮤니케이션이 자주 발생합니다. 특히 본인이 갑을관계라고 생각하지 않더라도 눈에 보이지 않는 갑을관계가 존재하기도 합니다.

예를 들면 업무를 부탁하는 사람과 부탁받는 사람이 있다면 여기서도 이해관계에 의한 갑을관계가 존재한다고 볼 수 있습니다. 또한 어떤 회사는 입김이 더 센 부서와 입김이 약한 부서도 존재하며 이 곳에서 눈에 보이지 않는 갑을관계가 생길 수도 있습니다. 이러한 관계는 눈에 보이지 않을 뿐이지 각 부서의 구성원들은 이런 관계를 인지하고 있을 가능성이 높아 커뮤니케이션 스킬에 따라 상대의 기분을 상하게 할 수도 있습니다.

그렇기 때문에 항상 커뮤니케이션을 할 때에는 상대와 본인의 관계에 대해 고민해보고, 어떻게 해야 상대방이 오해하지 않고 받아들일 수 있을까를 고민하며 커뮤니케이션을 해야합니다.

강압적인 커뮤니케이션

본인의 의도대로 일을 진행하기 위해 지위나 다른 요소들을 이용하여 강압적인 커뮤니케이션을 하는 경우가 종종 발생합니다.

하지만 좋은 커뮤니케이션은 상대가 자발적으로 내 의도에 맞게 행동하게 하는 것이 좋은 커뮤니케이션 입니다.

강압적인 방식으로 커뮤니케이션을 한다면 상대는 이해되지도 않은 일을 강제로 하게 되면서 효율성이 떨어질 수 있습니다. 그래서 항상 상대방에게 자신의 의도에 맞게 일을 진행해야하는 이유를 항상 납득시켜줘야하고, 자신의 의견에 동조할 수 있도록 충분한 근거를 들어 설득해야합니다.

또한 자신이 옳다고 깊게 믿고 있던 것이더라도 옳다고 주장하는 근거가 부족하다면 그 방식은 효율적이지 않은 방식일 수도 있습니다. 상대방을 납득시키는 과정에서 이러한 점들을 발견하며 자신의 주장에 대한 비효율성을 발견할 수도 있을 것이고 이를 통해 더 좋은 방향으로 의사결정을 하는 계기가 될 수도 있습니다.

이처럼 커뮤니케이션 스킬은 여러 상황에서 유용하게 사용되기 때문에 F-Lab에서는 커뮤니케이션 스킬에 대해 강조하고 있으며, 멘티들의 커뮤니케이션 능력을 키우기 위해 가이드하고 있습니다.

개발자로써의 커뮤니케이션 스킬

개발자로 업무를 하다보면 위에서 언급한 상황 외에서도 개발자만의 특수한 상황들이 더 있습니다.

이러한 상황들도 예를 들며 설명해보겠습니다.

코드 작성시의 커뮤니케이션

개발자는 코드를 통해 서로 소통하기도 합니다. 즉 이런 코드를 통한 커뮤니케이션에서도 커뮤니케이션 스킬을 발휘할 수 있습니다.

일반적으로 단순히 사이드 프로젝트를 진행하는 경우에는 본인이 작성한 코드는 본인만 사용합니다. 자신이 작성한 코드는 작성자 본인이 코드의 의도를 잘 알고 있기 때문에 의도에 맞게 가져다 사용하는데에 큰 문제가 없습니다.

다만 협업을 하는 경우가 된다면 얘기가 달라집니다. 내가 짠 코드를 가져다 사용하는 동료들은 내가 어떤 의도로 각각의 클래스와 메소드를 짰는지 모를 가능성이 큽니다.

그래서 내가 짠 코드의 의미를 더 잘 전달하기 위해 주석도 달고, 개발한 내용에 대한 문서화를 하기도 합니다. 물론 이런 것들도 필요하지만 더 나아가 코드레벨에서도 내 코드를 읽는 사람이 의도를 잘 파악할 수 있도록 배려해줘야 합니다.

아래에서 두 코드로 예시를 들어보겠습니다.

// 0 = 없다, 1 = 있다
int isExistUser(long userId);
boolean isExistUser(long userId);

위의 두 코드에서 어떤 것이 의미가 더 잘 전달되시나요? 대충 보면 주석 덕분에 1번 코드도 의도를 파악하는 것에 큰 무리가 없어보입니다.

하지만 두 번째 코드는 주석을 읽을 필요도 없이 메소드의 시그니쳐만으로도 메소드의 역할을 충분히 파악할 수 있다는 점이 큰 장점입니다. 메소드의 시그니쳐를 그대로 읽으면 이 userId를 가진 유저가 존재하느냐?에 대한 리턴 값으로 혹은 아니오로만 대답하고 있습니다. 그렇기 때문에 메소드의 입력값과 출력값의 의도를 충분히 유추할 수 있습니다.

하지만 첫 번째 코드의 리턴 값의 범위는 메소드 작성자의 임의대로 정해져있기 때문에 비교적 파악이 힘듭니다. 대략 0은 false, 1은 true를 의미한다 하더라도 혹시 모를 그 외의 숫자가 리턴될 가능성이 남겨져 있습니다. 하지만 리턴 타입이 boolean이라면 아니오 이외의 값이 나올 가능성이 원천적으로 차단됩니다.

또한 저런 코드는 메소드를 사용하는 사람의 코드에도 영향을 끼칩니다. 첫 번째 코드와 두 번째 코드를 가져다 쓰는 코드의 차이를 보자면 아래와 같습니다.

if (isExistUser(userId) == 1) {
    // 유저가 존재한다
}
if (isExistUser(userId)) {
    // 유저가 존재한다
}

첫 번째 코드는 유지보수를 할 때 1이 어떤 것을 의미하는지 명확하지 않습니다. 즉 저 코드를 계속 유지보수한다면 1이 어떤 것을 의미하는지 대해서 찾아봐야하는 수고가 든다는 것입니다. 그 의미값에 대해 상수로 관리한다면 조금은 가독성이 향상되겠지만 그 상수를 관리하는 수고가 들게 되겠죠.

내가 짜는 코드의 의미를 전달하는 것에 대해 더 고민하면서 깔끔하게 짜려고 노력하는 것도 다른 개발자가 내 코드에 대해 이해하고 사용하는데에 드는 시간을 줄여주는 배려이고, 이 또한 상대방이 내 의도를 이해하는데에 걸리는 시간을 줄여주기 때문에 커뮤니케이션 스킬이라고 볼 수 있습니다.

기술 공유

또 다른 예로는 기술 공유 활동이 있습니다. 개발자들은 컨퍼런스, 사내 세미나 등을 통해 자신의 지식을 공유하는 활동을 자주 하는 편입니다.

새로운 기술을 소개하는 상황이라면 “기존에 사용하던 기술에는 어떤 문제가 있었다” 같이 기존 기술에 대한 배경을 먼저 설명함으로써 기술에 대한 필요성부터 청중들에게 납득시킨 다음, “이 기술을 사용하면 그 중에 어떤 점을 해결할 수 있다” 와 같이 기술에 대한 내용을 발표하는 등의 방식으로 청중들에게 더 잘 자신의 생각을 이해시킬 수 있는 커뮤니케이션 스킬이 필요합니다.

이처럼 커뮤니케이션 스킬을 활용할 수 있는 곳은 아주 많습니다.

결론

지금까지 여러 커뮤니케이션 스킬을 발휘할 수 있는 예에 대해 알아보았는데요. 분량의 압박으로 인해 언급하지 못했지만 여기에 언급한 사례 외에도 많은 커뮤니케이션 스킬들이 존재합니다.

사람과 사람 사이에 정보를 전달하는 능력을 갖는 것은 정말 중요합니다.

이런 커뮤니케이션 스킬을 키우려면 항상 다른 사람에게 정보를 전달할 때마다 어떻게 해야 내 의도를 다른 사람에게 더 잘 전달할 수 있을지, 어떻게 해야 전달받는 사람이 기분이 나쁘지 않게 전달받게 할 수 있을지를 계속 고민해야 합니다. 어떤 상황이던지 커뮤니케이션에서 항상 고민의 시작점은 이 곳이여야 합니다.

다음 글에서는 어떻게 해야 커뮤니케이션을 더 잘 할 수 있을지 간단한 사례 몇 개를 들면서 설명해보겠습니다.

이 글이 개발자로써 역량을 쌓고 있는 분들께 도움이 되었기를 바라며 긴 글 읽어주셔서 감사합니다.

홍보

멘티 모집

F-Lab에서는 현재 수강생들을 모집하고 있습니다.

F-Lab에서 멘토링 받기를 희망하시는 분들은 아래의 홈페이지에서 내용을 읽어보신 다음 신청해주시면 감사하겠습니다.

홈페이지 : https://3th.f-lab.kr