Disclaimer:ฉันamสถาปนิกในสภาพแวดล้อมที่เปรียว แต่เป็นเฮลฟอนมอลท์เคลเดอร์กล่าวว่า "ไม่มีแผนต่อสู้ชีวิตอยู่ติดต่อกับศัตรู" กล่าวอีกนัยหนึ่งการปฏิบัติจริงหมายความว่าไม่สามารถทำตามตัวอักษรที่แน่นอนของแนวทางได้
คะแนนส่วนใหญ่ที่ยกมาข้างต้นเป็นไปตามที่ดีที่สุดที่ทีมสามารถทำได้ แต่หลักการที่ 1 (ทีมว่ารหัสระบบออกแบบระบบ) เป็นเรื่องยากที่จะปฏิบัติตามเมื่อทีมประกอบด้วยสิบ (หรือร้อย) ของนักพัฒนาแยกข้ามทวีปที่แตกต่างกันและโซนเวลา สิ่งนี้ไม่ได้เกี่ยวกับทักษะหรือทัศนคติของนักพัฒนาปัญหาด้านลอจิสติกส์ของพวกเขาทั้งหมดก็ปรากฏขึ้นเพื่อรวบรวมความต้องการจากลูกค้าและทำความเข้าใจกับระบบที่ซับซ้อนที่มีอยู่
ดังนั้นการออกแบบระบบทำได้อย่างไร? ใช้ UML หรือเปล่า หรือเอกสารที่กำหนดอินเทอร์เฟซและบล็อกหลัก อาจจะเป็นอย่างอื่น?
บ่อยครั้งที่สถาปนิกระบุส่วนประกอบหลักแล้วกำหนดอินเตอร์เฟซระหว่างพวกเขา (รวมทั้งความต้องการ nonfunctional เช่นการรักษาความปลอดภัยและความน่าเชื่อถือความเร็ว) และผู้แทนการออกแบบภายในของส่วนประกอบแต่ละทีม นี่คือการประนีประนอมที่ดีระหว่างการให้ทีมออกแบบองค์ประกอบของตนเองโดยไม่ต้องให้ทุกคนรู้ทุกอย่างเกี่ยวกับระบบ
ทุกองค์กรมีชุดมาตรฐานของตนเองสำหรับการออกแบบสถาปัตยกรรมและบางครั้งอาจแตกต่างกันไปในแต่ละโครงการ การออกแบบนี้ทำก่อนที่ทีมจะเริ่มเขียนโค้ดหรือเร็วที่สุดและมักจะมี (และไม่ใช่รายการที่สมบูรณ์):
- ข้อกำหนดที่ขยายเพิ่มและข้อกำหนดขอบเขต สิ่งเหล่านี้รวมถึงกรณีการใช้งานหรือเรื่องราวของผู้ใช้ที่เป็นไปตามข้อกำหนดทางธุรกิจระดับสูง โดยส่วนตัวฉันชอบใช้RFC 2119สำหรับความต้องการที่ไม่สามารถใช้งานได้ การออกแบบขึ้นอยู่กับและย้อนกลับไปที่เหล่านี้ แม้ว่ามันอาจจะไม่เหมาะกับคำจำกัดความทั่วไปของการออกแบบสิ่งเหล่านี้มักจะสำคัญพอ ๆ
- ภาพรวมประกอบด้วยเครือข่ายระดับสูงหรือแผนภาพส่วนประกอบและหน้าข้อความ นี่คือสำหรับกลุ่มเป้าหมายที่กว้างมากตั้งแต่ผู้บริหารระดับสูงไปจนถึงนักพัฒนาซอฟต์แวร์และฝ่ายควบคุมคุณภาพ สิ่งนี้ไม่ค่อยใช้ UML หรือเอกสารที่กำหนดเนื่องจากผู้ชมจำนวนมาก
- รายละเอียดสำหรับแต่ละองค์ประกอบมักมุ่งเน้นไปที่ส่วนต่อประสานหรือ API ระหว่างที่กล่าวถึงข้างต้น อินเทอร์เฟซอาจถูกระบุว่าเป็นลายเซ็นของวิธีการในภาษาเป้าหมายที่มีเงื่อนไขเบื้องต้นและรายละเอียด postcondition ส่วนประกอบอาจมีไดอะแกรมเครือข่ายเช่นการแสดงเลย์เอาต์ของ VM ในคลาวด์หรือศูนย์ข้อมูลและการเตรียมการด้านเครือข่าย ฐานข้อมูลเชิงสัมพันธ์มักจะมีไดอะแกรมความสัมพันธ์เอนทิตี
- รายการความเสี่ยงด้านสถาปัตยกรรมและการบรรเทาความเสี่ยงหากทราบ เช่นเดียวกับข้อกำหนดเหล่านี้แสดงให้เห็นถึงการตัดสินใจออกแบบและการแลกเปลี่ยน
กล่าวโดยสรุปการออกแบบระบบในกระบวนการที่คล่องตัวนั้นเหมือนกับระบบน้ำตกแบบดั้งเดิม อย่างไรก็ตามในสภาพแวดล้อมที่มีความคล่องตัวการออกแบบที่น้อยกว่าจะเกิดขึ้นในทันทีและมีการมอบหมายให้ทีมงานส่วนประกอบมากขึ้น กุญแจสำคัญคือการกำหนดว่าจะไปลึกแค่ไหนในตอนแรกซึ่งการตัดสินใจที่จะเลื่อนและระบุเมื่อการตัดสินใจจะต้องทำ การตัดสินใจที่ส่งผลกระทบต่อทีมพัฒนาหลายทีมควรดำเนินการก่อนหน้านี้โดยเฉพาะความยืดหยุ่นและความปลอดภัย การตัดสินใจเช่นเพิ่มภาษาเพิ่มเติมลงในผลิตภัณฑ์ที่เป็นสากลสามารถรอการตัดบัญชีได้จนถึงปลายเดือน
หลังจากการออกแบบเริ่มต้นแล้วสถาปนิกจะทำงานกับแต่ละทีมและตรวจสอบการออกแบบของพวกเขา หากจำเป็นต้องมีการเปลี่ยนแปลงการออกแบบหรือการออกแบบเพิ่มเติมสำหรับหน่วยงาน (เช่นการต่อสู้แบบกระทุ้ง) สถาปนิกมีเป้าหมายที่จะให้มันพร้อมใช้งานในเวลาที่หน่วยงานเริ่มทำงาน สถาปนิกยังรับผิดชอบในการสื่อสารการเปลี่ยนแปลงใด ๆ กับทีมหรือผู้มีส่วนได้เสียที่ได้รับผลกระทบ