고장난 시스템에서 계속 구축 할 수 없습니다.

기술 부채 관리가 중요한 이유

Unsplash에 Mitchel Lensink의 사진

모든 소프트웨어 회사는 어느 정도의 기술적 부채 를 가지고 있는데, 이는 단기적으로 코드를 꺼내기위한 지름길을 취함으로써 장기적으로 추가 개발 작업을하는 것입니다. 기술 부채는 잘못된 설계 결정, 절실히 필요한 리팩토링, 기술 업그레이드 및 뛰어난 버그의 형태를 취할 수 있습니다.

실제 금융 부채를받는 것과 마찬가지로 기술 부채는 지금 당신에게 시간을 조금 더 많이 주지만 미래에 대한이자로 상환해야합니다. 금융 부채와 마찬가지로 기술 부채를 처리하고 관리 하는 현명하고 현명하지 못한 방법 이 있습니다.

이 기사에서는 기술 부채를 빨리 갚는 것이 중요한 이유와 그렇게하지 않을 경우의 결과에 대해 논의하고 싶습니다. 또한 소프트웨어 엔지니어가 기술 부채를 처리 할 시간의 우선 순위를 정할 때 직면하는 몇 가지 일반적인 장애물에 대해서도 설명합니다.

나는 직업 별 소프트웨어 엔지니어이기 때문에이 기사는 그 관점을 반영 할 것이지만이 기사는 모든 사람을위한 것입니다.

기술 부채를 줄이는 이유는 무엇입니까?

가장 중요한 질문을 먼저 해결하겠습니다. 조직의 기술 부채를 줄여야하는 이유는 무엇입니까? 결국, 당신의 앱은 충분히 잘 작동하고 있고, 지금까지 잘 해냈고, 확실히해야 할 더 중요한 기능 작업이 있습니다.

그러한 추론은 받아들이고 싶은 유혹이있을 수 있지만 금융 부채를 관리하는 데 비슷한 접근 방식을 취 하시겠습니까? 부채는이자를 동반하며 부채 상환이 느리면이자가 빠르게 합산됩니다.

Unsplash에 Fabian Blank의 사진

매월 신용 카드로 최소한의 금액 만 지불하면 원래 빌린 금액의 몇 배를 상환하게 될 것입니다.

반대로, 전형적인 30 년 주택 담보 대출의 경우 매년 한 번의 추가 지불을하면 대출의 총 수명에서 몇 년이 걸리고 수만 달러를 절약 할 수 있습니다.

분명히 가능한 한 빨리 재정 부채를 없애는 것이 좋습니다.

예, 기술 부채를 갚는 데는 시간과 노력이 필요합니다. 그리고 다른 기능 작업에서 멀어집니다. 그러나 기술 부채를 조기에 갚는 것은 그만한 가치가 있습니다.

기술 부채 상환의 몇 가지 이점을 살펴 보겠습니다.

  1. 앞으로 더 빨리 이동할 수 있습니다.
  2. 최고의 엔지니어링 재능을 유지할 수 있습니다.
  3. 몇 년마다 전체 애플리케이션을 다시 작성하지 않도록 도와줍니다.

기술적 부채를 해결하기위한 일반적인 반발은 "시간이 없다"는 것입니다. 기술 부채를 관리 하면 시간을 절약 할 수 있다고 말하면 어떻게 됩니까?

누군가가 기술 부채를 갚을 시간이 없다고 말하는 것을들을 때마다이 만화가 떠 오릅니다.

Scott Simmerman의 만화

분명히 사각형 바퀴가있는 카트를 당기는 것보다 둥근 바퀴가있는 카트를 당기는 것이 훨씬 쉽고 빠릅니다. 그러나 비 유적으로 조직은 자신도 모르게 사각형 바퀴가 달린 수레를 끌 수 있습니다.

