Nhóm Scrum không tuân theo nguyên tắc YAGNI


13

Trong một cuộc họp SCRUM, nhóm sản phẩm đã tranh luận về một tính năng trên API sẽ được ứng dụng di động sử dụng. Chúng tôi đã có một bản mô phỏng cho thấy màn hình sẽ trông như thế nào và những yếu tố chính nào nên chứa (một "bố cục").

Dựa trên điều này và cuộc thảo luận tôi đã có với chủ sở hữu sản phẩm, tôi đã tạo một nguyên mẫu cho phản hồi API (HAL + JSON). Nó rất đơn giản, JSON tuân thủ HAL, không làm gì khác hơn là đại diện cho những thứ có trong mockup. Tôi đã không bị ảnh hưởng bởi những ý tưởng trong tương lai mà những người kinh doanh thấy trước vì họ có xu hướng thay đổi ý tưởng của họ thường xuyên và tôi quyết định thực hiện phương pháp tối giản. Đề xuất của tôi đã bị nhóm từ chối và tôi đã vượt quá 7-1.

Nhóm đã quyết định sử dụng cấu trúc json trừu tượng phi ngữ nghĩa phức tạp hơn, cho phép linh hoạt hơn trong việc sắp xếp bố cục. Nhược điểm của phương pháp đó là chúng tôi đã kết thúc với một tập hợp các đối tượng thống nhất có thể có các thuộc tính rỗng và rỗng theo thiết kế. Họ cũng nghĩ rằng sẽ rất tốt nếu thực hiện thử nghiệm A / B, nhưng nó chỉ dựa trên dự đoán của họ vì chúng tôi không có yêu cầu như vậy.

Hầu hết thời gian chúng tôi đã tranh luận về những thứ không phải là một phần của nước rút cũng như không được đề cập trên các mockup. Các vấn đề được mô tả là "nếu tiếp thị trong tương lai sẽ ...", "nếu doanh nghiệp có thể muốn chúng tôi ...".

Tôi và chủ sở hữu sản phẩm là những lập trình viên giàu kinh nghiệm và chúng tôi đã thấy những loại vấn đề này trong quá khứ. Chúng tôi cố gắng tuân theo các nguyên tắc YAGNIKISS . Phần còn lại của đội là một ít kinh nghiệm và mặc dù họ biết những nguyên tắc này, họ dường như không hiểu chúng.

Chúng tôi đã đồng ý về giải pháp của họ vì toàn bộ đội ngũ quan trọng hơn đối với chúng tôi và chúng tôi không muốn đấu tranh vì điều gì đó không quan trọng. Nhưng tôi có sợ nếu điều đó có thể trở thành tiền lệ cho những cuộc tranh luận phức tạp hơn, phức tạp hơn không? Làm thế nào để đối phó với hành vi như vậy? Có điều gì mà tôi, với tư cách là trưởng nhóm, có thể làm tốt hơn không?

Điều đáng nói là sản phẩm này là một MVP giai đoạn đầu.


11
I'm afraid if such thing can become a precedence for upcoming, more complicated debates?- Điều đó cũng vi phạm YAGNI: lo lắng về một tương lai có thể không xảy ra. Nếu bạn sẽ đứng vững, bạn nên làm như vậy.
Robert Harvey

@gnat: Điều này dường như không phải là về những hạn chế về thời gian.
Robert Harvey

Là tuân thủ HAL không phải tuân theo YAGNI?
Matthew

@Matthew toàn bộ sự việc diễn ra trong một tuần và tôi cũng đã chuẩn bị một nguyên mẫu khác bằng cách sử dụng JSON đơn giản để loại bỏ HAL, nhưng nó cũng bị từ chối vì được coi là "không đủ linh hoạt". Nhóm đã sửa đổi nó và phiên bản sửa đổi đó cuối cùng đã được sử dụng. HAL hoạt động với chúng tôi như một tiêu chuẩn, một bộ hướng dẫn và tôi dễ dàng thực thi cấu trúc thống nhất trên tất cả các điểm cuối. API trước đó không sử dụng bất kỳ tiêu chuẩn nào và nó không kết thúc tốt.
Jacek Kobus

5
Tính linh hoạt tăng thêm độ phức tạp. Miễn là đội hiểu được điều đó, người ta có thể tiến lên.
Jon Raynor

Câu trả lời:


10

