คุณอธิบายถึงทีม“ ว่องไว” ที่พวกเขายังต้องวางแผนซอฟต์แวร์ที่เขียนอยู่ได้อย่างไร


50

ในที่ทำงานสัปดาห์นี้ฉันรู้สึกกระวนกระวายอีกครั้ง ด้วยวิธีการที่ได้รับมาตรฐาน TDD ความเป็นเจ้าของร่วมกันวิธีการพัฒนาแบบเฉพาะกิจที่ไม่เคยวางแผนอะไรเลยนอกจากเรื่องราวของผู้ใช้เพียงไม่กี่เรื่องบนการ์ดชิ้นเดียวด้วยการเคี้ยวเคี้ยวมากกว่าวาจาของเทคนิคการรวมกลุ่มของบุคคลที่สาม ความคิดหรือความขยันหมั่นเพียรและสถาปัตยกรรมที่เชื่อมโยงรหัสการผลิตทั้งหมดกับการทดสอบครั้งแรกที่เข้ามาในหัวของทุกคนในช่วงไม่กี่เดือนที่ผ่านมาเราถึงจุดสิ้นสุดของวงจรการปล่อยและแท้จริงและเห็นคุณสมบัติหลักภายนอกที่มองเห็นได้ ใช้บั๊กกี้กลายเป็นเขาวงกตที่ซับซ้อนและยืดหยุ่นได้อย่างสมบูรณ์

ในระหว่างกระบวนการนี้ "spikes" ได้ทำไปแล้ว แต่ไม่เคยมีการบันทึกและไม่ได้มีการออกแบบสถาปัตยกรรมเดียว (เคยไม่มี FS ดังนั้นนรกเอ๊ะถ้าคุณไม่รู้ว่าคุณกำลังพัฒนาอะไรคุณจะวางแผนหรือค้นคว้าได้อย่างไร ?) - โครงการส่งต่อจากคู่หนึ่งไปยังอีกคู่แต่ละคนเท่านั้นที่เคยมุ่งเน้นไปที่เรื่องราวของผู้ใช้เพียงครั้งเดียวและผลที่ได้ก็คือหลีกเลี่ยงไม่ได้

ในการแก้ไขปัญหานี้ฉันออกจากเรดาร์ไปน้ำตกที่น่ากลัววางแผนเขียนรหัสและโดยทั่วไปไม่ได้สลับคู่และพยายามให้มากที่สุดเท่าที่จะทำได้เพื่อทำงานคนเดียวโดยมุ่งเน้นไปที่สถาปัตยกรรมและข้อมูลจำเพาะมากกว่าการทดสอบหน่วย จะมาในภายหลังเมื่อทุกอย่างถูกตรึงไว้ ตอนนี้โค้ดดีขึ้นมากและสามารถใช้งานได้จริงยืดหยุ่นและรวดเร็ว คนบางคนดูเหมือนจะไม่พอใจฉันจริง ๆ ที่ทำสิ่งนี้และพยายามออกไปก่อวินาศกรรมความพยายามของฉัน (อาจไม่รู้ตัว) เพราะขัดกับกระบวนการอันศักดิ์สิทธิ์ของความคล่องตัว

ดังนั้นในฐานะนักพัฒนาคุณอธิบายให้ทีมทราบว่าไม่ใช่ "ไม่ว่องไว" ในการวางแผนงานของพวกเขาและคุณจะปรับการวางแผนให้เข้าสู่กระบวนการที่คล่องตัวได้อย่างไร (ฉันไม่ได้พูดเกี่ยวกับ IPM ฉันกำลังพูดถึงการนั่งลงกับปัญหาและร่างการออกแบบแบบ end-to-end ที่บอกว่าปัญหาควรได้รับการแก้ไขในรายละเอียดที่เพียงพอซึ่งใครก็ตามที่ทำงานเกี่ยวกับปัญหารู้ว่าอะไร สถาปัตยกรรมและรูปแบบที่ควรใช้และตำแหน่งที่รหัสใหม่ควรรวมเข้ากับรหัสที่มีอยู่)


26
ย่อหน้าแรกนั้นฟังดูโวยวายกับความว่องไว ส่วนที่เหลือยังคงฟังดูโผงผางเฉพาะกับส่วนที่เหลือของทีมของคุณ คุณอาจต้องการถอดความ

1
+1 ให้ความสนใจเป็นอย่างมากว่าผู้คนจะแก้ปัญหานี้อย่างไรในทางปฏิบัติที่ให้คุณได้ใช้ประโยชน์จากน้ำตกและความคล่องตัวที่ดีที่สุด โดยวิธีการ: เปรียวไม่เท่ากับ "ไม่มีการออกแบบ" แต่การออกแบบมีแนวโน้มที่จะตกเป็นเหยื่อรายแรกในวัฏจักรของการวิ่งอย่างไม่หยุดยั้ง ...
Marjan Venema

5
ในระดับหนึ่งฉันมีมันถึงคอด้วย "เปรียว" ในทุกเทิร์นว่องไวดูเหมือนว่าจะหยุดไม่ให้ใครเขียนโค้ดที่เหมาะสมและทุกอย่างเริ่มต้นด้วยสมมติฐานที่ว่องไวของ "เราไม่ได้ทำเอกสาร" ซึ่งเป็นข้อพิสูจน์ที่ว่า "เราไม่ได้วางแผน" ฉันไม่ต้องการที่จะเกลียดความคล่องแคล่ว แต่เท่าที่ฉันสามารถมองเห็นตราบใดที่มันกระตุ้นให้ผู้คนไม่ได้วางแผนซอฟต์แวร์ของพวกเขาแล้วมันก็เป็นสิ่งที่ดีที่สุดในการทำตัวให้เกิดประโยชน์และอันตรายที่สุด