Martin Fowler 는 "고품질 소프트웨어가 비용의 가치가 있습니까?"라는 기사에서 기술 부채를 해결하고 코드 품질을 높게 유지할 때의 이점을 설명합니다. .

여기에는 다음 그래픽이 포함됩니다.

Martin Fowler 제공

갈색 선은 기술 부채를 무시하고 코드베이스의 품질을 떨어 뜨리는 소프트웨어 회사의 궤적을 나타냅니다. 처음에는 기능을 더 빨리 제공 할 수 있지만 제공 속도는 시간이 지남에 따라 점점 더 느려집니다.

잘못된 디자인 결정, 열린 버그, 오래된 기술 또는 그것이 무엇이든간에 복잡하고 버그가 많은 코드베이스로 작업하는 것이 점점 더 어려워 짐에 따라 결국 기능 개발이 중단됩니다.

반면에 파란색 선은 높은 코드 품질을 유지하고 기술 부채를 해결하며 버그를 조기에 수정하는 것의 중요성을 이해하는 소프트웨어 회사의 궤적을 나타냅니다.

처음에는 새로운 기능을 출시하는 데 더디게 시작하지만 잠시 후 고객에게 가치를 제공하는 데있어 첫 번째 회사보다 앞서 기 시작합니다. 코드베이스의 상태를 유지하는 데주의를 기울이면 시간이 지남에 따라 문제가 발생하는 것을 방지 할 수 있기 때문입니다.

2. 최고의 엔지니어링 인재 유지

이것은 확실한 사실 이라기보다 일화적인 증거이지만, 제 경험상 기술 부채를 해결하지 못하는 회사는 최고의 엔지니어를 잃습니다. 버그가있는 시스템이나 매일 할당 된 작업을 진행하기 위해 고군분투하는 프로젝트에서 작업하는 것을 좋아하는 사람은 없습니다. "레거시 코드"로 작업하거나 수십 년 된 기술로 작업하는 것을 즐기는 엔지니어는 거의 없습니다.

Unsplash에 Tim Gouw의 사진

그렇다면 개발자 경험이 떨어지면 소프트웨어 엔지니어는 무엇을할까요? 더 나은 일자리를 찾을 수있는 사람들은 다른 곳으로갑니다. 즉, 조직의 최고 인재는 퇴사하는 반면, 수요가 많은 기술이 부족하거나 다른 이유로 인해 다른 일을 찾을 수없는 사람은 남습니다.

따라서 최고의 엔지니어링 인재를 유지하려면 조직은 엔지니어만큼이나 고품질 코드를 중요하게 생각한다는 것을 보여야합니다.

3. 처음부터 앱을 다시 작성하지 마십시오.

회사가 앱을 처음부터 다시 작성하는 이유는 무엇입니까? 때로는 플랫폼을 현대화하는 동안 20 년 전의 구식 기술 스택에서 벗어나야하는 것과 같은 매우 유효한 이유입니다.

하지만 위의 Martin Fowler 그래픽에서 앞서 논의한 개발 속도 문제로 인해 앱이 처음부터 다시 작성되는 경우가 많습니다. 개발자 경험이 너무 고통스러워서 결국 엔지니어가 좌절감에 손을 내밀고“나는이 작업을 할 수 없습니다. 다시 시작해야합니다.” 많은 긴 대화 끝에 조직은 결국 동의하고 앱을 처음부터 다시 작성하기로 결정하고이를 위해 수년과 수백만 달러를 소비합니다.

Amazon.com의 사진 제공

새 프로젝트를 다시 시작하는 것이 재미 있다는 것을 인정하겠습니다. 좋아하는 프로그래밍 언어와 도구를 선택하고 이번에는 모든 것을 "올바른 방식"으로 디자인 할 수 있습니다. (미래에 다른 개발자도 현재 레거시 앱에 대해 느끼는 것과 동일한 방식으로 코드를 느낄 수 있습니다…)

