애자일-우리가 뭘 잘못하고 있니?


22

저는 민첩한 팀의 개발자이며 Scrum을 사용하려고합니다.

여기서는 상황을 설명하기 위해 가상의 문제를 설명하겠습니다.

지저분하고 유지 관리가 어려운 JQuery 코드를 사용하는 매우 오래된 앱이 있습니다. 또한 React를 사용하는 앱의 일부가 있으며 이러한 부분은 업데이트 / 유지 관리가 훨씬 쉽습니다. 그뿐만 아니라 회사 목표는 React에서 클라이언트 단일 페이지 앱을 만드는 것이므로 JQuery를 사용하면 더 멀어집니다.

계획을 세울 때 항상 개발 시간 측면에서 쉬운 솔루션을 찾습니다. 예를 들어 새 대화 상자 나 무언가를 만드는 경우 이전 JQuery를 더 빨리 사용하므로 더 빨리 돌아가고 있습니다. 나중에 정리하고 React로 변형하지만 거의 발생하지 않습니다.

우리는 사용자 스토리 (IMO가 잘 수행되고 슬림하지만 우리가 무엇을하고 있는지, 왜 그렇게하는지 설명)에서해야 할 일의 요구 사항을 얻습니다.

경우에 따라 새로운 기능의 요구 사항이 매우 적기 때문에 요구 사항에 "대량의 콘텐츠를로드하는 대화 상자 만들기"라는 메시지가 표시되지만로드 기능을 구현하지 않는 경우 대부분의 경우이를 구현하지 않습니다 , 비록 그것이 개인적으로는 그렇지 않다고하더라도 스프린트 목표를 위태롭게 할 수 있기 때문에 고객 모두에게 더 좋을 것입니다.

결과적으로 우리의 코드베이스는 유지 관리가 매우 좋지 않은 큰 혼란이며 때로는 새로운 기능이 매우 작으며 주로이 개발로 인해 (좋은 코드베이스에서 하루에 달성 할 수있는) 스프린트를합니다. 전략은 빨리 진행하고 최소한의 노력을 기울입니다.

이 경우에 우리는 무엇을 잘못하고 있습니까? 우리는 지난 주에 방금 작성한 나쁜 코드를 작성하거나 코드를 다시 작성하지 않도록 솔루션을보다 완벽한 방식으로 처리해야합니까? 아니면 모든 코드가 다시 작성되도록 계속해야합니까? 이 문제에 대한 민첩한 접근 방법은 무엇입니까?


21
"결과적으로 우리의 코드베이스는 유지 보수성이 매우 좋지 않은데, 주로이 개발 전략으로 인해 최소한의 속도로 진행됩니다." -문제에 대해 이미 잘 알고있는 것처럼 들리지만 그것이 실제로 Agile과 관련이 있는지 잘 모르겠습니다. 어떤 방법론을 사용하든 덕트 테이프 코딩을 얻을 수 있습니다.
Nathanael

애자일에서 그것을 방지하는 방법? 사람들은 오리 테이핑과 고정으로 증가를 이해합니다.
Gabriel Slomka

7
"사람들은 오리 테이핑 후 고정으로 증분을 이해합니다." -그건 분명히 스크럼이 아닙니다. "사람"이 그런 생각을하면 스크럼을 오해합니다.
Bryan Oakley

9
에릭 리퍼 (Eric Lippert)를 인용하려면 : 구멍에 파고 들어가면 가장 먼저 나가야합니다.
Doc Brown

5
팀이 "보이 스카우트 규칙"을 준수합니까 (입장했을 때보 다 항상 더 나은 상태를 유지)? 그것부터 시작하십시오. 또한 코드 검토, 작문 테스트 및 정기적 리팩토링도 유용한 기술입니다.
Doc Brown

답변:


56

이것은 애자일 또는 스크럼과 아무 관련이 없습니다.

"지금 테이프 테이프를 사용하여 나중에 고칠 것"의 문제점은 나중에 오지 않을 것이며 그 동안 많은 기술적 부채를 축적하고 있다는 것 입니다.

복구의 첫 단계는 문제를 인식하고 악화시키는 것을 중지하는 것입니다.

