민첩하다는 것은 무엇을 의미합니까?


17

우리는 모두가 민첩하게 행동 할 것이라고 말하는 프로젝트를 가지고 있지만 민첩성이 무엇인지 명확하게 이해하지 못했다고 생각합니다.

이전 프로젝트에서 회의를 계획 한 후 제품 백 로그를 정의하고 2-3 주 스프린트로 개발자에게 작업을 할당했습니다. 매일 아침 우리는 스크럼 회의 (매번 1/2 시간 씩 진행되는 것처럼 보임)를 가졌으며 각 개발자는 그 후 회의를 가졌습니다. 스프린트가 끝날 때까지 아무도 테스트를하지 않았으며 완료되지 않은 작업이 다음 스프린트에 추가되었습니다.

개발자들은 서로 대화를 거의하지 않았으며 개발에 관련된 TDD는 없었습니다. 실제로 대부분의 개발자는 처음에 사양을 가지고 있었고 스프린트가 계획된 2 주 또는 3 주 동안 그대로 사용했습니다. 고객 / 지분 보유자와의 커뮤니케이션은 거의 없었습니다.

QA는 일반적으로 몇 개월 후에 관여했으며, 그 결과 우리가해야 할 일의 양을 더 증가시키는 누락 된 요구 사항을 발견했습니다. 분명히 피드백 루프가 없었습니다.

그래서 제 질문은, 우리가 어디로 잘못 갔는지 그리고 어떻게 팀이 같은 실수를 저 지르지 못하게 할 수 있는가입니다.


4
programmers.stackexchange.com/questions/15928/ 의 복제본처럼 보입니다 ... 여러분은 실제로 무엇을해야할지
몰랐고

1
네 100 % 동의합니다. 관리자가 민첩한 책을 읽고 방금 책을 읽었습니다 (매우 나쁘지만). 프로젝트의 서버 측에서 TDD를 사용했지만 다른 사람들은 TDD를 배우거나 이점을보고 싶지 않았습니다. 우리는 프레임 워크 (클라이언트 측)를 영원히 가져 갔으며 개발자는 계속 방해하지 않고 프레임 워크를 사용해야한다고 주장했습니다.
JD01

3
제목이 중복 된 것 같지만이 질문은 많은 팀이 민첩한 내용에 대한 "일반적인"설명을 읽고 (훈련 수업 및 컨설턴트 채용) JD01과 정확히 동일한 문제를 겪기 때문에 도움이된다고 생각합니다. 어쨌든 팀. 따라서이 특정 팀의 맥락에 질문을 싣기 위해 다른 일반적인 게시물 질문으로는 해결하지 못하는 특정 문제 및 해결 방법에 대해 설명 할 수 있습니다.
DXM

답변:


27

당신이 묘사하는 것은 정의에 의해 민첩하지 않습니다 (Agile Manifesto) 매일 상태 회의가있는 폭포입니다. 애자일이란 제품 소유자 및 고객과의 대화 형 피드백 루프가없는 경우 변경에 쉽게 적응할 수 있다는 것을 의미합니다.

애자일은 제품 소유자 / 고객과의 지속적인 커뮤니케이션을 통한 신속한 실패에 관한 것입니다. 나중에 더 빨리 실패하는 것이 좋으며, 적은 작업이 수행되고, "손실"이 줄어 듭니다. 그리고 당신은 "우리가 잘못하는 데 너무 많은 시간을 보냈기 때문에 우리는 그것을 올바르게 할 시간이 없습니다. 실패로 이어 지더라도 동일한 길을 계속해야합니다."라는 주장에 얽매이지 않습니다. ".

당신의 Managment를 같은 소리를하고있다 "... 스크럼을하지만," 어디에 "하지만" 그들이 밖으로 던져 어디 모든 스크럼 물건 그들이 이해하거나 동의 그냥 것들을 항상 같은 우연한 폭포 방법을하지 않는 것이 있지만, 새로운 반짝이는 유행어 이름으로

스크럼에서 매일 일어 서서 것은 NOT 제공에 대한 상태를 중복 작업을 동료 팀 구성원이 무엇을하는지 알고 서로 밖으로 도울 수하지 않도록 관리에, 그것은 개발자의 상호 작용을 강제하는 것입니다. 한 사람당 45 초 이상 걸리면 잘못한 것입니다. 한 사람이 하루 동안 일해야 할 일에 대해 며칠 동안 같은 상태를 부여하면 팀의 투명성에 관한 것입니다. 은 나중에 사람 문제를 빨리 해결할 수 있습니다.

