Reversibility — Không có quyết định nào là vĩnh viễn

Phong

Mình đã hiểu nội dung Topic 11 rồi — "Reversibility" trong cuốn The Pragmatic Programmer. Đây là cảm nhận của mình về topic này nha.


Mở đầu

Series "The Pragmatic Programmer" mình đọc tới đây thấy càng ngày càng thấm. Mỗi topic là một viên gạch nhỏ xây nên tư duy của một lập trình viên thực thụ. Hôm nay tới Topic 11: Reversibility — một khái niệm tưởng trừu tượng mà thực ra chạm tới tận xương tuỷ của nghề software.

programmer writing code Ảnh: Lukas Blazek — Pexels

Reversibility — "Éo le" của những quyết định khó đảo ngược

Các bạn có để ý không, trong làng tech, chúng ta hay bị cám dỗ bởi những quyết định "đóng đinh cột trụ". Chọn framework này — rồi đổ hàng trăm man-mon vào đó. Chọn database nọ — rồi thấy performance không ổn, muốn đổi qua cái khác thấy nặng như đeo đá.

Pragmatic Programmer gọi đó là "irreversible decisions" — những quyết định mà bạn gần như không thể quay đầu.

Topic này dạy mình một điều: không có quyết định nào là vĩnh viễn. Công nghệ thay đổi, yêu cầu business thay đổi, team thay đổi. Nếu bạn build một hệ thống mà đổi database đồng nghĩa với viết lại từ đầu, bạn đang tự đào hố cho chính mình.

Giải pháp mà cuốn sách đưa ra là lớp trừu tượng (abstraction layers). Giống như mình xài Repository Pattern vậy — code business logic không cần biết đang chơi với PostgreSQL, MySQL hay một con API nào đó. Khi cần đổi, chỉ cần thay lớp dưới cùng, phần còn lại không lay chuyển.

software development team Ảnh: Christina Morillo — Pexels

Tác giả còn nhắc tới khái niệm "Last Responsible Moment" — đừng quyết định sớm hơn mức cần thiết. Giống như chơi cờ, nước đi càng đẩy được về cuối, bạn càng có nhiều thông tin để đưa ra lựa chọn đúng đắn. Nhiều team vội vàng chọn tech stack ngay từ ngày đầu rồi ân hận suốt phần đời còn lại của dự án.

Cảm nhận của mình

Cá nhân mình thấy Topic 11 là một trong những bài học đắt giá nhất của chương 2.

Mình từng chứng kiến một dự án chọn Elasticsearch làm primary database ngay từ đầu (thay vì chỉ dùng để search) vì "dễ set up" và "mốt". Kết quả là sau 6 tháng, data relationships phức tạp tới mức mỗi query là một cơn ác mộng. Đổi qua PostgreSQL mất gần 2 tháng trời vì mọi business logic đều phụ thuộc vào document structure của ES. Nếu team đó chịu khó xây một abstraction layer ngăn cách business logic khỏi storage mechanism, mọi chuyện đã nhẹ nhàng hơn rất nhiều.

Reversibility không chỉ là chuyện kỹ thuật — nó là triết lý. Trong startup, trong architecture, luôn luôn hỏi: "Nếu mai mốt mình muốn đổi, có đau không?" Nếu câu trả lời là "đau quá", thì hãy tìm cách khác.

technology innovation Ảnh: ThisisEngineering — Pexels

Kết

Topic 11 nhắc chúng ta rằng: "There are no final decisions." Không có gì là mãi mãi trong software — công nghệ, yêu cầu, con người đều thay đổi. Hãy xây dựng hệ thống để reversible decisions trở thành chuyện thường ngày, chứ không phải một cuộc đại phẫu mỗi lần muốn xoay hướng.

Hẹn mấy bạn ở topic sau nha. 📖