모든 새로운 사용자 스토리에 대해 팀은 "이 코드를 해킹하는 가장 빠른 방법은 무엇입니까?"가 아니라 "이를 코딩하는 올바른 방법은 무엇입니까?"를 고려해야합니다. 스프린트를 적절히 계획하십시오.

기존 문제를 해결하려면 200K 라인의 스파게티 코드를 물려받은 훌륭한 답변을 보십시오. 지금 무엇?


또한, 이와 같은 대부분의 문제는 이러한 문제를 해결하는 방법을 아는 숙련 된 관리자가 없기 때문에 관리자가 온라인에서 읽은 명명 된 방법으로 관리자를 교체합니다. 이 방법의 한 가지 장점은 이제 관리자 대신 책임을지게됩니다.
Rob

1
대답은 간단합니다. 잘 넣고 매우 정확합니다. SCRUM은 마무리 테이프 대신 덕트 테이프로 작업하기로 결정한 경우 바로 작동하는 방법입니다.
coteyr

당신은 당신이 인센티브를 얻는다. 사람들이 마감 시한을 일정하게 유지하면 (Scrum의 스프린트) 사람들에게 바로 가기를 장려합니다. 따라서 기술 부채가 누적됩니다.
Michael B

22

Martin Fowler가 "플래시 드 스크럼"이라고 부르는 것이 있습니다.

Agile Manifesto 뒤에있는 12 가지 원칙을 모두 제대로 읽으면 대부분 실패한다는 것을 알게 될 것입니다.

짧은 기간을 선호하여 몇 주에서 몇 달까지 작동하는 소프트웨어를 자주 제공하십시오.

진정으로 작동하는 소프트웨어를 제공한다고 말할 수 있습니까? 아니면 거의 작동하지 않는 소프트웨어입니까?

민첩한 프로세스는 지속 가능한 개발을 촉진합니다. 스폰서, 개발자 및 사용자는 일정하게 일정한 속도를 유지할 수 있어야합니다.

프로세스가 지속 가능하다고 말할 수 있습니까? 지속 가능성을 염두에두고 결정을 내립니까? 아니면 장기적인 영향을 고려하지 않고 현재 문제를 해결하는 솔루션을 선택합니까?

기술적 우수성과 우수한 디자인에 대한 지속적인 관심은 민첩성을 향상시킵니다.

진정한 주요 원칙. 나는 이것이 페이지의 거대한 빨간 글자에 넣어야한다고 생각합니다. 여기가 가장 실패하는 곳입니다.

팀은 정기적으로보다 효과적인 방법을 반영한 다음 그에 따라 행동을 조정하고 조정합니다.

그리고 가장 분명합니다. 자신의 행동이 원하는 결과를 얻지 못한다는 것을 알게되면이를 바꿔야합니다. 팀에 문제가 있음을 알 수 없으면 문제를 해결할 수 없습니다.

당신의 의견에서

애자일에서 그것을 방지하는 방법?

먼저, 민첩성이 실제로 무엇인지 배우는 것입니다. 스크럼은 민첩하지 않습니다. 어떤 사람들은 스크럼이 정확한 상황에 도달하기가 너무 어려워 민첩한 프레임 워크가 최악이라고 말합니다. 다른 민첩한 프레임 워크에 대해 배워야합니다. 내가 추천하는 것은 Extreme Programming입니다. 분명히 문제를 해결합니다. 이 솔루션은 간단하지 않지만 (강력한 자동화 된 테스트, 페어 프로그래밍 및 지속적인 제공을 통한 기술 우수성에 중점을 두지 않음) 매우 효과적입니다. 에보고 된 국가 개발 운영 팀은 보고서 .


6
"일부 사람들은 스크럼이 당신의 정확한 상황에 도달하기가 너무 쉽다고 말합니다." . 나는 그것이 사실이 아니라고 생각합니다. 스크럼을 잘못 사용 하면 이러한 정확한 상황이 발생할 수 있지만 고객이 원하는 것이 아니라면 스크럼 자체가 가장 저렴한 솔루션을 지원하지 않습니다.
Bryan Oakley