9
@Marjan Venema - นั่นคือความกังวลของฉัน ฉันแน่ใจว่าเปรียวไม่ได้หมายถึง "ไม่มีการออกแบบ" เช่น "ไม่เพิ่มประสิทธิภาพก่อนเวลาอันควร" ไม่ได้หมายความว่า "อย่าเขียนโค้ดที่มีประสิทธิภาพ" แต่ดูเหมือนว่าจะเป็นการตีความตลาดมวลชนของมัน วิธีที่ว่องไวเน้นการสื่อสารเป็นสิ่งที่ยอดเยี่ยมและการเปลี่ยนแปลงที่สดชื่นจริงๆ แต่สำหรับฉันแล้วดูเหมือนว่าในโลกที่มีความคล่องตัวซอฟต์แวร์ตัวเองนั้นมีความสำคัญมากกว่าในเวลาต่อมา

9
เห็นได้ชัดว่าคุณหงุดหงิดกับการใช้หลักการเปรียว ๆ ที่ไม่ดี แต่นี่ดูเหมือนว่าจะเป็นคำพูดที่แฝงอยู่ในคำถาม เพื่อความชัดเจน: Agile ช่วย "ตอบสนองต่อการเปลี่ยนแปลงตามแผน" ซึ่งหมายความว่า "ในขณะที่มีค่าในรายการทางด้านขวาเราให้ความสำคัญกับรายการทางด้านซ้ายมากขึ้น" แน่นอนว่าเป็นไปได้ที่จะเห็นคุณค่าของการทำตามแผนน้อยเกินไปซึ่งน่าจะเป็นกรณีนี้
Rein Henrichs

คำตอบ:


51

ฉันคิดว่า (และฉันอาจจะออกไปข้างนอกที่นี่) ว่าทุกโครงการควรมีน้ำตกคลาสสิกเล็กน้อย: ขั้นตอนการวิเคราะห์และกำหนดคุณสมบัติเป็นสิ่งจำเป็น คุณต้องรู้ว่าคุณกำลังทำอะไรและคุณต้องมีมันเป็นลายลักษณ์อักษร การรับความต้องการในการเขียนเป็นเรื่องยากและใช้เวลานานและง่ายต่อการทำไม่ดี นั่นเป็นเหตุผลที่หลายคนข้ามมันไป - ข้อแก้ตัวใด ๆ ที่จะทำ: "โอ้เราคล่องแคล่วดังนั้นเราไม่จำเป็นต้องทำเช่นนั้น" กาลครั้งหนึ่งก่อนที่จะคล่องตัวก็คือ "โอ้ฉันฉลาดจริงๆและรู้วิธีแก้ปัญหานี้ดังนั้นเราจึงไม่จำเป็นต้องทำเช่นนั้น" คำพูดเปลี่ยนไปเล็กน้อย แต่เพลงก็เหมือนกัน

นี่เป็นเรื่องของวัวตัวจริงทั้งหมด: คุณต้องรู้ว่าคุณต้องทำอะไร - และสเปคคือวิธีการที่นักพัฒนาและลูกค้าสามารถสื่อสารสิ่งที่ต้องการ

เมื่อคุณรู้ว่าคุณต้องทำอะไร - ร่างสถาปัตยกรรม นี่คือส่วน "รับภาพใหญ่" ไม่มีการแก้ปัญหาเวทย์มนตร์ที่นี่ไม่มีใครถูกและไม่มีระเบียบวิธีที่จะช่วยคุณได้ สถาปัตยกรรมคือการสังเคราะห์วิธีการแก้ปัญหาและมาจากอัจฉริยะที่ได้รับแรงบันดาลใจบางส่วนและความรู้ที่ได้รับรางวัลบางส่วน

ในแต่ละขั้นตอนเหล่านี้จะมีการวนซ้ำ: คุณพบสิ่งที่ผิดหรือขาดหายไปและไปแก้ไข นั่นคือการดีบัก มันเพิ่งเสร็จสิ้นก่อนที่จะเขียนโค้ดใด ๆ

บางคนมองว่าขั้นตอนเหล่านี้น่าเบื่อหรือไม่จำเป็น อันที่จริงแล้วสองขั้นตอนเหล่านี้มีความสำคัญที่สุดในการแก้ปัญหาใด ๆ - ทำผิดและทุกอย่างที่ตามมาจะผิด ขั้นตอนเหล่านี้เป็นเหมือนรากฐานของสิ่งปลูกสร้าง: ทำความผิดและคุณมีหอเอนเมืองปิซา

เมื่อคุณมีสิ่งที่ (นั่นคือสเป็คของคุณ) และวิธี (นั่นคือสถาปัตยกรรม - ซึ่งเป็นการออกแบบระดับสูง) จากนั้นคุณมีงาน มักจะมากของพวกเขา

หยุดภารกิจตามที่คุณต้องการจัดสรรงานตามที่คุณต้องการ ใช้วิธีการใด ๆ ของสัปดาห์ที่คุณชอบหรือที่เหมาะกับคุณ และทำงานให้เสร็จโดยรู้ว่าคุณกำลังมุ่งหน้าไปที่ใดและต้องทำอะไรให้สำเร็จ

ระหว่างทางจะมีเส้นทางที่ผิดพลาดผิดพลาดปัญหาที่พบกับข้อมูลจำเพาะและสถาปัตยกรรม สิ่งนี้จะแจ้งให้ทราบเช่น: "การวางแผนทั้งหมดนั้นเสียเวลาแล้ว" ซึ่งยังเป็นวัว มันหมายถึงว่าคุณมีข้อผิดพลาดน้อยกว่าที่จะจัดการกับในภายหลัง ในขณะที่คุณพบปัญหากับสิ่งต่าง ๆ ในวันแรกระดับสูง FIX THEM

