라니스터는 항상 빚을 갚습니다. 라니스터의 모토는 무엇인가요? Yuri Boldyrev는 크렘린 하급 블로거 Rogers를 더럽혔습니다.

단일 팀의 기술적 부채 관리 관행


약 1년 전, 우리 팀은 급속한 기능 성장 단계에서 품질 개선에 초점을 맞춘 보다 유동적인 개발 단계로 전환했습니다. 현재 우리 제품에는 차선책 솔루션, 보기 흉한 코드, 오래된 라이브러리가 눈에 띄게 축적되어 있습니다. 이 모든 것에 대해 뭔가 조치를 취해야 했습니다.


지금까지 우리는 기술 부채와의 전쟁을 예측 가능하고 고통스럽지 않으며 불가피하게 만드는 프로세스를 구축해 왔습니다.


결과적으로 얻은 것은 다음과 같습니다.

  • 팀은 행복합니다. 릴리스 회고에는 기술 개선 및 기술 부채 감소에 대한 긍정적인 내용이 정기적으로 포함됩니다.
  • 여러 분기별 릴리스를 연속으로 진행하면서 프로젝트의 코드 줄 수를 늘리지 않고도 기능을 늘릴 수 있었습니다. 불필요한 코드를 제거하고 필요한 것을 단순화하여 기존 기능에 대한 코드 베이스의 크기를 줄였습니다. 그리고 이러한 축소는 새로운 기능을 구현하는 새로운 코드의 규모와 거의 일치했습니다.
  • 리팩토링 및 업그레이드 중에 제품은 항상 작동 상태를 유지합니다. 2주마다 완전히 작동하는 임시 릴리스를 출시합니다.

우리가 이것을 어떻게 달성했는지 말씀드리겠습니다.

기술부채란 무엇인가

기술 부채에 대한 나의 실무적 정의는 프로젝트가 팀의 훌륭한 비전을 충족시키기 위해 수행해야 하는 작업의 양입니다. 기술적인 부채는 개발 과정에서 목발을 자유롭게 사용하는 것뿐만 아니라 아름다움에 대한 생각이 바뀌는 것 때문에 발생할 수도 있습니다. 예를 들어, 일반적인 업계 관행이 변경되었습니다. 또는 개발자는 OOP에 반해 함수형 프로그래밍에 푹 빠졌습니다. 또는 한때 유행했던 프레임워크가 더 이상 케이크가 아니며 이에 글을 쓰고 싶은 전문가를 찾는 것이 어려워졌습니다.


그러나 기술 부채의 주된 이유는 모든 다양성의 엔트로피입니다. 비활성화된 단위 테스트, 코드와의 연결이 끊어진 오래된 주석, 실패한 아키텍처 결정, 더 이상 아무도 사용하지 않는 기능 구현, 오지 않은 미래를 위한 기반 등 훨씬 더 많습니다.


따라서 장기 프로젝트에서는 기술 부채의 출현이 불가피합니다.

기술부채가 문제가 되지 않는 경우

기술부채가 왜 나쁜가요? 다음과 같은 여러 요인으로 인해 추가 개발 비용이 증가합니다.

  • 새로운 기능을 구현하는 속도가 감소합니다.
  • 결함을 수정할 때 회귀 가능성이 높아집니다.
  • 개발 프로세스는 예측하기 어려워지고 관리하기가 어려워집니다.
  • 프로젝트에 새로운 개발자를 도입하는 과정이 길어지고 있습니다.

이러한 손실을 "기술 부채에 대한 이자"라고도 합니다.


이러한 손실이 기술 부채를 제거하는 것보다 더 저렴한 상황이 있습니다.

  • 프로젝트 수명이 거의 끝났습니다. 이것이 기능 추가의 끝이 아니라 지원에 프로그래머의 노력을 낭비하는 것을 멈출 수 있는 순간입니다. 이 카테고리에는 일회성 프로토타입, 전시회용 일회성 데모 등도 포함됩니다.
  • 현재 개발 시간의 가치는 미래에 예상되는 것보다 훨씬 높습니다. 정해진 기한에 대한 긴급 수정, 다음 자금 조달에서 자금이 부족한 스타트업 등 그러한 경우, 열기가 식을 때까지 기술 부채 해결이 지연될 수 있습니다. 비상사태에서 벗어나지 못하는 프로젝트가 있지만 이 기사의 조언은 여전히 ​​도움이 되지 않습니다.

기술 부채는 어떻게 처리하나요? 실패한 접근법

접근 방식 1. “시간이 없습니다. 어제 릴리스를 제출해야 합니다.”

내일 모레의 개발 속도에 해를 끼치면서 어떤 희생을 치르더라도 내일 마감일을 지키려는 욕구.


때로는 목발로 만든 조립식 구조물이 객관적으로 올바른 선택인 경우도 있습니다. 실제로 이것은 전시회용 데모 버전을 만들 때 가장 명확하게 표현되었습니다. 행사 날짜는 엄격히 정해져 있어 중요한 전시 시간에 맞춰 도착하지 못한 경우 다음 시도는 1년 후가 될 것입니다. 이 경우 모든 버그를 조심스럽게 피하면서 제품을 "손에서 벗어난"상태로 표시할 수 있습니다. 엔지니어로서 그런 프로젝트를 하는 것은 불쾌한 일이지만 그 안에 있는 목발은 정당합니다.


오래 지속되는 제품을 만들면 모든 것이 달라집니다. 모호한 기술 솔루션으로 인해 마감일을 맞추는 것은 비용이 많이 드는 즐거움입니다. 총 비용은 다음과 같습니다:

  1. 목발 자체의 구현에서부터
  2. 이후 본격적인 솔루션으로 교체한 후,
  3. 이전 지점 사이에 목발이 있는 고통으로부터.

두 번째 사항은 매우 과소평가되기 쉽고, 가장 비싼 세 번째 사항은 전혀 생각하지 않을 위험이 있습니다.


컨퍼런스에서 떨리는 눈으로 기술 책임자를 만났을 때, 그를 이 상태로 만든 것은 목발로 만든 디자인을 끝없이 디버깅하는 악몽이었다는 것이 밝혀질 수도 있습니다.


접근 방식 2. "예, 여기서는 모든 것을 버리고 다시 작성해야 합니다."

기술적 부채 상황이 악화될수록 전체 프로젝트 코드를 묻어두고 모든 것을 다시 작성하고 싶은 유혹이 더 강해집니다. 이는 전체 프로젝트를 망칠 수 있는 전형적인 실수 중 하나입니다.


이 주제는 Joel Spolsky의 유명한 기사에서 너무 잘 다루어져 있어서 내 주장을 제시하는 데 아무런 의미가 없습니다.

