Tuyên bố miễn trừ trách nhiệm: Tôi là một kiến trúc sư trong một môi trường nhanh nhẹn, nhưng, như Helmuth von Moltke, Elder nói, "Không có kế hoạch chiến đấu nào sống sót khi tiếp xúc với kẻ thù". Nói cách khác, thực tiễn có nghĩa là chữ cái chính xác của hướng dẫn không thể luôn luôn được tuân theo.
Hầu hết các điểm nêu trên được theo sau là tốt nhất nhóm có thể. Tuy nhiên, nguyên tắc 1 (Các nhóm mã hóa hệ thống thiết kế hệ thống) thực sự khó theo dõi khi nhóm bao gồm hàng chục (hoặc hàng trăm) nhà phát triển phân chia trên các lục địa và múi giờ khác nhau . Điều này không liên quan gì đến kỹ năng hoặc thái độ của các nhà phát triển, hơn nữa vấn đề hậu cần của tất cả họ đều có mặt để thu thập các yêu cầu từ khách hàng và hiểu các hệ thống phức tạp hiện có.
Vậy, thiết kế hệ thống được thực hiện như thế nào? Sử dụng UML? Hoặc một tài liệu xác định giao diện và các khối chính? Có thể là cái khác?
Thông thường, kiến trúc sư xác định các thành phần chính sau đó xác định các giao diện giữa chúng (bao gồm các yêu cầu không chức năng như bảo mật, tốc độ và độ tin cậy) và ủy thác thiết kế bên trong của các thành phần cho các nhóm riêng lẻ . Đây là một sự thỏa hiệp tốt giữa việc để các nhóm thiết kế các thành phần của riêng họ mà không yêu cầu mọi người biết mọi thứ về hệ thống.
Mỗi tổ chức có bộ tiêu chuẩn riêng cho thiết kế kiến trúc và điều này đôi khi thay đổi từ dự án này sang dự án khác trong tổ chức. Thiết kế này được thực hiện trước khi nhóm bắt đầu mã hóa hoặc càng sớm càng tốt và thường chứa (và không phải là một danh sách đầy đủ):
- Yêu cầu mở rộng và định nghĩa phạm vi. Chúng bao gồm các trường hợp sử dụng hoặc câu chuyện người dùng xác định các yêu cầu kinh doanh cấp cao hơn. Cá nhân tôi thích sử dụng RFC 2119 cho các yêu cầu phi chức năng. Thiết kế dựa trên và bắt nguồn từ những điều này. Mặc dù nó có thể không phù hợp với định nghĩa chung về thiết kế, nhưng những điều này thường quan trọng không kém.
- Một tổng quan bao gồm một mạng lưới cấp cao hoặc sơ đồ thành phần và một trang văn bản. Điều này dành cho đối tượng rất rộng, từ quản lý cấp trên đến dev và QA. Điều này hiếm khi sử dụng UML hoặc ký hiệu được xác định do đối tượng rộng.
- Chi tiết cho các thành phần riêng lẻ, thường tập trung vào các giao diện hoặc API giữa chúng như đã đề cập ở trên. Các giao diện có thể được chỉ định là chữ ký phương thức trong ngôn ngữ đích với các chi tiết tiền điều kiện và hậu điều kiện. Các thành phần có thể có sơ đồ mạng, chẳng hạn như hiển thị bố cục của máy ảo trong đám mây hoặc trung tâm dữ liệu và sắp xếp mạng của chúng. Cơ sở dữ liệu quan hệ thường sẽ có sơ đồ Mối quan hệ thực thể.
- Một danh sách các rủi ro kiến trúc và giảm thiểu của chúng, nếu biết. Giống như các yêu cầu, những điều này thể hiện quyết định thiết kế và đánh đổi.
Nói tóm lại, thiết kế của một hệ thống trong một quy trình nhanh nhẹn giống hệt như trong một quy trình thác nước truyền thống. Tuy nhiên, trong các môi trường nhanh, ít thiết kế được thực hiện trước và nhiều hơn được giao cho các nhóm thành phần . Điều quan trọng là xác định mức độ đi sâu ban đầu, quyết định trì hoãn và xác định khi nào cần đưa ra quyết định. Các quyết định tác động đến nhiều nhóm phát triển nên được đưa ra sớm hơn, đặc biệt là khả năng mở rộng và bảo mật. Các quyết định như thêm ngôn ngữ bổ sung vào một sản phẩm đã được quốc tế hóa có thể được hoãn lại cho đến khi rất muộn.
Sau khi thiết kế ban đầu được tạo ra, kiến trúc sư làm việc với từng nhóm và xem xét thiết kế của họ. Nếu thiết kế bổ sung hoặc thay đổi thiết kế được yêu cầu cho một đơn vị công việc (chẳng hạn như chạy nước rút), kiến trúc sư nhằm mục đích có sẵn nó vào thời điểm đơn vị công việc bắt đầu. Kiến trúc sư cũng chịu trách nhiệm truyền đạt bất kỳ thay đổi nào cho các nhóm hoặc các bên liên quan bị ảnh hưởng.