Tôi cảm thấy nỗi đau của bạn, đã ở đó. IMHO những loại vấn đề này là do thực tế bạn có một nhóm 8 người, vốn đã quá lớn để cho phép bạn luôn đưa ra các quyết định chiến lược tốt nhất.

Trong một nhóm có quy mô từ 8 cơ hội trở lên rất cao, số lượng lập trình viên tầm thường cao hơn số lượng người có kinh nghiệm. Điều đó thường sẽ dẫn đến các tình huống trong đó các quyết định tốt hơn được đưa ra bởi những người tầm thường. Điều đó không có vẻ thỏa đáng, đặc biệt là khi bạn (hoặc nghĩ rằng bạn là) một trong những người có kinh nghiệm hơn, nhưng ít nhất điều tương tự thường đúng với những quyết định thực sự tồi tệ.

Thực tế là, bạn không thể làm gì nhiều với điều đó miễn là nhóm không thay đổi , ít nhất là nếu mọi thứ sẽ được dân chủ, thì cũng vậy

  • học cách sống với nó
  • làm việc với nhóm trong một hoặc hai năm, chia sẻ chuyên môn của riêng bạn và hy vọng họ học được giá trị của YAGNI và KISS theo thời gian
  • làm việc dựa trên kỹ năng "bán" thiết kế hoặc quyết định chiến lược của riêng bạn cho nhóm
  • cố gắng chuyển sang một nhóm khác (có thể nhỏ hơn) trong đó trình độ chuyên môn của bạn gần với mức trung bình của toàn đội

Tôi nghĩ rằng cách duy nhất để tìm hiểu và hiểu giá trị thực của cách tiếp cận tối giản và YAGNI là tận mắt thực hiện một số kinh nghiệm. Ví dụ, bằng cách tham gia vào việc duy trì một hệ thống kế thừa với rất nhiều dự đoán "nếu như" sai, các quyết định thiết kế sai được thúc đẩy bởi các đối số "chỉ trong trường hợp" hoặc chứa rất nhiều mã khung quá mức thực sự không cần thiết. Nhưng đó là không có gì bạn có thể dạy các thành viên trong nhóm của bạn trong hai ngày, một số kinh nghiệm mọi người phải tự làm.


5
Hầu hết mọi người phải chạm vào bếp để học nó nóng và không chạm vào nó. Phần mềm là nhiều như nhau. ++
RubberDuck

2
Giữ một nhật ký / nhật ký dự án là chìa khóa cho loại điều này. Một khi bạn đã ghi lại các cuộc thảo luận khác nhau đã diễn ra, chúng sẽ cụ thể hơn nhiều đến những hồi ức của mọi người về những cuộc trò chuyện nhiều tháng hoặc nhiều năm sau đó. Có một câu hỏi hay về thực hành ở đây .
Robbie Dee

@RobbieDee: chắc chắn, nếu nó giúp nhóm tìm hiểu về YAGNI và KISS.
Doc Brown

3
Viên đạn thứ 3 (làm việc dựa trên kỹ năng của chính bạn trong việc "bán" một thiết kế) không được chú ý đầy đủ. Đó là lý do tại sao các nhà phát triển vẫn cần phải có (hoặc làm việc) các kỹ năng giao tiếp tốt.
Randall Stewart

@RandallStewart: hoàn toàn. Nhưng ngay cả với những kỹ năng giao tiếp tốt nhất, khó có thể bán YAGNI cho những người chưa tự mình tạo ra một số kinh nghiệm hoặc nhầm lẫn nó với "nhanh và bẩn", hoặc được giáo dục rằng "trừu tượng là (luôn luôn) tốt" và vì vậy hãy thử thay vì những thứ trừu tượng vì mục đích trừu tượng thay vì mục đích đơn giản hóa. Giao tiếp cần hai mặt - một người có thể giải thích mọi thứ tốt, và một người sẵn sàng lắng nghe và thấu hiểu.
Doc Brown

8

Khả năng tương thích là một mối quan tâm chính đáng

Nếu một trong bảy nhà phát triển vượt trội bạn là kiến ​​trúc sư, thì anh ta có quyền giới thiệu NFR khi cần và một trong những NFR đó có thể là "khả năng tương thích", đặc biệt là khi bạn hỗ trợ một thành phần hệ thống từ xa có thể thưa thớt hơn lịch phát hành. Bạn không muốn người dùng phải cài đặt phiên bản mới của ứng dụng vì bạn không nghĩ trước.