접근방식 3. “관리자가 눈치채지 못하도록 밤과 주말에 리팩토링을 하겠다.”

비즈니스 이점 측면에서 기술 부채를 제거해야 한다고 주장하는 것이 항상 쉬운 것은 아닙니다. 개발팀은 어려운 상황을 피해 그 자리에서 대대적인 리팩토링을 시작하고 싶은 유혹을 느낄 수도 있습니다. 이는 근무 외 시간, 다른 작업 사이의 일시 중지 시간 또는 추정치를 부풀려 다른 작업의 "뒤에" 수행할 수 있습니다.


무엇이 나쁜가요? 아, 정말 많은 것들이 있습니다:

  • 투명성이 떨어지면 경영진과 팀 간의 신뢰가 약화됩니다. 징계를 부과하고 나사를 조이는 방식으로 상황을 바로잡으려는 후속 시도는 종종 팀워크를 더욱 악화시키는 결과를 낳습니다.
  • 팀과 경영진의 우선순위가 충돌하는 확고한 상황은 양쪽 모두의 의욕을 잃게 만듭니다.
  • 리팩토링의 결과는 예측할 수 없는 방식으로 제품에 포함되며 예상하지 못한 회귀 버그를 유발합니다. 의식이 있는 팀에서는 이로 인해 QA에 갑작스럽고 계획되지 않은 부하가 발생합니다. 무의식 속에서 그것은 생산으로 들어가 그곳에서 분해됩니다.

팀이 이 방법을 사용한 후 경영진의 눈이 꿈틀거리기 시작합니다.

우리의 원칙

1. 일반 백로그에 기술 작업 추가

프로젝트의 작업 수명에는 여러 가지 패턴이 있습니다.

  • 백로그에 없는 작업은 작업에 착수할 가능성이 적습니다.
  • 명확한 공식이 없는 작업은 작업에 들어갈 가능성이 적습니다.
  • 높은 신뢰도를 가지고 예측할 수 없는 작업은 작업에 들어갈 가능성이 적습니다.
  • 큰 작업은 작은 작업보다 대기열에서 더 오래 대기합니다.

Maxim Dorofeev는 "빈 편지함 기술"에서 이러한 사항에 대해 매우 잘 설명합니다.


기술적 부채가 누적되는 것을 방지하려면 위에 나열된 원칙을 고려하여 이를 제거하는 작업을 완료해야 합니다.


가장 작은 작업을 제외한 모든 작업이 백로그에 나열됩니다. 이렇게 하면 그들은 자유 시간뿐만 아니라 계획된 작업의 일부로도 작업을 수행할 수 있는 기회를 갖게 됩니다. 또한 이러한 작업은 완전히 놓치기가 더 어렵습니다. 백로그는 코드의 TODO, 모니터의 종이 조각, 버려진 Wiki 페이지, 다이어그램이 포함된 차 얼룩진 냅킨 및 기타 항목보다 더 자주 그리고 더 자세히 살펴집니다. 정보의 출처.

  • 코드에 중요 TODO가 있는 경우 백로그의 작업에 대한 링크가 포함됩니다. 우리는 코드 검토 시 이 원칙을 준수하는지 확인하고 참조가 없는 복잡한 TODO를 허용하지 않습니다.

    댓글 뒤에 드라마가 있을 수 있습니다.

    한번은 그러한 TODO 옆에 다음과 같이 쓰여 있었습니다. “Crutch. 제품 소유자가 그렇게 하도록 만들었습니다. 최대한 빨리 제거하세요."

  • 개발자는 리팩토링이 필요한 곳이 있다는 것을 깨닫고 백로그에 이슈를 생성합니다.
  • 개발자가 플랫폼을 개선하려는 경우 백로그에 작업을 생성합니다.
  • 장기 아키텍처 계획은 최소한 첫 번째 단계에 대한 충분한 확실성이 확보되는 즉시 별도의 작업 형태로 백로그에 추가됩니다.

이러한 변경이 개발 비용과 필요한 테스트 양 측면에서 저렴하게 유지되는 한, 비즈니스 목표를 방해하거나 추가 위험을 초래하지 않고 코드 기반을 점진적으로 개선할 수 있습니다.

2. 비즈니스 우선순위에 따른 기술 스토리 계획

숲에 나무가 쓰러졌는데 아무도 듣지 못했다면 소리가 있었을까요? 프로젝트에 잘못된 코드가 있지만 해당 모듈을 변경할 필요가 없다면 기술적 부채가 있습니까?


나는 프로그래머가 오래된 모듈을 보는 것이 불쾌하다고 생각하더라도 그 자체로는 그다지 큰 문제가 아니라고 생각합니다. 훨씬 더 나쁜 것은 이 모듈에 새로운 기능을 추가하거나 이전 모듈을 확장해야 할 때 발생하는 일입니다. 잘 작성된 코드를 변경하는 것과 비교할 때 이러한 작업은 더 가능성이 높고(원래 추정치를 초과할 가능성이 더 높으며) 더 많은 버그를 포함합니다. 때로는 훨씬 더. 이러한 유형의 문제로부터 자신을 보호하기 위해 우리는 같은 장소에 새로운 기능을 작성하기 전에 리팩토링이 완료되도록 일정을 잡으려고 노력합니다.


기능 변경과 리팩토링이 사소해 보인다면 함께 수행할 수 있습니다. 이 접근 방식이 최적일 수 있도록 경험적으로 선택된 작업 크기는 개발자 한 명당 3일 이하의 작업입니다. 더 많은 작업이 있음이 분명해지면 현재 동작을 유지하면서 리팩토링하고 새로운 기능을 구현하는 것으로 나누어집니다.


따라서 기술 부채를 제거하기 위한 작업 순서는 백로그의 비즈니스 작업 순서에 따라 결정됩니다.


"비즈니스 우선순위" 원칙에는 또 다른 적용이 있습니다. 글을 잘 쓰려고 노력하는 개발자가 겪는 일반적인 문제 중 하나는 성능 최적화, 유지 관리성 향상 또는 작업 계획에 직접적으로 포함되지 않는 기타 사항에 시간을 할애하는 것이 어렵다는 것입니다. 이러한 개선에는 거의 항상 비즈니스 요구가 있습니다. 시스템이 더 빠르고 안정적으로 작동하고 유지 관리 비용이 더 저렴해지는 것을 원하지 않는 사람이 어디 있겠습니까? 이러한 모든 이점을 평가할 수 있으며, 이 평가를 기반으로 개선 작업을 다른 작업과 함께 백로그에 배치할 수 있습니다.


