Câu hỏi của bạn là một câu hỏi khó vì nó chạm vào nhiều lĩnh vực: thiết kế, lãnh đạo và phần mềm (hoặc kiến trúc). Tôi sẽ giả định rằng bạn đã có một quy trình chuẩn, nhưng nếu bạn không thử một trong các quy trình Agile. Tôi sẽ nói về lãnh đạo và kiến trúc phần mềm.
Lãnh đạo. Cuốn sách tuyệt vời của Fred Brooks, The Mythical Man-Month, nói về việc có một nhà lãnh đạo kỹ thuật cách một đội phẫu thuật có một nhà lãnh đạo. Cá nhân, tôi thích hợp tác nhiều hơn tôi thấy với các bác sĩ, vì vậy hãy coi đội phẫu thuật của Brooks là cực đoan. Tuy nhiên, bạn cần một người nào đó để điều phối kỹ thuật những người đang làm những việc như phân bổ người làm việc ở các phần khác nhau của hệ thống, quyết định những phần khó khăn nhất (để họ không được hoãn lại cho đến khi chúng đắt tiền thay đổi/sửa lỗi) và đưa ra lựa chọn khi nhóm không đồng ý. Loại lãnh đạo kỹ thuật này là cần thiết cho dù bạn đang xây dựng phần mềm, xe hơi hay gậy pogo.
Kiến trúc/thiết kế. Câu thần chú tiêu chuẩn là "Mỗi hệ thống đều có kiến trúc" nhưng hệ quả là không phải mọi kiến trúc đều được lựa chọn một cách có chủ ý. Bạn có thể ngầm sao chép kiến trúc từ dự án cuối cùng của bạn, nói một hệ thống 3 tầng. Hoặc nó có thể được quyết định trước khi bạn biết bạn đang sử dụng một khuôn khổ như EJB. Khi bắt đầu một dự án, bạn sẽ đưa ra quyết định về kiến trúc và một số sẽ khó thay đổi sau này. Bạn sẽ lưu dữ liệu như thế nào? Bạn sẽ sử dụng một khuôn khổ (ví dụ như Spring, EJB, RoR)? Bạn sẽ xử lý dữ liệu tăng dần hay theo lô?
Khá nhiều kiến trúc có thể bị buộc phải đáp ứng các yêu cầu của bạn. Ví dụ: bạn có thể sử dụng RoR để tạo bộ điều nhiệt. Nhưng bạn sẽ có một thời gian dễ dàng hơn khi kiến trúc của bạn phù hợp với yêu cầu. Đôi khi bạn sẽ có các yêu cầu, chẳng hạn như độ trễ của giao diện người dùng thấp, có thể được hỗ trợ bởi lựa chọn kiến trúc khôn ngoan, như sử dụng AJAX. Vì vậy, sự khởi đầu của dự án của bạn là một cơ hội để suy nghĩ về những điều này và làm cho họ đúng. (Và điều này không có nghĩa là bạn đi lên núi, suy nghĩ kỹ lưỡng, sau đó đọc câu trả lời của bạn cho nhóm - ở đây một lần nữa tôi ủng hộ sự cộng tác).
Đừng ngại nghĩ về kiến trúc ở phía trước, đặc biệt là về những cách có thể giúp bạn tránh khó khăn, nhưng cũng không cố gắng quyết định mọi thứ trước. Bạn sẽ gặp rắc rối nếu một phần của nhóm của bạn bắt đầu sử dụng Ruby on Rails trong khi một phần khác bắt đầu sử dụng EJB - vì vậy hãy đưa ra một số quyết định kỹ thuật, những quyết định bắt buộc bạn và những người sẽ giải quyết những rủi ro lớn nhất của bạn.
Điều cuối cùng: Thảo luận kiến trúc ban đầu là một phước lành và lời nguyền. Họ là một phước lành trong đó họ có được ý tưởng ra sớm và cho phép bạn chọn thiết kế của bạn hơn là sai lầm vào nó. Nhưng họ là một lời nguyền trong đó mọi người sẽ có ý kiến, và nó có thể khó khăn để có được tất cả họ chỉ trong cùng một hướng (tức là trở lại sự cần thiết cho lãnh đạo kỹ thuật).
Tôi khuyên bạn nên Chương 12 của Applied Software Architecture để được hướng dẫn về câu hỏi của bạn. Danh sách các đầu đề đưa ra một ý tưởng hay về lời khuyên của nó: Tạo một tầm nhìn, kiến trúc sư là chuyên gia tư vấn kỹ thuật chính, kiến trúc sư đưa ra quyết định, các huấn luyện viên kiến trúc sư, kiến trúc sư phối hợp, kiến trúc sư thực hiện, người ủng hộ kiến trúc sư. Cuốn sách 97 Things bạn đề cập đến là một bộ sưu tập ngọc trai của trí tuệ hơn là một hướng dẫn gắn kết với kiến trúc.
George Fairbanks, Tác giả của Just Enough Software Architecture
câu trả lời hay, tốt hơn nhiều so với tôi =) +1 –