(และในประเด็นด้านข้างที่นี่: มีสิ่งล่อใจครั้งใหญ่ที่ฉันได้เห็นซ้ำแล้วซ้ำอีกเพื่อพยายามทำตามข้อมูลจำเพาะที่มีราคาแพงยากหรือเป็นไปไม่ได้แม้แต่น้อยการตอบสนองที่ถูกต้องคือการถามว่า: " ข้อมูลจำเพาะเสียหรือไม่ "เพราะหากปัญหาสามารถแยกออกได้อย่างรวดเร็วและประหยัดโดยการเปลี่ยนข้อมูลจำเพาะนั่นเป็นสิ่งที่คุณควรทำบางครั้งสิ่งนี้ใช้ได้กับลูกค้าบางครั้งก็ไม่ได้ แต่คุณจะไม่รู้ว่าคุณ ไม่ต้องถาม)

ในที่สุด - คุณต้องทดสอบ คุณสามารถใช้ TDD หรืออะไรก็ได้ที่คุณชอบ แต่นี่ไม่รับประกันว่าในที่สุดคุณก็ทำในสิ่งที่คุณบอกว่าจะทำ มันช่วยได้ แต่มันไม่รับประกัน ดังนั้นคุณต้องทำการทดสอบขั้นสุดท้าย นั่นเป็นเหตุผลว่าทำไมสิ่งต่าง ๆ เช่นการทวนสอบและการตรวจสอบความถูกต้องยังคงเป็นเรื่องใหญ่ในแนวทางการจัดการโครงการส่วนใหญ่นั่นคือการพัฒนาซอฟต์แวร์หรือการทำควาญ

สรุป: คุณต้องการทุกสิ่งที่น่าเบื่อไปข้างหน้า ใช้สิ่งต่าง ๆ เช่น Agile เป็นวิธีการจัดส่ง แต่คุณไม่สามารถกำจัดความคิดสมัยเก่าการระบุและการออกแบบสถาปัตยกรรม

[คุณคาดหวังอย่างจริงจังว่าจะสร้างอาคารสูง 25 ชั้นด้วยการจ้างแรงงาน 1,000 คนในสถานที่และบอกให้พวกเขาจัดตั้งทีมเพื่อทำงานสองสามอย่าง? ไม่มีแผน โดยไม่ต้องคำนวณโครงสร้าง ไม่มีการออกแบบหรือวิสัยทัศน์ว่าอาคารควรมีลักษณะอย่างไร และมีเพียงรู้ว่ามันเป็นโรงแรม ไม่ - ไม่คิดอย่างนั้น]


11
+1 +10 ถ้าทำได้ หากคุณไม่มีความคิดที่ดีเกี่ยวกับสิ่งที่คุณกำลังสร้างในที่สุด - ซึ่งสามารถมาจากงานออกแบบล่วงหน้าบางอย่างแม้ว่าคุณจะปรับเปลี่ยนการออกแบบในภายหลัง - จากนั้นกระบวนทัศน์การพัฒนาที่คุณกำลังติดตามคือ "โยน อึที่ผนังและดูว่าแท่งอะไร "
Ant

5
-1 ฉันไม่ชอบข้อกำหนดรายละเอียดเพราะคน / ลูกค้าเปลี่ยนใจตลอดเวลาซึ่งทำให้ข้อมูลจำเพาะและการออกแบบด้านหน้าไร้ประโยชน์ไม่ต้องพูดถึงสิ้นเปลือง ดังนั้นแทนที่จะเสียเวลา "การรวบรวมข้อกำหนด" และอะไรก็ตามคุณควรสร้างซอฟต์แวร์ที่ใช้งานได้ซึ่งคุณแสดงให้ลูกค้าเห็นโดยเร็วที่สุดเพื่อให้คุณได้รับข้อเสนอแนะที่แท้จริงสำหรับขั้นตอนต่อไป แทนที่จะคาดเดาและคาดเดา สำหรับ "ข้อมูลจำเพาะเป็นวิธีการสื่อสาร": ฉันชอบที่จะพูดคุยกับลูกค้าของฉันและทำงานซ้ำ ๆ แต่เดี๋ยวก่อนฉันคิดว่าเขาแต่ละคน
Martin Wickman

6
+1 +10 ถ้าฉันทำได้ +1 ฉันเป็นคนดูดทั้งหมดสำหรับซอฟต์แวร์สร้างตึกเปรียบเสมือนการสร้างอาคารเปรียบเทียบเพราะมันเป็นเพียงแค่ ใช่ซอฟต์แวร์ไม่ได้มีอยู่จริงได้ทำอย่างถูกต้องมันสามารถเป็นแบบแยกส่วนได้สูงและแยกได้ แต่การทำให้เป็นแบบแยกส่วนและแยกได้ยากมาก นั่นคือสิ่งที่ต้องใช้เวลาและการวางแผน ฉันได้ตระหนักว่ามีสองค่ายในด้านวิศวกรรมซอฟต์แวร์อยู่เสมอ: ผู้ที่คิดว่าการวางแผนเสียเวลาเปล่าและผู้ที่ไม่ทำ และคุณก็รู้ว่าฉันเองก็ตระหนักว่าผู้คนไม่เปลี่ยนค่าย ฉันทำงานในสภาพแวดล้อมที่วางแผนมาอย่างดีและ ...

6
ฉันเห็นด้วยกับคุณ แต่สิ่งที่คุณกำลังอธิบายคือความคล่องตัว Agile บอกว่า "ไม่มีการออกแบบที่ยิ่งใหญ่ขึ้นไปข้างหน้า" ไม่ใช่ "ไม่มีการออกแบบ" นี่เป็นการตอบสนองต่อโครงการมอนสเตอร์น้ำตกขนาดใหญ่ที่แข็งแกร่งในสมัยก่อน ไม่ใช่ข้ออ้างที่จะไม่ออกแบบและค้นหาสถาปัตยกรรมที่ดีสำหรับโค้ดของคุณ ประเด็นก็คืออย่าใช้เวลาหลายสัปดาห์หรือเป็นเดือนในการออกแบบทั้งหมดก่อนที่จะเริ่มเขียนโค้ดเพราะคุณออกแบบจะผิดและยิ่งคุณสังเกตเห็นและแก้ไขได้ดีเท่าไหร่ รับความคิดเห็นอย่างรวดเร็วทำซ้ำปรับปรุงและอื่น ๆ
sara

