소프트웨어 엔지니어 가이드북 읽고
소프트웨어 엔지니어 가이드북 읽고
2025년 1월 29일 · ☕ 5분
오랜만에 블로그 포스팅이다. 새해 맞이 다시 한 번 마음을 다잡고자 책을 읽고 인상 깊었던 부분을 정리해봤다.
개발자 커리어 기본 사항
- 커리어 관리
- 커리어 주인의식을 갖자
- 일을 잘하는 사람이 되자
- 일단 업무를 완수할 것
- 영향력이 높은 작업을 많이 수행할 것
- 내가 한 일을 사람들에게 알릴 것
- 작업 일지를 작성할 것
- 동료와의 피드백을 요청할 것
- 매니저를 아군으로 만들어라
- 정기적인 1:1 미팅을 갖기
- 매니저가 알 거라 짐작하지 말고 모두 말하자
- 매니저의 목표도 이해하기
- 합의된 내용을 완수하고, 못했다면 상황을 공유하기
- 매니저와 상호 신뢰를 구축하기
- 업무 성과를 인정받기
- 페이스를 조절해라
- 스트레칭 - (새로운 것을 빠르게 배워 빠르게 적용하는 업무하기)
- 실행 - 기술과 경험을 활용해 처리하는 일반적인 업무하기
- 관성 - 자신의 능력보다 더 적은 양과 낮은 품질의 작업하기
- 성과 평가 성과 평가에 가장 중요한 요소를 파악할 것 2. 어떤 성과 평가 시스템이 운영되는지 파악할 것 3. 매니저와 내 목표를 논의할 것 4. 매니저와 목표를 합의할 것 5. 성과를 기록해두기 6. 작업 일지를 작성하기 7. 매니저와 진행 상황 공유하기 8. 업무 완수하기 9. 다른 사람 돕기 10. 다른 사람을 도운 후 흔적 남기기 11. 가끔씩 구체적인 피드백을 요청할 것
- 어디서나 통하는 접근법
- 제품 팀 및 제품 지향적 엔지니어
- 제품 아이디어와 의견을 제시하는 적극성
- 비즈니스, 사용자 행동 및 관련 데이터에 대한 관심
- 호기심과 깊은 관심
- 비엔지니어 그룹과 훌륭한 관계를 맺는 강력한 소통 역량
- 제품과 엔지니어링의 절충
- 엣지케이스의 실용적인 처리
- 빠른 제품 검증 주기
- 제품에 대한 주인의식
- 반복적인 학습에 따른 강한 제품 본능
- 제품 지향적 엔지니어가 되는 법
- 기업의 성공 방법과 이유를 이해하자
- 프로덕트 매니저와 긴밀한 관계를 구축하자
- 사용자 조사, 고객 지원 및 관련 활동에 참여하자
- 실현 가능한 제품 아이디어를 테이블에 올리자
- 프로젝트 관점에서 제품/엔지니어링 절충안을 제안하자
- 프로덕트 매니저에게 정기적으로 피드백을 받자
- 플랫폼 팀
- 기술적인 미션에 집중
- 플랫폼 팀의 고객은 보통 내부 고객
- 여러 팀에서 사용
- 플랫폼팀 장단점
- 장점
- 엔지니어링 복잡성
- 광범위한 영향력
- 큰 엔지니어링 자유도
- 일상적인 압박감 감소
- 숙련도 높은 팀
- 단점
- 정의하기 어려운 비즈니스 기여도
- 비용 센터로 인식
- 사용자와의 거리
- 장점
- 플랫폼팀에서 성공하기
- 고객과의 공감대 형성
- 플랫폼을 사용하는 엔지니어와의 소통
- 플랫폼의 고객과 협업
- 제품 팀에 순환 근무
- 긴급성과 집중력을 목표함
- 제품 팀 및 제품 지향적 엔지니어
유능한 소프트웨어 개발자
믿음직한 개발자로 성장하는 방법
- 가장 중요한 업무에 집중하기
- 항상 최우선 과제를 완료하는 습관 만들기
- 거절하는 법 배우기
- 작업 소요시간을 추정해보자
- 멘토를 찾아라
- 선의 통장의 잔고를 정기적으로 채워넣자
- 솔선수범하라
- 코딩연습하기
- 꾸준히, 코드리뷰 요청, 코드를 작성하는 만큼 코드 읽기
- 더 많은 코딩
- 사이드 프로젝트
- 코딩 연습이 포함된 튜토리얼 / 강의
- 코딩 챌린지
- 정기적인 짧은 코딩 연습
- 소프트웨어 개발
- 프로그래밍 언어에 능숙해지기
- 언어와 함께 사용되는 기본 프레임워크 알아보기
- 다른 언어 배우기
- 넓게 갈까, 깊게갈까?
- 경력초기에는 깊게, 점점 넓게
- 디버깅
- 디버깅 도구에 익숙해지기 ex) vscode
- 숙련된 개발자의 디버깅 방법을 관찰하기
- 도구 없이 디버깅하는 방법 알아보기
- 리펙토링
- 가능한 한 자주 리펙토링 연습하기
- 테스트
- 코드리뷰를 요청하거나 커밋전에 테스트하기
- 믿음직한 개발자는 엣지케이스에 깊은 관심을 기울인다.
- 유능한 개발자는 자동화된 테스트를 사용한다.
다재다능한 시니어 엔지니어
- 조금 약속하고 많이 일하고, 소통 많이 하기
- 장애가 되는 요소를 조기에 알리고 절충안을 제시하기
- 인바운드 요청 효율적으로 처리하기
- 방해받지 않고 깊이 있는 작업을 할 시간을 확보하기
- 집중할 때는 지금은 안 돼요 라고 말하기
- 어떤 일을 도와주는 시간에 타임박스를 설정하기
- 동기적인 요청을 비동기적 요청으로 전환하기
- 들어오는 요청을 더 도움이 될 동료에게 전달하기
- 요청의 우선순위를 정하기
- 중요하지 않은 일이라면 거절하기
- 가끔은 할 일 목록을 정리하기
- 압도감을 느끼는 것은 정상임
- 제대로 완수하기
- 제품 사양서 작성
- 테스트 계획 세우기
- 테스트, 모니터링 및 알림 관련 작업을 작업 예상 시간에 포함하기
- QA 팀에 떠넘기지 말기
- 매일 무언가를 반복하기
- 긴 작업에는 많은 피드백이 들어오기 어렵다.
- 팀
- 프로젝트 작업을 쪼개고 예상 시간 추정하기
- 다른 팀원을 위한 문서 만들기
- 팀이 막혀 있는 문제 풀기
- 외부 요인 때문에 일이 진행되지 않으면 나서서 해결하기
- 출시를 위한 소프트웨어 아키텍쳐
- 비즈니스 목표를 말로 표현하기
- 이해관계자의 동의 얻기
- 변경사항을 올바르게 출시
- 소프트웨어 엔지니어링에 최종 결정이란 없다. - 소프트웨어는 끊임없이 변화하는 비즈니스 요구사항과 현실 세계에 발맞춰 진화한다.
- 시니어 엔지니어라는 용어는 업계 전반에서 다소 모호한 경우가 많다.
- 시니어의 정의가 넓든 좁든, 복잡한 프로젝트라도 시니어 엔지니어가 참여하면 잘 마무리될 것으로 기대한다. 프로젝트에 문제가 발생하면 해결책을 찾는 것도 시니어 엔지니어의 역할이다.
실용주의 테크리드
- 테크리드에 대한 기대치
- 시니어 엔지니어의 대한 기대치와 비슷하며, 프로젝트를 주도하는 역할이 추가된다.
- 팀원들의 역량 강화 및 막힌 문제 해결 지원
- 이해관계자, 제품, 심지어 매니저에게 최신 상황 정보 제공
- 코딩, 코드 리뷰, 온콜 등 개별 기여자(IC) 업무 수행에 대한 롤모델
- 최고의 테크리드는 자신이 다른 엔지니어보다 우월하다고 생각하지 않는다.
- 테크리드는 스스로 필요할 떄 주도권을 잡는 것과 모든 엔지니어가 주도권을 갖고 자신감을 가지고 결정을 내릴 환경을 조성하는 것 사이에서 균형을 잡아야 한다. 테크리드의 목표는 팀원들이 항상 리더에게 의지하고 리더의 결정을 따르도록 리드하는 것이 아닌, 팀과 프로젝트의 성공을 돕고 사람들이 최대한 효율적으로 일하도록 돕는 것이다.
롤모델로서의 스태프 및 수석 엔지니어
- 스태프+ 엔지니어에 대한 전형적인 기대치
- 완전히 독립적으로 활동하며 주변 사람들을 가이드
- 그룹 전체에서 모범 사례를 수립하고 개선
- 시니어 엔지니어와 경험이 적은 엔지니어를 멘토링
- 비즈니스를 이해하기
- 북극성, KPI, OKR
- 고객의 입장에서 생각하기
- 고객의 사용 이유 파악하기
- 제품의 비즈니스 가치 이해
- 제품에 대한 SWOT 분석 생성 (Strength, Weakness, opportunity, threat) 이 수준에서는 비즈니스를 이해하는 것은 물론이고, 엔지니어링 매니저, 프로덕트 매니저, 비즈니스 담당자, 기타 엔지니어 등 다양한 사람들과 잘 협력해야한다. 이 직급에 이르면 안정적이고 탄력적인 소프트웨어 시스템을 구축하고, 업계 관행을 활용하며, 자신이 속한 그룹이 더 잘 실행하는데 도움이 되는 시스템을 마련하는 데 모범을 보여야 한다.
결론
- 배움을 멈추지 말자
- 호기심을 유지하자
- 질문하기
- 겸손함을 유지하기
- 멘토링을 받고 멘토링을 하기
- 자율학습
- 지식을 공유하기
- 무언가를 깊이 있게 배우는 가장 좋은 방법은 가르치는 것이다.
- 지식의 축적
- 기술 분야에서 성공의 가장 중요한 요소는 자신이 할 줄 아는 새로운 것을 끊임없이 쌓아가면서 이를 결합하고 적용할 기회를 찾는 것 - 사이먼 윌리슨 -
- 계속 도전하기
- 업계 동향을 파악하기
- 휴식 시간을 갖기