따라서 성능을 최적화하고 싶지만 대신 또 다른 지루한 버그를 수정해야 한다면 아마도 제품 소유자가 이해할 수 있는 언어로 최적화의 이점을 설명하는 방법을 모를 수도 있습니다.

3. 이전보다 코드를 깔끔하게 유지하세요.

아주 최근에 작성된 코드를 제외한 거의 모든 코드는 스타일과 건축 분야의 현재 아름다움 아이디어보다 약간 뒤떨어져 있습니다. 작업의 일부로 코드를 변경해야 하는 경우 영향을 받는 영역에서 가능한 모든 안전한 개선을 수행하는 것이 좋습니다. 뭐가 될수 있었는지?

  • 모듈을 현재 스타일로 가져옵니다.
  • 내부 변수 이름을 더 이해하기 쉬운 이름으로 변경합니다.
  • 동작을 유지하면서 구현을 단순화합니다.
  • 다른 모듈에 대규모 변경을 도입하지 않는 로컬 리팩토링.

이러한 개선으로 인해 코드가 더 좋아질 것으로 예상되지만 개발이나 테스트 비용이 크게 증가하지는 않습니다.


이 원칙으로 인해 별도의 리팩토링이 계획되지 않은 곳에서도 백그라운드에서 코드 품질이 점차 향상됩니다. 게다가 시스템의 특정 부분에 대해 더 자주 작업할수록 이 부분에 대한 코드는 더 좋아집니다. 개발자가 최악의 코드가 있는 부분에 가장 많은 시간을 소비하는 프로젝트와는 대조적입니다.

4. 무슨 일이 일어나더라도 시스템은 정상적으로 작동해야 합니다.

SCRUM의 기본 원칙 중 하나는 각 스프린트가 끝날 때 시스템이 안정적인 상태에 도달해야 한다는 것입니다.


“스프린트가 끝날 때까지 증분은 준비되어야 합니다. 이는 스크럼 팀의 준비 기준을 충족하고 사용할 준비가 되었음을 의미합니다. 제품 소유자의 출시 또는 연기 결정에 관계없이 사용할 준비가 되어 있어야 합니다.”

기술적 부채를 제거하기 위한 모든 작업은 이 원칙에 따라 수행됩니다.


대규모 변환은 반드시 분해되어 모든 개별 단계가 하나의 스프린트로 완료될 수 있습니다. 예를 들어 빌드 시스템을 두 단계로 변경했습니다(Angular 1.x: creeping webpack, lurking grunt).


우리는 클래식 gitflow에 가까운 원칙에 따라 VCS를 사용합니다. 개발은 기능 분기에서 수행되고 테스트는 그곳에서 수행됩니다. 일반적으로 이러한 분기는 2주 단위의 스프린트보다 오래 지속되지 않습니다. 수명이 더 긴 가지에는 거의 항상 추가 비용이 발생합니다.


우리의 경험은 이러한 패턴을 분명히 확인시켜 줍니다. 2주 만에 대규모 리팩토링을 완료하지 못할 때마다 고통스럽고 괴로웠습니다. 그리고 작업이 길어지고 오픈 브랜치의 수명이 길어질수록 작업 속도가 느려지고 문제가 더 많아졌습니다.


안정적인 릴리스에서 항상 몇 단계 떨어져 있어야 한다는 요구는 가장 어렵고 흥미로운 엔지니어링 문제 중 하나를 생성합니다. 즉, 전략적 계획의 최적 분해를 찾는 것입니다. 대규모 변경은 별도의 독립적인 단계로 나눌 수 있습니다. 최대한 빨리 혜택을 받기 시작하는 것이 좋습니다. 이러한 작업 분류가 더 잘 수행될수록 작업을 완료할 가능성이 더 커집니다.

우리의 프로세스는 어떤 모습인가요?

릴리스당 한 번씩 기술 백로그를 자세히 검토합니다.

  • 우리는 관련 없는 스토리를 닫습니다(관련성 상실, 다른 것의 일부로 만들어짐, 중복).
  • 문제의 비전이 변경된 부분에 대한 설명을 업데이트합니다.

비즈니스 스토리가 떠오르면 기술적 분석이 이루어지고 구현에 도움이 되는 모든 기술 스토리가 비즈니스 스토리와 연결됩니다.


스프린트 계획 준비:

  • 우리는 기술적인 이야기와 비즈니스적인 이야기 사이의 연관성을 확인합니다.
  • 관련된 모든 버그를 한곳에서 저렴하게 고칠 수 있는 기술적인 스토리로 연결해 드립니다.

백로그의 기술적 부분을 구성하는 방법

제가 팀의 리더 역할을 맡았을 때 각 개발자와 QA에게 가장 만들고 싶은 제품 개선 사항이 무엇인지 물었습니다. 대부분의 요청은 플랫폼의 기술 개선 및 리팩토링과 관련이 있었습니다. 추가 경험에서 알 수 있듯이 제품의 모든 주요 기술적 문제가 이러한 희망 사항에 포함되었습니다. 따라서 이 방법을 사용하면 기술 백로그를 처음부터 빠르게 구축하거나 새 프로젝트의 기술 부채 상태에 대한 일반적인 아이디어를 얻을 수 있습니다.


현재 기술 작업으로 백로그를 채우는 것은 위에서 설명한 관행으로 인해 발생하며 별도의 노력이나 분석이 필요하지 않습니다. 또한 제품의 기술적 개선을 위한 새로운 아이디어가 백로그에 추가됩니다. 이것은 그러한 아이디어를 낸 팀원이 수행합니다. 이 단계에서 가장 중요한 것은 아이디어를 잃지 않는 것입니다. 우선순위에 대한 설명과 결정은 나중에 작업 계획 중에 이루어집니다.

결론

  • 기술적인 부채는 불가피합니다.
  • 대부분의 프로젝트에서 기술 부채를 제거하는 것은 좋은 노력 투자입니다.
  • 기술적인 부채가 해결되지 않으면 개발 속도는 점점 0에 가까워질 것입니다.
  • 모든 것을 버리고 다시 글을 쓰고 싶은 유혹은 프로젝트를 죽이거나 심각하게 손상시킬 수 있습니다.
  • 기술적 부채 제거에 따른 이점은 비즈니스 이점의 측면에서 구성되어야 합니다. 그렇지 않으면 새로운 기능을 생성하는 작업이 항상 더 중요하게 간주될 위험이 있습니다.
  • 기술 부채를 제거하는 작업은 관리할 가치가 있습니다. 이러한 작업은 회계, 계획 및 우선 순위 지정 측면에서 다른 프로젝트 작업과 다르지 않습니다.
  • 별도로 해결하는 것보다 저렴하게 기술 부채를 줄이고 동시에 비즈니스 문제를 해결할 수 있는 상황이 정기적으로 발생합니다. 이러한 기회를 활용해야 합니다.
  • 사려 깊고 적시에 업데이트된 코드 스타일 규칙과 검토 프로세스는 새로운 기술 부채의 출현을 늦추는 데 도움이 됩니다.
  • 짧은 반복은 새로운 기능을 개발하는 것만큼 리팩토링에도 유용합니다.
  • 팀은 일반적으로 프로젝트의 기술 부채가 어디에 있는지, 그리고 그 부채가 얼마나 심각한지 알고 있습니다. 프로젝트의 기술적 부채에 대한 아이디어를 형성할 때 이 지식을 사용할 가치가 있습니다.

