# 56: Khiến những điều vô hình trở nên rõ ràng!

Những khía cạnh của vấn đề “vô hình” được đề cập nhiều là việc duy trì các nguyên tắc của phần mềm. Thuật ngữ của chúng tôi rất giàu tính ẩn dụ vô hình — tính minh bạch của cơ chế và ẩn đi thông tin, tôi chỉ liệt kê ra hai trong số các thuật ngữ này. Phần mềm và quá trình phát triển nó được giải thích bởi Douglas Adams, hầu hết là không được để ý tới.

Source code không tự nhiên sinh ra, không có bản năng và cũng không tuân theo một định luật vật lý nào. Điều này sẽ được cụ thể khi bạn tải code vào một trình biên dịch, nhưng khi bạn đóng chương trình lại và tất cả biến mất. Việc suy nghĩ về điều này trong một thời gian dài, như một cành cây rụng xuống và không ai để ý đến, bạn bắt đầu tự hỏi liệu nó có tồn tại hay không.

Một ứng dụng đang chạy với giao diện và những tính năng bình thường nhưng lại không tiết lộ thông tin gì về source code của nó. Trang chủ của Google nhìn trông rất đơn giản nhưng những thứ đằng sau đó chắc chắn rất phức tạp.

Nếu bạn đã hoàn thành 90% công việc và bị mắc kẹt mãi mãi khi cố gắng gỡ 10% còn lại đang bị lỗi thì suy cho cùng, bạn cũng không hoàn thành 90% đó phải không? Gỡ lỗi không phải là tiến bộ. Bạn không được trả tiền cho quá trình lãng phí như debug. Tốt hơn là bạn nên tìm hiểu rõ ràng các lỗi để bạn có thể hiểu nó là gì và bắt đầu nghĩ về việc cố gắng không tạo ra nó ngay từ đầu.

Nếu dự án của bạn đang đi đúng hướng rồi một tuần sau đó, bạn gặp lỗi và trễ mất sáu tháng. Vấn đề đáng lo nhất không phải là trễ sáu tháng, mà là những điều vô hình quá lớn đã che đi việc chậm trễ sáu tháng. Thiếu sự rõ ràng đồng nghĩa với việc thiếu đi sự tiến bộ.

Những vấn đề vô hình có thể rất nguy hiểm. Bạn có thể hình dung cụ thể hơn khi có một cái gì đó kết nối các suy nghĩ của bạn. Bạn có thể quản lý mọi thứ tốt hơn khi bạn có thể nhìn thấy chúng và thấy chúng thay đổi liên tục:

Viết ra các đơn vị kiểm thử (unit tests) sẽ có thêm cơ sở để dễ dàng hơn trong kiểm tra đơn vị code. Điều này giúp biết được liệu có hay không các yếu tố chất lượng trong quá trình phát triển mà bạn muốn code của mình có, các yếu tố chất lượng này như các khớp nối giúp gắn kết code của bạn. Chạy các đơn vị kiểm thử cung cấp thông tin về những tính chất của code. Nó giúp tiết lộ sự có mặt hay không của thời gian chạy các yếu tố trong ứng dụng mà bạn mong muốn, những yếu tố như là sự chặt chẽ và chính xác.

Sử dụng bảng thông báo và thẻ là cho quá trình dễ dàng nhìn thấy và cụ thể hơn. Các tác vụ có thể được đánh giá là Chưa bắt đầu, Đang trong tiến trình hoặc Đã hoàn thành mà không cần tham khảo công cụ quản lý dự án ẩn và không cần thông qua lập trình viên để báo cáo tình trạng.

Thực hiện đều các quá trình phát triển làm tăng sự rõ ràng trong tiến trình bằng cách làm tăng tần suất của cơ sở phát triển. Hoàn thành phần mềm đáng tin cậy cho thấy thực tế khác đi so với tưởng tượng.

Tốt nhất là phát triển phần mềm với cơ sở rõ ràng một cách thường xuyên. Tầm nhìn mang lại sự tự tin rằng sự tiến bộ là có thật và không phải là tưởng tượng, có sự chú ý và không bất cẩn, lặp lại và không vô tình.