5
Kai - ฉันเห็นว่า Agile ถูกใช้เป็นข้อแก้ตัวในการทำแบบไม่มีข้อกำหนดไม่มีการวางแผนเพียงแค่ดำน้ำเข้าและนั่นก็ผิดธรรมดา
quick_now

36

ฉันยังคงประหลาดใจที่หลายคนคิดว่า TDD หมายถึงการเขียนบททดสอบก่อน ไม่มันแปลว่าการทดสอบที่คุณต้องการก่อนที่จะเขียนรหัส การทดสอบจริงอาจเป็นการทดสอบหน่วยการทดสอบการรวมการทดสอบแบบครบวงจรและการทดสอบประสิทธิภาพแน่นอน (คุณอาจจะไม่เขียนการทดสอบประสิทธิภาพก่อนรหัสทดสอบ แต่ไม่ได้หมายความว่าคุณไม่ควรเขียนเลย) ประเภทของการทดสอบที่ต้องการควรจะมองเห็นได้จากคำจำกัดความที่ทำสำหรับเรื่องราวของผู้ใช้ หากหนึ่งในเกณฑ์การยอมรับสำหรับเรื่องราวของผู้ใช้บอกว่าคุณสมบัตินั้นควรให้ผลลัพธ์ภายใน 500ms กับผู้ใช้ 50 คนพร้อมกันดังนั้นเรื่องราวของผู้ใช้จะไม่ถูกพิจารณาว่าสมบูรณ์จนกว่าคุณจะมีการทดสอบประสิทธิภาพซึ่งจะพิสูจน์ว่าเกณฑ์การยอมรับนี้เป็นที่พอใจ เมื่อคุณมีการทดสอบอัตโนมัติคุณสามารถตรวจสอบทุกวันว่ามันผ่านไปแล้วขณะที่คุณเพิ่มคุณสมบัติอื่น ๆ

ดูเหมือนว่าเกณฑ์การตอบรับของคุณไม่ได้กำหนดไว้อย่างถูกต้องและเนื่องจากคุณไม่สามารถทดสอบประสิทธิภาพของคุณได้ ยังคงสามารถเกิดขึ้นได้ว่าแอปพลิเคชันทำงานได้ไม่ดีเมื่อคุณปรับใช้กับสภาพแวดล้อมจริงและใช้งานภายใต้ภาระหนัก แต่ก็สามารถพิจารณาได้เสมอว่าเป็นความล้มเหลวของข้อกำหนด (หากความต้องการไม่ได้ถูกกำหนดไว้ รหัส) หรือทีมพัฒนา (ทดสอบไม่เพียงพอกับข้อกำหนดที่กำหนด)

อีกสิ่งที่น่าสนใจคือนักพัฒนาซอฟต์แวร์ในทีมของคุณมุ่งเน้นที่เรื่องราวของผู้ใช้คนเดียว Agile เป็นเรื่องเกี่ยวกับการสื่อสารดังนั้นนักพัฒนาควรสื่อสารสิ่งที่ผู้ใช้ต้องการและมีผลต่อส่วนที่เหลือของแอปพลิเคชั่นอย่างไร - ต้องมีการร่วมมือกัน การทดสอบควรครอบคลุมเช่นกันดังนั้นหากผู้พัฒนารายหนึ่งทำลายการทำงานที่จำเป็นสำหรับเรื่องราวของผู้ใช้คนอื่น ๆ ก็ควรจะปรากฏในการทดสอบอัตโนมัติ หากคุณยังรู้สึกว่าไม่เพียงพอหรือไม่สามารถใช้งานได้คุณสามารถแนะนำการประชุมสถาปัตยกรรมโดยที่ทั้งทีมให้ความร่วมมือและค้นพบสถาปัตยกรรมของแอปพลิเคชัน โดยปกติแล้วจะมีการประชุมสัปดาห์ละครั้ง

หลายสิ่งหลายอย่างจากกระบวนการน้ำตกจะถูกแทนที่ด้วยการสื่อสารและการทดสอบอัตโนมัติ ไม่มีใครบอกว่าคุณไม่สามารถเขียนเอกสารหรือการออกแบบระดับสูงได้! คุณสามารถและหลายทีมใช้ตัวอย่างเช่น Wiki สำหรับสิ่งนั้น


7
+1 คำตอบที่ดี เรื่องราวคือเป้าหมาย - เป็นส่วนหนึ่งของภูเขาน้ำแข็งผู้วางตำแหน่งสำหรับการสนทนาในอนาคตขั้นตอนแรกของการเดินทาง มันไม่ใช่การเดินทางทั้งหมด! คำอธิบายการทดสอบคือข้อกำหนดข้อกำหนดการใช้งานและเกณฑ์การยอมรับรวมกัน การออกแบบไม่ได้ละเว้นการออกแบบขอบเขต จำกัด เรื่องราวและการทดสอบ แต่ดำเนินการออกแบบมากที่สุดเท่าที่คุณจะต้อง ทุกคนกระโดดข้ามการออกแบบและอ้างว่าเป็นวิธีที่เปรียวอย่างใดอย่างหนึ่งไม่เข้าใจ (ไปอ่านหนังสือ XP อีกครั้ง) ไม่ต้องการที่จะ (cowbow เข้ารหัสยี-ลังเล!) หรือเป็นเพียงการขี้เกียจ และให้ชื่อเปรียว
Steven A. Lowe

16

[ผลิตภัณฑ์ของเรา] ช้าเกินกว่าจะใช้บั๊กกี้กลายเป็นเขาวงกตที่ซับซ้อนและยืดหยุ่นได้อย่างสมบูรณ์