그러나 이러한 상황을 피할 수 있었습니까? 제 대답은 그렇습니다. 기술 부채를 우선적으로 처리하고 처음부터 통제 불능 상태가되는 것을 막았다면 완전한 재 작성을 피할 수 있었을 것입니다.

기술 부채가 해결되지 않는 이유

지금 쯤이면 기술 부채를 최대한 빨리 줄이는 것이 좋은 일이라는 데 동의 하시길 바랍니다. 그렇다면 기술 부채가 해결되지 않는 것이 왜 그렇게 흔한 것일까 요?

몇 가지 이유를 생각할 수 있습니다.

  1. 엔지니어들은 기능 작업이 더 중요하다고 생각합니다.
  2. 엔지니어들은 기술 부채를 해결하는 것이 문제가 아니라고 생각합니다.
  3. 엔지니어들은 제품 및 엔지니어링 관리에 대해 미루는 것을 두려워합니다.
  4. 엔지니어는 제품 및 엔지니어링 관리를 효과적으로 설득 할 수 없습니다.

1. 기능 작업이 더 중요합니다

예, 새로운 기능을 출시하는 것이 중요합니다. 기능이 없으면 제품이 없습니다. 하지만 100 % 기능을 개발할 수는 없습니다.

누군가가 나에게 기능 작업이 더 중요하다고 말하고 우리가 기술적 부채를 해결하는 데 우선 순위를 둘 수 없다고 들었을 때, 나는 스스로에게 물어봐야합니다. 기능 작업이 더 중요하다는 것이 지금 정말 사실입니까? 고객이 이미 느리고 버그가 많은 응용 프로그램 위에 제공되는 버그로 가득 찬 또 다른 반쯤 구운 기능을 정말로 좋아할까요?

나는 여기서 약간 우스꽝 스럽지만 그 질문에 대한 진실이 있습니다. 고객에게 가치를 제공하는 것에 대해 이야기하고 있다면 좋은 사용자 경험을 제공해야합니다. 즉, 앱이 성능이 뛰어나고 고객을 좌절 시키거나 고객이 앱을 사용하는 것을 차단하는 버그가 없는지 확인해야합니다. 의도 된 목적.

기능과 기술 부채 모두에 대해 작업 할 수있는 좋은 절충안은 각 스프린트에 새로운 기능을 개발하는 데 걸리는 시간의 약 70 ~ 80 %와 버그를 수정하고 기술 부채를 해결하는 데 시간의 20 ~ 30 %를 보내는 것입니다.

Unsplash에 Sebastian Herrmann의 사진

2. 기술 부채는 내 문제가 아닙니다

엔지니어가 이런 느낌을받는다면 이는 근본적인 엔지니어링 문화 문제의 증상 일 가능성이 높습니다. 나는 모든 사람들이 코드베이스에 대한 자부심과 소유권을 느끼고 최선을 다하고 싶어하는 환경에서 일하고 싶습니다. 누군가가 같은 가치와 비전을 공유하지 않는다면 나는 그 사람과 함께 일하고 싶지 않을 것입니다.

여기서 해결책은 1) 엔지니어링 문화에보다 긍정적 인 방향으로 영향을 미치거나 2) 더 나은 문화적 적합성을 가진 조직을 찾을 수 있도록 회사를 떠나는 것입니다.

3. 밀어내는 것에 대한 두려움

나는 경력이 새로운 개발자들에게서 이러한 두려움을 가장 많이 봅니다. 그들은 해결해야 할 상당한 기술적 부채가 있다는 것을 아는 내부 갈등을 느낄 수 있지만, 그 우려를 표명하는 것을 두려워합니다. 말을하는 것이 자신을 제대로 반영하지 못하거나 직업을 위태롭게 할 수 있다고 생각하기 때문일 수 있습니다.

Unsplash에 Icons8 Team의 사진