1
@BryanOakley 내가 말하고 싶은 것은 프로세스가 X를 처방하지 않으면 사람들은 X를하지 않을 것이며, 스크럼은 기술적 부채를 줄이는 관행을 처방하지 않는다는 것입니다. PO에 의해 정의 된 작업 만 정의되는 것처럼 기술 부채는 제거되지 않습니다. PO는 신경 쓸 이유가 없습니다. 기술 부채는 팀의 책임입니다.
Euphoric

2
"스크럼은 기술 부채를 줄일 수있는 관행을 규정하지 않습니다." 또한 기술 부채 를 증가시키는 관행도 규정하지 않습니다 .
Bryan Oakley

2
@BryanOakley 기술적 부채의 요점은 그것이 증가하는 자연 상태라는 것입니다. 그리고 그것을 줄이기 위해 노력해야합니다. 홀로 남겨두면 통제 할 수 없을 정도로 커집니다.
Euphoric

4
스프린트에 들어가는 것에 대해 PO가 유일하게 PO 인 경우 PO는 자신의 역할을 제대로 수행하지 못합니다. 생산 과정에 관련된 모든 사람들과 이야기하고 나머지 팀을 포함하여 가장 중요한 것을 결정하는 것이 그들의 임무입니다.
Erik

9

적어도 내 경험상 "민첩 해 지려고" 하는 매우 일반적인 팀의 패턴 을 설명합니다. 이것이 실제로 애자일 자체의 일부이거나 일반적인 잘못 구현 된 것인지, 민첩한 선언 / 원칙 또는 그 고유 한 결과에 어긋나는 지 여부에 대해서는 논쟁의 여지가 있습니다. 경험적 관점에서 볼 때 내 자신의 작은 샘플 경험 세트 (및 내가 이야기하는 사람들)를 기반으로 팀이 민첩한 경우이 패턴을 겪을 가능성이 평균보다 높습니다. 그것을 그대로두고 구체적인 예에 ​​초점을 맞추자.

설명하는 내용 에는 두 가지 측면 이 있습니다.

  • 공통된 이해 / 비전 누락으로 비효율적
  • 성공 / 진행 및 총 비용을 측정하는 방법

잘못된 길을 가거나 서클에서 달리기

필자의 경험에 따르면, 이런 일이 발생하는 주된 이유 는 코드를 빠르게 생성하기 위해 팀이 이미 알고 있거나 쉽게 알아낼 수있는 사용 사례 나 요구 사항을 적극적으로 제쳐두고 있기 때문 입니다. 10-20 년 전에 사람들은 거대한 사양을 작성하려고 시도했고 모든 것을 미리 생각했지만 종종 실패했습니다. 그들은 너무 오래 걸렸거나 무언가를 간과했습니다. 과거에 배운 것 중 하나는 소프트웨어 개발에 알 수없는 것들이 많고 많은 것들이 바뀌기 때문에 빠르게 반복하고 합리적인 출력을 빠르게 생성한다는 아이디어입니다. 이것은 매우 좋은 원칙입니다. 그러나 오늘날 우리는 또 다른 극단적 인 상황에 처해 있습니다. "이것은 다음 스프린트의 일부이기 때문에 신경 쓰지 않습니다"또는 "그 버그를 제기하지 않습니다. 다시 발생할 때 처리합니다."

  1. 찾을 수있는 모든 고급 사용 사례 , 요구 사항, 종속성 및 제한 사항을 수집하십시오 . 모든 이해 관계자와 개발자가 볼 수 있도록 위키에 넣으십시오. 새로운 것이 나올 때 추가하십시오. 주주 및 사용자와 대화하십시오. 최종 제품에 기여하지 않거나 한 가지 문제를 해결하지만 세 가지 새로운 문제를 야기하는 해결 방법 / 해킹을 구현하지 않도록 개발 하는 동안검사 목록을 검사 목록 으로 사용하십시오 .
  2. 높은 수준의 개념을 공식화하십시오 . 인터페이스 또는 클래스 디자인에 대해 이야기하는 것이 아니라 문제 영역을 대략적으로 스케치합니다. 최종 솔루션의 주요 요소, 메커니즘 및 상호 작용은 무엇입니까? 귀하의 경우 jquery 해결 방법을 중간 단계로 사용하고 추가 작업 만 발생시키는 경우를 분명히해야합니다.
  3. 수집 한 목록을 사용 하여 개념검증하십시오 . 명백한 문제가 있습니까? 말이 되나요? 오랜 기술 부채를 유발하지 않으면 서 동일한 사용자 가치를 달성 할 수있는보다 효율적인 방법이 있습니까?

