일요일, 5월 27, 2012

[B급 프로그래머] What makes a good engineering culture?

Quora에 다음과 같은 질문이 올라왔다.

Quora and Facebook both have strong, well-known engineering cultures. What makes a "good" engineering culture - free time to commit to projects, a commitment to open source, or is it the leadership being technical by trade?

한글로 번역하자면... "쿠오라와 페이스북에는 강력하고 잘 알려진 공학적인 문화가 있습니다. '훌륭한' 공학적인 문화를 만드는 요인은 무엇일까요? 프로젝트에 전념하기 위한 시간? 오픈 소스에 대한 기여? 전문가가 되기 위한 리더십?"

여러 가지 다양한 의견이 나왔지만, 질문의 당사자(아니 해당 회사)로 쿠오라 엔지니어인 Edmond Lau가 직접 대답한 내용이 대박이다. 그냥 읽고 넘어가기에 좋은 정보이기에(라 쓰고 '나중에 참조할 목적으로'라고 읽는다. ㅋㅋ) 간략하게 요점을 정리해보았다

  1. 반복 속력을 최적화한다: 빠른 반복 속력은 작업 동기와 흥미를 유발한다. 코드 배포와 기능 출시를 방해하는 구조적이며 관료적인 장벽은 엔지니어가 회사를 떠나는 이유 중에 가장 짜증나며 공통적인 요인으로 작용한다. 조직적인 관점에서 보면, 빠른 반복 속력은 엔지니어와 디자이너에게 매일 일어나는 결정을 허가를 얻지 않고 자율적이고 유연하게 내리도록 만든다. 반복 속력은 또한 제품 개발을 시작하기 위한 잘 정의된 프로세스가 정립되어 투자가 많이 일어났을 경우에 개발 취소가 기대치 않은 방식으로 일어나지 않음을 의미한다. 팀 관점에서, 빠른 반복 속력은 팀 노력을 조율하고 이끌어내기 위한 강력한 리더십을 의미한다.
  2. 무지막지하게 자동화를 추구한다: 제품이 커저나감에 따라, 엔지니어당 운영 부하도 커져나간다. 페이스북은 엔지니어당 백만 가입자를 뒷받침하는 확장 측정 기준을 내세우는 것으로 유명하다. 자동화와 스크립트화는 개발팀이 실제 제품에 전념하도록 만들어주므로, 단기적인 땜빵이라는 유혹에서 벗어나 장기적인 수정과 테스트에 집중해야 한다.
  3. 올바른 소프트웨어 추상화를 이룬다: MIT 교수인 다니엘 잭슨은 소프트웨어 추상화의 중요성을 다음과 같이 말했다. "올바른 추상화를 고른다면, 설계부터 자연스럽게 프로그램이 흘러가도록 만들며, 모듈을 작고 단순한 인터페이스로 유지하며, 새로운 기능은 광범위한 재조직화 없이 기존 틀에 맞아 떨어지게 된다." 팀이 땜방질 해법으로 추상화를 조각내는 대신 소수의 핵심 추상화에 집중하게 되면 공통 라이브러리가 좀더 튼튼해지며, 모니터링이 지능화되며, 성능 지표를 쉽게 이해할 수 있게 되며, 포괄적인 테스트가 가능하게 된다.
  4. 코드 검토로 고품질 코드에 집중한다: 고품질 코드 기반을 유지하면 전체 엔지니어링 팀의 생산성을 높인다. 깨끗한 코드는 이해하기 쉽고, 개발하기 쉽고, 변경하기 쉽고 버그를 (미리) 노출하기 쉽다. (커밋 전이 되었든 커밋 후가 되었든) 시의 적절한 코드 검토를 위한 프로세스 수립은 코드 품질을 여러 가지 방식으로 개선한다. 누군가 코드를 검토한다는 사실이 엉망인 코드 작성에 대한 유혹을 강하게 압박하며, 코드 검토자와 코드 작성자가 더 나은 코드를 작성하는 방법을 배울 기회가 생기기 때문이다.
  5. (서로) 존중하는 작업 환경을 유지한다: 동료 사이의 존중은 열린 의사 소통의 토대를 형성한다. 서로의 생각에 도전하는 행위가 다연스러운 장소에서 건전한 아이디어가 나온다. 서로 물고 뜯는 환경에서는 제대로 된 피드백이 존재하지 않는다. 엔지니어들은 다양한 범위에서 전문가이며, 모든 사람이 각 분야마다 경험치가 다르다. 강력한 팀은 특정 분야에는 강하지만 다른 분야에는 약한 개인들로 구성되지만, 서로 존중하는 문화가 강점을 살려준다.
  6. 코드의 소유권을 공유하자: 코드 소유권을 공유할 경우, 유지 보수 담당이 자리를 비운 상황에서도 유지 보수 담당과 해당 팀원의 스트레스가 줄어든다(백업 요원이 있기 때문에). 또한 팀원들이 특정 분야에 너무 깊이 빠져들지 않기에(예: 난 이 모듈만 책임진다!) 참신한 통찰력을 제공할 수 있게 된다. 마지막으로 전략적인 목표를 빨리 끝내야 할 필요가 있는 시급한 문제를 여러 명이 함께 해결할 수 있게 된다.
  7. 자동화된 테스트에 투자하자: 단위 테스트 커버리지와 통합 테스트 커버리지는 끊임없이 빌드나 제품을 깨먹지 않고서도 대규모 개발자들이 대규모 코드 기반을 관리하도록 만드는 확장 가능한 유일한 방법이다. 자동화 테스트는 팀이 커짐에 따라 지속적인 배포 작업이 가능하도록 만드는 핵심이다.
  8. 20% 시간을 할당하자: 구글, 아틀라시안, 페이스북, 쿠오라는 모두 엔지니어들에게 20%의 시간을 줘서 일반적인 프로젝트 이외에 하고 싶은 뭔가를 하도록 유도한다. 미친 듯이 보이는 아이디어를 실행할 수 있는 시간을 주게 되면 뭔가 색다른 결과를 만들어내며, 장기적으로는 서비스나 제품에 많은 도움을 준다.
  9. 지속적인 개선과 학습 문화를 만들자: 주간 기술 회의는 엔지니어들에게 설계안과 작성 중인 코드를 공유하는 장을 만들어줘서 엔지니어들이 자신들의 작업에 긍지를 느끼고 팀이 당면한 작업 범위를 벗어나 넓게 볼 기회를 제공한다. 배우는 문화를 구축하려면 기초적인 알고리즘, 시스템, 제품 기술을 모든 직원이 보유할 수 있도록 멘터링하고 훈련하는데 집중한다. 엔지니어링 조직이 커지고 사람을 뽑는 노력이 더 들어갈 수록 멘터링과 훈련에 투자하는 노력도 커진다. 새로 뽑은 신입에 대해 매일 한 시간씩 멘터가 시간을 투자하는 행위가 부담으로 느껴질지 모르겠지만, 신입이 성공을 위한 준비를 마치는 과정에서 상당히 큰 지렛대 구실을 한다.
  10. 최고 개발자를 고용하자: 스티브 잡스는 다음과 같이 말했다. "A급은 A급을 뽑고, B급은 C급을 뽑는다" 페이스북 Yishan Wong은 "최고 개발자를 고용하는" 것과 "인터뷰한 최고 후보를 고용하는" 것 사이에는 차이가 있음을 강조한다. 쿠오라도 처음에는 엄청난 고객 요청에 압도 당해 고용 기준을 낮출뻔 했지만 그렇게 하지 않았다. 낮은 품질의 코드와 취약한 엔지니어로 기인한 기술 빚은 팀과 제품을 망가 뜨리기 때문이다.