นั่นไม่เกี่ยวกับความคล่องตัวมันเป็นสัญญาณของโปรแกรมเมอร์ที่ไม่ทำงานอย่างถูกต้อง

แนวคิดพื้นฐานของความคล่องตัวคือทีมมีการควบคุมกระบวนการอย่างสมบูรณ์ นั่นหมายความว่าพวกเขาจะต้องเห็นด้วยกับปริมาณของการวางแผนเอกสารการทดสอบและวิธีที่พวกเขาจัดการกับการปรับโครงสร้าง พลังทั้งหมดนั้นยอดเยี่ยม แต่ก็มาพร้อมกับความรับผิดชอบและนี่อาจเป็นสิ่งที่ทีมของคุณล้มเหลว พวกเขายอมรับอิสรภาพของพวกเขา แต่ละเลยความรับผิดชอบของพวกเขา

ในตอนท้ายมันเป็นเพียงเรื่องของการอธิบายเกี่ยวกับคุณภาพของรหัสและพยายามที่จะเห็นด้วยกับวิธีที่จะเพิ่มขึ้นและรักษามันไว้ ใช้การเขียนโปรแกรมแบบปกติจริง ๆ

เคล็ดลับสำหรับมืออาชีพ: ใช้ "การกำหนดเสร็จสิ้น" เพื่อบังคับใช้สิ่งนี้ ตรวจสอบให้แน่ใจว่าทุกคนเห็นด้วยกับมันและวางไว้ให้ทุกคนเห็น ใช้เป็นผู้รักษาประตูที่เข้มงวดในการตัดสินใจว่าเรื่องราวเสร็จสมบูรณ์หรือไม่ เป็นไปได้ที่จะเพิ่มข้อกำหนดที่ไม่ใช่หน้าที่ (เช่นประสิทธิภาพ) ลงในรายการนั้นด้วย


1
"พวกเขายอมรับอิสรภาพของพวกเขา แต่ก็เพิกเฉยต่อความรับผิดชอบของพวกเขา" อาจจะเป็นแบนเนอร์บนกำแพงที่ว่องไว "คุณยอมรับความรับผิดชอบของคุณพร้อมกับอิสรภาพของคุณหรือไม่"
Andy Dent

คำตอบที่ดีฉันขอแนะนำให้เพิ่มว่าเมื่อคุณใช้กระทรวงเป็นสัญญาในลักษณะนี้มันก็กลายเป็นศูนย์กลางในการหวนกลับ? กระทรวงนี้ช่วยหรือขัดขวางเราในการเพิ่มมูลค่าให้กับลูกค้าของเราอย่างไร
Graham Lee

11

ใช่. เพื่อนร่วมทีมของคุณเป็นคนงี่เง่า โครงการของคุณดูดเพราะเปรียว รู้สึกดีขึ้น? โอเคเราไปต่อกัน : P

ฉันคิดว่าคุณและทีมงานของคุณจะสามารถสื่อสารได้อย่างมีประสิทธิภาพมากขึ้นเกี่ยวกับสิ่งที่ผิดพลาดถ้าคุณจดจ่อกับชื่อของวิธีการทุน M ของคุณน้อยลงและเพิ่มเติมว่าทำไมซอฟต์แวร์ที่คุณเขียนนั้นช้าและบั๊ก อย่าใช้คำศัพท์AgileหรือWaterfallเลย มีการโหลดอารมณ์อย่างชัดเจนในสำนักงานของคุณ

บางครั้งเปรียวทำงานได้ คราวนี้มันไม่ได้ผลสำหรับทีมของคุณ บางคนจะบอกว่านั่นเป็นเพราะคุณทำผิด Agile ท้ายที่สุดแล้ว Agile ก็ใช้งานได้ดังนั้นถ้าคุณทำถูกต้องมันน่าจะใช้ได้ใช่มั้ย อะไรก็ตาม

ดูเหมือนว่าไม่มีใครเห็นด้วยกับความล้มเหลว แต่คุณจะไม่ชนะเพื่อนมีอิทธิพลต่อผู้คนหรือทำดีกว่าในครั้งต่อไปหากคุณตำหนิวิธีการ ซึ่งอาจมีส่วนเกี่ยวข้องกับสิ่งที่ผิดพลาดไปเล็กน้อย

ให้จดจ่อกับสาเหตุที่ตรงที่สุดของความล้มเหลวแทนและทำงานกับทีมเพื่อให้แน่ใจว่าพวกเขาจะไม่เกิดขึ้นอีก สิ่งนี้จะต้องใช้ทักษะของผู้คน

เมื่อพูดถึงทักษะของผู้คนคุณไม่ควรแปลกใจที่ทีมของคุณไม่ได้ชื่นชมที่คุณทำให้พวกเขาดูแย่โดยการทำงานทั้งหมดของพวกเขาและทำได้ดีกว่าที่พวกเขาทำ ด้วยการทำสิ่งนี้ภายใต้เรดาร์คุณอาจสร้างความเสียหายให้กับความสัมพันธ์คุณจะต้องสร้างใหม่เพื่อเป็นสมาชิกที่มีประสิทธิภาพของทีม

ฉันคิดว่าวิธีที่ดีที่สุดในการดูสถานการณ์เช่นนี้คือการพิจารณาถึงผลรวมระยะยาวของทีมโดยรวม คุณอาจจะมีการบันทึกสัปดาห์เวลานี้ แต่คุณอาจจะทำได้ดีกว่าในระยะยาวสำหรับ บริษัท ของคุณโดยการสร้างที่ดีกว่าทีม

ฉันบอกทุกสิ่งเหล่านี้กับคุณ แต่ฉันคิดว่าคุณน่าจะรู้จักพวกเขาส่วนใหญ่อยู่แล้วและสามารถอธิบายให้คนอื่นรู้ได้ถ้าคุณไม่ได้ใกล้เคียงกับสถานการณ์นี้