과용하지 마십시오. 개발자가 아닌 사람을 포함하여 팀의 모든 사람이 MVP로가는 최선의 경로가 무엇인지 공통적으로 이해하도록해야합니다. 모든 사람은 명백한 감독이 없으며 실제로 작동 할 수 있다는 데 동의해야합니다. 이것은 일반적으로 막 다른 골목으로 내려가거나 같은 것을 여러 번 다시 실행하는 것을 방지합니다. 애자일은 예상치 못한 상황을보다 잘 처리 할 수 ​​있도록 도와줍니다. 알려진 것을 무시하는 것은 아닙니다.

의주의 침몰 선정-착오 : 한 아키텍처 또는 데이터베이스 유형으로 시작하는 경우, 대부분의 사람들은 중간 프로젝트 변경 주저한다. 따라서 물건을 구현하기 전에 "교육받은 최고의 추측"을하는 데 시간을 투자하는 것이 좋습니다. 개발자는 코드를 빠르게 작성하려는 경향이 있습니다. 그러나 종종 몇 가지 모형, 라이브 프로토 타입, 스크린 샷, 와이어 프레임 등이 있으면 코드 작성보다 더 빠른 반복이 가능합니다. 작성된 모든 코드 줄 또는 단위 테스트로 인해 전체 개념을 다시 변경하기가 더 어려워집니다.

성공 측정

완전히 별개의 측면은 진행 상황을 측정하는 방법입니다. 프로젝트의 목표는 주위에있는 물건을 사용하여 높이가 1m 인 타워를 만드는 것입니다. 예를 들어 시장 출시 시간이 안정성보다 중요한 경우 카드 하우스를 구축하는 것이 완전히 유효한 솔루션이 될 수 있습니다. 목표가 지속되는 것을 만드는 것이 레고를 사용하는 것이 더 좋을 것입니다. 요점은 해킹으로 간주되는 것과 우아한 솔루션이 프로젝트의 성공을 측정하는 방법에 전적으로 의존한다는 것 입니다.

"로드"에 대한 귀하의 예는 꽤 좋습니다. 나는 과거에 모든 사람들 (판매, PO, 사용자 포함)이 성가신 것에 동의 한 적이 있습니다. 그러나 그것은 제품의 성공에 영향을 미치지 않았으며 장기 부채를 유발하지 않았습니다. 개발자 리소스와 관련하여 더 가치있는 일이 있었기 때문에 삭제했습니다.

내 조언은 다음과 같습니다.

  1. 작은 버그라도 모든 것을 티켓 시스템의 티켓으로 유지하십시오 . 프로젝트 범위 내에있는 것과 그렇지 않은 것을 적극적으로 결정하십시오. 마일스톤을 생성하거나 백 로그를 필터링하여 항상 수행해야하는 모든 항목의 "완전한"목록을 갖도록하십시오.
  2. 프로젝트가 성공으로 간주 될 수 있는 엄격한 중요성과 명확한 차단 점 을 확보하십시오. 최종 제품에는 실제로 어느 정도의 안정성 / 코드 품질 / 문서가 필요합니까? 맨 위에서 선택하여 가능한 한 매일 최선을 다하십시오. 하나의 티켓으로 작업 할 때 새로운 티켓을 소개하지 않고 티켓을 완전히 해결하십시오 (우선 순위가 낮아서 사후에 게시하는 것이 합리적이지 않는 한). 모든 커밋은 당신을 옆으로 또는 뒤로가 아니라 최종 목표를 향해 앞으로 나아갑니다. 그러나 다시 강조하기 위해 : 나중에 추가 작업을 생성하는 해킹이 여전히 프로젝트에 순전히 긍정적일 수 있습니다!
  3. PO / 사용자를 사용하여 사용자 가치를 파악하고 개발자에게 기술 비용을 계산하도록 합니다. 비 개발자는 일반적으로 실제 장기 비용 (구현 비용뿐만 아니라)이 무엇인지 판단 할 수 없으므로 도움이됩니다. 비등 개구리 문제에주의하십시오 : 시간이 지남에 따라 많은 관련이없는 작은 문제들이 팀을 정지시킬 수 있습니다. 팀이 얼마나 효율적으로 작업 할 수 있는지 정량화하십시오.
  4. 전반적인 목표 / 비용을 주시하십시오. 스프린트에서 스프린트로 생각하는 대신 "팀이 프로젝트가 끝날 때까지 필요한 모든 것을 할 수 있을까"라는 사고 방식을 유지하십시오 . 스프린트는 단지 문제를 해결하고 체크 포인트를 갖는 방법입니다.
  5. 조기에 무언가를 보여주고 싶지는 않지만 사용자에게 제공 할 수 있는 최소한의 가능한 제품으로가는 가장 빠른 길에 코스를 구성하십시오 . 그럼에도 불구하고 전반적인 전략은 그 사이에 검증 가능한 결과를 허용해야합니다.

