Kyun2da.dev

소프트웨어 엔지니어 가이드북 읽고

소프트웨어 엔지니어 가이드북 읽고

2025년 1월 29일 · 5분
소프트웨어 엔지니어 가이드북 읽고

오랜만에 블로그 포스팅이다. 새해 맞이 다시 한 번 마음을 다잡고자 책을 읽고 인상 깊었던 부분을 정리해봤다.

개발자 커리어 기본 사항

  1. 커리어 관리
    • 커리어 주인의식을 갖자
    • 일을 잘하는 사람이 되자
      1. 일단 업무를 완수할 것
      2. 영향력이 높은 작업을 많이 수행할 것
      3. 내가 한 일을 사람들에게 알릴 것
      4. 작업 일지를 작성할 것
      5. 동료와의 피드백을 요청할 것
    • 매니저를 아군으로 만들어라
      1. 정기적인 1:1 미팅을 갖기
      2. 매니저가 알 거라 짐작하지 말고 모두 말하자
      3. 매니저의 목표도 이해하기
      4. 합의된 내용을 완수하고, 못했다면 상황을 공유하기
      5. 매니저와 상호 신뢰를 구축하기
      6. 업무 성과를 인정받기
    • 페이스를 조절해라
      1. 스트레칭 - (새로운 것을 빠르게 배워 빠르게 적용하는 업무하기)
      2. 실행 - 기술과 경험을 활용해 처리하는 일반적인 업무하기
      3. 관성 - 자신의 능력보다 더 적은 양과 낮은 품질의 작업하기
  2. 성과 평가 성과 평가에 가장 중요한 요소를 파악할 것 2. 어떤 성과 평가 시스템이 운영되는지 파악할 것 3. 매니저와 내 목표를 논의할 것 4. 매니저와 목표를 합의할 것 5. 성과를 기록해두기 6. 작업 일지를 작성하기 7. 매니저와 진행 상황 공유하기 8. 업무 완수하기 9. 다른 사람 돕기 10. 다른 사람을 도운 후 흔적 남기기 11. 가끔씩 구체적인 피드백을 요청할 것
  3. 어디서나 통하는 접근법
    1. 제품 팀 및 제품 지향적 엔지니어
      1. 제품 아이디어와 의견을 제시하는 적극성
      2. 비즈니스, 사용자 행동 및 관련 데이터에 대한 관심
      3. 호기심과 깊은 관심
      4. 비엔지니어 그룹과 훌륭한 관계를 맺는 강력한 소통 역량
      5. 제품과 엔지니어링의 절충
      6. 엣지케이스의 실용적인 처리
      7. 빠른 제품 검증 주기
      8. 제품에 대한 주인의식
      9. 반복적인 학습에 따른 강한 제품 본능
    2. 제품 지향적 엔지니어가 되는 법
      1. 기업의 성공 방법과 이유를 이해하자
      2. 프로덕트 매니저와 긴밀한 관계를 구축하자
      3. 사용자 조사, 고객 지원 및 관련 활동에 참여하자
      4. 실현 가능한 제품 아이디어를 테이블에 올리자
      5. 프로젝트 관점에서 제품/엔지니어링 절충안을 제안하자
      6. 프로덕트 매니저에게 정기적으로 피드백을 받자
    3. 플랫폼 팀
      1. 기술적인 미션에 집중
      2. 플랫폼 팀의 고객은 보통 내부 고객
      3. 여러 팀에서 사용
    4. 플랫폼팀 장단점
      1. 장점
        1. 엔지니어링 복잡성
        2. 광범위한 영향력
        3. 큰 엔지니어링 자유도
        4. 일상적인 압박감 감소
        5. 숙련도 높은 팀
      2. 단점
        1. 정의하기 어려운 비즈니스 기여도
        2. 비용 센터로 인식
        3. 사용자와의 거리
    5. 플랫폼팀에서 성공하기
      1. 고객과의 공감대 형성
      2. 플랫폼을 사용하는 엔지니어와의 소통
      3. 플랫폼의 고객과 협업
      4. 제품 팀에 순환 근무
      5. 긴급성과 집중력을 목표함

유능한 소프트웨어 개발자

믿음직한 개발자로 성장하는 방법

  • 가장 중요한 업무에 집중하기
  • 항상 최우선 과제를 완료하는 습관 만들기
  • 거절하는 법 배우기
  • 작업 소요시간을 추정해보자
  • 멘토를 찾아라
  • 선의 통장의 잔고를 정기적으로 채워넣자
  • 솔선수범하라
  • 코딩연습하기
    • 꾸준히, 코드리뷰 요청, 코드를 작성하는 만큼 코드 읽기
    • 더 많은 코딩
      • 사이드 프로젝트
      • 코딩 연습이 포함된 튜토리얼 / 강의
      • 코딩 챌린지
      • 정기적인 짧은 코딩 연습
  • 소프트웨어 개발
    • 프로그래밍 언어에 능숙해지기
    • 언어와 함께 사용되는 기본 프레임워크 알아보기
    • 다른 언어 배우기
    • 넓게 갈까, 깊게갈까?
      • 경력초기에는 깊게, 점점 넓게
  • 디버깅
    • 디버깅 도구에 익숙해지기 ex) vscode
    • 숙련된 개발자의 디버깅 방법을 관찰하기
    • 도구 없이 디버깅하는 방법 알아보기
  • 리펙토링
    • 가능한 한 자주 리펙토링 연습하기
  • 테스트
    • 코드리뷰를 요청하거나 커밋전에 테스트하기
    • 믿음직한 개발자는 엣지케이스에 깊은 관심을 기울인다.
    • 유능한 개발자는 자동화된 테스트를 사용한다.