내 대답에서는 그레이트 하우스(Great Houses)뿐만 아니라 내가 정보를 얻을 수 있었던 다른 하우스들에 대해서도 언급하겠습니다.

1.스타키 - "겨울이오고있다". 평화와 안전은 일시적이고 환상적이라는 뜻입니다. 완전무장한 위험에 맞서기 위해서는 항상 재난과 전쟁에 대비해야 합니다. 웨스테로스에서 겨울은 수년 동안 지속되는 계절일 뿐만 아니라 어려운 시련의 상징이기도 합니다. 그리고 사실 이 모토는 스타크 가문뿐만 아니라 나라 전체에 적용됩니다.

2. 라니스터스- 라니스터 가문에는 두 가지 모토가 있는 것 같습니다. 그 중 하나는 강력한 문장을 확증하는 것입니다 -" 내 포효를 들어라!", 두 번째는 속담과 동일하지만 첫 번째 것보다 훨씬 더 자주 들립니다. " 라니스터는 항상 빚을 갚는다". 첫 번째 모토는 문장에 직접적으로 기인할 수 있습니다. Lannister 문장은 다음을 묘사합니다. 만연한 사자- "포효하는 사자"와 "내 포효를 들어라"라는 모토가 이를 직접적으로 보완하며, 사자가 짐승의 왕이고 라니스터 가문이 사회에서 높은 지위를 가지고 있다는 증거이기도 합니다. "라니스터는 항상 빚을 갚는다"라는 속담은 주로 브라보스의 철 은행("철 은행은 항상 빚을 갚을 것이다")과 관련이 있습니다. 둘째, "라니스터는 항상 빚을 갚는다"는 말은 라니스터는 자신을 도와준 사람들을 결코 잊지 않으며 자신에게 가해진 잘못을 결코 용서하지 않는다는 의미입니다.

3. 바라테온 - "우리는 분노합니다". 원래는 Storm's End의 Durrandons에 속했습니다. Orys Baratheon(정복자 Aegon I의 사생아)은 Stormlands의 마지막 군주인 오만한 Argilac을 죽인 후 그의 모토를 채택했습니다. 그러나 모토는 너무 문자 그대로 번역되었습니다. 모토의 논리적 번역" 분노는 우리의 요소입니다", 그 의미에 대한 설명과 함께 " 분노는 우리의 요소입니다. 즉, 우리를 화나게 하면 물고기를 바다에 던져 기분이 좋아진다는 의미입니다.“즉, 바라테온들에게는 냉정한 이성을 희생하면서 폭력적으로 감정을 표출하는 것은 악이 아닙니다.

4. 그레이조이 - "우리는 씨를 뿌리지 않습니다."그레이조이는 대부분 해적입니다. 그들의 땅은 맨바위와 모래 위에 있습니다. 이 집의 모토는 그레이조이가 (실제로 존재하지 않는) 땅에서 일하지 않는다는 직접적인 메시지입니다. 그들은 씨를 뿌리지 않습니다." 아무것도 자라지 않고, 그들은 농작물과 전리품을 가진 사람들을 강탈합니다. 왜냐하면 그들은 자신의 것을 가질 수도 없고 가질 수도 없기 때문입니다.

5. 타르가르옌 - "불과 피". Targaryen 모토는 두 가지 방식으로 해석 될 수 있습니다. 첫 번째 - 정복자 Aegon과 그의 두 자매는 세 마리의 용을 타고 "그와 칼로"라고 불리는 Westeros를 정복했습니다. 두 번째 옵션 - (위에서 언급 한 일몰고독) - " Targaryens는 드래곤 태생이며 고대 Valyria와 드래곤의 피를 가지고 있으며 불에 대한 면역 보너스와 드래곤 길들이기를 가지고 있습니다. Targaryens가 Fire and Blood라고 말할 때 그들은 갑자기 그것을 잊어버린 사람들에게 상기시켜줍니다."

6. 아린스 - "명예만큼 크다"한편으로, 아린 가문은 존 아린의 예를 따라 명예를 지키는 데 관심을 가졌습니다. 존은 협박을 당하거나 뇌물을 받을 수 없었습니다. 그리고 웨스테로스 땅에서는 명예를 지키는 것보다 더 관심을 두는 사람을 찾는 것이 불가능했습니다. Arryns. 그러나 Jon이 죽은 후에는 아마도 또 다른 옵션이 더 적합할 것입니다. 즉, 귀족적 오만함, 낮은 지위에 대한 경멸, 그들은 "당신은 우리에게서 왔습니까?"라고 말합니다.

7. 탈리 - "전투에서 먼저"탈리 가문은 이 모토에서 알 수 있듯이 많은 위대한 전사와 뛰어난 장군을 낳았습니다.

8. 툴리 - "가족, 의무, 명예"Tully 가문은 무엇보다도 가족 관계에 충실합니다. 의무와 명예는 그 다음이지만 가족이 우선입니다. Tully 가문은 다섯 왕의 전쟁에서 Rob Stark를 지원했으며 그 대가를 지불했습니다.

9. 마르텔스 - "굽히지 않는, 굽히지 않는, 굽히지 않는". 자부심과 경직성의 모델입니다. Martells는 Targaryens가 강제로 점령할 수 없는 유일한 집입니다. 그리고 이 집의 캐릭터의 행동으로 볼 때 그들은 고집이 세고 흔들리지 않는다는 것이 분명합니다. 그들은 주님의 법, 왕의 승인, 그것들은 그 자체이지만 포기할 준비가 되어 있지 않다는 것을 분명히 보여줍니다.

10. 타이렐 - "자라면서 우리는 더 강해진다". 타이렐 가문의 모토는 그들의 군대에 의해 확인되었으며, 그 수는 웨스테로스의 어떤 군대와도 비교할 수 없었습니다. 타이렐 가문은 또한 그들이 축적한 부의 형태로 "쿠션"을 가지고 있었습니다. 코트를 고려하면 이 집의 팔은 장미를 묘사하고 있으며, 작은 새싹에서 거대한 장미 덤불까지 평행선을 그릴 수도 있습니다. 그래서 타이렐 가문의 구성원들은 점차 힘을 축적하여 자신의 위치를 ​​발전시키고 강화했습니다. 그러나 올레나 자신처럼 그들은 전혀 전사가 아니라고 말했습니다.