따라서 누군가가 최종 구현 목표에 맞지 않는 일을 할 때 이상적으로 이야기를 고려하지 마십시오. 스토리를 닫는 것이 유익한 경우 (예 : 고객의 의견을 수렴) 즉시 새로운 스토리 / 버그를 열어서 부족한 문제를 해결하십시오. 지름길을 가져가더라도 비용이 절감되지 않고 숨기거나 지연시킬 수 있습니다.

여기서의 비결은 프로젝트의 총 비용에 대해 논쟁하는 것입니다. 예를 들어 PO가 기한을 정하기 위해 지름길을 강요하는 경우 프로젝트 완료를 고려하기 위해 이후에 수행해야 할 작업량을 수량화하십시오!

또한 기준 기반 최적화에 주의 하십시오. 팀이 스프린트 검토에서 보여줄 수있는 스토리 수로 측정되는 경우 좋은 "점수"를 달성하는 가장 좋은 방법은 모든 스토리를 10 개의 작은 스토리로 자르는 것입니다. 작성된 단위 테스트 수에 의해 측정되는 경우, 불필요한 많은 테스트를 작성하는 경향이 있습니다. 이야기를 세지 말고, 필요한 사용자 기능이 얼마나 작동하는지, 프로젝트 범위 내에서 기술 부채로 해결해야 할 비용이 얼마나 큰지 등을 측정하십시오.

개요

요약하자면, 빠르고 최소한으로하는 것이 좋은 방법입니다. T 그는 문제는 "빠른"해석하고 "최소"입니다. 장기 비용을 고려해야합니다 (이 프로젝트와 관련이없는 프로젝트가 아닌 한). 배송일로부터 1 개월 만 걸리지 만 기술 부채가 발생하는 바로 가기를 사용하면 회사에 1 주일이 소요되는 솔루션보다 많은 비용이 듭니다. 즉시 테스트 작성을 시작하는 것이 빠른 것 같지만 개념에 결함이 있고 잘못된 접근법을 구체화하는 경우에는 그렇지 않습니다.

그리고 당신의 경우에 "장기"가 의미하는 바를 명심하십시오 : 나는 훌륭한 코드를 작성하여 파산하여 너무 늦게 배송 된 한 개 이상의 회사를 알고 있습니다. 회사의 관점에서 보면 좋은 아키텍처 또는 깨끗한 코드는이를 달성하는 데 드는 비용이 그렇지 않은 경우보다 적은 경우에만 유용합니다.

희망이 도움이됩니다!


"10-20 년 전, 사람들은 거대한 사양을 작성하려고 시도했고 모든 것을 미리 생각했지만 종종 실패했습니다." . 말하자면 이것은 사람들이 너무 많이 계획함으로써 잘못을 저지른 신화적인 과거와 민첩성을 대조하는 마케팅 평범한 일입니다. 너무 많은 계획을 세우지 않고 초기 프로토 타입을 제작하는 것은 1998 년쯤에 처음 배운 교훈 중 하나였습니다. 민첩한 운동은 잘 알려진 관행에 새로운 단어를 사용하고 새로운 단어를 마케팅하는 것입니다.
Giorgio