9

หากคุณต้องการเพิ่มข้อความพูดสั้น ๆ ในการสนทนาของคุณ Eisenhower มีข้อความที่ดี:

"แผนการไม่มีอะไรเลยการวางแผนเป็นทุกอย่าง"

http://www.brainyquote.com/quotes/quotes/d/dwightdei149111.html

เขาหมายความว่าคุณควรคาดหวังที่จะเปลี่ยนแผนของคุณและอย่าให้คุณค่ามากเกินไปในแผนตามที่มีอยู่ แต่ในขณะเดียวกันกระบวนการวางแผนจะเน้นพลังงานของคุณอย่างมาก คุณต้องวางแผนก่อนที่จะทดสอบและปรับแต่ง


9

+1 นี่คือคำอธิบายที่ดีที่สุดของความคล่องตัวขององค์กรที่ฉันได้อ่านเมื่อเร็ว ๆ นี้

ทุกคนที่ได้รับพร้อมกับความคล่องตัวชี้ให้เห็นว่ามันไม่ควรจะหมายถึงเรื่องนี้ แต่เมื่อทุกคนจมอยู่กับการวัดนี่คือสิ่งที่คุณได้รับจากทีมที่ไม่มีความหลงใหลในคุณภาพของผลิตภัณฑ์และหลงไหล ครอบคลุมการทดสอบเหนือสิ่งอื่นใดหรือเมื่อถึงกำหนดส่งมอบทุกสัปดาห์โดยไม่คำนึงถึงมุมที่พวกเขาวาดคนอื่น ๆ เข้ามาเพราะนั่นคือทั้งหมดที่ทำให้ระดับการจัดการเป็นรายสัปดาห์

ฉันไม่เคยเห็นสิ่งนี้มาแก้ไขด้วยอะไรที่น้อยกว่าองค์กรอีกครั้ง หากคุณเป็น บริษัท ระดับกลางที่ไม่มีสิ่งใดเป็นพิเศษในการดึงดูดผู้คนที่มีความหลงใหลในตัวคุณจริงๆแม้จะไม่สามารถแก้ไขได้เว้นแต่ว่าผู้บริหารคนต่อไปจะเปลี่ยนวิธีการในบางครั้ง

Agile ดูเหมือนว่าจะทำงานได้ดีในองค์กรที่ทีมงานดูแลเอาใจใส่เพียงพอที่จะสร้างผลิตภัณฑ์ที่ดีทั้งๆที่มีงานพิเศษที่ไม่ได้รับการรับรองที่จำเป็น มีประสิทธิภาพที่พวกเขาต้องดูแลพอที่จะทำให้ดีในเวลาของพวกเขาเองต่อสู้เพื่อการปรับปรุง (และเต็มใจที่จะทำการทดสอบซ้ำเวลาพิเศษในบางกรณีของ TDD)

เห็นได้ชัดว่าคุณสนใจเกี่ยวกับการจัดส่งผลิตภัณฑ์ที่ดีพวกเขาเห็นได้ชัดว่าต้องผ่านชุดของสคริปต์ที่มีสคริปต์และรับ paycheck เพื่อทำความสะอาดอย่างต่อเนื่อง

ฉันจะมองหาการจ้างงานที่น่ารำคาญน้อยกว่าที่อื่นไม่ว่าจะคล่องตัวหรือไม่

หากคุณถูกไฟไหม้อย่างว่องไวมีหลายแห่งที่ยังคงใช้วิธีการอื่นอยู่ เกือบทุกอย่างเกี่ยวกับการเสนอราคาหรือสัญญาเช่น


1
นั่นคือคำจำกัดความที่เลวร้ายที่สุดของความคล่องตัวที่ฉันอ่าน นักพัฒนาไม่จำเป็นต้องทำงานพิเศษและไม่ได้รับการตรวจสอบ นอกจากนี้ยังมีคนโง่เท่านั้นที่ทำงานในเวลาของตนเอง เวลาที่ใช้ในการทดสอบรหัสเป็นการลงทุนที่คุ้มค่า
BЈовић

ไม่สามารถตกลงกันได้มากขึ้นเปรียวเมื่อกลายเป็นสัตว์ร้ายที่มักจะกลายเป็นในระดับองค์กรของเทปสีแดงเป็นเปรียวที่เลวร้ายที่สุดที่เป็นไปได้ ในสภาพแวดล้อมสีเทปที่ไม่ใช่องค์กรอื่น ๆ ทีมจะทำสิ่งเหล่านั้นไม่ว่าจะเป็นเรื่องราวหรือก่อนที่จะเล่าเรื่อง เมื่อ Agile กลายเป็นตัวบ่งชี้ตัวชี้วัดขององค์กรที่มักจะมีความยืดหยุ่นเป็นสิ่งแรกที่จะไป
Bill

4

ฉันมักจะใช้ลูกผสม แผนโดยรวมคือน้ำตก แต่มีความคล่องตัวในการดำเนินการ

ฉันเดาว่าถ้าสถานการณ์เลวร้ายอย่างที่คุณพูดทีมของคุณไม่ได้ใช้ความคล่องแคล่วพวกเขาแค่ขี้เกียจหรือไม่มีวินัย Agile ไม่ได้เกี่ยวกับการไม่วางแผน แต่เป็นเรื่องเกี่ยวกับความยืดหยุ่นและความคล่องตัว


ฉันก็มักจะคิดเช่นกัน ฉันมั่นใจว่าความคล่องแคล่วที่แท้จริงไม่ได้เกี่ยวกับการไม่วางแผน แต่เป็นเพียงการตีความอย่างเดียว

มีโลกที่แตกต่างระหว่างทุน - "A" เปรียวกับตัวพิมพ์เล็ก - "a" เปรียว
Aaronaught