11. 볼튼 -"우리의 칼날은 날카롭다". 이 모토는 오히려 볼튼 가족의 적들에게 경고 역할을 합니다. 이 집의 대표자들은 우울한 평판을 가지고 있습니다. 책에서 그들은 심지어 인간의 피부로 만든 망토를 입고 그것으로 성벽을 장식했습니다. : "벌거벗은 남자에게는 비밀이 없지만, 껍질을 벗긴 남자에게는 비밀이 없습니다." "우리의 칼날은 날카롭습니다." - 분명히 살을 벗기는 칼날을 의미할 수도 있습니다.

12. 모르몬트 - "여기 우리가 서 있다". 일몰고독에 따르면 러시아어로도 잘못 번역된 모토입니다." 여기 우리가 서 있습니다 - "여기에 우리 땅이 있습니다"를 의미할 수 있으며, 이는 "누군가를 괴롭히지 않지만 스스로 정의할 수 있는 작지만 자랑스러운 섬입니다. 여기 우리 땅이 있습니다. 여기에 오실 때 이것을 기억하십시오. 경고할게." 또는 “우리는 이것 위에 서 있다”로 번역될 수도 있습니다. 이는 모르몬트의 완고함의 강함을 직접적으로 나타내는 것입니다."

13. 프레이 - "우리는 어깨를 나란히 하고 서 있어요"프레이 가문은 가족간의 유대와 이 단어의 불가침성을 중요하게 여겼고, 이것이 바로 이 모토가 반영된 것입니다. 거기서부터 왈더 프레이는 딸과 결혼하겠다는 약속을 어긴 롭 스타크에 대해 말할 수 없는 원한을 품었고, 이는 슬픈 결과를 초래했습니다.

"라니스터는 항상 빚을 갚는다." © FFG ( 제이슨 A. 엥글)

"라니스터들은 항상 빚을 갚는다"(또한: "라니스터는 항상 빚을 갚는다"들어보세요))는 칠왕국에서 라니스터 가문에 대한 인기 있는 속담이자 티리온 라니스터가 가장 좋아하는 표현입니다. 이는 이 집의 "공식" 모토인 "내 포효를 들어보세요!"만큼 유명합니다. 이 표현에는 이중 의미가 있습니다. 한편으로 이는 주에서 가장 부유한 가문인 Lannisters 가문이 항상 청구서를 지불하고 그들을 도와준 사람들에게 감사를 표하거나 미래에 보상을 약속할 준비가 되어 있다는 것을 의미합니다. 여러분은 항상 "사자". 그러나이 모토에는 두 번째로 위협적인 의미도 있습니다. Lannisters는 자신에게 가해진 모욕을 잊지 않고 범죄자에게 확실히 복수 할 것입니다.

Cersei Lannister의 입에서 Tyrion 자신을 향한 연설에서 그 말이 들렸습니다. Cersei는 그녀의 형제가 그녀와 Joffrey에 대한 음모를 꾸미고 포로로 잡힌 Alaya를 협박하려고했습니다. 나중에 자신이 국가 원수임을 알게 된 Cersei는 동일한 단어를 사용하여 Braavos의 Iron Bank에 대한 공공 부채 지불을 중단하기로 한 결정을 정당화했습니다. Lannisters는 항상 빚을 지불하며이 부채는 조만간 지불 될 것입니다. 그녀는 나중에 Balman Birch 및 Falisa Stokeworth와의 대화에서 그들의 도움에 대한 보상을 약속하면서 그 말을 언급하고 그녀를 속이려고했던 Tyroshi를 사형 집행자에게 보냈습니다. 도."

Tywin Lannister는 Tyrion과의 대화에서 Harrenhal을 Petyr Baelish에게 줄 필요성을 정당화하면서 그 말을 언급했습니다. Tyrion 자신은 즉시 부채에 대한 말을 반복하여 Hand로서의 봉사에 대한 보상을 요구했습니다. Shae는 Tyrion에게 그녀를 타운 하우스에 다시 데려오겠다는 약속을 상기시키면서 그 말을 반복했습니다. Westerlings가 Robb Stark로 탈북했다는 사실을 알게 된 Tyrion은 Tywin이 확실히 반역자들을 처벌할 것이라고 생각하고 그 말을 기억했습니다.

Jaime Lannister는 Urswick에게 부로 그를 유혹하려고 그녀를 상기 시켰고 나중에 손을 잃은 그는 복수에 대한 갈증과 삶에 대한 열망을 불러 일으키면서 자신에게 그 말을 반복했습니다. 그는 Tarth의 Brienne에게 여행이 시작될 때 Robin Rieger의 갤리선이 침몰 한 것에 대한 감사의 마음으로 그녀를 강간으로부터 구했다고 말하면서 다시 그 말을 회상했습니다. 그는 나중에 Varys와의 대화에서 이 말을 반복하여 Tyrion을 해방시키려는 그의 열망을 설명했습니다. Riverrun 성벽의 비계에서 Edmure Tully를 제거한 후 Jaime은 "라니스터 가문이 빚을 갚고 있고, 나에게 남은 유일한 동전은 너야"라고 생각했습니다.

Edmure Tully 자신은 Rickard Karstark가 Willem Lannister와 Theon Frey를 살해했다는 사실을 알고 그 말을 회상했습니다. Roose Bolton은 Harrenhal을 떠나 Vargo Howth에게 맡길 의사가 있다고 말하면서 "Lannisters만이 빚을 갚는 사람이 아닙니다"라고 말했습니다. 제이미는 성을 떠날 때 브레이브 보이즈들에게 작별 인사를 할 때 그 말을 반복하며 그들에게 복수하겠다고 암시했고, 브리엔을 위해 성으로 돌아와 바르고 호트에게도 같은 말을 하여 받게 될 것이라고 말했습니다. Jaime과 Brienne 모두를 위한 몸값

단일 팀의 기술적 부채 관리 관행


약 1년 전, 우리 팀은 급속한 기능 성장 단계에서 품질 개선에 초점을 맞춘 보다 유동적인 개발 단계로 전환했습니다. 현재 우리 제품에는 차선책 솔루션, 보기 흉한 코드, 오래된 라이브러리가 눈에 띄게 축적되어 있습니다. 이 모든 것에 대해 뭔가 조치를 취해야 했습니다.


