Chào mừng đến với thế giới phát triển phần mềm cũ.
Bạn có 100 nghìn, hàng triệu, 10 triệu triệu dòng mã.
Những dòng mã này có giá trị, trong đó chúng tạo ra một luồng doanh thu và thay thế chúng là không thể thực hiện được.
Mô hình kinh doanh của bạn dựa trên việc tận dụng cơ sở mã đó. Vì vậy, nhóm của bạn nhỏ, cơ sở mã lớn. Việc thêm các tính năng là bắt buộc để khiến mọi người mua phiên bản mới của mã của bạn hoặc để giữ cho khách hàng hiện tại hài lòng.
Trong một thế giới hoàn hảo, cơ sở mã khổng lồ của bạn là đơn vị đã thử nghiệm wazoo. Bạn không sống trong một thế giới hoàn hảo.
Trong một thế giới kém hoàn hảo, bạn có ngân sách để khắc phục khoản nợ kỹ thuật của mình - chia mã của bạn thành các phần có thể kiểm tra đơn vị, thực hiện kiểm tra tích hợp mở rộng và lặp lại.
Điều này, tuy nhiên, đang trả nợ mà không tạo ra các tính năng mới. Điều này không phù hợp với trường hợp kinh doanh "gặt hái lợi nhuận từ mã hiện có, trong khi sửa đổi nó để tạo ra động lực để nâng cấp".
Bạn có thể lấy những đoạn mã lớn và viết lại bằng các kỹ thuật hiện đại hơn. Nhưng ở mọi nơi bạn tương tác với mã hiện tại, bạn sẽ phơi bày các điểm dừng có thể. Sự hack đó trong hệ thống mà bạn đã loại bỏ thực sự đã bù đắp cho một sự cố trong hệ thống con mà bạn không viết lại. Luôn luôn.
Những gì bạn có thể làm là hành động cẩn thận. Bạn có thể tìm thấy một phần của mã mà bạn thực sự hiểu và hành vi cũng như tương tác với phần còn lại của hệ thống cũng được hiểu rõ. Bạn có thể hiện đại hóa điều đó, thêm các bài kiểm tra đơn vị và làm cho hành vi của nó thậm chí rõ ràng hơn.
Sau đó tìm các phần của phần còn lại của ứng dụng chủ yếu tương tác với nó và tấn công từng phần một.
Khi bạn làm như vậy, bạn có thể cải thiện hệ thống con, thêm các tính năng mà khách hàng sẵn sàng trả tiền.
Nói tóm lại, đây là nghệ thuật có thể - thực hiện các thay đổi mà không phá vỡ những thứ cung cấp cho một trường hợp kinh doanh.
Nhưng đây không phải là câu hỏi của bạn. Câu hỏi của bạn là, "Tôi đang làm một cái gì đó rất lớn, và có khả năng phá vỡ mọi thứ, và làm thế nào để tôi làm theo các thực tiễn tốt nhất?"
Khi làm một việc gì đó rất lớn, sự thật là nếu bạn muốn làm điều đó một cách đáng tin cậy thì cuối cùng bạn sẽ dành nhiều nỗ lực hơn để theo dõi các lỗi và sửa chúng hơn là bạn viết nó. Đây là quy tắc chung của phát triển phần mềm: viết công cụ rất dễ, làm cho nó hoạt động hoàn hảo là khó.
Bạn có thể có một trường hợp kinh doanh treo trên đầu, nơi bạn đã hứa với một số bên liên quan rằng sự thay đổi lớn này xảy ra. Và nó đã được thực hiện, vì vậy bạn bị đẩy lùi khi nói "không, điều này không được thực hiện, nó chỉ có vẻ thích nó ".
Nếu bạn có sức mạnh và ngân sách, thực sự dành nỗ lực tạo niềm tin rằng thay đổi hoạt động hoặc đơn giản là từ chối thay đổi. Đây sẽ là một vấn đề bằng cấp, không tử tế.
Nếu bạn không có nhiều năng lượng như vậy, nhưng vẫn có một số, hãy cố gắng nhấn mạnh rằng hệ thống mới có thể kiểm tra được . Nếu bạn viết lại một số hệ thống con, hãy nhấn mạnh rằng hệ thống con mới này bao gồm các phần nhỏ với các kiểm tra đơn vị và hành vi được chỉ định tốt xung quanh chúng.
Sau đó là trường hợp xấu nhất. Bạn đi sâu hơn vào nợ nần. Bạn vay mượn tương lai của chương trình bằng cách có nhiều mã dễ vỡ hơn và nhiều lỗi hơn để có được tính năng này ngay bây giờ và gây hậu quả. Bạn thực hiện QA dựa trên quét để tìm các vấn đề tồi tệ nhất và bỏ qua phần còn lại. Đây thực sự đôi khi là câu trả lời đúng từ quan điểm của doanh nghiệp, vì nó rẻ nhất bây giờ. Đi vào nợ để tạo ra lợi nhuận là một chiến lược kinh doanh hợp lệ, đặc biệt là nếu xóa nợ thông qua phá sản (từ bỏ mã) là trên bàn.
Một vấn đề lớn là hiếm khi các ưu đãi của các chủ sở hữu công ty phù hợp với những người ra quyết định và lập trình viên. Có xu hướng được rất nhiều áp lực để 'giao', và làm như vậy bằng cách tạo ra gần như vô hình (với cấp trên của bạn) nợ kỹ thuật là một vĩ đại chiến lược ngắn và đôi khi trung hạn. Ngay cả khi cấp trên / các bên liên quan của bạn sẽ được phục vụ tốt nhất bằng cách không tạo ra tất cả các khoản nợ đó.