Xin lỗi, điều này sẽ còn dài, nhưng nó dựa trên kinh nghiệm cá nhân khi cả kiến trúc sư và nhà phát triển trên nhiều dự án viết lại.
Các điều kiện sau đây sẽ khiến bạn phải xem xét một số loại viết lại. Tôi sẽ nói về cách quyết định cái nào sẽ làm sau đó.
- Thời gian tăng tốc của nhà phát triển là rất cao. Nếu phải mất nhiều thời gian hơn dưới đây (theo cấp độ kinh nghiệm) để tăng tốc cho một nhà phát triển mới, thì hệ thống cần phải được thiết kế lại. Theo thời gian tăng tốc, ý tôi là khoảng thời gian trước khi nhà phát triển mới sẵn sàng thực hiện cam kết đầu tiên của họ (trên một tính năng nhỏ)
- Mới ra trường - 1,5 tháng.
- Vẫn xanh, nhưng đã làm việc trên các dự án khác trước đây - 1 tháng
- Trung cấp - 2 tuần
- Có kinh nghiệm - 1 tuần
- Cấp cao - 1 ngày
- Triển khai không thể được tự động, vì sự phức tạp của kiến trúc hiện có
- Ngay cả các sửa lỗi đơn giản cũng mất quá nhiều thời gian vì sự phức tạp của mã hiện có
- Các tính năng mới mất quá nhiều thời gian và chi phí quá cao do sự phụ thuộc lẫn nhau của cơ sở mã (các tính năng mới không thể tách rời và do đó ảnh hưởng đến các tính năng hiện có)
- Chu trình thử nghiệm chính thức mất quá nhiều thời gian vì sự phụ thuộc lẫn nhau của cơ sở mã hiện có.
- Quá nhiều trường hợp sử dụng được thực thi trên quá ít màn hình. Điều này gây ra vấn đề đào tạo cho người dùng và nhà phát triển.
- Công nghệ mà hệ thống hiện tại đang đòi hỏi
- Các nhà phát triển chất lượng có kinh nghiệm trong công nghệ quá khó tìm
- Nó không được dùng nữa (Không thể nâng cấp để hỗ trợ các nền tảng / tính năng mới hơn)
- Đơn giản là có một công nghệ cấp cao biểu cảm hơn nhiều có sẵn
- Chi phí duy trì cơ sở hạ tầng của công nghệ cũ là quá cao
Những điều này là khá rõ ràng. Khi nào quyết định viết lại hoàn chỉnh so với xây dựng lại gia tăng thì chủ quan hơn, và do đó mang tính chính trị nhiều hơn. Những gì tôi có thể nói với niềm tin là để nói rõ rằng nó không bao giờ là một ý tưởng tốt là sai.
Nếu một hệ thống có thể được thiết kế lại dần dần và bạn có sự hỗ trợ đầy đủ của tài trợ dự án cho việc đó, thì bạn nên làm điều đó. Đây là vấn đề, mặc dù. Nhiều hệ thống không thể được thiết kế lại tăng dần. Dưới đây là một số lý do tôi gặp phải để ngăn chặn điều này (cả về kỹ thuật và chính trị).
- Kỹ thuật
- Sự ghép nối của các thành phần cao đến mức những thay đổi thành một thành phần không thể tách rời khỏi các thành phần khác. Việc thiết kế lại một thành phần duy nhất dẫn đến một loạt các thay đổi không chỉ cho các thành phần lân cận, mà còn gián tiếp đến tất cả các thành phần.
- Ngăn xếp công nghệ phức tạp đến mức thiết kế nhà nước trong tương lai đòi hỏi nhiều thay đổi cơ sở hạ tầng. Điều này cũng cần thiết trong việc viết lại hoàn chỉnh, nhưng nếu nó được yêu cầu trong thiết kế lại gia tăng, thì bạn sẽ mất lợi thế đó.
- Việc thiết kế lại một thành phần dẫn đến việc viết lại hoàn toàn thành phần đó dù thế nào đi nữa, bởi vì thiết kế hiện tại quá phổ biến đến nỗi không có gì đáng để tiết kiệm. Một lần nữa, bạn mất lợi thế nếu đây là trường hợp.
- Chính trị
- Các nhà tài trợ không thể được thực hiện để hiểu rằng thiết kế lại gia tăng đòi hỏi phải có cam kết lâu dài với dự án. Chắc chắn, hầu hết các tổ chức sẽ mất cảm giác ngon miệng cho việc rút ngân sách liên tục mà một thiết kế lại gia tăng tạo ra. Sự mất cảm giác này là không thể tránh khỏi khi viết lại, nhưng các nhà tài trợ sẽ có xu hướng tiếp tục hơn, vì họ không muốn bị tách ra giữa một hệ thống mới hoàn chỉnh một phần và một hệ thống cũ lỗi thời.
- Người dùng của hệ thống quá gắn bó với "màn hình hiện tại" của họ. Nếu đây là trường hợp, bạn sẽ không có giấy phép để cải thiện một phần quan trọng của hệ thống (phần đầu). Thiết kế lại cho phép bạn khắc phục vấn đề này, vì chúng bắt đầu với một cái gì đó mới. Họ vẫn sẽ khăng khăng đòi "cùng một màn hình", nhưng bạn có thêm một chút đạn để đẩy lùi.
Hãy nhớ rằng tổng chi phí chuyển hướng tăng dần luôn cao hơn so với việc viết lại hoàn chỉnh, nhưng tác động đến tổ chức thường nhỏ hơn. Theo tôi, nếu bạn có thể biện minh cho việc viết lại và bạn có các nhà phát triển siêu sao, thì hãy làm điều đó.
Chỉ làm điều đó nếu bạn có thể chắc chắn rằng có ý chí chính trị để xem nó hoàn thành. Điều này có nghĩa là cả người mua cuối cùng và người dùng cuối. Không có nó, bạn sẽ thất bại. Tôi cho rằng đây là lý do Joel nói rằng đó là một ý tưởng tồi. Người mua điều hành và người dùng cuối trông giống như một con kỳ lân hai đầu đối với nhiều kiến trúc sư. Bạn phải bán nó một cách mạnh mẽ và chiến dịch tiếp tục cho đến khi nó hoàn thành. Điều đó thật khó khăn và bạn đang nói về việc tôn vinh danh tiếng của mình trên một thứ mà một số người sẽ không muốn thấy thành công.
Một số chiến lược để thành công:
- Tuy nhiên, nếu bạn không cố gắng chuyển đổi mã hiện có. Thiết kế hệ thống từ đầu. Nếu không, bạn đang lãng phí thời gian của bạn. Tôi chưa bao giờ thấy hoặc nghe nói về một dự án "chuyển đổi" mà không kết thúc một cách thảm hại.
- Di chuyển người dùng đến một nhóm hệ thống mới tại một thời điểm. Xác định các đội có nỗi đau NHẤT với hệ thống hiện có và di chuyển chúng trước. Hãy để họ truyền bá tin tốt bằng lời nói. Bằng cách này, hệ thống mới của bạn sẽ được bán từ bên trong.
- Thiết kế khung của bạn khi bạn cần nó. Đừng bắt đầu với một số tôi đã dành 6 tháng để xây dựng - khung này chưa bao giờ thấy mã thực.
- Giữ ngăn xếp công nghệ của bạn càng nhỏ càng tốt. Đừng thiết kế quá mức. Bạn có thể thêm các công nghệ khi cần thiết, nhưng loại bỏ chúng là khó khăn. Ngoài ra, bạn càng có nhiều lớp, nhà phát triển càng phải làm nhiều việc hơn. Đừng làm khó nó từ việc di chuyển.
- Thu hút người dùng trực tiếp vào quá trình thiết kế, nhưng đừng để họ ra lệnh làm thế nào để làm điều đó. Kiếm niềm tin của họ bằng cách cho họ thấy rằng bạn có thể cung cấp cho họ những gì họ muốn tốt hơn nếu bạn tuân thủ các nguyên tắc thiết kế tốt.