เรามีโครงการใหม่ที่เกิดขึ้นและในขณะที่นักพัฒนาได้ถูกแบ่งออกเป็นสองทีมทีม A และทีม B โครงการนี้มี 2 ส่วนซึ่งจำเป็นต้องมีการพัฒนาตลอดทั้งกองพัฒนา ตัวอย่างสแต็กของเราที่แสดงด้านล่างง่ายมาก:
แต่ละส่วนของโครงการต้องการการพัฒนาข้ามสแต็คทั้งหมดดังนั้นโดยทั่วไปฉันคาดหวังว่าแนวทางการพัฒนาสแต็คเต็มรูปแบบซึ่งเป็นวิธีที่เราแยกย่อยงานของเราภายในทีม B การออกแบบและการโต้ตอบระหว่างส่วนต่าง ๆ
อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันได้เรียนรู้ว่าทีม A ต้องการรับผิดชอบบางส่วนของสแต็กและพวกเขากำลังเสนอการแบ่งแยกระหว่างสองทีมที่ Data Abstraction Layer (และวางเนื้อหาใน Data layer) ถูกจัดการโดย ตัวเองโดยไม่มีการพัฒนาจากทีม B. การแบ่งจะดูคล้ายกับ:
สำหรับฉันแล้วมันรู้สึกไม่เป็นธรรมชาติมาก แต่ละทีมมีวัตถุประสงค์และระยะเวลาที่แตกต่างกันในการบรรลุเป้าหมายเหล่านี้ แต่ทีม B จะต้องพึ่งพาทีม A ในการใช้คุณสมบัติ วิธีแก้ปัญหาที่เสนอคืออินเตอร์เฟสทั่วไปถูกกำหนดไว้ล่วงหน้า (อาจมีระยะเวลา 2 ปีในโครงการเพื่อให้สามารถใช้งานได้จำนวนมาก) ทีม A จะพัฒนาบิตที่ต้องการให้กับอินเทอร์เฟซเหล่านี้ แต่เนิ่นๆแม้ว่าจะมีชุดเป้าหมายเป็นของตัวเองในขณะที่ทีม B จะเรียกสายทั้งหมดในระยะสั้นเพื่อให้พวกเขาสามารถดำเนินการต่อไปได้
ฉันมีความกังวลเกี่ยวกับวิธีการนี้เกี่ยวกับ:
- อินเทอร์เฟซอาจเปลี่ยนแปลงและทีม A อาจไม่มีแบนด์วิดท์หรือเวลาเพื่อรองรับความต้องการที่เปลี่ยนแปลง
- ข้อบกพร่องในรหัสของทีม A สามารถป้องกันไม่ให้ทีม B ดำเนินการต่อและอีกครั้งพวกเขาอาจไม่ได้รับความสำคัญในการแก้ไขปัญหาเหล่านี้เนื่องจากทีม A มีคิวจัดลำดับความสำคัญที่แตกต่างกัน
- การขาดความรู้กระจายไปทั่วทั้งทีม - ทีม B อาจไม่เข้าใจอย่างสมบูรณ์ว่าเกิดอะไรขึ้นภายใต้ประทุนและอาจตัดสินใจออกแบบที่ไม่ดีเพราะสิ่งนี้
มีคนแนะนำว่าหลาย บริษัท ในอุตสาหกรรมมีทีมย่อยและต้องสามารถจัดการเรื่องนี้ได้ จากความเข้าใจของฉันโดยทั่วไปแล้วทีมจะแยกตามที่ฉันคาดหวังไว้ตอนแรก (Full Stack) หรือโดยการแบ่งกองเทคโนโลยีดังนี้:
ดังนั้นฉันจึงสนใจที่จะรู้ว่าส่วนที่เหลือของอุตสาหกรรมกำลังทำอะไร แยกแนวตั้ง / แนวนอนได้มากที่สุดหรือไม่ การแบ่งในแนวทแยงทำให้รู้สึกหรือไม่? หากมีการแยกส่วนในแนวทแยงเกิดขึ้นข้อกังวลของฉันดูเหมือนจะใช้ได้และมีสิ่งใดที่ทีมขควรกังวลอีกหรือไม่ หากต้องการทราบว่าฉันอาจจะต้องรับผิดชอบต่อความสำเร็จหรือความล้มเหลวของทีมบี