Giống như các yêu cầu khác, bạn cần tiêu chí chấp nhận

Điều đó đang được nói, bất kỳ NFR nào cũng phải được ghi lại theo yêu cầu và phải có các tiêu chí chấp nhận được xác định . Ngoài ra, bạn phải đưa ra một phương tiện để thử nghiệm chúng . Đó là lý do tại sao YAGNI rất quan trọng-- bạn không muốn viết mã không thể được kiểm tra và nếu mục đích duy nhất của mã là hỗ trợ một tính năng mà không ai đang sử dụng thì rất khó để kiểm tra.

Nó không phải là một cuộc gọi phán xét

Tôi sẽ đề nghị bạn làm cho nhóm đồng ý về yêu cầu không được nói ra mà bạn dường như đã bỏ lỡ và viết nó ra. Khi bạn đã xác định một phương tiện thử nghiệm, việc triển khai của bạn sẽ thất bại ít nhất một thử nghiệm và do đó, đó không phải là vấn đề bỏ phiếu.


1
Trường hợp trong câu hỏi bạn đọc rằng nhóm của OP rời khỏi đường dẫn của YAGNI vì yêu cầu tương thích về phía trước?
Doc Brown

Khả năng tương thích chuyển tiếp là những gì Content-Typetiêu đề dành cho
Jack

2
Tôi sẵn sàng gọi nó là cái gì khác nếu bạn muốn, có thể mở rộng. Điểm giống nhau; nó vẫn là một NFR.
John Wu

1
Có hai cách để làm cho một hệ thống mở rộng. Cách một là cố gắng thấy trước nhiều thay đổi yêu cầu tiềm năng và làm cho mọi thứ có cấu hình nặng nề "chỉ trong trường hợp". Tôi chắc chắn rằng người ta có thể phát minh ra rất nhiều thử nghiệm chấp nhận cho loại mở rộng này. Hoặc, giữ mọi thứ đơn giản nhất có thể, vì vậy cơ sở mã vẫn nhỏ, dễ nắm bắt và các điểm mở rộng hoặc trừu tượng có thể được thêm vào sau khi chúng thực sự cần thiết. Cái sau là không có gì bạn có thể (hoặc cần) viết bài kiểm tra. Do đó, tôi không nghĩ rằng điều này có thể được giải quyết dễ dàng bằng cách "viết NFR không nói ra" ...
Doc Brown

... Vì vậy, đây là về cách giữ một nhóm các nhà phát triển có thể sáng tạo trở lại từ việc đưa ra các giả định về NFR và phát minh ra một số.
Doc Brown

3

Có vẻ như nhóm phát triển của bạn đang cố gắng tạo điều kiện cho nhóm sản phẩm bằng cách tạo một khung cho phép họ thực hiện các thử nghiệm nhanh, đó rõ ràng là điều mà nhóm sản phẩm thực sự muốn có. Cách tiếp cận của bạn giống như "nghĩa đen là cung cấp cho họ những gì họ yêu cầu và đừng nghĩ cho họ".

Nếu tôi là chủ sở hữu sản phẩm, tôi cá là tôi sẽ hạnh phúc hơn rất nhiều với đội ngũ phát triển thực hiện phương pháp đầu tiên so với phương pháp sau.


3
+1 dự đoán và lập kế hoạch cho sự thay đổi không giống như đi phi hành gia kiến ​​trúc đầy đủ và tạo ra một nền tảng bên trong . Một chút nền tảng ngay bây giờ có thể ngăn chặn rất nhiều công việc trong tương lai. Trong khi nhóm của OP có lẽ đang nghiêng một chút quá nhiều về hướng của các giả thuyết, một cách tiếp cận YAGNI cơ bản chắc chắn là không tối ưu.
amon

4
Nghe có vẻ như bạn sẽ vui vẻ hơn OP và mắc lỗi tương tự khi lập kế hoạch cho "điều gì sẽ xảy ra nếu tiếp thị trong tương lai sẽ .." so với các thành viên còn lại trong nhóm. Khi mọi người bắt đầu xây dựng các khung thay vì phần mềm ứng dụng khi nhiệm vụ là xây dựng phần mềm ứng dụng, họ hầu như luôn làm sai.
Doc Brown