지금까지 우리는 기술 부채와의 전쟁을 예측 가능하고 고통스럽지 않으며 불가피하게 만드는 프로세스를 구축해 왔습니다.


결과적으로 얻은 것은 다음과 같습니다.

  • 팀은 행복합니다. 릴리스 회고에는 기술 개선 및 기술 부채 감소에 대한 긍정적인 내용이 정기적으로 포함됩니다.
  • 여러 분기별 릴리스를 연속으로 진행하면서 프로젝트의 코드 줄 수를 늘리지 않고도 기능을 늘릴 수 있었습니다. 불필요한 코드를 제거하고 필요한 것을 단순화하여 기존 기능에 대한 코드 베이스의 크기를 줄였습니다. 그리고 이러한 축소는 새로운 기능을 구현하는 새로운 코드의 규모와 거의 일치했습니다.
  • 리팩토링 및 업그레이드 중에 제품은 항상 작동 상태를 유지합니다. 2주마다 완전히 작동하는 임시 릴리스를 출시합니다.

우리가 이것을 어떻게 달성했는지 말씀드리겠습니다.

기술부채란 무엇인가

기술 부채에 대한 나의 실무적 정의는 프로젝트가 팀의 훌륭한 비전을 충족시키기 위해 수행해야 하는 작업의 양입니다. 기술적인 부채는 개발 과정에서 목발을 자유롭게 사용하는 것뿐만 아니라 아름다움에 대한 생각이 바뀌는 것 때문에 발생할 수도 있습니다. 예를 들어, 일반적인 업계 관행이 변경되었습니다. 또는 개발자는 OOP에 반해 함수형 프로그래밍에 푹 빠졌습니다. 또는 한때 유행했던 프레임워크가 더 이상 케이크가 아니며 이에 글을 쓰고 싶은 전문가를 찾는 것이 어려워졌습니다.


그러나 기술 부채의 주된 이유는 모든 다양성의 엔트로피입니다. 비활성화된 단위 테스트, 코드와의 연결이 끊어진 오래된 주석, 실패한 아키텍처 결정, 더 이상 아무도 사용하지 않는 기능 구현, 오지 않은 미래를 위한 기반 등 훨씬 더 많습니다.


따라서 장기 프로젝트에서는 기술 부채의 출현이 불가피합니다.

기술부채가 문제가 되지 않는 경우

기술부채가 왜 나쁜가요? 다음과 같은 여러 요인으로 인해 추가 개발 비용이 증가합니다.

  • 새로운 기능을 구현하는 속도가 감소합니다.
  • 결함을 수정할 때 회귀 가능성이 높아집니다.
  • 개발 프로세스는 예측하기 어려워지고 관리하기가 어려워집니다.
  • 프로젝트에 새로운 개발자를 도입하는 과정이 길어지고 있습니다.

이러한 손실을 "기술 부채에 대한 이자"라고도 합니다.


이러한 손실이 기술 부채를 제거하는 것보다 더 저렴한 상황이 있습니다.

  • 프로젝트 수명이 거의 끝났습니다. 이것이 기능 추가의 끝이 아니라 지원에 프로그래머의 노력을 낭비하는 것을 멈출 수 있는 순간입니다. 이 카테고리에는 일회성 프로토타입, 전시회용 일회성 데모 등도 포함됩니다.
  • 현재 개발 시간의 가치는 미래에 예상되는 것보다 훨씬 높습니다. 정해진 기한에 대한 긴급 수정, 다음 자금 조달에서 자금이 부족한 스타트업 등 그러한 경우, 열기가 식을 때까지 기술 부채 해결이 지연될 수 있습니다. 비상사태에서 벗어나지 못하는 프로젝트가 있지만 이 기사의 조언은 여전히 ​​도움이 되지 않습니다.

기술 부채는 어떻게 처리하나요? 실패한 접근법

접근 방식 1. “시간이 없습니다. 어제 릴리스를 제출해야 합니다.”

내일 모레의 개발 속도에 해를 끼치면서 어떤 희생을 치르더라도 내일 마감일을 지키려는 욕구.


때로는 목발로 만든 조립식 구조물이 객관적으로 올바른 선택인 경우도 있습니다. 실제로 이것은 전시회용 데모 버전을 만들 때 가장 명확하게 표현되었습니다. 행사 날짜는 엄격히 정해져 있어 중요한 전시 시간에 맞춰 도착하지 못한 경우 다음 시도는 1년 후가 될 것입니다. 이 경우 모든 버그를 조심스럽게 피하면서 제품을 "손에서 벗어난"상태로 표시할 수 있습니다. 엔지니어로서 그런 프로젝트를 하는 것은 불쾌한 일이지만 그 안에 있는 목발은 정당합니다.


오래 지속되는 제품을 만들면 모든 것이 달라집니다. 모호한 기술 솔루션으로 인해 마감일을 맞추는 것은 비용이 많이 드는 즐거움입니다. 총 비용은 다음과 같습니다:

  1. 목발 자체의 구현에서부터
  2. 이후 본격적인 솔루션으로 교체한 후,
  3. 이전 지점 사이에 목발이 있는 고통으로부터.

두 번째 사항은 매우 과소평가되기 쉽고, 가장 비싼 세 번째 사항은 전혀 생각하지 않을 위험이 있습니다.


컨퍼런스에서 떨리는 눈으로 기술 책임자를 만났을 때, 그를 이 상태로 만든 것은 목발로 만든 디자인을 끝없이 디버깅하는 악몽이었다는 것이 밝혀질 수도 있습니다.


접근 방식 2. "예, 여기서는 모든 것을 버리고 다시 작성해야 합니다."

기술적 부채 상황이 악화될수록 전체 프로젝트 코드를 묻어두고 모든 것을 다시 작성하고 싶은 유혹이 더 강해집니다. 이는 전체 프로젝트를 망칠 수 있는 전형적인 실수 중 하나입니다.


이 주제는 Joel Spolsky의 유명한 기사에서 너무 잘 다루어져 있어서 내 주장을 제시하는 데 아무런 의미가 없습니다.

접근방식 3. “관리자가 눈치채지 못하도록 밤과 주말에 리팩토링을 하겠다.”

비즈니스 이점 측면에서 기술 부채를 제거해야 한다고 주장하는 것이 항상 쉬운 것은 아닙니다. 개발팀은 어려운 상황을 피해 그 자리에서 대대적인 리팩토링을 시작하고 싶은 유혹을 느낄 수도 있습니다. 이는 근무 외 시간, 다른 작업 사이의 일시 중지 시간 또는 추정치를 부풀려 다른 작업의 "뒤에" 수행할 수 있습니다.