다재다능한 시니어 엔지니어

  • 조금 약속하고 많이 일하고, 소통 많이 하기
  • 장애가 되는 요소를 조기에 알리고 절충안을 제시하기
  • 인바운드 요청 효율적으로 처리하기
    • 방해받지 않고 깊이 있는 작업을 할 시간을 확보하기
    • 집중할 때는 지금은 안 돼요 라고 말하기
    • 어떤 일을 도와주는 시간에 타임박스를 설정하기
    • 동기적인 요청을 비동기적 요청으로 전환하기
    • 들어오는 요청을 더 도움이 될 동료에게 전달하기
    • 요청의 우선순위를 정하기
    • 중요하지 않은 일이라면 거절하기
    • 가끔은 할 일 목록을 정리하기
    • 압도감을 느끼는 것은 정상임
  • 제대로 완수하기
    • 제품 사양서 작성
    • 테스트 계획 세우기
    • 테스트, 모니터링 및 알림 관련 작업을 작업 예상 시간에 포함하기
    • QA 팀에 떠넘기지 말기
  • 매일 무언가를 반복하기
  • 긴 작업에는 많은 피드백이 들어오기 어렵다.
    • 프로젝트 작업을 쪼개고 예상 시간 추정하기
    • 다른 팀원을 위한 문서 만들기
    • 팀이 막혀 있는 문제 풀기
    • 외부 요인 때문에 일이 진행되지 않으면 나서서 해결하기
  • 출시를 위한 소프트웨어 아키텍쳐
    • 비즈니스 목표를 말로 표현하기
    • 이해관계자의 동의 얻기
    • 변경사항을 올바르게 출시
    • 소프트웨어 엔지니어링에 최종 결정이란 없다. - 소프트웨어는 끊임없이 변화하는 비즈니스 요구사항과 현실 세계에 발맞춰 진화한다.
  • 시니어 엔지니어라는 용어는 업계 전반에서 다소 모호한 경우가 많다.
    • 시니어의 정의가 넓든 좁든, 복잡한 프로젝트라도 시니어 엔지니어가 참여하면 잘 마무리될 것으로 기대한다. 프로젝트에 문제가 발생하면 해결책을 찾는 것도 시니어 엔지니어의 역할이다.

실용주의 테크리드

  • 테크리드에 대한 기대치
    • 시니어 엔지니어의 대한 기대치와 비슷하며, 프로젝트를 주도하는 역할이 추가된다.
    • 팀원들의 역량 강화 및 막힌 문제 해결 지원
    • 이해관계자, 제품, 심지어 매니저에게 최신 상황 정보 제공
    • 코딩, 코드 리뷰, 온콜 등 개별 기여자(IC) 업무 수행에 대한 롤모델
  • 최고의 테크리드는 자신이 다른 엔지니어보다 우월하다고 생각하지 않는다.
  • 테크리드는 스스로 필요할 떄 주도권을 잡는 것과 모든 엔지니어가 주도권을 갖고 자신감을 가지고 결정을 내릴 환경을 조성하는 것 사이에서 균형을 잡아야 한다. 테크리드의 목표는 팀원들이 항상 리더에게 의지하고 리더의 결정을 따르도록 리드하는 것이 아닌, 팀과 프로젝트의 성공을 돕고 사람들이 최대한 효율적으로 일하도록 돕는 것이다.

롤모델로서의 스태프 및 수석 엔지니어

  • 스태프+ 엔지니어에 대한 전형적인 기대치
    • 완전히 독립적으로 활동하며 주변 사람들을 가이드
    • 그룹 전체에서 모범 사례를 수립하고 개선
    • 시니어 엔지니어와 경험이 적은 엔지니어를 멘토링
  • 비즈니스를 이해하기
    • 북극성, KPI, OKR
  • 고객의 입장에서 생각하기
  • 고객의 사용 이유 파악하기
  • 제품의 비즈니스 가치 이해
  • 제품에 대한 SWOT 분석 생성 (Strength, Weakness, opportunity, threat) 이 수준에서는 비즈니스를 이해하는 것은 물론이고, 엔지니어링 매니저, 프로덕트 매니저, 비즈니스 담당자, 기타 엔지니어 등 다양한 사람들과 잘 협력해야한다. 이 직급에 이르면 안정적이고 탄력적인 소프트웨어 시스템을 구축하고, 업계 관행을 활용하며, 자신이 속한 그룹이 더 잘 실행하는데 도움이 되는 시스템을 마련하는 데 모범을 보여야 한다.

결론

  • 배움을 멈추지 말자
  • 호기심을 유지하자
    • 질문하기
  • 겸손함을 유지하기
  • 멘토링을 받고 멘토링을 하기
  • 자율학습
  • 지식을 공유하기
    • 무언가를 깊이 있게 배우는 가장 좋은 방법은 가르치는 것이다.
  • 지식의 축적
    • 기술 분야에서 성공의 가장 중요한 요소는 자신이 할 줄 아는 새로운 것을 끊임없이 쌓아가면서 이를 결합하고 적용할 기회를 찾는 것 - 사이먼 윌리슨 -
  • 계속 도전하기
  • 업계 동향을 파악하기
  • 휴식 시간을 갖기
공유하기
Profile image

Kyun2da

Frontend Developer

개발자 허균의 블로그