소프트웨어 엔지니어로서 우리는 주어진 시간에 회사가 직면하고있는 기술적 부채의 양에 대해 가장 큰 통찰력을 가지고 있다는 것을 기억하는 것이 중요합니다. 기술 부채가 계속해서 우선 순위가 낮아 지거나 무시 될 때 이러한 우려를 표명하고 제품 관리 또는 엔지니어링 관리를 밀어 붙이는 것이 실제로 우리의 의무 라고 생각합니다 .

또한 당신이 정중하게 우려를 표명하는 한, 뒤로 밀고 나서는 것은 존경 만 얻는다는 것도 제 경험이었습니다.

4. 설득 할 수 없음

이것은 나를 네 번째, 아마도 가장 중요한 문제로 이끈다. 엔지니어로서 기술 부채를 해결하는 것이 중요하다는 데 동의하고 제품 관리 및 엔지니어링 관리를 통해이 문제를 제기했지만 그들은 듣지 않았습니다.

Unsplash에 Mimi Thian의 사진

이 시나리오에서 무력감을 느끼기보다는 우려 사항을 더 명확하게 전달해야 할 수도 있습니다. "우리는이 문제를 해결해야합니다."라고 말하고 있지만 그 이유에 대한 명확한 설명이나 이유를 제공하지 않으면 효과적으로 의사 소통하지 못하는 것입니다.

우선 순위를 지정하려는 기술 부채가 중요한 이유와 이것이 비즈니스에 어떤 이점을 가져다 줄지에 대한 컨텍스트를 제공해야합니다. 엔지니어가 아닌 사람이 공감하고 이해할 수있는 용어로 설명하는 것이 특히 중요합니다.

예를 들면 :

“우리는이 저장소에서 코드 커버리지를 늘리기 위해 테스트를 작성하는 데 시간이 필요합니다. 테스트가 부족하기 때문에 버그가 자주 발생하며 이미 프로덕션 단계에있는 문제로 돌아가서 수정하는 데 시간을 투자해야합니다. 테스트 스위트를 더 나은 상태로 만들면 코드에 대한 자신감이 높아지고 고객도 앱을 더 잘 사용하게 될 것입니다. "

아니면 :

“현재 30 개의 공개 된 고객 대면 버그가 있습니다. 이것은 우리 고객에게 나쁜 경험을 만들고 심지어 한 고객이 우리와의 계약을 취소하게 만들었습니다. 이 새로운 기능을 개발하기보다는 버그를 수정하는 데이 스프린트를 사용해야한다고 생각합니다. "

또는:

“지속적인 통합 파이프 라인이 너무 오래 걸립니다. 빌드가 통과되는지 확인하기 위해 피드백을 받으려면 한 시간 이상 기다려야합니다.이 지연된 피드백 루프로 인해 작업을 완료하는 데 정말 오랜 시간이 걸립니다. 모든 엔지니어가 더 빨리 움직일 수 있도록 빌드를 더 빨리 완료하려면 빌드를 최적화하는 데 시간을 할애해야한다고 생각합니다. 빌드가 실행될 때마다 10 분 더 빨리 완료되고 100 명의 엔지니어에게 분산되어 하루에 5 번 새 빌드를 만드는 경우 얼마나 더 많은 작업을 수행 할 수 있는지 생각해보십시오. 이는 매일 83 시간 (10 * 100 * 5/60)이 넘는 공동 개발 시간입니다!”

결론

기술적 부채를지는 것은 불가피합니다. 그러나 조직이 기술 부채를 처리하기 위해 선택하는 방법은 회사를 만들거나 망칠 수 있습니다. 엔지니어로서 저는 현재 자신의 역할에서 직면하고있는 기술적 부채를 해결할 수있는 영감과 권한을 느끼기를 바랍니다. 그렇게하면 회사가 더 나은 일터가되고 제품 사용자에게 더 나은 경험을 제공 할 수 있습니다.

Suggested posts

블랙 미러의 음악적 관련성

블랙 미러의 음악적 관련성

