최근에 경력 3년 차 개발자(만 2년 차)가 되면서 ‘앞으로 어떻게 성장해야 할까?’라는 질문에 대해 고민하기 시작했습니다.
취준생 시절 경력 3년 차 주니어 개발자가 매우 높아 보였고, 엄청난 개발자로 느껴졌었는데, 어느덧 제가 3년 차 프론트엔드 개발자가 되면서 그때 바라보던 수준에 도달했는지 부족한 부분은 없는지 그리고 그 이상으로 나아가 좋은 시니어 개발자가 되기 위해 무엇을 해야 할지 고민하게 되었습니다.
이 고민을 하다 보니 자연스럽게 ‘좋은 개발자란 무엇일까?’라는 근본적인 질문을 떠올리고, 내가 생각하는 ‘좋은 개발자’의 모습을 명확히 정립하고, 그 목표를 향해 성장한다면, 단순히 연차만 쌓이는 개발자가 아닌, 어디서든 인정받을 수 있는 경쟁력 있는 개발자가 될 수 있지 않을까 하는 생각이 들었습니다.
이번 글에서는 제가 고민하고 생각한 ‘좋은 개발자’의 모습에 대해 소개하려고 합니다. 저는 크게 비즈니스 영역이 있고 그 안에 문제 해결 능력, 커뮤니케이션, 사용자 경험, 개발자 경험이라는 요소가 속해있다고 생각합니다.
비즈니스
우리는 모두 정당한 대가(급여)를 받고 회사의 구성원으로서 일을 합니다. 즉 우리는 회사를 최우선적으로 생각하여 업무를 진행해야 합니다.
아래의 여러 요소들은 모두 비즈니스를 기준으로 저의 생각을 소개합니다.
1. 문제 해결 능력
저는 개발자가 코드를 통해 문제를 해결하는 사람이라고 생각합니다. 이러한 개발자가 자신의 업무를 수행한다고 하면 가장 중요한 건 회사 즉 서비스의 문제를 코드 또는 기술을 이용해 해결해야 합니다. 즉 개발자는 문제 해결을 위해 고용이 되었기 때문에 가장 중요한 능력이라고 생각합니다.
다만 단순히 문제를 해결하는 데 그쳐서는 안됩니다. 예를 들어 문제를 해결하는 데 있어서 3가지의 유형이 있다고 본다면 아래와 같습니다.
- 불완전하게 동작하여 버그 발생 확률이 높은 코드
- 주어진 요구사항은 충족하여 잘 동작하지만 기능이 추가되었을 때 문제가 발생하는 경우
- 요구사항을 충족하면서 확장성 및 가독성을 고려한 안정성 있는 코드
위의 3가지 유형처럼 동일한 문제를 해결하더라도 해결하는 것에 그치지 않고 추후의 다른 문제가 발생하지 않도록 고려하여 해결해야 합니다.
이러한 문제 해결 능력에 대해 생각하면서 또 하나 중요하게 생각해야 하는 부분은 오버엔지니어링입니다. 위키백과에서는 오버엔지니어링을 아래와 같이 설명합니다.
“오버엔지니어링(Overengineering)은 정교하거나 복잡한 방식으로 제품을 설계하거나 문제에 대한 솔루션을 제공하는 행위로, 원래 설계와 동일한 효율성과 효과로 더 간단한 솔루션이 존재함을 입증할 수 있다.”
위키백과의 정의처럼 동일한 효율성을 가진 간단한 해결 방법에 비해 복잡한 해결 방법을 오버엔지니어링이라고 할 수 있으며, 이 또한 예시를 통해 살펴보면 좋을 것 같습니다.
- 위에서 보았던 문제 해결의 3가지 유형 중 c 타입에 너무 매몰되어 과한 확장성 고려 및 모든 경우의 수를 커버하려는 엔지니어링
- 과도한 리팩토링과 신기술만 쫓아 러닝 커브를 높이는 코드
- 모든 것을 코드로 해결하려는 생각
위와 같은 예시를 들 수 있을 것 같습니다. 이러한 예시에서 조금 더 자세히 이야기하고 싶은 부분은 코드 및 아키텍쳐에 과한 집중은 금물이라고 생각합니다.
개발자는 당연하게도 더 좋은 코드, 더 좋은 설계를 위해 끊임없이 고민하고 갈망합니다. 이러한 욕구는 개발자를 성장하는데 좋은 원동력이라고 생각하지만, 실제 현업에서는 모두가 꿈꾸는 이상적인 설계 및 좋은 코드는 불가능하다고 생각합니다.
그 이유는 개발을 할 때는 방금 이야기한 품질이 좋은 코드 및 설계와 함께 우리는 항상 시간을 고려해야 합니다. 아쉽게도 좋은 코드와 시간은 서로 트레이드오프가 발생합니다.
→ 즉 좋은 코드에 집중한다면 시간이 오래 걸리고, 빠른 시간으로 해결한다면 코드의 품질이 좋지 않을 수 있습니다.
그렇기 때문에 문제 해결 능력에서는 이러한 간격을 최대한 줄일 수 있는 개발자가 좋은 개발자라고 볼 수 있을 것 같습니다. (좋은 코드를 작성하면서 속도가 빠른 개발자)
마지막으로 명심해야 하는 부분은 개발자는 근본적으로 코드를 통해 문제를 해결하는 사람으로서 문제를 마주한다면 자연스럽게 코드로 해결하려고 하게 됩니다. 마치 본능과 같다고 생각됩니다.
다만 실제 현업에서는 코드로 해결하는 것이 만능이 아닐 때도 있습니다. 위에서 이야기 한 것처럼 개발은 시간이라는 요소가 굉장히 중요하기 때문에, 회사의 다른 직군 팀원의 도움 및 협력을 통해 우리는 코드 한 줄 작성 없이도 문제를 해결할 수 있습니다.
특히 신입의 경우 문제를 해결하려는 시야가 코드에만 집중되어 있다면 이 부분을 명심하면 좋을 것 같습니다.
🧑💻 좋은 개발자는 항상 비즈니스적인 요소를 우선적으로 고려하여 최선의 문제 해결 방법을 도출하여 해결해야 합니다.
2. 커뮤니케이션
사실 커뮤니케이션이란 개발자 뿐만 아니라 모든 직군에서 가장 중요한 요소라고 볼 수 있습니다. 1인 창업, 개발자, 프리랜서는 크게 문제없지 않을까라고 생각할 수 있지만 1인 창업, 프리랜서도 모두 고객이 존재하고, 고객과 반드시 소통할 일이 생기게 됩니다. 오히려 커뮤니케이션으로 능력이 더더욱 중요하다고 볼 수 있습니다.
그렇다면 커뮤니케이션은 단순히 팀원들과 친하게 지내고 불편한 일이 발생하지 않았다면 잘하고 있는 것일까? 저는 아니라고 생각합니다.
여기서 커뮤니케이션이란 단순히 소통뿐만이 아닌 업무를 하면서 상대방이 대화를 통해 어떤 것을 원하는지, 어떤 어려움이 있는지 잘 캐치해야 하고, 나는 어떤 것을 원하고 어려움이 있는지를 최대한 잘 이해할 수 있도록 전달해야 합니다.
특히 다른 직군의 팀원들과 이야기할 때 중요합니다. 예를 들어 개발자 - 디자이너의 경우에도 개발적으로 어떤 어려움이 있는지를 최대한 쉽게 개발을 전혀 모르더라도 최대한 이해할 수 있도록 노력해야 합니다. 저의 경우 최대한 예시를 들어서 설명하고, 디자이너의 의도를 최대한 파악해서 의도를 해치지 않도록 조심하려고 노력합니다.
3. 사용자 경험
프론트엔드 개발자로서 사용자 경험은 너무나 중요하고, 기본 덕목 중에 하나라고 생각하며, 프론트엔드 개발자는 사용자가 직접 보고 경험하는 부분을 함께 작업하는 만큼 사용자의 입장에서 생각하고 문제를 풀어내는 것이 중요하다고 생각합니다.
사용자 경험을 위해 고려해야 하는 부분은 너무나 다양합니다. 서비스의 주요 사용자의 특성에 따라 사용자 경험을 높이기 위한 방법이 다르므로 여러 가지 방법으로 해결할 수 있습니다. 저는 프론트엔드 개발자로서 UI의 관점에서 UX 고려 또한 프론트엔드도 고민하고 같이 이야기 나눌 수 있지만 UX를 중점으로 고려해 주시는 다른 팀원분(ex. UX Designer, UX Writer 등)들이 있다면 프론트엔드 개발자는 개발적으로 어떻게 UX를 해결할 수 있을지 고민하는 게 좋다고 생각합니다. 대표적으로는 버튼의 위치, 에러 메세지, 로딩 표시 등이 있으며, 더 나아가 프론트엔드 개발자는 웹 접근성, 크로스 브라우징 대해 고려해야 합니다.
또한 성능도 사용자 경험에 많은 영향을 끼칠 수 있습니다. 우리 서비스를 사용하지 않았던 사용자가 광고 또는 여러 가지 이유로 서비스를 처음 사용할 때, 버그가 발생한다면 경우에 따라 사용자는 다른 경쟁사 서비스를 사용하거나 영원히 이탈할 수 있습니다. 그러므로 서비스를 원활하게 이용할 수 있도록 성능과 안전성을 항상 고려해야 합니다.
🧑💻 좋은 개발자는 언제나 사용자의 입장에서 개발하며, 최대한 좋은 경험을 느낄 수 있도록 항상 고민해야 합니다.
4. 개발자 경험
마지막으로 개발자 경험입니다. 개발자 경험이라는 단어가 생소하실 수도 있으니 우리의 사수 chatGPT한테 물어보았습니다.
chatGPT가 말했듯이 단어 그대로 개발자가 개발을 하면서 느끼는 경험을 가리키며, UX가 유저 중심이라면 DX는 개발자 중심이라고 생각하면 이해가 쉽습니다.
그러면 다시 본론으로 돌아와서 좋은 개발자의 요소 중 저는 개발자 경험을 뽑았습니다. 즉 개발자 경험을 향상 시킬 수 있는 개발자가 좋은 개발자라고 생각하기 때문입니다.
그 이유는 개발자가 부족하다고 해서 모든 회사가 여유롭게 개발자를 추가로 채용하기에는 현실적으로 어려운 부분이 많습니다. 그렇다면 회사 입장에서는 최소한의 인원으로 최대한의 퍼포먼스를 낼 수 있다면 가장 이상적일 겁니다. 이러한 환경을 구성할 수 있는 능력이 개발자 경험이라고 생각하기 때문입니다.
개발자 경험을 개선하고 높일수록 개발자의 생산성 즉 업무 효율이 상승하게 되면서 위에서 이야기한 회사의 이상적인 환경을 구축할 수 있습니다.
또한 여기서는 개발자 경험을 키워드로 설명하였지만, 개발자 뿐만이 아닌 다른 직군의 팀원들을 업무 생산성을 높여줄 수 있는 것도 포함합니다.
이러한 개발자 경험을 개선해 줄 수 있는 방법으로는 각각의 회사의 특정에 따라 여러 가지 방법이 있을 수 있습니다. 특히 규모가 큰 스타트업부터 우리가 잘 알고 있는 유명한 회사(ex: 토스, 당근, 우아한형제들 등)도 개발자 경험을 높이기 위해 많은 노력을 기울이고 있습니다.
프론트엔드 개발자로서 바라보는 개발자 경험으로는 대표적으로 디자인 시스템이 있습니다. 디자인 시스템이 잘 구축되어 있을수록 개발 생산성 및 일관된 스타일링 등의 다양한 개발자 경험을 얻을 수 있습니다. 또한 사소한 스크립트를 작성해서 팀원들이 불필요하게 반복적으로 하는 업무 및 처리들을 해결해 주는 것도 개발자 경험을 개선할 수 있는 좋은 방법입니다.
🧑💻 좋은 개발자는 구성원들의 업무 효율을 높일 수 있도록 불필요한 업무를 자동화 등의 처리도 좋은 환경을 구성해줄 수 있어야 합니다.
정리
chatGPT, cursor 등 수많은 AI 도구들이 생겨나고, 시장의 분위기는 날이 갈수록 쌀쌀해지는 상황에서 미래에 대해 고민해 보았을 때, 경쟁력 있는 개발자 즉 살아남아야 하고 살아남고 싶기 때문에, 3년 차 개발자가 될 동안 고민해 보지 않았던 좋은 개발자에 대해 고민해 보고 정립해 보았습니다.
앞으로 이러한 목표와 방향에 맞게 성장 하면서 5년 차 개발자가 되었을 때, 저는 살아남을 것이고, 경쟁력 있는 개발자가 되어 있지 않을까 싶습니다.
긴 글 읽어주셔서 감사드립니다. (개인이 생각하는 좋은 개발자에 대해 댓글로 공유해주세요! 🙌)