ฉันจะพยายามอธิบายบางแง่มุมที่ไม่ได้รับการตอบสนองโดยคำตอบอื่น ๆ และ IMO นั้นมีความสำคัญ
ปัญหาพื้นฐานคือ: นักพัฒนาบางคนได้รับแรงบันดาลใจจากความปิติของการทำงานที่ยากลำบากการคิดผ่านการออกแบบการคิดผ่านปัญหาที่อาจเกิดขึ้นจากนั้นจึงแก้ปัญหาทีละชิ้นโดยมีปฏิสัมพันธ์น้อยที่สุดกับผู้อื่น ช่วงเวลา. พวกเขามักจะทำงานให้เสร็จสมบูรณ์ในระดับสูงและในเวลาที่เหมาะสม; งานของพวกเขาบำรุงรักษาได้และเหมาะสมกับสถาปัตยกรรมโดยรวม
นักพัฒนาซอฟต์แวร์ประเภทนี้อาจพบว่าเป็นการยากที่จะปรับตัวให้เข้ากับสภาพแวดล้อมที่คล่องตัวและทัศนคติของพวกเขามักถูกมองว่า "ไม่เต็มใจที่จะเปลี่ยนแปลง" ซึ่งอาจเกี่ยวข้องกับอัตตาหรือล้าสมัย
สิ่งที่มักถูกมองข้ามคือเพื่อแก้ปัญหาที่ซับซ้อนเราต้องจัดการกับข้อมูลจำนวนมากและสิ่งนี้อาจจำเป็นต้องมีการวิเคราะห์คิดวิเคราะห์ลองร่างแก้ปัญหาทิ้งไปลองอีกครั้ง ปัญหาที่ซับซ้อนเช่นนี้อาจต้องใช้เวลาสองสามชั่วโมงในการทำงานที่มุ่งเน้นจนกว่าคุณจะมีวิธีการแก้ปัญหาเสร็จ
วิธีการหนึ่งคือผู้พัฒนาใช้ข้อมูลจำเพาะของปัญหาไปที่ห้องของเธอและกลับมาอีกสองหรือสามสัปดาห์ต่อมาด้วยวิธีแก้ปัญหา เมื่อใดก็ได้ (เมื่อจำเป็น) ผู้พัฒนาสามารถเริ่มต้นการโต้ตอบกับสมาชิกคนอื่น ๆ ของทีมหรือกับผู้มีส่วนได้เสีย (ถามคำถามในประเด็นเฉพาะ) แต่งานส่วนใหญ่จะทำโดยนักพัฒนาที่ได้รับมอบหมายงาน
เกิดอะไรขึ้นในสถานการณ์ที่คล่องตัว ทีมแบ่งปัญหาเป็นชิ้นเล็ก ๆ (เรื่องราวของผู้ใช้) หลังจากการวิเคราะห์อย่างรวดเร็ว (กรูมมิ่ง) ความหวังคือเรื่องราวของผู้ใช้มีความเป็นอิสระจากกัน แต่มักจะไม่ใช่ในกรณีนี้: เพื่อที่จะแยกแยะปัญหาที่ซับซ้อนเป็นกลุ่มอิสระที่แท้จริงคุณจะต้องมีความรู้ที่ปกติคุณจะได้รับหลังจากทำงานมาหลายวัน กล่าวอีกนัยหนึ่งถ้าคุณสามารถแยกแยะปัญหาที่ซับซ้อนออกเป็นส่วนเล็ก ๆ ได้นั่นหมายความว่าคุณได้แก้ปัญหาโดยทั่วไปแล้วและคุณเหลือความขยันเท่านั้น สำหรับปัญหาที่ต้องใช้บอกว่าการทำงานสามสัปดาห์อาจเป็นเช่นนี้ในช่วงสัปดาห์ที่สองไม่ใช่หลังจากกรูมมิ่งเสร็จสองสามชั่วโมงในช่วงเริ่มต้นของการวิ่ง
ดังนั้นหลังจากมีการวางแผนการวิ่งทีมจะทำงานกับปัญหาที่แตกต่างกันซึ่งอาจมีการพึ่งพาซึ่งกันและกัน สิ่งนี้สร้างค่าใช้จ่ายในการสื่อสารจำนวนมากซึ่งพยายามรวมโซลูชันที่แตกต่างกันซึ่งอาจดีเท่า ๆ กัน แต่ก็ดีแตกต่างจากกัน โดยทั่วไปแล้วงานทดลองและข้อผิดพลาดจะถูกกระจายไปทั่วสมาชิกในทีมที่เกี่ยวข้องด้วยค่าใช้จ่ายในการสื่อสารเพิ่มเติม ฉันคิดว่าปัญหาเหล่านี้แสดงให้เห็นได้อย่างดีในบทความนี้โดย Paul Graham โดยเฉพาะอย่างยิ่งในประเด็นที่ 7
แน่นอนการแบ่งปันงานระหว่างสมาชิกในทีมจะช่วยลดความเสี่ยงที่เกี่ยวข้องกับสมาชิกในทีมคนหนึ่งที่ออกจากโครงการ ในทางกลับกันความรู้เกี่ยวกับรหัสสามารถสื่อสารในรูปแบบอื่นเช่นการใช้รหัสรีวิวหรือการนำเสนอทางเทคนิคแก่เพื่อนร่วมงาน ในแง่นี้ฉันไม่คิดว่าจะมีกระสุนสีเงินใช้ได้กับทุกสถานการณ์: การเป็นเจ้าของรหัสที่ใช้ร่วมกันและการเขียนโปรแกรมคู่ไม่ใช่เพียงตัวเลือกเดียว
นอกจากนี้ "การส่งมอบฟังก์ชันการทำงานภายในช่วงเวลาที่สั้นลง" ส่งผลให้เกิดการหยุดชะงักของกระบวนการทำงาน สิ่งนี้อาจใช้ได้ถ้าฟังก์ชั่นการทำงานเป็น "เพิ่มปุ่มยกเลิกในหน้าเข้าสู่ระบบ" ซึ่งสามารถดำเนินการได้ในตอนท้ายของการวิ่ง แต่เมื่อคุณกำลังทำงานที่ซับซ้อนคุณไม่ต้องการให้เกิดการขัดจังหวะดังกล่าว: พยายามขับรถยนต์ให้เร็วที่สุดเท่าที่จะทำได้และหยุดทุก ๆ 5 นาทีเพื่อตรวจสอบว่าคุณได้รับ นี่จะทำให้คุณช้าลงเท่านั้น
แน่นอนว่าการมีจุดตรวจบ่อย ๆ จะทำให้โครงการคาดการณ์ได้มากขึ้น แต่ในบางกรณีการขัดจังหวะอาจทำให้หงุดหงิดมาก: ใคร ๆ ก็สามารถเพิ่มความเร็วได้ว่าถึงเวลาแล้วที่จะหยุดและนำเสนอบางสิ่ง
ดังนั้นฉันไม่คิดว่าทัศนคติที่อธิบายไว้ในคำถามเกี่ยวข้องกับอัตตาหรือการต่อต้านการเปลี่ยนแปลงเท่านั้น อาจเป็นไปได้ว่านักพัฒนาซอฟต์แวร์บางรายพิจารณาแนวทางในการแก้ปัญหาที่อธิบายไว้ข้างต้นมีประสิทธิภาพมากกว่าเพราะช่วยให้พวกเขามีความเข้าใจที่ดีขึ้นเกี่ยวกับปัญหาที่พวกเขากำลังแก้ไขและรหัสที่พวกเขาเขียน การบังคับให้นักพัฒนาซอฟต์แวร์เหล่านี้ทำงานในลักษณะที่แตกต่างกันอาจส่งผลให้ผลผลิตลดลง
นอกจากนี้ฉันไม่คิดว่าการที่สมาชิกบางคนทำงานเป็นทีมโดยแยกเฉพาะปัญหาที่ยากลำบากนั้นขัดแย้งกับค่าความคล่องตัว ท้ายที่สุดทีมควรจัดระเบียบตัวเองและใช้กระบวนการที่พบว่ามีประสิทธิภาพมากที่สุดในช่วงหลายปีที่ผ่านมา
แค่ 2 เซ็นต์ของฉัน
There’s a great story of a manager of a Coca-Cola plant whose numbers were far better than his peers. When asked what his “secret” was, he said simply that rather than take a best practice and modify it to meet what the plant did, he instead modified the plant to match the best practice.
คุณไม่กระฉับกระเฉงจนกว่าคุณจะเข้าใจว่าทำไมคุณถึงทำอย่างนั้น