3부, 장기적인 가치를 구축하라

2023.01.15

8장 품질과 실용주의 사이에서 균형을 유지하라

  • 코드를 리뷰하는 문화를 확립하라.
    • 코드 리뷰는 훌륭한 코드를 긍정적인 모델로 삼을 수 있게 해준다.
    • 코드 품질과 개발 속도가 균형을 이룰 수 있게 코드 리뷰와 도구 사이에 적절한 균형을 찾아라.
  • 좋은 소프트웨어 추상화에 투자하여 어려운 문제를 단순화하라.
    • 좋은 추상화는 어려운 문제를 단번에 해결하여 이를 활용하는 사람의 생산성을 크게 향상시킨다.
    • 하지만 유스 케이스에 관해 불완전한 정보를 바탕으로 추상화를 만들면 투박하고 쓸모 없는 결과물이 탄생할 것이다.
  • 자동 테스트로 코드 품질을 향상시켜라.
    • 테스트를 거치지 않은 코드 조각은 수정하기 전에 변경사항이 회귀 버그를 일으키지 않는지 확인할 수 있게 테스트부터 추가해야 한다.
    • 몇 개의 좋은 테스트, 테스트 패턴, 라이브러리를 갖추고 나면 테스트를 작성하는 데 드는 수고가 줄어든다.
    • 단위 테스트, 통합 테스트는 테스트를 거치지 않았다면 취약했을 코드를 수정할 때 느낄 두려움을 완화하는 데 도움이 된다.
    • 가장 많은 시간을 절약해주는 테스트에 가장 먼저 집중하라.
  • 기술 부채를 관리하라.
    • 모든 자원을 부채의 이자를 갚는 데 쓴다면 새로운 일을 할 만한 시간이 남지 않는다. 가장 큰 이자를 발생시키는 부채에 집중하라

9장 운영 부담을 최소화하라

  • 간단한 것부터 하라.
    • 단순한 해결책은 이해하고 유지 보수하고 수정하기 쉽기 때문에 운영 부담이 적다.
    • 아키텍처가 너무 복잡하면 아래와 같은 유지 보수 비용이 발생한다.
      • 다양한 시스템에 관한 엔지니어링 전문 지식응ㄹ 습득해야 한다.
      • 복잡성이 증가하면 잠재적 단일 장애점이 늘어난다.
      • 신입 개발자가 새 시스템을 익히고 이해하기 어려워진다.
      • 추상화, 라이브러리, 도구를 개선하는 데 드는 노력이 여러 시스템으로 분산되어 희석된다.
    • 시스템이 간단할수록 이해하고 확장하고 유지 보수하기 더 쉽다.
  • 빨리 실패하면 오류의 원인을 정확히 찾을 수 있다.
    • 빨리 실패하면 더 빠르고 효과적으로 문제를 드러내고 해결할 수 있다.
    • 오류를 감추고 실패를 지연시키지 않으면 디버깅이 더 쉬워진다.
  • 의사 결정보다 메커니즘을 자동화하라.
    • 수동 작업을 적극적으로 자동화해서 시간을 절약하라.
    • 단, 의사 결정 자동화는 수정하기 어려운 경향이 있으므로 신중하게 생각하라.
  • 멱등성과 재진입성을 추구하라.
    • 멱등성 있게 만들 수 없다면 적어도 재시도하거나 재진입할 수 있도록 구성하는 것이 도움이 된다.
    • 이러한 속성을 갖추면 장애 발생 시 동작을 더 쉽게 재시도할 수 있다.
  • 고장 유형을 계획하고 연습하라.
    • 우리가 할 수 있는 최선은 성공을 위한 대본 을 작성하고, 실패 시나리오를 연습하고, 신속하게 복구하는 능력을 기르는 것이다.
    • 복구하는 능력을 키워두면 더 과감하게 전진할 수 있다.

10장 팀의 성장에 투자하라

  • 주변 사람들의 성공을 도와라.
    • 높은 엔지니어링 직위는 동료들이 더 효과적으로 일할 수 있게 도와주는 이들을 위한 자리다.
    • 주변 사람이 성공하면 여러분도 함께 이끌려 간다.
  • 채용을 우선시하라.
    • 높은 채용 기준을 유지하고 팀을 성장시키는 데 적극적인 역할을 하라.
  • 온보딩과 멘토링에 투자하라.
    • 신입 개발자가 빨리 적응할수록 팀이 더 큰 효과를 낼 것이다.
    • 여러분의 팀이 더 큰 효과를 낼수록 여러분은 다른 프로젝트에 더 자유롭게 도전할 수 있다.
  • 코드 소유권을 공유하라.
    • 본인이 개발의 병목이 되지 않도록 버스 지수가 2 이상이 되게 하라.
    • 그러면 레버리지가 높은 다른 활동에 집중할 유연성이 생긴다.
  • 집단 지성을 디브리핑하고 기록하라.
    • 소중한 지혜를 놓치지 않도록 팀원들과 함께 프로젝트를 되돌아보고, 효과가 있었던 부분과 그렇지 않은 부분을 알아보고, 배운 교훈을 기록하고 공유하라.
  • 훌륭한 엔지니어링 문화를 만들어라.
    • 생산성을 높이고 의사 결정을 능률화하고 뛰어난 개발자를 채용하는 데 도움이 된다.
    • 영향력을 효과적으로 발휘하는 데 필요한 습관을 기르다 보면 훌륭한 문화도 만들어진다