เปรียว - เราทำผิดอะไร


22

ฉันเป็นผู้พัฒนาทีมเปรียวและเราพยายามใช้การต่อสู้

ดังนั้นฉันจะทำให้ปัญหาสมมุติที่นี่เพื่อแสดงสถานการณ์

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

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

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

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

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

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


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

วิธีการที่จะเอาชนะในเปรียว ผู้คนเข้าใจการเพิ่มขึ้นเมื่อแตะเทปเป็ดแล้วแก้ไข
Gabriel Slomka

7
"ผู้คนเข้าใจการเพิ่มขึ้นเมื่อแตะเทปแล้วแก้ไข" - นั่นไม่ใช่การต่อสู้อย่างแน่นอน ถ้า "คน" คิดแบบนั้นพวกเขาเข้าใจผิด
ไบรอัน Oakley

9
หากต้องการอ้างอิง Eric Lippert: หากคุณขุดตัวเองลงในหลุมสิ่งแรกที่ต้องออกไปคือหยุดขุด
Doc Brown

5
ทีมของคุณทำตาม "กฎลูกเสือ" (ออกจากสถานที่อยู่เสมอในสถานะที่ดีขึ้นกว่าตอนที่คุณเข้ามา) หรือไม่? เริ่มต้นด้วยสิ่งนั้น ยิ่งไปกว่านั้น codereviews การทดสอบการเขียนและการปรับโครงสร้างปกติก็เป็นเทคนิคที่มีประโยชน์เช่นกัน
Doc Brown

คำตอบ:


56

สิ่งนี้ไม่เกี่ยวกับ Agile หรือ Scrum

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

ขั้นตอนแรกในการกู้คืนคือการรับรู้ปัญหาและหยุดทำให้แย่ลง

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

ในการทำความสะอาดปัญหาที่มีอยู่ดูคำตอบที่ยอดเยี่ยมสำหรับฉันได้รับรหัสปาเก็ตตี้ 200K - ตอนนี้คืออะไร


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

1
คำตอบก็แค่นี้ ใส่ดีและแม่นยำมาก SCRUM เป็นเพียงวิธีการทำงานถ้าคุณตัดสินใจที่จะทำงานกับเทปพันสายไฟแทนเทปตกแต่งนั่นคือสิ่งที่คุณต้องการ
coteyr

คุณได้รับสิ่งที่คุณจูงใจ หากคุณทำให้ผู้คนตกอยู่ภายใต้แรงกดดันในวันสุดท้าย หนี้เทคจึงสะสม
Michael B

22

สิ่งที่คุณมีคือสิ่งที่ Martin Fowler เรียกว่า "flacid scrum"

หากคุณอ่านหลักการทั้ง12อย่างถูกต้องหลังประกาศของ Agileคุณจะพบว่าคุณล้มเหลวในที่สุด

ส่งมอบซอฟต์แวร์ที่ใช้งานได้บ่อยๆจากสองถึงสามสัปดาห์จนถึงสองถึงสามเดือนโดยมีช่วงเวลาที่สั้นกว่า

คุณสามารถบอกได้ว่าคุณมอบซอฟต์แวร์ที่ใช้งานได้จริงหรือไม่ หรือเพียงแค่ซอฟต์แวร์ที่แทบจะไม่ทำงาน

กระบวนการที่คล่องตัวส่งเสริมการพัฒนาที่ยั่งยืน สปอนเซอร์นักพัฒนาและผู้ใช้ควรจะสามารถรักษาอัตราการคงที่อย่างต่อเนื่อง

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

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

หลักการสำคัญอย่างแท้จริง ฉันเชื่อว่าควรใส่ตัวอักษรสีแดงจำนวนมากในหน้า ที่นี่คุณล้มเหลวมากที่สุด

ในช่วงเวลาปกติทีมสะท้อนให้เห็นถึงวิธีการที่จะมีประสิทธิภาพมากขึ้นจากนั้นปรับแต่งและปรับพฤติกรรมตาม

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

จากความคิดเห็นของคุณ

วิธีการที่จะรู้ว่าในเปรียว?

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


6
"บางคนอาจบอกว่าสrum ... ง่ายเกินไปที่จะเข้าถึงสถานการณ์ที่แน่นอนของคุณ" . ฉันไม่คิดว่ามันเป็นเรื่องจริงเลย การทะเลาะกันอย่างไม่ถูกต้องอาจนำไปสู่สถานการณ์ที่แน่นอน แต่การทะเลาะกันนั้นไม่สนับสนุนวิธีการแก้ปัญหาที่ถูกที่สุดยกเว้นว่าเป็นสิ่งที่ลูกค้าต้องการ
ไบรอัน Oakley