Pssst ... อย่าบอกคนที่คล่องแคล่วว่านั่นเป็นเพราะคนน้ำตกเกือบทั้งหมดทำเพราะมันได้ผล พวกเขายังเชื่อว่านักพัฒนาน้ำตกทั้งหมดจะสร้างเอกสารแบบเสาหินโดยไม่ต้องเขียนรหัสใด ๆ จนกว่าจะถึงขั้นตอนสุดท้ายและในแต่ละขั้นตอนทุกอย่างผิดเพราะไม่มีการใช้งาน
Dunk

4

เรามีปัญหาเดียวกันกับพนักงานบางคน

โดยพื้นฐาน "ฉันไม่รู้จนกว่าฉันจะเขียน" เป็นคำพูดที่ชื่นชอบ ดังนั้นเราจึงไปในทางตรงกันข้ามเราทำงานร่วมกับลูกค้าเพื่อกำหนดสิ่งที่ส่งมอบด้วยคะแนนออกจากระบบ สุดท้ายคือ "ตอนนี้เขียนรหัสเพื่อทำ X"

ถ้าเรามี "เขียนออกแบบ / ทดสอบ / วางแผน ฯลฯ " ใน sprint ที่ส่งได้เช่นเดียวกับ "ทำรหัสที่สนุกและน่าสนใจ" ส่วนแรกจะไม่เกิดขึ้น ...

แต่ถ้าฉันวาง "คุณจะไม่ทำอะไรสนุก ๆ และน่าสนใจจนกว่าคุณจะพูดว่าคุณจะสร้างอะไรและลูกค้าได้ลงชื่อออก"

  • ก่อนอื่นคุณต้องได้รับคำตอบที่ไม่พอใจและน้ำตาสองสามครั้งและฉันต้องทำสิ่งที่ต้องเติมลงในช่องว่างและพยายามมาก ...
  • จากนั้นคุณจะได้รับการรู้ทันยามเมื่อคุณถามพวกเขาว่า "แล้วกระบวนการเป็นอย่างไร" ซึ่งจะเป็นการดีกว่าถ้าได้ลองรุ่นแรกลงบนกระดาษ
  • จากนั้นคุณจะมีกรณีทดสอบที่นักพัฒนาสามารถมองเห็นได้และคุณสามารถชี้ไปที่ความคาดหวังของ "สิ่งที่ทำไปแล้ว"
  • จากนั้นลูกค้าลงชื่อเข้าใช้ในการพัฒนามีอัตราการปฏิเสธน้อยกว่า 80% ...
  • รวมทั้งคุณดูนักพัฒนาทั้งหมดที่เดินไปรอบ ๆ ถือเอกสารการออกแบบและพูดคุยกันผ่านการออกแบบ ... พวกเขาเริ่มได้รับจริงๆ
  • จากนั้นคุณจะหาวิธีที่จะทำให้แผนโครงการแตกเป็นชิ้นขนาดเล็กและทำกระบวนการให้สำเร็จ

ส่วนที่ว่องไวมาเมื่อลูกค้าเปลี่ยนจากแผนและคุณสามารถปรับตัวได้ภายใน 2 สัปดาห์ไม่ได้บินโดยกางเกงของคุณและทำให้มันเป็นไปตามทาง

ในกรณีของเรา "การออกแบบที่ยิ่งใหญ่" ถูกแบ่งออกเป็น 9 ขั้นตอน (การผลิตจริงออกมา) โดยมีค่าเฉลี่ย 5 ขั้นตอน นักออกแบบและนักพัฒนาก้าวตามกันนักออกแบบที่เป็น 1-3 ขั้นตอนก่อนนักพัฒนา ... ไกลเกินไปและการค้นพบในการพัฒนาทำลายการออกแบบมากเกินไปใกล้เกินไปและปรับแต่งเพื่อออกแบบต้นทุนให้มากที่สุด นำไปใช้แล้ว "set in stone" ในการพัฒนา แต่ละขั้นตอนย่อย 2-4 sprints มีค่าสำหรับนักพัฒนา 1 ราย

ในโครงการขนาดเล็กเรามีนักพัฒนารายเดียวกันทำการออกแบบก่อน> ลงชื่อออก> ใบแจ้งหนี้> พัฒนา> ลงชื่อออก> ใบแจ้งหนี้ ... ในรอบ

ปัญหาการตั้งชื่อการทดสอบ

การทดสอบมีหลายใบหน้าอย่างเป็นทางการมีประมาณ 7 ประเภทของการทดสอบแต่ละส่วนย่อย ... หนึ่งในภายหลังเหล่านี้คือ "เขียนการทดสอบหน่วยอัตโนมัติ"

มันเป็นชื่อที่ไม่ดีที่จะมี "การทดสอบการพัฒนาครั้งแรก" อย่างหมดจดเพราะนักพัฒนาเข้าใจเกี่ยวกับสิ่งที่ "การทดสอบ" หมายถึงในบริบทที่พวกเขาเห็นการทดสอบเช่นการเขียนรหัสจริงสำหรับการทดสอบกับอินเทอร์เฟซสำหรับ implemntation เมื่อมันไม่จริงเลย ... คุณสามารถทำสิ่งนี้เมื่อมันมาถึงการเขียนโค้ด แต่มัน "ตรวจสอบการออกแบบกับกรณีการใช้งานและเรื่องราวของผู้ใช้ก่อนที่จะเริ่มเขียนโค้ด" ... ทำอย่างถูกต้องสิ่งนี้จะลบหลาย ๆ ของปัญหาที่ค้นพบตามปกติในระหว่างการพัฒนาในขณะที่ยังอยู่ในรุ่น "กระดาษที่สามารถโยนทิ้ง" ที่ถูกกว่า


3

หนึ่งในองค์ประกอบสำคัญของ Agile คือแนวคิดของการปรับปรุงอย่างต่อเนื่องและความคิดที่ว่าทีมทั้งหมดเป็นเจ้าของโครงการ ดังนั้นวิธีการที่ถูกต้องคือการทบทวนปัญหากับทีมและให้ทีมตัดสินใจว่าจะแก้ไขอย่างไร

