Refactoring với thiết kế
Một số người ví thiết kế với bản vẽ của kĩ sư và lập trình với công việc của thợ xây. Tuy nhiên phần mềm khác với nhà cửa đường xá. Alistair Cockburn nói, “Khi thiết kế tôi có thể nghĩ rất nhanh nhưng suy nghĩ của tôi đầy những lỗ hổng nhỏ.”
Một số khác tranh luận rằng refactoring là sự thay thế cho thiết kế. Trong cách tiếp cận này bạn hoàn toàn không thiết kế chút nào. Bạn chỉ lập trình theo cách đầu tiên nghĩ ra, làm cho nó chạy đúng và sau đó refactor. Thực tế cách làm này có thể thực hiện được nhưng không phải cách hiệu quả nhất.
Khi áp dụng refactoring, bạn không đặt áp lực lên thiết kế ban đầu. Bạn không tìm kiếm giải pháp tốt nhất mà chấp nhận một giải pháp hợp lý. Cùng với quá trình phát triển và hiểu rõ hơn bài toán bạn phát hiện ra những giải pháp hợp lý hơn mà đưa nó vào hệ thống.
Một kết quả quan trọng của refactoring là sự đơn giản trong thiết kế. Với cách thiết kế hoàn chỉnh từ đầu, bạn cần tìm ra giải pháp thật mềm dẻo để đáp ứng sự thay đổi của yêu cầu. Vấn đề là thiết kế mềm dẻo thì phức tạp và tốn kém hơn thiết kế đơn giản. Khi tiếp cận vấn đề với refactoring, bạn sẽ tự hỏi “Để refactor thiết kế đơn giản này thành thiết kế mềm dẻo có khó không?” Nếu câu trả lời là “khá dễ”, bạn chỉ việc cài đặt giải pháp đơn giản.
Như vậy refactoring dẫn đến những thiết kế đơn giản hơn mà không phải hy sinh sự mềm dẻo. Khi bạn đã có một nhận thức nhất định về những gì có thể refactor dễ dàng, bạn thậm chí không nghĩ đến thiết kế mềm dẻo nữa. Chỉ việc xây dựng những gì đơn giản nhất làm việc được. Hầu hết thời gian bạn sẽ không cần dùng đến những thiết kế mềm dẻo và phức tạp nữa.