Clean Think 시니어 개발자의 역량과 역할에 대한 고민

시니어 개발자의 역량과 역할에 대한 고민

시니어 개발자는 어떤 역량과 역할을 해야 하는 것일까?
내가 일하고 있는 모습은 어떤가?
시니어 개발자의 역할은 무엇인가?
한번도 정리해보지 못한 바 “시니어란?”물음에 대답하기 어려웠다.

따라 다른 사람들의 생각을 보고 정리해보기로 했다.

소프트웨어 장인

장인은 한 가지 이상의 중요 소프트웨어 프로젝트를 주도했던 프로그래머들이다.
그들은 전형적으로 10년 이상의 경력을 가지고 여러 다른 시스템, 언어 및 운영 시스템 작업을 해왔다.
복수의 팀들을 주도하고 조정하는 법을 알며, 능숙한 디자이너와 건축가들이며, 힘들이지 않고 다른 모든 이들을 위해 코드를 처리할 수 있다.
경영직 제안을 받고도 이를 거절하거나, 자신들의 주된 기술적 역할과 통합시켰다. 또한 판독, 연구, 실행, 및 가르치기를 통해 그런 기술적 역할을 유지한다.

개발자의 레벨

  • 주니어
    • 일반적인 간단한 작업
    • 영향이 적은 작업
  • 중니어
    • 일반적인 작업
    • 감독이 적은 업무
  • 시니어
    • 솔루션 디자인
    • 모든 것에서 뛰어나지는 않으나 훨씬 더 능숙
    • 코딩 기술 그 이상은 차이점이 정확
    • 자체적으로 완전한 애플리케이션을 개발
    • 주니어 교육 및 테크 리딩
    • 개발 부채 파악 및 개선
    • 채용 프로세스 참여
    • 개발 문화에 대한 개선 의견 피력
    • 업무 단위 스케쥴링
      • 60분 -> 30분 -> 15분 -> 10분 단위로 일을 쪼개서 하게 됨
    • 회사 정책 참여
    • 동료를 잘하게 함
    • 특정 도메인에 대한 경험과 지식, 아키텍처에 대한 설계

주니어 -> 중니어

  • 전체 개발 과정을 최소한 두 번 반복하는 것이 중요
  • 간단하게 코딩을 작성하는 방법을 배움
  • 디버깅
  • 아키텍처, 성능, 보안

중니어 -> 시니어

  • 아무것도 모르는 작업을 수행할 준비가 되어 있어야 함
  • 작업을 수행하는 방법 이상의 것을 알아야 함
  • 인터넷 서핑, 주식 등 너무 빠지지 않기
  • 스케줄 뻥튀기하지 않기
  • 기획에 YES

시니어는 배운다는 자세보다는 현재 가진 스킬로 회사의 어떤 부분을 개선 혹은 리딩 할 수 있어야 한다.

시니어 개발자의 지식수준

  • 더 많은 지식 보유
    • 디자인 패턴
    • 아키텍처
    • 테스트 자동화
    • 성능
    • 보안
    • 소프트웨어 개발을 하는 방법을 아는 것이 중요

시니어 개발자의 코딩

  • 사람이 읽을 수 있는 수준의 코드 레벨
    • 새 팀이 새로운 기능이나 버그 수정 작업이 가능한 수준
  • 많은 실수를 경험하고 동료에게 공유

주니어 개발자의 특징

  • 멋진 수준의 코드 작성
  • 기발한 코드 한 줄
  • 복잡한 추상화
  • 비용을 희생시키면서 까지 코드에 집중

Image

시니어 개발자는 주니어 개발자들에게 코드를 잘 작성할 수 있는지 알려줄 수 있어야 한다.

시니어 개발자의 역할

  • KISS 원칙(Keep it simple, stupid)
    • 유지보수와 확장성을 염두한 코드 작성
    • 코드를 다뤄야 하는 누군가에 대한 배려를 생각
  • 올바른 질문을 하는 방법과 질문을 처리하는 방법을 알고 있음
  • 로드맵에 대한 명확함
  • 일을 찾아서 하며 끌고 감
  • 최소 한 가지의 도메인을 자기 주도적으로 끌고 감
  • 프로젝트가 주어졌을 때 크리티컬 패스 및 우선순위 별 세부 업무를 도출
  • 비즈니스에 대한 생각
  • 전체 시스템 안에서 다양한 부분을 다룸
    • 데이터 파이프라인을 효율적으로 바꿈
    • 기존의 서비스 아키텍처를 더 나은 방향으로 변경
  • 다방면으로 판단 가능한 의사결정

시니어리티

주니어, 중니어 개발자들도 훌륭한 개발자가 많다. 시니어 개발자는 동료들의 신뢰도 매우 중요한데, 믿음을 줄 수 있는 방법을 조사해 높은 순위부터 정렬

  • 팀 개발 이슈를 빠르게 캐치하고 해결
  • 개발 방향을 제시
  • 개발 실력이 뛰어남
  • 도메인에 대한 풍부한 경험
  • 잘 모르는 부분을 친절히 알려줌
  • 최신 기술 트렌드의 이해도가 깊음
  • 고충 해결

Image

결론

  1. 개발팀 동료를 모두 성장하게 하여 “팀”을 만드는 것
  2. 타 팀의 프로젝트(서버, 웹 등)까지 파악/고려하여 “제품”의 유연성과 확장성을 겸비한 설계/문제 해결력

이렇게 일단 정리하고 자야겠다. 앞으로도 계속 고민해야 할 과제이다.

출처

주니어, 미드레벨과 시니어 개발자의 차이점
우아한형제들 기술 블로그 - 우리가 부르는 시니어 개발자는 누구인가?

댓글남기기