20 년에 걸쳐 생산성 개념은 혼란 스럽거나 모순 된 결과로 많은 경우 소프트웨어 엔지니어링 내에서 모든 종류의 방향으로 진화하고 확장되었습니다. 이 분야의 초기 몇 년 동안, 나는 더 많은 시간의 일, 더 많은 코드 라인 및 더 많은 “활동”이 자동으로 더 나은 결과를 의미한다는 잘못된 인상을 받았습니다. 그러나 개발자가 팀 리드에 이르기까지 생산성에 대한 관점 및 엔지니어링 관리자 전용에 대한 견해는 코드 품질을 상하게하는 것뿐만 아니라 개발자의 복지에 심각한 피해를 입히는 것만으로도 달성해야 할 목표에 반대하는 것처럼 보였습니다. .
이 기사에서는 내가 겪은 오해 중 일부를 공유하고 기술 산업에서 생산성을 둘러싼 가장 널리 퍼진 신화를 폭로하겠습니다. 개인적인 이야기, 실용적인 팀 경험 및 연구 지원 관찰을 통해 실질적인 생산성은 열광적이고 초과 근무 연료 스프린트와 관련이 없으며, 대상 초점, 건강한 작업 루틴 및 균형 잡힌 조직 문화와 관련이 있다고 주장합니다. . 이러한 환상과 싸우면 소프트웨어 프로젝트를 관리하고 그 사람들을 창조하는 사람들을 다루는 것에 대해 새로 생각하기를 바랍니다.
초과 근무 환상
내가 알게 된 최초의 생산성 환상 중 하나는 연장 된 시간 동안의 크 런칭이 반드시 더 나은 결과를 가져 오는 것입니다. 직장에서 처음 몇 년 동안, 나는 시간이 매우 제한적인 조직의 지불 시스템을 크게 업그레이드했습니다. 마감일이 가까워서 벽에 밀려 났기 때문에 팀이 거의 2 개월 동안 밤과 주말에 늦게 일하도록 설득했습니다.
그러나 약 6 개월 후에 균열이 나타나기 시작했습니다. 팀이 지친 심야 코딩 세션에서 소개 된 미묘한 버그는 생산에 대한 표면화를 시작했습니다. 이러한 문제는 고정 될 때 추가 시간과 자원이 소비되었지만 고객의 신뢰도 저하되었습니다. 더 나쁜 것은,이 영웅적인 초과 근무 추진은 팀의 두 핵심 멤버가 스트레스에서 불타고 번 아웃과 일자리에 대한 불만을 인용 한 후 종료 되었기 때문에 가능했습니다. 그런 다음 마감일을 달성하는 데있어 단기 성공이 큰 장기 비용으로 이루어 졌다는 것이 단순히 분명해졌습니다. 따라서 시간이 생산성을 보장하는 신화는 비참한 것으로 판명되었습니다.
수량 시간 이상의 품질 시간
현대 소프트웨어 엔지니어링에서 요구되는 두 가지 중요한 기술, 창의성과 문제 해결은 피로로 급격히 줄어 듭니다. 수년에 걸쳐 Rescuetime 및 Toggl과 같은 시간 추적 도구를 사용하여 팀의 작업 패턴을 연구하면 결과가 나왔습니다. 개발자가 정기적으로 4-5 시간 동안 방해받지 않은 농도를 누릴 때 가장 높은 품질 코드가 생성됩니다. 개인이 10 시간 또는 12 시간으로 밀면 오류율이 종종 급증하고 재 작업은 백엔드에서 더 많은 시간을 소비 할 수 있습니다. 더 많은 측정 일정을 채택함으로써 우리는 버그의 현저한 감소, 팀 만족도가 상승하며 궁극적으로 더 예측 가능한 배달 일정을 보았습니다.
초점 오류
또 다른 확고한 신화는 개발자가 생산적인 것으로 간주되도록 개발자를 “연결”하고 매 순간 타이핑해야한다는 것입니다. 이러한 오해로 인해 기업은 Draconianic 활동 모니터링 시스템을 구현하여 키 스트로크 또는 스크린 시간에 집착 할 수 있습니다. 나는 조직이 가능한 최대 시간 동안“온라인”이 나타나는 것이 헌신의 표시로 간주되는 문화를 장려하는 것을 보았습니다. 이 인식은 계획, 토론, 연구 및 개념 설계와 같은 소프트웨어 개발의 일부인 필수 무형 활동을 완전히 놓치게됩니다.
키보드에서 획기적인 혁신
작년에 가장 눈에 띄는 시위 중 하나는 작년에 우리 팀이 까다로운 마이크로 서비스 아키텍처 문제로 격렬한 전투 중에 있었을 때였습니다. 2 주 동안 우리는 복잡한 서비스 네트워크를 디버깅하려고 노력하면서 좌절로 코드를 강화했습니다. 마지막으로, 우리는보다 비공식적 인 대화를 위해 휴식 공간을 연기했습니다. 커피를 통해 우리는 급격히 단순한 솔루션을 화이트 보드로 만들었고, 우리가 어려움을 겪고있는 복잡성을 많이 줄였습니다. 그 30 분의 대화는 우리에게 몇 달의 고통스러운 리팩토링이었던 것을 우리에게 절약했습니다. 효과적인 문제 해결은 종종 IDE의 경계 밖에서 잘 발생한다는 강력한 상기시켜주었습니다.
생산성 메트릭을 다시 생각합니다
“시간이 잘되고”끊임없는“활동”이 결함이있는 지표라면 대신 무엇을 추적해야합니까? 소프트웨어 엔지니어링의 전통적인 생산성 측정 값은 일반적으로 피상적 인 출력에 중점을 둡니다. 코드 줄, 커밋 수 또는 티켓이 폐쇄됩니다. 이것들은 몇 가지 높은 수준의 통찰력을 제공 할 수 있지만 오용하기 쉽습니다. 개발자는 더 적은 논리적 변화를 저지르거나 휴리스틱 코드 조치를 게임하는 것을 목표로 할 수있는 더 많은 장점 방법을 선택할 수 있습니다. 일반적으로, 이러한 측정은 개발 진행 상황을 추적하는 데별로 능숙하지 않습니다. 이러한 조치 중 많은 부분이 유지 보수 문제를 최소화하는 데 비생산적이기 때문입니다.
보다 전체적인 접근
몇 년 동안, 우리 팀과 나는 우리의 노력이 실제 이익으로 이어질 것이라고 확신 할 수있는 의미있는 출력 측정을 찾으려고 시도했습니다.
- 새로운 기능을 위해 시장에 출시 될 시간
실제 사용자에게 실제로 가치있는 기능을 얼마나 빨리 제공 할 수 있습니까? 이것은 우리가 제공하는 기능이 실제로 유용한 지 고려하기 때문에 원시 코드 변경보다 처리량을 측정하는보다 안정적인 방법입니다. - 생산 사고 수
낮은 사고율은 더 나은 코드 품질,보다 철저한 테스트 및 건축 건축 결정을 의미합니다. 빈번한 생산 사고는 신호 숨겨진 부채 또는 개발 중 코너를 줄입니다. - 코드 유지 관리 점수
우리는 Sonarqube와 같은 자동화 된 도구를 사용하여 복제, 복잡성 및 잠재적 취약점을 감지합니다. 시간이 지남에 따라 안정적이거나 개선되는 점수는 장기적인 품질을 존중하는 문화와 함께 더 건강한 코드를 나타냅니다. - 팀 지식 공유
우리는 개별 출력에만 초점을 맞추는 대신 지식이 얼마나 많이 흐르고 있는지 확인하고 있습니다. 쌍이 작업을 수행하고 철저한 코드 검토를 수행하며 주요 건축 결정을 문서화하고 있습니까? 정보가 잘되는 팀은보다 집단적으로 문제를 해결할 수 있습니다. - 고객 만족도 등급
궁극적으로 소프트웨어는 사용자를위한 것입니다. 긍정적 인 피드백, 낮은 지원 티켓 볼륨 및 강력한 사용자 채택률은 실제 생산성의 우수한 지표가 될 수 있습니다.
이러한 광범위한 조치에 중점을 두어 코드 작성 방법에 대한 더 나은 결정을 장려 할뿐만 아니라 우선 순위가 사용자의 요구 및 유지 보수 솔루션과 일치하도록 보장합니다.
전략적 게으름의 힘
나는 훌륭한 개발자들이 매일 수천, 수천 줄의 코드를하는 사람들이라고 생각했습니다. 시간이 지남에 따라, 나는 그것이 완전히 반대 일 수 있음을 알았습니다. 실제로 최고의 엔지니어는 실제로 내가 “전략적 게으름”이라고 부르는 것을 연습 할 것입니다. 오랜 시간이 걸리는 정교한 솔루션에 뛰어 들지 않고 코드가 적고 종속성이 적고 향후 유지 보수가 적은 더 우아한 대안을 찾거나 더 우아한 대안을 찾는 데 시간이 걸립니다.
주니어 개발자가 3 일 동안 거의 500 줄의 코드로 데이터 처리 스크립트를 사용하여 작업 한 프로젝트를 기억합니다. 그것은 단지 어리 석고 중복되었지만 효과가있었습니다. 그날 오후에 돌아가서 다시 방문하여 우리 팀의 리드 개발자는 타이트한 50 라인 솔루션, 청소기, 아마도 더 나은 성능, 부팅을 보여줄 수있었습니다.
진정한 생산성을위한 도구 및 기술
간단한 “바쁜 작업”이 아닌 진정한 생산성 환경을 구축하면 올바른 툴링과 올바른 조직의 사고 방식을 모두 요구합니다. 수년에 걸쳐, 나는 다양한 프레임 워크를 실험하고 소수의 신뢰할 수있는 전략을 발견했습니다.
- 수정 된 Pomodoro 기술
25 분의 전통적인 Pomodoro 세그먼트는 깊은 프로그래밍 작업에 너무 짧게 느껴질 수 있습니다. 우리 팀은 종종 45 분의 초점 블록과 15 분의 휴식을 사용합니다. 이 케이던스는 반드시 휴식 시간에 지속적인 주목을받는 기간의 균형을 유지합니다. - 칸반/스크럼 하이브리드
우리는 시각적 워크 플로를 결합합니다 칸반 반복주기에서 스크럼. 다음과 같은 도구를 활용하여 텔레로 그리고 존재하다우리는 스프린트로 WIP 항목과 일정 작업을 제한합니다. 이것은 컨텍스트 전환 오버로드를 방지하고 새로운 작업을 시작하기 전에 마무리 작업에 레이저 중심을 유지합니다. - 시간 추적 및 결과 분석
다음과 같은 도구가있는 로깅 시간 토글 그리고 구출 개발자의 자연 생산 시간에 대한 통찰력을 제공하십시오. 해당 정보가 장착되어있는 각 사람의 중요한 작업은 가장 생산적인 시간으로 예약되며 9-5 분의 슬롯에 제한되지 않습니다. - 코드 리뷰 및 쌍 프로그래밍
협업 문화는 은둔자와 같은 행동보다 더 나은 결과를 창출하는 경향이 있습니다. 우리는 서로 코드 리뷰를 자주 제공하고, 때때로 짝을 이루고, 이는 더 일찍 문제를 일으키고, 지식을 전파하며, 코드베이스의 일관성을 유지하는 데 도움이됩니다. - 지속적인 통합 및 테스트
자동화 된 테스트 및 지속적인 통합 파이프 라인은 전체 프로젝트를 탈선시킬 수있는 서두르고 조잡한 체크인에 대해 보호합니다. 적절하게 구성된 테스트는 플래그 회귀를 빠르게 깃발을 내고 사려 깊고 점진적인 변화를 장려합니다.
건강한 엔지니어링 문화 구축
아마도 가장 큰 신화는 스트레스와 압력이 자동으로 더 높은 성능을 유발한다는 것입니다. 일부 리더는 여전히 개발자가 끊임없는 마감일, 끊임없는 스프린트 및 고 스테이크 릴리스에서 탁월하다고 주장합니다. 내 경험에 따르면, 마감일이 짧아지면서 단기간의 노력이 발생할 수 있지만, 만성 스트레스는 결국 프로젝트를 더욱 되돌릴 수있는 실수, 소진 및 사기 문제로 이어집니다.
심리적 안전 및 지속 가능한 기대
나는 심리적 안전이 보장되는 곳에서 훨씬 더 나은 결과를 보았고 개발자들은 편안한 우려를 느끼고 다른 솔루션을 선택하고 실수를 일찍 선언하는 것을 느끼고 있습니다. 우리는 정기적으로 회고를함으로써 이런 종류의 문화를 장려합니다.이 문화는 손가락을 가리키지 않고 우리의 프로세스가 어떻게 개선 될 수 있는지 탐구합니다. 우리는 또한 근무 시간과 관련하여 현실적인 기대를 설정하여 팀원이 휴식을 취하고 죄책감없이 휴가를 갈 수 있도록합니다. 반 직관적이지만, 잘 알고 있고 감사하는 팀은 일정한 압력을 받고있는 팀보다 일관되게 고품질 코드를 작성합니다.
미팅 날과 포커스 블록
이전 팀 중 하나와 함께 일한 것은“수요일 없음 수요일”의 도입이었습니다. 개발자는 하루 종일 중단없이 코딩, 연구 또는 테스트를 보냈습니다. 수요일에는 생산성이 급등했으며 팀의 모든 사람들은 그 조용한 시간 블록을 좋아했습니다. 우리는 다른 날에 필수 회의 일정으로 이것을 균형을 잡았으며, 장기간의 토론의 축적에 빠지지 않도록 짧고 요점을 유지했습니다.
실제 사례 연구에서 얻은 교훈
광범위한 기술 산업에서 균형 잡힌 품질 중심 모델의 채택이 더 나은 제품으로 이어지는 방법을 보여주는 많은 예가 있습니다. Basecamp (이전 37signals)와 같은 회사는 가지고 있습니다 침착하고 집중된 작품의 개념에 대해 공개적으로 이야기했습니다. 근무 시간을 캡핑하고 초과 근무를 낙담시켜 Basecamp 및 Hey와 같은 지속적으로 안정적인 제품을 출시했습니다. 고압 신생 기업과는 달리, 버그가 많은 기능을 방출하고 개발자의 영업권을 불 태우는 데 반복.
한 팀이 정말로 마음에 들었습니다. 그것은 주변의 모든 일정을 재 작업하고, 몇 시간의 어려운 시간으로 인해 휴식을 취하고 슬래 밍을 재 작업했습니다. 1/4 분기에 개발자 만족도 점수는 점점 더 많았지 만 더 나아졌지만, 들어오는 지원 티켓은 상당한 규모의 순서로 하락했습니다.
“생산성”의 의미를 다시 생각
결국, 저의 경험으로 인해 소프트웨어 엔지니어링의 생산성을 다음과 같이 정의했습니다. 개발 팀의 건강한 환경을 유지하면서 최종 사용자에게 지속 가능한 가치를 제공합니다. 완전히 채워진 스프린트 백 로그 또는 긴 커밋 메시지 목록과 같은 의사 출력에 속하는 것은 매우 쉽습니다. 그러나 SUP를 넘어서 erficial, solid 및 유지 관리 가능한 코드에는 정신 선명도, 꾸준한 협력 및 사려 깊은 계획이 필요합니다.
균형 방정식
지속 가능한 성공을위한 공식은 명확한 목표, 올바른 툴링 및 개발자의 복지와 최종 사용자의 요구에 관심을 갖는지지 문화의 균형을 유지합니다. 우리는이보기를 세 가지 지침 원칙으로 구성 할 수 있습니다.
- 연장 된 작업에 대한 효과적인 작업 : 실제로 중요한 것은 팀이 화면 앞에 앉아있는 시간이 아니라 전달되는 것입니다.
- 가치 지향 지표 : 유지 관리, 결함률 또는 사용자 만족도와 같은 결과와 관련된 메트릭을 모니터링합니다.
- 문화적 지속적인 개선 : 실제 생산성은 작업 흐름, 팀 협업 및 코드가 작성되는 방식에 대한 점진적인 개선에서 비롯됩니다. 회고, 유연한 스케줄링, 지식 공유-시간이 지남에 따라 지속 가능한 속도를 가능하게합니다.
결론
소프트웨어 엔지니어링의 진정한 생산성은 매일 매일 더 많은 시간을하거나 수백 명이 코드 라인을 작성하여 관리자에게 깊은 인상을주는 것이 아닙니다. 오히려 그것은 사용자에게 실질적인 가치를 지니고 시간의 테스트를 견뎌낸 강력하고 잘 테스트 한 솔루션을 제작하는 것을 의미합니다. 초과 근무가 성공하거나 휴식없이 끊임없는 코딩이 명예의 궁극적 인 배지라는 생각과 마찬가지로 이러한 신화를 의문의 여지가있는 시간입니다.
개인적인 여정은“근무한 시간”또는“티켓 폐쇄”-슈치 조치는 놀라 울 정도로 기만적 일 수 있다고 가르쳤다. 실제 생산성은 팀에 활력을 불어 넣고 책임있는 코드를 작성하며 실제 사용자 요구에 따라 기능을 제공합니다. 이를 위해서는 사려 깊은 스케줄링, 의미있는 지표, 전략적 게으름 및 명확성, 협업 및 창의성을 위해 소중한 강력한 엔지니어링 문화와 같은 전체적인 접근이 필요합니다. 우리가 새로운 방법에 대한 조사에 개방되어 있고, 그들의 시간을 오래 지속했던 가정을 폐기하는 경우, 우리는 생산성이 더 나은 소프트웨어가 아닌 기술 산업을 구축 할 수 있습니다.
게시물 소프트웨어 엔지니어링의 생산성 신화 먼저 나타났습니다 Unite.ai.