물론 그것은 자신의 경험에 달려 있습니다. 나는 실제로 크고 보수적 인 자동차 제조업체와 함께 몇 가지 프로젝트를 수행했으며 한 줄의 코드를 작성하기 전에 사양이 얼마나 자세한 지 믿지 않을 것입니다. 내가 묘사 한 것이 극단적 인 한, 요즘에는 제대로 시작하지 않은 회사가 많이 있습니다. 이 두 극단 사이의 스펙트럼에 대한 모든 점의 예가 항상 있습니다. 그러나 나는 일반적인 경향이 "처음부터 시작되지 않은"끝으로 상당히 눈에 띄게 변한 것을 본다.
AlexK

7

엄밀히 말하면, 당신이 잘못하고 있는 것은 고객 일하고 있지 않다는 것 같습니다 . 고객이 원하는 것뿐만 아니라 필요한 것을 이해하려면 고객과 함께 협력해야합니다 . 일련의 빠른 수정이 필요합니까, 장기적으로 안정적으로 유지 관리 할 수있는 안정적이고 유지 관리 가능한 시스템이 필요합니까? 결정하기 어려울 수 있지만 배경색이나 성능 벤치 마크만큼 품질이 요구됩니다. 고객은 안정성과 유지 관리가 자유롭지 않으며 제품에 맞게 설계되어야한다는 점을 알고 있어야합니다.

그들이 전직이라고 말하면, 당신은 스프린트 리뷰에서 그들에게 목표를 달성하기 위해 엔지니어링 코너를 자르고 있다고 설명한다고 가정 할 때, 아무 잘못도 없다고 가정합니다.

그들이 후자라고 말하면, 당신이 잘못하고있는 것은 그들이 원하는 것을주지 않는다는 것입니다.

스크럼의 초석 중 하나는 투명성입니다. 스크럼을 수행하는 경우 고객과 스프린트 검토를 수행해야합니다. 이 리뷰에서 고객에게 소프트웨어를 더 빨리 제공하기 위해 코너를 다지고 있다고 말하고 있습니까? 그렇지 않다면, 당신은해야합니다. 설계 선택의 결과에 대해 고객에게 100 % 명확하게 설명하여 소프트웨어를 적절한 수준의 품질로 제공하는지에 대한 정보에 근거한 결정을 내릴 수있는 기회를 제공하십시오.


3
고객과 함께 일할 때 고객이 원하는 것을 말하지 않고 필요한 것을 파악해야합니다 . 거의 모든 고객이 모든 문제에 대해 가장 저렴하고 빠른 솔루션을 선택할 것입니다. 엔지니어링 팀은 가장 필요한 옵션이 무엇인지 파악해야합니다.
Erik

1
@ 에릭 : 우수한 의견. 그렇기 때문에 원래 "... 원하는 것"보다는 "필요한 것에 대한 이해"를 썼습니다. 그러나 나는 그다지 강조하지 않았다는 것을 알 수 있습니다. 좀 더 강조하고 설명하겠습니다. 의견 주셔서 감사합니다.
Bryan Oakley

5

이완이 맞아 경영진이 스크럼을 선호하는 이유는 스타카토 스타일의 기능을 요구하고 결과를 빠르게 얻을 수 있기 때문입니다. 결과 엉망이 될 때까지 다른 사람의 문제입니다.

주의를 기울 였으니 설명해주세요. 스크럼이 아닙니다. 압력을 느끼기 때문에 합리적이고 현실적인 견적을 내려 놓을 수없는 것은 강력한 제품 관리자와 약한 개발 팀의 전형적인 설정입니다. 그래서 그들은 낙관적 인 견적을 도출하고 문제에 더 깊이 빠져 들어 적시에 인도합니다.

스크럼에서 (개발자로서) 자신의 계획을 세우십시오. x 일 안에 어떤 기능을 제공하라고 말하는 사람은 없습니다. 누군가 x 일 안에 배달하라고 지시하면 스크럼을 수행하지 않는 것입니다.

문제가 무엇이든 해결되어야한다면 시간을 요구하십시오. 먼저 무언가를 재 작업 할 시간이 필요하다고 생각하십니까? 추정치에 포함하십시오. 그렇게 할 여유가 있습니까?


3

애자일을 잠시 제쳐두고 현재하고있는 일을 살펴 보자.

