Khi chú ruột của bạn nói với bạn rằng có lẽ bạn nên thực hiện một số phép tái cấu trúc, có khả năng đó là bản năng của bạn nói với bạn một chút muộn màng rằng bạn đã bỏ qua một điều gì đó quan trọng quá lâu.
Tôi hiểu "mùi mã", tái cấu trúc màu đỏ và các suy nghĩ khác, nhưng tôi thường cảm thấy rằng thời điểm tốt nhất để tái cấu trúc không phải là lần đầu tiên bạn viết mã, mà là lần thứ hai hoặc thứ ba bạn sử dụng mã và nhận ra rằng nó thực sự là một vấn đề và đang được sử dụng thực tế.
Có hiệu quả hai cấp độ để tái cấu trúc. Đầu tiên là các vấn đề rõ ràng xuất hiện khi bạn mã đầu tiên. Đây là những tối ưu hóa nhỏ mà chi phí bạn rất ít để làm trước. Những thứ như giữ cho các phương thức và lớp của bạn nhỏ, và tuân thủ DRY và SRP. Sau đó, bạn có giai đoạn bổ sung đối phó với lỗ hổng lớn trong thiết kế của bạn, mà có thể không ngay lập tức rõ ràng cho đến khi mã của bạn có một vài dặm dưới nó. Đây là cấp độ thứ hai mà bạn đang nói đến, nhưng để đảm bảo rằng việc tái cấu trúc sau này không quá tốn kém, bạn cần phải viết mã của mình theo cách mà nỗ lực mà bạn dự tính được thực hiện dễ dàng hơn và ít tốn kém hơn, có nghĩa là thực hiện tái cấu trúc sớm.
Như Jeff đã đề cập trong câu trả lời của mình, "thời gian là tiền bạc" , đặc biệt là trong các công ty nơi khối lượng công việc cao và rủi ro thậm chí còn cao hơn. Thời gian sử dụng trước để đảm bảo mã ở trạng thái tốt nhất có thể là thời gian được lưu sau đó, khi trêu chọc những gì đáng lẽ phải là một phép tái cấu trúc dễ dàng hóa ra lại là một hoạt động chính.
Khi viết phần mềm, mọi khoảnh khắc dành cho việc cải thiện mã của bạn lên trước là thời gian được lưu lại sau đó, khi bạn thực sự sẽ cần nó. Bạn tái cấu trúc càng sớm, những thay đổi sau này của bạn sẽ càng rõ ràng. Nó giống như thực hiện một khoản thanh toán bằng đô la ngày nay so với các khoản nợ kỹ thuật trong tương lai sẽ có trong ngày mai tăng vọt.
Trong mọi trường hợp, tái cấu trúc không phải là một nhiệm vụ mà bạn đặt ra cho đến một tương lai bí ẩn nào đó khi phần mềm đã hoàn tất và ổn định, vì nó làm tăng rủi ro của bạn sau này khi cổ phần cao hơn nhiều và sản phẩm khó thay đổi hơn nhiều. Tái cấu trúc nên là một phần trong các hoạt động hàng ngày của bạn và đây là bản chất của triết lý Red-Green-Refactor mà bạn đã đề cập.