@DocBrown Về mặt kỹ thuật tôi sẽ đồng ý. Tuy nhiên, trường hợp này dường như là về sự sẵn sàng tạo điều kiện so với yêu cầu tôn trọng cá nhân. Là "đúng" một mặt so với hữu ích hoặc mặt khác hữu ích. Những gì tôi đọc được giữa các dòng là OP đang mất dần vị thế và chọn cách khơi dậy cái tôi của mình bằng cách nhấn mạnh trải nghiệm của mình cho khán giả trực tuyến thay vì đóng góp trong một môi trường mà anh ta không cảm thấy thoải mái nữa. Động lực này là điển hình cho việc giới thiệu scrum.
Martin Maat

@MartinMaat Tôi hơi thất vọng vì họ không đồng ý với tôi. Tôi không hiểu tại sao nó lại xảy ra. Trong công việc hàng ngày tôi giúp họ đánh giá mã, v.v. Chúng tôi thường tranh luận nhưng tôi thích nó, vì kết quả cuối cùng tốt hơn; Tôi biết rằng họ tôn trọng ý kiến ​​của tôi; Tôi luôn cố gắng sử dụng các đối số hợp lệ hỗ trợ lý thuyết của tôi. Cuối cùng, họ chọn phương án tốt nhất và cũng chịu trách nhiệm về nó. Nhóm đã làm những gì đáng lẽ phải làm - họ đã giải quyết vấn đề. Đó là sai lầm của tôi và chủ sở hữu sản phẩm, rằng vấn đề này quá rộng và được mô tả kém ngay từ đầu.
Jacek Kobus

2

Chà, ý kiến ​​của tôi là dân chủ không hoạt động đúng - không phải trong hệ thống chính trị, cũng không phải trong một đội ngũ mà hầu hết các lập trình viên đều là thiếu niên hoặc tầm thường.

Lời nói của bạn, với tư cách là trưởng nhóm, và là một trong những người có kinh nghiệm nhất trong nhóm, nên có tác động cao hơn các thành viên còn lại trong nhóm. Nếu YAGNI quan trọng đối với bạn, thì bạn nên trình bày về nó. Thảo luận về nó, và cho họ thấy tại sao nó tốt.

Rốt cuộc, trách nhiệm của bạn cao hơn đối với người khác. Nó không chỉ để viết mã, mà còn để hướng dẫn mọi người.


3
Dân chủ có lẽ là nguyên nhân của vấn đề ở đây, nhưng không dân chủ là IMHO không có giải pháp, bởi vì nó có thể dễ dàng đưa ra những vấn đề lớn hơn những vấn đề được mô tả trong câu hỏi - nó thực sự có thể phá hỏng đội.
Doc Brown

@DocBrown Bạn chỉ mâu thuẫn với chính mình trong cùng một câu. IMO một số quyết định không phụ thuộc vào mọi người quyết định. Những gì OP giải thích là một trong số đó. Để trích dẫn Armstrong cho những người không sử dụng YAGNI: Bạn muốn có một quả chuối nhưng thứ bạn nhận được là một con khỉ đột cầm quả chuối và toàn bộ khu rừng
BЈовић

2
Không, đây không phải là một mâu thuẫn (có lẽ tôi đã không thể hiện rõ quan điểm của mình). Mọi thứ không phải lúc nào cũng là "đen trắng". Chỉ vì dân chủ không hoạt động tốt trong một số tình huống, không dân chủ không phải là một đảm bảo để cải thiện tình hình và làm cho mọi thứ tốt hơn. Nó thường không đơn giản.
Doc Brown

1
Với nền dân chủ, bạn không nhất thiết phải có được "quyền" mà bạn có được điều mà hầu hết mọi người đều đồng ý. Và điều này có thể là thiếu sót. Và thường thì điều "đúng" có vấn đề với sự chấp nhận của xã hội. YAGNI không nên là còng tay sẽ cản trở bạn giới thiệu các bản tóm tắt thích hợp cho phép bạn dễ dàng thêm "khỉ đột" hoặc "toàn bộ khu rừng" nếu cần.
oopexpert

@oopexpert Vấn đề là: bạn có thể cần chúng. YAGNI nói về việc chống lại kỹ thuật. Trừu tượng đúng là một chuyện, thêm những thứ mà bạn có thể không cần là những vấn đề khác nhau.
BЈовић

2

Nó nghĩ rằng có một chút nhầm lẫn về YAGNI.