1
@BryanOakley สิ่งที่ฉันต้องการจะพูดคือถ้ากระบวนการไม่ได้กำหนดให้ X แล้วคนจะไม่ทำ X และ Scrum ไม่ได้กำหนดแนวทางปฏิบัติใด ๆ ที่จะช่วยลดหนี้ทางเทคนิค ค่อนข้างตรงกันข้ามราวกับว่างานที่จะทำเท่านั้นที่ถูกกำหนดโดย PO ดังนั้นจะไม่มีการลบหนี้ทางเทคนิค เนื่องจาก PO ไม่มีเหตุผลที่จะสนใจ หนี้ทางเทคนิคเป็นความรับผิดชอบของทีมเท่านั้น
ร่าเริง

2
"การต่อสู้ไม่ได้กำหนดแนวทางปฏิบัติใด ๆ ที่จะลดหนี้ทางเทคนิค" - และไม่กำหนดแนวทางปฏิบัติใด ๆ ที่เพิ่มหนี้ทางเทคนิค
ไบรอัน Oakley

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

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

9

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

มีสองด้านแยกจากสิ่งที่คุณอธิบาย:

  • ขาดความเข้าใจ / วิสัยทัศน์ร่วมกันดังนั้นจึงไม่มีประสิทธิภาพ
  • วิธีวัดความสำเร็จ / ความก้าวหน้าและต้นทุนทั้งหมด

ลงเส้นทางที่ผิดหรือวิ่งเป็นวงกลม

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

  1. รวบรวมเคสการใช้งานระดับสูงความต้องการการพึ่งพาและข้อ จำกัด ที่คุณสามารถหาได้ ใส่ไว้ในวิกิเพื่อให้ผู้มีส่วนได้ส่วนเสียและผู้พัฒนาซอฟต์แวร์สามารถเห็นพวกเขาได้ เพิ่มไปยังพวกเขาเมื่อมีสิ่งใหม่เกิดขึ้น พูดคุยกับผู้ถือหุ้นและผู้ใช้ของคุณ ใช้สิ่งนี้เป็นรายการตรวจสอบในขณะที่กำลังพัฒนาเพื่อป้องกันการใช้สิ่งที่ไม่ได้มีส่วนร่วมในผลิตภัณฑ์ขั้นสุดท้ายหรือเป็นการแก้ปัญหา / แฮ็กที่แก้ปัญหาหนึ่งข้อ แต่ทำให้เกิดปัญหาใหม่สามรายการ
  2. กำหนดแนวความคิดระดับสูง ฉันไม่ได้พูดเกี่ยวกับการออกแบบส่วนต่อประสานหรือชั้นเรียน แต่ให้ร่างคร่าวๆโดเมนปัญหา องค์ประกอบหลักกลไกและการมีปฏิสัมพันธ์ในการแก้ปัญหาขั้นสุดท้ายคืออะไร? ในกรณีของคุณควรทำให้ชัดเจนเมื่อใช้ jquery-workaround ช่วยเป็นขั้นตอนกลางและเมื่อมันทำให้งานเพิ่มเติมเท่านั้น
  3. ตรวจสอบแนวคิดของคุณโดยใช้รายการที่คุณรวบรวม มีปัญหาอะไรที่ชัดเจนหรือไม่ มันสมเหตุสมผลหรือไม่ มีวิธีที่มีประสิทธิภาพมากกว่าในการบรรลุมูลค่าผู้ใช้เดียวกันโดยไม่ก่อให้เกิดหนี้สินด้านเทคโนโลยีเป็นเวลานานหรือไม่?

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

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

การวัดความสำเร็จ

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

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