무엇이 나쁜가요? 아, 정말 많은 것들이 있습니다:

  • 투명성이 떨어지면 경영진과 팀 간의 신뢰가 약화됩니다. 징계를 부과하고 나사를 조이는 방식으로 상황을 바로잡으려는 후속 시도는 종종 팀워크를 더욱 악화시키는 결과를 낳습니다.
  • 팀과 경영진의 우선순위가 충돌하는 확고한 상황은 양쪽 모두의 의욕을 잃게 만듭니다.
  • 리팩토링의 결과는 예측할 수 없는 방식으로 제품에 포함되며 예상하지 못한 회귀 버그를 유발합니다. 의식이 있는 팀에서는 이로 인해 QA에 갑작스럽고 계획되지 않은 부하가 발생합니다. 무의식 속에서 그것은 생산으로 들어가 그곳에서 분해됩니다.

팀이 이 방법을 사용한 후 경영진의 눈이 꿈틀거리기 시작합니다.

우리의 원칙

1. 일반 백로그에 기술 작업 추가

프로젝트의 작업 수명에는 여러 가지 패턴이 있습니다.

  • 백로그에 없는 작업은 작업에 착수할 가능성이 적습니다.
  • 명확한 공식이 없는 작업은 작업에 들어갈 가능성이 적습니다.
  • 높은 신뢰도를 가지고 예측할 수 없는 작업은 작업에 들어갈 가능성이 적습니다.
  • 큰 작업은 작은 작업보다 대기열에서 더 오래 대기합니다.

Maxim Dorofeev는 "빈 편지함 기술"에서 이러한 사항에 대해 매우 잘 설명합니다.


기술적 부채가 누적되는 것을 방지하려면 위에 나열된 원칙을 고려하여 이를 제거하는 작업을 완료해야 합니다.


가장 작은 작업을 제외한 모든 작업이 백로그에 나열됩니다. 이렇게 하면 그들은 자유 시간뿐만 아니라 계획된 작업의 일부로도 작업을 수행할 수 있는 기회를 갖게 됩니다. 또한 이러한 작업은 완전히 놓치기가 더 어렵습니다. 백로그는 코드의 TODO, 모니터의 종이 조각, 버려진 Wiki 페이지, 다이어그램이 포함된 차 얼룩진 냅킨 및 기타 항목보다 더 자주 그리고 더 자세히 살펴집니다. 정보의 출처.

  • 코드에 중요 TODO가 있는 경우 백로그의 작업에 대한 링크가 포함됩니다. 우리는 코드 검토 시 이 원칙을 준수하는지 확인하고 참조가 없는 복잡한 TODO를 허용하지 않습니다.

    댓글 뒤에 드라마가 있을 수 있습니다.

    한번은 그러한 TODO 옆에 다음과 같이 쓰여 있었습니다. “Crutch. 제품 소유자가 그렇게 하도록 만들었습니다. 최대한 빨리 제거하세요."

  • 개발자는 리팩토링이 필요한 곳이 있다는 것을 깨닫고 백로그에 이슈를 생성합니다.
  • 개발자가 플랫폼을 개선하려는 경우 백로그에 작업을 생성합니다.
  • 장기 아키텍처 계획은 최소한 첫 번째 단계에 대한 충분한 확실성이 확보되는 즉시 별도의 작업 형태로 백로그에 추가됩니다.

이러한 변경이 개발 비용과 필요한 테스트 양 측면에서 저렴하게 유지되는 한, 비즈니스 목표를 방해하거나 추가 위험을 초래하지 않고 코드 기반을 점진적으로 개선할 수 있습니다.

2. 비즈니스 우선순위에 따른 기술 스토리 계획

숲에 나무가 쓰러졌는데 아무도 듣지 못했다면 소리가 있었을까요? 프로젝트에 잘못된 코드가 있지만 해당 모듈을 변경할 필요가 없다면 기술적 부채가 있습니까?


나는 프로그래머가 오래된 모듈을 보는 것이 불쾌하다고 생각하더라도 그 자체로는 그다지 큰 문제가 아니라고 생각합니다. 훨씬 더 나쁜 것은 이 모듈에 새로운 기능을 추가하거나 이전 모듈을 확장해야 할 때 발생하는 일입니다. 잘 작성된 코드를 변경하는 것과 비교할 때 이러한 작업은 더 가능성이 높고(원래 추정치를 초과할 가능성이 더 높으며) 더 많은 버그를 포함합니다. 때로는 훨씬 더. 이러한 유형의 문제로부터 자신을 보호하기 위해 우리는 같은 장소에 새로운 기능을 작성하기 전에 리팩토링이 완료되도록 일정을 잡으려고 노력합니다.


기능 변경과 리팩토링이 사소해 보인다면 함께 수행할 수 있습니다. 이 접근 방식이 최적일 수 있도록 경험적으로 선택된 작업 크기는 개발자 한 명당 3일 이하의 작업입니다. 더 많은 작업이 있음이 분명해지면 현재 동작을 유지하면서 리팩토링하고 새로운 기능을 구현하는 것으로 나누어집니다.


따라서 기술 부채를 제거하기 위한 작업 순서는 백로그의 비즈니스 작업 순서에 따라 결정됩니다.


"비즈니스 우선순위" 원칙에는 또 다른 적용이 있습니다. 글을 잘 쓰려고 노력하는 개발자가 겪는 일반적인 문제 중 하나는 성능 최적화, 유지 관리성 향상 또는 작업 계획에 직접적으로 포함되지 않는 기타 사항에 시간을 할애하는 것이 어렵다는 것입니다. 이러한 개선에는 거의 항상 비즈니스 요구가 있습니다. 시스템이 더 빠르고 안정적으로 작동하고 유지 관리 비용이 더 저렴해지는 것을 원하지 않는 사람이 어디 있겠습니까? 이러한 모든 이점을 평가할 수 있으며, 이 평가를 기반으로 개선 작업을 다른 작업과 함께 백로그에 배치할 수 있습니다.


따라서 성능을 최적화하고 싶지만 대신 또 다른 지루한 버그를 수정해야 한다면 아마도 제품 소유자가 이해할 수 있는 언어로 최적화의 이점을 설명하는 방법을 모를 수도 있습니다.

3. 이전보다 코드를 깔끔하게 유지하세요.

아주 최근에 작성된 코드를 제외한 거의 모든 코드는 스타일과 건축 분야의 현재 아름다움 아이디어보다 약간 뒤떨어져 있습니다. 작업의 일부로 코드를 변경해야 하는 경우 영향을 받는 영역에서 가능한 모든 안전한 개선을 수행하는 것이 좋습니다. 뭐가 될수 있었는지?

  • 모듈을 현재 스타일로 가져옵니다.
  • 내부 변수 이름을 더 이해하기 쉬운 이름으로 변경합니다.
  • 동작을 유지하면서 구현을 단순화합니다.
  • 다른 모듈에 대규모 변경을 도입하지 않는 로컬 리팩토링.