Các nhà phát triển thường nghĩ rằng họ tuân theo YAGNI khi họ bỏ qua các tóm tắt sẽ giữ cho hệ thống "đóng để sửa đổi và mở để mở rộng".

Trừ khi bạn không "mở rộng" hệ thống với chức năng "rõ ràng" không được yêu cầu, bạn không làm việc với YAGNI. Giới thiệu trừu tượng trong đó việc mở rộng có thể xảy ra là "khả năng tương thích về phía trước" đã được đề cập.

Ý kiến ​​cá nhân của tôi là chỉ có kiến ​​thức sâu sắc về tên miền sẽ giúp đưa ra quyết định trừu tượng và vị trí của nó.


2

Rắc rối với YAGNI VÀ KISS là họ hoàn toàn chủ quan và mơ hồ.

json ?? YAGNI! chỉ cần gửi một chuỗi csv!

các đối tượng?? KISSTUPID !!! chỉ cần sử dụng gotos !!

Vai trò của 'Trưởng nhóm' không được xác định rõ, nhưng tôi sẽ đề nghị bạn tránh xa việc bày tỏ ý kiến ​​chủ quan về các lựa chọn kỹ thuật của nhóm. Ngay cả khi bạn cảm thấy họ sai. Bám sát một danh sách ngắn các yêu cầu được xác định rõ.

  • kiểm tra đơn vị cho mã
  • kiểm tra tích hợp cho apis
  • kiểm tra giao diện người dùng tự động cho sản phẩm cuối cùng
  • yêu cầu hiệu suất và nhân rộng

nếu nhóm có thể đạt được các bài kiểm tra cho tất cả các yêu cầu kinh doanh và hiệu suất cơ bản ở quy mô yêu cầu kỹ thuật, bạn có một sản phẩm hoạt động.

Sau đó, nó chỉ đẩy để làm như vậy nhưng nhanh hơn


1

Mọi người trong nhóm phải đồng ý về định nghĩa hoàn thành . Nếu không có điều này, bạn sẽ có xu hướng leo trèo phạm vi, quan điểm và sự khốn của các yêu cầu cốt lõi.

Bất cứ điều gì được chuyển qua và trên này phải nằm trong hồ sơ tồn đọng, bản thân nó cũng sẽ có định nghĩa riêng về việc thực hiện.

Đối với các ưu tiên, phương pháp MoSCoW luôn phục vụ chúng tôi tốt - YMMV.


1

Suy nghĩ đầu tiên của tôi về điều này là ... Tại sao nhóm quan tâm đến những thay đổi? Họ có hiểu biết lịch sử về Chủ sở hữu sản phẩm khiến họ cảm thấy cần phải xây dựng giải pháp đầu tiên để có thể cấu hình hơn một chút để cải tiến trong tương lai dễ dàng hơn không? Nếu giải pháp của bạn sẽ mất 2 ngày và 5 ngày của họ, vâng, nó dài hơn gấp đôi. Nhưng nếu việc thay đổi kế hoạch của bạn sẽ mất 2 ngày mỗi lần, nhưng việc tăng cường cho họ sẽ mất 1 ngày, kế hoạch của họ có vẻ hiệu quả hơn trong một chặng đường dài. Tôi không nghĩ rằng có một quyết định ĐÚNG hay SAU trong câu hỏi này. Nó phụ thuộc vào các yếu tố khác, IMHO. Tuy nhiên, bạn CÓ QUYỀN về suy nghĩ này nếu trên các giải pháp khác, họ nhân đôi LOE mà không có bất kỳ hướng dẫn trực tiếp nào để làm điều đó (một số bằng chứng cho thấy sự phức tạp bổ sung là cần thiết cho khả năng mở rộng, mạnh mẽ, v.v.). Đề nghị của tôi sẽ là đưa chủ sở hữu sản phẩm vào những cuộc trò chuyện này, bởi vì họ cần giúp đỡ trong việc ưu tiên. Nếu giải pháp của bạn là 5 điểm và hiện tại nó sẽ đáp ứng nhu cầu, nhưng những gì họ muốn làm sẽ yêu cầu 50 điểm và hai lần chạy nước rút trở lên, PO có thể nói "chờ đã, chúng tôi có kế hoạch phát hành ưu tiên cao cho MVP này và không thể dành 2 tuần để xây dựng chức năng không có trong lộ trình! "

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.