계획을 세울 때 개발 시간 측면에서 쉬운 해결책을 찾지 못합니다. 예를 들어 새로운 대화 상자 또는 무언가를 만드는 경우 이전 jquery가 더 빠르기 때문에 사용합니다. 정리하고 반응으로 변환하지만 거의 발생하지 않습니다.

이를 "기술 부채 확보"라고합니다. 마틴 파울러는 "무모한 대 신중한 사람"과 "무자비한 대 부정한 사람"이라는 두 축을 따라 블로그 포스트 에서 "기술 부채 상환"을 설명했다 .

명시 적인 목표 중 하나 (즉, 단일 페이지 앱) 에서 멀어 지도록 알려진 기존 기술 jquery를 명시 적으로 사용하기로 결정했습니다 . "빠른"전달을 위해이 작업을 수행합니다. 이것은 고의입니다.

이 "빠른"계산에 포함되지 않은 것은 나중에 반응 할 때 기능을 구현해야하는 시간입니다. 당신은 당신이 다른 통해서만 단점이있는 다른 선택 을 알고 올바른로는 속도가 관건이라고 평가를 기반으로 (즉 반응의 기능을 구현하기 위해 시간을내어을). 이것은 무모한입니다.

Martin Fowler는 "우리는 디자인 할 시간이 없습니다"에 이러한 종류의 부채를 요약합니다. 이는 코드를 유지하지 않거나 며칠 이상 코딩을 기대하지 않는 환경에서 적절한 선택입니다. 그러나 프로젝트는 고객의 유지 보수를 명시 적으로 포함하는 장기 실행 프로젝트입니다.

당신이하고있는 일은 매우 기본적인 수준에서 잘못 되었습니다. 그건 나쁜 공학 !

귀하는이 부채를 상환 하고이자를 부과 해야한다는 점을 무시하고 기술 부채를 맡았습니다 . 그리고 당신은 당신의 부채에 대한 이자율이 스프린트 동안 가용 한 일에 가까워지기 시작할 때까지 계속했습니다.

당신이해야 할 일은 부채 수준을 낮추는 것입니다 . 상사와 대화하고 고객과 대화하십시오. 어제 유지 보수 작업을해야합니다.


2

애자일 사용 중지 ...

또는 오히려 민첩한 (또는 스크럼 등에 대한) 이해가 지시하기 때문에 어떤 방식으로 순전히 무언가를 시도하지 마십시오. 이러한 용어 중 하나에 대한 하나의 해석을 잘못된 단계의 프로젝트에 적용하려고하면 최악의 조치가 될 수 있습니다. 대신 이유를 사용하십시오.

프로젝트와 세계의 거의 모든 다른 프로젝트가 코드와 다양한 접근 방식의 엉망인 이유는 중앙 집중식, 전능 한 건축 설계가 없기 때문입니다.

이것이 부족한 이유는 다음과 같습니다.

  • 건축가는 전문 지식이 없습니다 (처음 10 취미 프로젝트처럼)
  • 건축가는 시간이 없다
  • 건축가에게는 힘이 없습니다 (Manager는 아니오 또는 예라고 말하지만 일부 부품에만 해당)
  • 이 팀은 일부 부두 방법론에 대한 믿음을 가지고 있습니다.

간단한 해결책은 이러한 모든 마법의 단어를 버리고 상황의 현실을 보는 것입니다.

  1. 코드의 상태는 팀이 제 시간에 버그를 해결하지 못하게합니다.
  2. 더 많은 기능을 추가할수록 더 나빠질 것입니다.
  3. 따라서 부품을 일시 정지, 재평가 및 재 설계하는 것이 좋습니다.

비난의 손가락이 빙글 빙글 돌면서 처음에 왜이 상태에 도달했는지 묻게 될 것입니다. 대답은 피할 수 없다는 것입니다. 디자인이 성숙 해짐에 따라 디자인을 다르게 했어야한다는 것을 알았지 만 예견 할 수 없었습니다. 또한 이것은 프로젝트 당 한 번의 실현이 아니며 여러 번 발생하므로 계획을 세워야합니다.