คำแนะนำของฉันที่นี่คือ:

  1. เก็บทุกอย่างแม้กระทั่งข้อบกพร่องเล็ก ๆ เช่นตั๋วในระบบตั๋วของคุณ ตัดสินใจอย่างแข็งขันว่าอะไรอยู่ในขอบเขตของโครงการและไม่ทำอะไร สร้างเหตุการณ์สำคัญหรืออื่น ๆ กรองงานในมือของคุณเพื่อให้คุณมีรายการ "สมบูรณ์" ของทุกสิ่งที่ยังคงต้องทำ
  2. มีลำดับความสำคัญที่เข้มงวดและชัดเจนจุดตัดซึ่งโครงการสามารถพิจารณาความสำเร็จ ผลิตภัณฑ์ขั้นสุดท้ายมีความเสถียร / คุณภาพ / รหัสในระดับใด พยายามใช้จ่ายทุกวันในการทำงานให้ดีที่สุดเท่าที่จะทำได้โดยเลือกจากด้านบน เมื่อทำงานกับตั๋วหนึ่งใบให้ลองแก้ปัญหาให้เสร็จโดยไม่ต้องแนะนำตั๋วใหม่ (เว้นแต่ว่าจะเหมาะสมกับการโพสต์ชุดย่อยเนื่องจากมีลำดับความสำคัญต่ำกว่า) ความมุ่งมั่นทุกครั้งควรนำคุณไปสู่เป้าหมายสุดท้ายของคุณไม่ใช่ไปด้านข้างหรือข้างหลัง แต่ให้เน้นอีกครั้ง: บางครั้งการแฮ็คที่สร้างงานเพิ่มเติมในภายหลังอาจยังคงเป็นผลบวกต่อโครงการ!
  3. ใช้ PO / ผู้ใช้ของคุณที่จะคิดออกค่าผู้ใช้แต่ยังมีรูป devs ของคุณออกค่าใช้จ่ายในเทคโนโลยี โดยทั่วไปผู้ที่ไม่ได้เป็น dev ไม่สามารถตัดสินได้ว่าต้นทุนระยะยาวที่แท้จริง (ไม่ใช่แค่ค่าใช้จ่ายในการติดตั้ง!) คืออะไรดังนั้นช่วยพวกเขา ระวังปัญหาเดือดกบ: มีปัญหาเล็ก ๆ น้อย ๆ จำนวนหนึ่งที่ไม่เกี่ยวข้องในช่วงเวลาหนึ่งอาจทำให้ทีมหยุดชะงัก พยายามหาปริมาณประสิทธิภาพของทีมของคุณ
  4. จับตามองเป้าหมาย / ค่าใช้จ่ายโดยรวม แทนที่จะคิดจากการวิ่งไปวิ่งค่อนข้างให้ความคิดของ "เราสามารถเป็นทีมทำทุกอย่างที่จำเป็นจนกว่าจะสิ้นสุดของโครงการ" Sprints เป็นเพียงวิธีที่จะทำลายสิ่งต่าง ๆ และมีจุดตรวจ
  5. แทนที่จะต้องการแสดงบางสิ่งก่อนเวลาให้วางหลักสูตรของคุณบนเส้นทางที่เร็วที่สุดไปยังผลิตภัณฑ์ที่มีศักยภาพขั้นต่ำที่สามารถมอบให้แก่ผู้ใช้ อย่างไรก็ตามกลยุทธ์โดยรวมของคุณควรอนุญาตให้มีผลลัพธ์ที่ตรวจสอบได้ระหว่างนั้น

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

เคล็ดลับที่นี่คือการโต้เถียงกับค่าใช้จ่ายทั้งหมดของโครงการ: ตัวอย่างเช่น PO ผลักให้ใช้ทางลัดเพื่อกำหนดเวลาปริมาณงานที่ต้องทำหลังจากพิจารณาโครงการที่ทำ!

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

สรุป

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

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

หวังว่าจะช่วย!


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

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

7

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

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

หากพวกเขาบอกว่ามันคือสิ่งหลังสิ่งที่คุณทำผิดคือคุณไม่ได้ให้สิ่งที่ต้องการ

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


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

1
@Erik: ความคิดเห็นที่ยอดเยี่ยม นั่นเป็นสาเหตุที่ฉันเขียน _ "เพื่อทำความเข้าใจกับสิ่งที่พวกเขาต้องการ" มากกว่า "... พวกเขาต้องการ" อย่างไรก็ตามฉันเห็นได้ว่านั่นไม่ได้เน้นมาก ฉันจะเพิ่มความสำคัญและคำอธิบายเพิ่มเติม ขอบคุณสำหรับความคิดเห็น
ไบรอัน Oakley

5

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

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

ในการต่อสู้กับคุณ (ในฐานะนักพัฒนา) คุณจะต้องวางแผนของคุณเอง ไม่มีใครบอกให้คุณส่งมอบคุณสมบัติใน x วัน หากมีคนบอกให้คุณส่งมอบใน x วันคุณจะไม่ได้ต่อสู้

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


3

ลองตรวจสอบสิ่งที่คุณกำลังทำอยู่โดยแยก Agile สักครู่

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

สิ่งนี้เรียกว่า "การรับหนี้ทางเทคนิค" มาร์ตินฟาวเลอร์อธิบาย "Quadrant ของหนี้ทางเทคนิค" ในบล็อกของเขาตามแนวแกนทั้งสอง: "ประมาทกับความรอบคอบ" และ "จงใจกับความตั้งใจ"

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

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

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