공상 과학 소설은 Netflix 시리즈 Black Mirror에서 현실을 만납니다. 영국 시나리오 작가 Charlie Brooker가 만든 준 무관 한 이야기의 선집으로, 사회가 기술에 의존하게 된 몇 가지 방식과 그렇지 않은 사람들에게 의미 할 수있는 의미를 자세히 살펴 봅니다. 아주 먼 미래. 이 시리즈는 2011 년부터 2013 년까지 BBC 채널 4에서 처음 방영 된 후 2015 년 넷플릭스에서 선정되었으며 디지털 스트리밍 서비스 전용으로 12 개의 에피소드를 더 공개하도록 의뢰했습니다.

Hyperledger Fabric Blockchain은 어떻게 작동합니까? 설명했습니다!

Hyperledger Fabric Blockchain은 어떻게 작동합니까? 설명했습니다!

이 블로그 게시물의 목표는 Hyperledger Fabric 블록 체인의 작동 방식에 대한 주요 개념을 설명하여 사용 방법에 대한 기본적인 이해를 얻는 것입니다. 내용.

Related posts

백엔드 개발을 배우기위한 10 가지 최고의 튜토리얼

프로그래밍은 당신이 아는 것에 관한 것이 아닙니다. 그것은 당신이 알아낼 수있는 것에 관한 것입니다.

백엔드 개발을 배우기위한 10 가지 최고의 튜토리얼

"더 나은 오류 메시지를 작성하지 말고 필요하지 않은 코드를 작성하십시오." — Jason McDonald Backend Development — 대부분 웹, 소프트웨어 또는 앱에서 모든 것이 작동하는 방식에 관한 것입니다. 대부분은 애플리케이션 작동 방식의 중추입니다.

엔트리 레벨 소프트웨어 엔지니어로서 배운 5 가지

엔트리 레벨 소프트웨어 엔지니어로서 배운 5 가지

코딩과 기술력뿐만 아니라 3 년 전, 저는 사물이 어떻게 생겼을 지에 대한 수많은 가정과 기대를 가지고 기업 세계에 처음 발을 들여 놓았습니다. 내가 얼마나 잘못이 증명 될지 거의 알지 못했습니다.

소프트웨어 개발에서“단순한 것”이 빠르게 복잡 해지는 방법

소프트웨어 개발에서“단순한 것”이 빠르게 복잡 해지는 방법

"자동화되기를 바라는이 사소한 것이 있습니다."— 사소한 일이 아닐 것임을 알고 이것을 얼마나 자주 듣지 못했습니까? 아니면 당신이 더 잘 알면서도 직접 말 했나요? 왜 단순한 것들은 소프트웨어 개발에서 결코 단순하지 않고, 여기저기서 몇 가지 작은 것들이 빠진 것과 당신이 만들어야했던 몇 가지 지름길을 아는 것에 대한 좌절없이 우리가 기능을 "적절하게"구현하는 것을 방해하지 않는가? 프로젝트의 다음 기한을 잡을 수있을만큼 모든 것이 제대로 작동하도록하려면? Europe Elects의 다른 사람들과 함께 여러 유럽 국가의 여론 조사에서 주요 데이터를 수집하는 약간의 취미 프로젝트가 있습니다. 이 프로젝트에서는 모든 정보를 수집 할 수있는 인프라를 설정해야합니다.

해독 : 얻을 수없는 테스트 안정성 (아니면?)

해독 : 얻을 수없는 테스트 안정성 (아니면?)

Detox는 모바일 앱용 그레이 박스 테스트 솔루션으로, 테스트 코드와 앱 간의 동기화를 관리하므로 사용자가 수동으로 수행 할 필요가 없습니다. 사용자의 필요와 풍부한 문서 및 가이드가 없어도 개발자와 테스터는 여전히 사용 패턴, 잘못된 구성, 열악한 테스트 안정성으로 어려움을 겪을 수 있습니다.