작성된 코드를 서로 테스트하지 않으면 올바르게 수행하지 않는 것입니다. 테스트는 나중에 생각하지 않고 프로세스에 포함 시켜야합니다 . QA는 계획 세션에 포함되어야하며 테스트에 걸리는 시간에 대한 추정치를 제공해야합니다.

스프린트 커밋을 충족시키지 않고 롤오버하는 경우 올바르게 수행하지 않는 것입니다. 스프린트는 너무 많은 작업 에 헌신하는 경우 약속 에 관한 것이며, 그만두십시오. 결과물에 정확하게 헌신 할 수 없다면 예측 가능성이나 반복성을 도입 할 수있는 방법이 없습니다.


1
답변 해 주셔서 감사합니다. TDD는 민첩하지 않아야합니까? 개발자가 이런 식으로 생각하는 것은 어려웠습니다. 결국 내가 말한대로 그들은 (기억한다면) 마지막에 몇 가지 테스트를 수행하고 TDD라고 말했습니다. 나는 당신이 말한 모든 것에 동의합니다. 관리자가 몇 달과 몇 달이 걸리는 "프레임 워크"를 방해한다고 느꼈기 때문에 피드백 루프가 거의 존재하지 않았습니다. 그때까지 우리는 고객 요구 사항을 충족시키지 못하는 기능을 구현해야했습니다.
JD01

3
TDD는 붉은 청어입니다. 저는 개인적으로 종교로서 동의하지 않습니다. 고객의 요구를 충족시키지 않는 코드 테스트는 무엇입니까? 그리고 테스트가 포함 되어 있지 않으며 테스트되지 않은 어떤 것도 전달 및 데모되지 않기 때문에 만트라로서의 TDD는 쓸모가 없습니다. 작동하지 않으면 데모하지 않습니다. 데모하지 않으면 제품 소유자 / 고객이이를 수락 할 수 없습니다.

2
나는 많은 TDD를 시작했지만 이제는 BDD로 전환하여 합격 테스트와 같은 고객의 요구에 더 부합합니다. 비록 TDD가 디자인을 만드는 데 도움이되었다고 생각하지만 테스트를 제공하는 것 외에는 보지 못했을 것입니다.
JD01

1
TDD의 주요 이유는 지속적인 리팩토링을 허용하여 기술 부채 누적 비율을 줄이는 것입니다. 재검사 비용이 너무 많이 들기 때문에 변경하기를 두려워하는 코드가 있으면 프로젝트가 조기에 종료됩니다.
케빈 클라인

많은 사람들이 TDD를 전파한다고 들었습니다. 실제로 TDD를 본 적이 없습니다. 개인적으로 내 두뇌는 그런 식으로 작동하지 않습니다. 나는 글을 쓰고있는 것에 대해 좋은 생각을하는 경향이 있지만, 글을 쓸 때 나는 균형을 맞추고 움직입니다. 테스트를 먼저 작성하는 것은 불가능합니다. 나는 일반적으로 코드 작성의 일부로 단위 테스트를 작성하지만 미리 작성하지 않고 코드를 작성할 때 작성됩니다.
DaveG

9

Jarrod는 좋은 대답을했고 (+1), 조금 더 확장하고 싶습니다.

애자일은 제품 소유자 (고객)와 팀 간의 신속한 실패와 피드백에 관한 것이 아닙니다. 관련된 모든 이해 관계자 간의 신속한 피드백에 관한 것입니다. 진정으로 민첩하기 위해서는 (그리고 이것이 manifesto 에서 직접 제공됨 ) 개발자가 더 나은 제품을 제공 할 수 있도록 프로세스가 존재한다는 것을 인식하는 것입니다. 프로세스 위의 사람들은 팀이 기존 프로세스가 작동하지 않는다는 것을 인식하자마자 변경하고 변경합니다.

"스크럼이지만 ..."도 문제이지만이 동전에는 양쪽이 있습니다. 선언문을 보면 팀에 관한 것이며 도구 / 프로세스가 효과가 있다는 것을 알 수 있습니다. 두 팀이 같지 않으므로 각 팀이 약간 다르게 운영되므로 괜찮습니다. 확실하게, 전체 Scrum 방법론을 취하여 그것을 편지에 따르고 그것이 그것이 당신의 팀에게 효과가 있는지보십시오.