สมาชิกในทีมคนหนึ่งออกไปด้วยตนเองการทำตามหลักการทั้งหมดของ Agile และทำสิ่งต่าง ๆ ในแบบของเขาเองอาจส่งผลให้โค้ดมีขนาดเล็ก แต่ก็ไม่ได้ทำให้โครงการทั้งหมดก้าวหน้าไปในทางบวก


เสียงฉันต้องการความก้าวหน้าโครงการคือสิ่งที่มันไม่ทำ "การตรวจสอบกับทีม" ไม่ใช่วิธีการแก้ปัญหาจริง ๆ มันเป็นเพียงวิธีการเลื่อนการแก้ปัญหาและกระจายความรับผิดชอบ
Aaronaught

ทีมมีความรับผิดชอบต่อผลลัพธ์อยู่แล้ว สิ่งที่พวกเขาต้องการสำหรับใครบางคนที่จะพูดว่า "เรากำลังทำผิดเราจะเปลี่ยนวิธีการของเราได้อย่างไร" จากนั้นพวกเขาก็ซ่อมมัน
เดฟ

2
ฉันจะได้รับความรู้สึกว่าสิ่งนี้โดยเฉพาะอย่างยิ่งทีมต้องการคือสำหรับสมาชิกที่จะเรียนรู้วิธีการที่จะคิดว่าตัวเองแทนการสุ่มสี่สุ่มห้าทำตามขั้นตอนที่พวกเขาไม่เข้าใจ การพูดจะไม่สำเร็จถ้ามันเป็นห้องเสียงสะท้อนอยู่แล้ว
Aaronaught

2

วิธีหนึ่งในการทำให้พวกเขาทำงานอาจต้องทำ T-Map ที่ครอบคลุมการวิ่งย้อนกลับทั้งหมดของคุณ

T-แผนที่

แต่ละทีมมีเธรดแต่ละสปรินท์เป็นระยะเวลา ทุกอย่างเชื่อมโยงกัน (ซึ่งเป็นที่ที่ทีมของคุณดูเหมือนจะล้มลง) ตรึงไว้ที่ใดที่หนึ่งและรับแม่เหล็กเพื่อเป็นตัวแทนคู่ / ทีมย่อย พวกเขายังสามารถ 'แข่ง' แต่ทุกคนรู้ว่าพวกเขาอยู่ที่ไหนและทีมอื่นอยู่ที่ไหน วางการพึ่งพาที่นี่ถ้ามี

ประเด็นคือคุณถ่ายทอดกระบวนการทั้งหมด แต่ก็แยกย่อยเป็น sprints แม้ว่าจะมีเพียงการวิ่งครั้งแรกที่วางอยู่ที่นั่นและช่วงเวลาอื่น ๆ จะว่างเปล่านี่ควรเป็นแผนงานที่ยอดเยี่ยมในการทำโครงการให้เสร็จ


1

คุณมีสองปัญหา: มีรูปร่างไม่เพียงพอกับข้อกำหนดและสถาปัตยกรรมที่ไม่ดี

ความต้องการ

คุณต้องการทั้งเป้าหมายโดยรวมและแผนงานโดยละเอียดเกี่ยวกับการเดินทาง

ในโลกของน้ำตกเป้าหมายสุดท้ายคือข้อกำหนดการใช้งานและแผนงานของการเดินทางคือแผนโครงการ

ในโลกแห่งความคล่องตัววิธีหนึ่งคือการจับมันในเรื่องราวของผู้ใช้ที่ยิ่งใหญ่ จากนั้นแผนงานจะเป็นรายละเอียดเรื่องราวของผู้ใช้ที่ให้รายละเอียดเกี่ยวกับมหากาพย์

ฉันไม่เคยมีความสุขอย่างสมบูรณ์กับเรื่องราวนั้นเพราะเรื่องราวมหากาพย์ไม่ได้รวบรวมเนื้อสัตว์เพียงพอที่จะผ่านความคิดเต็มรูปแบบ ดังนั้นสิ่งที่ฉันมักจะใช้คือเอกสารความต้องการของระบบระดับสูงร่วมกับเรื่องราวของผู้ใช้ที่ยิ่งใหญ่หรือสอง หลังจากนั้นแผนงานจะเป็นรายละเอียดเรื่องราวของผู้ใช้

สิ่งที่ดีเกี่ยวกับการมีเอกสารข้อกำหนดของระบบก็คือสามารถดึงเอาเกณฑ์การยอมรับสำหรับเรื่องราวของผู้ใช้จำนวนมากออกมาได้

นึกถึงเอกสารข้อกำหนดของระบบระดับสูงในฐานะ "แผ่นงาน" ที่การตลาดอาจใช้เพื่อขายสินค้าให้กับลูกค้าที่มีความรู้ด้านเทคนิค

สถาปัตยกรรม

หนึ่งในสิ่งที่ "แผ่นงาน" มอบให้คุณคือมันทำให้ขอบเขตในระบบที่คุณกำลังออกแบบ ซึ่งจะช่วยให้คุณตัดสินใจอย่างชาญฉลาดเกี่ยวกับสถาปัตยกรรมที่จะใช้

หากทีมของคุณมีเอกสารดังกล่าวก่อนหน้านี้คุณจะไม่ต้องผ่านความเจ็บปวดจากการปรับโครงสร้างระบบใหม่ในภายหลัง


ที่จริงแล้วปัญหาที่สามที่คุณมีคือการสื่อสารไม่ดี การสื่อสารเป็นถนนสองทาง (หรือหลายทางระหว่างคนหลายคน) อย่างไรก็ตามนั่นเป็นเพียงมนุษย์ที่ล้มเหลวและใช้ความพยายามเหนือมนุษย์ (บางครั้ง) เพื่อให้ถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.