이 정도면 아주 좋은 출발점으로 보인다. 하지만 훌륭한 문화를 만들기 위해서는 무엇보다 _실천_이 우선이다. 아무리 좋아도 이론은 이론일 뿐이니까. 그런 의미에서 바쁘다는 핑계로 차일피일 미루던 (사내 정보 공유를 위한) 수요 기술 세미나를 내주부터 다시 열어야 겠다. :)

EOB

댓글 4개:

  1. "낮은 품질의 코드와 취약한 엔지니어로 기인한 기술 빚은 팀과 제품을 망가 뜨리기 때문이다."

    낮은 품질의 디자이너/엔지니어들이 빚어내는 제품(문서나 설계도서 등)들은 어떻겠어요. IMF 이후로 대기업에선 사람을 키우기는 커녕 중소기업의 인력을 빼가는 형편이라서, 중소기업이 있는 인력의 바램이 대기업 취직이라는 현상이 제가 일하는 현장의 현상입니다. ㅠ.ㅠ

    수업료가 충분하지 않은 중소기업은 리스크가 점점 커지는 듯 해요. (아... 넋두리만 늘어놓았군요. 송구합니다)

    답글삭제
  2. // zizukabi님, 현 상태에 대해서는 100% 동감합니다. 개발 인력이 부족한 미국은 전세계 인재들을 끌어드릴 능력과 문화가 되지만, 한국은 그마저도... T_T

    답글삭제
  3. 이렇게 저렇게 읽어도 유익하고 타당한 글이라 댓글을 남깁니다. ㅎ

    Quora 라는 회사는 소셜지식인 서비스(네이버지식인 + 트위터 + 위키피디아 + a)로 급성장하고 잇는데, 2011 주목할만한 7가지 기술 에도 소개된 전도 유망한 회사이다.
    인스타그램, Quora, Pinterest와 같은 신흥(?) 서비스 회사들은 눈여겨 볼만하다.

    1. 반복속력이 광의적으로 쓰여서 좀 더 곱씹어봐야겠다.
    2. 자동화를 위해 18번 스크립트 언어를 정하고 익히자.
    3. Adhoc solution에 단련된 우리가 부족한 부분. 설계에 대해 지나친 대화와 논의가 필요하다.
    4. Ground Rule은 코드작성자에 대한 어떤 비난도, 작성한 코드에 대한 어떤 애착도 없이 겸허히 서로가 받아 들여야 한다.. 는 것이다
    5. 적극 동의한다. 서로가 예(에티켓? 매너?)를 갖추고 정글화 되는 조직을 경계하자.
    6. 필요하다. 적어도 2명이 크로스 작업이 되는 것을 필요하다. 왜? 휴가가기 위해서?. ㅎ
    7. Test 교리를 전파할 Test mania가 팀내 한명은 있어야 모두 따른다.
    8. How? 에서 요즘 고민이다.


    -- klimtever --

    답글삭제