이러한 개선으로 인해 코드가 더 좋아질 것으로 예상되지만 개발이나 테스트 비용이 크게 증가하지는 않습니다.


이 원칙으로 인해 별도의 리팩토링이 계획되지 않은 곳에서도 백그라운드에서 코드 품질이 점차 향상됩니다. 게다가 시스템의 특정 부분에 대해 더 자주 작업할수록 이 부분에 대한 코드는 더 좋아집니다. 개발자가 최악의 코드가 있는 부분에 가장 많은 시간을 소비하는 프로젝트와는 대조적입니다.

4. 무슨 일이 일어나더라도 시스템은 정상적으로 작동해야 합니다.

SCRUM의 기본 원칙 중 하나는 각 스프린트가 끝날 때 시스템이 안정적인 상태에 도달해야 한다는 것입니다.


“스프린트가 끝날 때까지 증분은 준비되어야 합니다. 이는 스크럼 팀의 준비 기준을 충족하고 사용할 준비가 되었음을 의미합니다. 제품 소유자의 출시 또는 연기 결정에 관계없이 사용할 준비가 되어 있어야 합니다.”

기술적 부채를 제거하기 위한 모든 작업은 이 원칙에 따라 수행됩니다.


대규모 변환은 반드시 분해되어 모든 개별 단계가 하나의 스프린트로 완료될 수 있습니다. 예를 들어 조립 시스템을 두 단계로 변경했습니다 ()


우리는 클래식 gitflow에 가까운 원칙에 따라 VCS를 사용합니다. 개발은 기능 분기에서 수행되고 테스트는 그곳에서 수행됩니다. 일반적으로 이러한 분기는 2주 단위의 스프린트보다 오래 지속되지 않습니다. 수명이 더 긴 가지에는 거의 항상 추가 비용이 발생합니다.


우리의 경험은 이러한 패턴을 분명히 확인시켜 줍니다. 2주 만에 대규모 리팩토링을 완료하지 못할 때마다 고통스럽고 괴로웠습니다. 그리고 작업이 길어지고 오픈 브랜치의 수명이 길어질수록 작업 속도가 느려지고 문제가 더 많아졌습니다.


안정적인 릴리스에서 항상 몇 단계 떨어져 있어야 한다는 요구는 가장 어렵고 흥미로운 엔지니어링 문제 중 하나를 생성합니다. 즉, 전략적 계획의 최적 분해를 찾는 것입니다. 대규모 변경은 별도의 독립적인 단계로 나눌 수 있습니다. 최대한 빨리 혜택을 받기 시작하는 것이 좋습니다. 이러한 작업 분류가 더 잘 수행될수록 작업을 완료할 가능성이 더 커집니다.

우리의 프로세스는 어떤 모습인가요?

릴리스당 한 번씩 기술 백로그를 자세히 검토합니다.

  • 우리는 관련 없는 스토리를 닫습니다(관련성 상실, 다른 것의 일부로 만들어짐, 중복).
  • 문제의 비전이 변경된 부분에 대한 설명을 업데이트합니다.

비즈니스 스토리가 떠오르면 기술적 분석이 이루어지고 구현에 도움이 되는 모든 기술 스토리가 비즈니스 스토리와 연결됩니다.


스프린트 계획 준비:

  • 우리는 기술적인 이야기와 비즈니스적인 이야기 사이의 연관성을 확인합니다.
  • 관련된 모든 버그를 한곳에서 저렴하게 고칠 수 있는 기술적인 스토리로 연결해 드립니다.

백로그의 기술적 부분을 구성하는 방법

제가 팀의 리더 역할을 맡았을 때 각 개발자와 QA에게 가장 만들고 싶은 제품 개선 사항이 무엇인지 물었습니다. 대부분의 요청은 플랫폼의 기술 개선 및 리팩토링과 관련이 있었습니다. 추가 경험에서 알 수 있듯이 제품의 모든 주요 기술적 문제가 이러한 희망 사항에 포함되었습니다. 따라서 이 방법을 사용하면 기술 백로그를 처음부터 빠르게 구축하거나 새 프로젝트의 기술 부채 상태에 대한 일반적인 아이디어를 얻을 수 있습니다.


현재 기술 작업으로 백로그를 채우는 것은 위에서 설명한 관행으로 인해 발생하며 별도의 노력이나 분석이 필요하지 않습니다. 또한 제품의 기술적 개선을 위한 새로운 아이디어가 백로그에 추가됩니다. 이것은 그러한 아이디어를 낸 팀원이 수행합니다. 이 단계에서 가장 중요한 것은 아이디어를 잃지 않는 것입니다. 우선순위에 대한 설명과 결정은 나중에 작업 계획 중에 이루어집니다.

결론

  • 기술적인 부채는 불가피합니다.
  • 대부분의 프로젝트에서 기술 부채를 제거하는 것은 좋은 노력 투자입니다.
  • 기술적인 부채가 해결되지 않으면 개발 속도는 점점 0에 가까워질 것입니다.
  • 모든 것을 버리고 다시 글을 쓰고 싶은 유혹은 프로젝트를 죽이거나 심각하게 손상시킬 수 있습니다.
  • 기술적 부채 제거에 따른 이점은 비즈니스 이점의 측면에서 구성되어야 합니다. 그렇지 않으면 새로운 기능을 생성하는 작업이 항상 더 중요하게 간주될 위험이 있습니다.
  • 기술 부채를 제거하는 작업은 관리할 가치가 있습니다. 이러한 작업은 회계, 계획 및 우선 순위 지정 측면에서 다른 프로젝트 작업과 다르지 않습니다.
  • 별도로 해결하는 것보다 저렴하게 기술 부채를 줄이고 동시에 비즈니스 문제를 해결할 수 있는 상황이 정기적으로 발생합니다. 이러한 기회를 활용해야 합니다.
  • 사려 깊고 적시에 업데이트된 코드 스타일 규칙과 검토 프로세스는 새로운 기술 부채의 출현을 늦추는 데 도움이 됩니다.
  • 짧은 반복은 새로운 기능을 개발하는 것만큼 리팩토링에도 유용합니다.
  • 팀은 일반적으로 프로젝트의 기술 부채가 어디에 있는지, 그리고 그 부채가 얼마나 심각한지 알고 있습니다. 프로젝트의 기술적 부채에 대한 아이디어를 형성할 때 이 지식을 사용할 가치가 있습니다.

카테고리

인기 기사

2024 "kingad.ru" - 인간 장기의 초음파 검사