그러나 관리자가 일을 악화시키기 위해 할 수있는 일이 많이 있습니다.

  1. 당신의 개발자들을 마감일까지 죽음으로 이끌 기.
  2. 개발자는 "생각, 통합 및 품질 리팩토링"티켓과 티켓에 대한 충분한 시간이 없으면 티켓에 대해서만 시간을 기록 할 수 있습니다.
  3. 한 사람에게 아키텍처에 대한 소유권을 부여하지 않고 오랫동안 아키텍처에 대한 소유권을 부여하지 않음
  4. 그 사람이 필요하다고 생각하는 변경을 할 수 없도록

이 방법으로 보면 애자일 및 스크럼에 대한 일부 해석이 실제로이 경로를 훨씬 빠르게 진행시키는 방법을 쉽게 알 수 있습니다!

한 가지 방법은 각 리팩토링 비트에 대한 티켓을 만드는 것입니다. 문제는 작은 티켓으로 작업을 시작하여 마감일을 뒤로 미루고 티켓이 승인 루프를 통과하여 모든 것이 느려질 때까지 큰 리 팩터가 필요하다는 사실을 종종 알지 못한다는 것입니다.

또 다른 방법은 팀 용량의 25-50 % 만 사용하도록 스프린트를 계획하는 것입니다. 그런 다음 개발자는 실제 티켓에 시간을 기록하고 (리팩토링없이 소요 된 시간을 기록) 리팩토링 시간 (일주일 동안 큰 티켓 하나, 승인 루프 없음, 개발자 간의 토론 만) 리팩토링이없는 경우 다음 주 스프린트에서 티켓을 가져올 수 있습니다. 프로젝트의 기본 코드가 향상됨에 따라 앞으로 몇 주 동안 백분율 슬라이더를 조정합니다.

그래서 "우리가 뭘 잘못하고 있는지"에 대답하기 위해 당신이 상식적인 방법론을 신뢰한다고 말하고 싶습니다. "이 문제에 대한 민첩한 접근"을 요구하기도합니다 . 나는 말을 버리고 실제 문제에 대해 생각한다고 말하고 싶습니다. 그렇다면 최종 상식 접근 방식이 실제로 "민첩한"또는 "스크럼"의 형태에 해당하는지 여부를 해독하려는 다양한 선언을 골라 내고 싶다면 반드시 가십시오.


-1

당신은 아무것도 잘못하고 있지 않습니다. 이러한 종류의 방법론은 사양을 최대한 빨리 제공하기 위해 설계되었습니다.

2 차 목표를 향해 노력하고 있다면 '비 기능 요구 사항'또는 '완료된 정의'로 표현하는 것이 가장 좋습니다.

예를 들어, 작동하지 않는 요구 사항이있을 수 있습니다.

"모든 새로운 기능은 React로 작성해야합니다"

"모든 비동기 호출은 로딩 스피너 및 오류 처리를 구현해야합니다"

개발자가 좋아하기 때문에 제품 소유자 (또는 이에 상응하는)에게 몰래 물건을 몰아 넣는 것보다 가치있는 일에 동의하도록해야합니다.


"이러한 방법론은 사양을 최대한 빨리 제공하기 위해 설계되었습니다." -그것은 분명히 스크럼의 목표가 아닙니다. 당신이 그것을 말한 방식, 그것이 당신이 의미하는지 아닌지는 명확하지 않습니다.
Bryan Oakley

죄송합니다. 엔지니어링 및 늦게 기능을 제공하는 것에 대해 추측합니다.
Ewan

아니 정말. Scrum은 고객과 협력하여 고품질 소프트웨어를 가시적이고 반복적 인 방식으로 제공합니다. 스크럼은 적절한 엔지니어링 대신 낮은 품질의 기능을 제공하는 것에 대해 아무 말도하지 않습니다.
Bryan Oakley

2
당신이 저에게 비판을 용서한다면 스크럼이 무엇인지에 대해 매우 확고한 생각을하는 것 같습니다. 그러나 오늘 가이드와 다른 '공식'진술을 확인하면 모두 매우 소망스러운 것 같습니다. 나는 당신이 그 문제에 대해 분명한 진술을하는 성명서를 찾기가 힘들다고 생각합니다
Ewan

1
@Erik 그들은 반응을 사용하기 때문에 엉망이라고 생각합니다. 개발자 팀은 모든 것을 스스로 리팩토링하기로 결정할 수 없습니다. 고객은 스프린트 비용 지불을 거부합니다.
Ewan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.