สิ่งที่คุณทำผิดในระดับพื้นฐานมาก มันเป็นวิศวกรรมที่ไม่ดี !

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

สิ่งที่คุณควรทำคือการลดระดับของหนี้ที่ พูดคุยกับเจ้านายของคุณพูดคุยกับลูกค้าของคุณ คุณต้องทำงานกับการบำรุงรักษาเมื่อวานนี้


2

แค่หยุดใช้ Agile ...

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

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

สาเหตุที่อาจขาดคือ:

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

ทางออกที่ง่ายคือการทิ้งคำวิเศษทั้งหมดเหล่านี้และดูความเป็นจริงของสถานการณ์ซึ่งสามารถสรุปได้ดังนี้:

  1. สถานะของรหัสนั้นขัดขวางความสามารถของทีมในการส่งมอบตรงเวลาและปราศจากข้อผิดพลาด
  2. ยิ่งเราเพิ่มคุณสมบัติมากเท่าไหร่มันก็ยิ่งแย่ลงเท่านั้น
  3. ดังนั้นจึงเหมาะสมที่จะหยุดชั่วคราวประเมินใหม่และออกแบบชิ้นส่วน (อาจรุนแรง)

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

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

  1. Deathmarching devs ของคุณถึงกำหนดเวลา
  2. การระบุว่า devs อาจบันทึกเวลาเทียบกับตั๋วเท่านั้นโดยไม่ต้องมีตั๋วสำหรับ "การคิดการรวมและการปรับโครงสร้างคุณภาพ" และการเผื่อเวลาเผื่อแผ่สำหรับคนเหล่านั้น
  3. ไม่ให้บุคคลใดเป็นเจ้าของสถาปัตยกรรมนานพอที่จะจัดการกับมันได้
  4. ไม่อนุญาตให้บุคคลนั้นทำการเปลี่ยนแปลงที่พวกเขาคิดว่าจำเป็น

เมื่อมองดูด้วยวิธีนี้มันง่ายที่จะดูว่าการตีความของเปรียว & การต่อสู้จะช่วยให้คุณเดินตามเส้นทางนี้เร็วขึ้นได้อย่างไร!

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

อีกวิธีคือการวางแผนการวิ่งเพื่อใช้ความสามารถของทีมเพียง 25-50% จากนั้น Devs จะบันทึกเวลาของพวกเขาในตั๋วจริง (บันทึกเวลาที่ควรใช้โดยไม่ต้องทำการเปลี่ยนโครงสร้างใหม่) และเวลาที่ทำการชำระใหม่ (ตั๋วใบใหญ่หนึ่งใบสำหรับสัปดาห์ไม่มีการอนุมัติลูปเพียงการสนทนาระหว่าง devs เท่านั้น) หากไม่มีการปรับโครงสร้างใหม่คุณสามารถดึงตั๋วจากการวิ่งสัปดาห์ถัดไป คุณสามารถปรับตัวเลื่อนเปอร์เซ็นต์สำหรับสัปดาห์ที่จะมาถึงเมื่อรหัสอ้างอิงของโครงการดีขึ้น

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


-1

คุณไม่ได้ทำอะไรผิด วิธีการแบบนี้ได้รับการออกแบบมาเพื่อส่งมอบคุณสมบัติตามความต้องการและเร็วที่สุด

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

ตัวอย่างเช่นคุณอาจมีข้อกำหนดที่ไม่สามารถใช้งานได้:

"คุณสมบัติใหม่ทั้งหมดจะต้องเขียนในการตอบสนอง"

และ

"การเรียกแบบอะซิงโครนัสทั้งหมดต้องใช้สปินเนอร์การโหลดและการจัดการข้อผิดพลาด"

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


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

ขออภัยฉันเดาว่ามันเกี่ยวกับการส่งมอบคุณสมบัติผ่านการออกแบบและล่าช้า?
Ewan

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

2
หากคุณจะให้อภัยฉันวิจารณ์คุณดูเหมือนจะมีความคิดที่มั่นคงเกี่ยวกับการต่อสู้คืออะไร แต่ถ้าฉันตรวจสอบคำแนะนำและคำแถลง 'ทางการ' อื่น ๆ ในวันนี้ทุกอย่างดูน่าสะใจมาก ฉันคิดว่าคุณคงยากที่จะหาคำแถลงที่ชัดเจนในเรื่องนี้
Ewan

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