또 다른 대안은 다른 프로세스를 팀으로 추진하는 대신 모든 사람들이 스크럼이 지시 한대로 따르도록 민첩한 접근 방식을 시도 하는 것 입니다. 팀과 의사 소통하고 함께 문제 영역과 솔루션을 식별 할 수 있는지 확인하십시오. 그런 다음 문제를 해결하기 위해 작업 방식에 서서히 변화를 도입하십시오.

시간이 조금 걸리지 만 ...

  1. 가장 큰 문제를 먼저 해결하여 팀의 제품 제공 능력에 가장 큰 영향을 미칩니다.
  2. 즉각적인 문제를 식별하고 솔루션을 개발하는 데 참여함으로써 팀원은 특정 관행이 왜 중요한지 이해하고 단순히 수행하라는 지시를 받기 때문에 단순히 수행하지는 않습니다.

Scrum과 디자인 패턴 사이에 유추 할 경우, 제안한 방식으로 작업하는 것은 패턴으로 코딩하는 것과 비슷합니다. 코드를 최대한 간단하게 유지하고 필요할 때만 디자인 패턴에 수렴합니다. 디자인 패턴을 고르고 롤링하는 것 (즉, 맹목적으로 Scrum과 모든 프로세스를 하나의 세트로 맹목적으로 선택)과 달리, 때로는 코드를 복잡하고 유지하기가 더 어려울 수 있습니다.

이해의 열쇠는 민첩성이 새로운 일을하기위한 새로운 과정을 내놓는 것이 아니라는 것입니다. 기존 프로세스 / 실습에 대한 지속적인 변화와 지속적인 조정에 관한 것입니다.


1
downvoter에게 : 정교하게 관리? 나는 맹목적으로 Scrum을 채택하지 않거나 다른 것이었기 때문에 몇 개의 깃털을 주름 쳤습니까?
DXM

2
그래 바보 자세한 정보는 +1하겠습니다.
Michael Durrant

1
+1 " 열쇠는 이해하기는 민첩이 일을위한 새로운 프로세스와 오는에 대해가 없습니다, 그것은 지속적인 변화와 기존의 프로세스 / 관행 일정 조정에 관하여이다. "
데이비드 '대머리 생강'

-2

팀 (및 경영진)이 진정으로 "민첩"하기를 원한다면, 팀으로서 애자일 선언문 과 교장 을 읽고 토론하는 것으로 시작해야합니다 . 그런 다음 생성 된 민첩한 방법론 중 하나 ( 예 : Scrum )를 선택하고 이에 대한 교육을받은 후 시작하십시오. 나는 그것을 수정하기 전에 잠시 동안 그것을 밀접하게 따르는 것이 좋지만 그것은 단지 나입니다.

또한 선택된 특정 민첩한 프로젝트 방법론을 지원하는 데 사용되는 엔지니어링 관행 을 자세히 살펴 봐야 합니다.


2
나는 이것이 원래의 질문에 대한 답으로 생각하지 않기 때문에 하향 투표했다.
Bryan Oakley

1
충분히 공평하다고 생각합니다. OP의 초기 전제에 대해 이야기했습니다. "모든 직원이 민첩한 방식으로 수행하겠다고 말하는 프로젝트가 있지만 민첩성이 무엇인지 명확하게 이해하지 못했다고 생각합니다." 많은 사람들은 민첩한 철학이나 그것을지지하는 방법론이 무엇인지 이해하지 않고 "민첩하게 행동하기"또는 "민첩하게 행동하기를 원한다"고 말합니다.
StevenV

3
나는 특정 방법론을 완전히 따르는 것에 맹목적으로 동의하지 않습니다. 로 "진정" 그것은 당신의 회사와 팀에 맞는 않는 애자는 방법 당신은 어떤 특정한 경향이나 방법론에 자신을 고정하지 않습니다. 방법론을 출발점으로 사용하는 것이 좋습니다. 그런 다음 약간의 훈련을 받고 더 나은 경험을 얻으면 자신의 특정 요구에 맞게 조정하십시오. 더 중요한 것은 다음 프로젝트와 고객이 조금 다른 것을 요구하는 경우 방법론을 제품군에 맞게 조정하십시오. 그건 정말 민첩하지 않습니다.
S.Robins

1
내 답변을 다시 방문하면 위의 S.Robins에 동의하고이를 반영하기 위해 내 답변을 수정했습니다.
StevenV
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.