Ví dụ thực tế lại mâu thuẫn với chính công cụ tính toán của nó
Tôi điều hành một trang web về các công cụ tính toán chi phí cải tạo nhà cửa.
Mỗi trang hiển thị chi phí ở bốn vị trí:
- Một widget tương tác.
- Một bảng tham chiếu tĩnh.
- Các ví dụ viết bằng văn bản trong nội dung.
- Một phần câu hỏi thường gặp (FAQ).
Tôi đã phát hiện một lỗi nghiêm trọng. Một ví dụ viết tay cho biết chi phí dự án là 62.300 USD. Trong khi đó, widget lại cho biết cùng dự án đó chỉ tốn 56.779 USD.
Có một khoảng chênh lệch 5.500 USD.
Những con số này không phải ngẫu nhiên. Chúng đến từ các giả định ngầm khác nhau. Văn bản viết giả định rằng sẽ lắp một hệ thống HVAC mới. Widget lại giả định rằng bạn sẽ sử dụng hệ thống hiện có. Cả hai đều không sai, nhưng chúng không "nói chuyện" với nhau.
Đây là một lỗi phổ biến. Khi bạn lưu cùng một sự thật ở hai nơi, chúng sẽ dần trở nên sai lệch. Bạn không chỉ đang nhân bản nội dung. Bạn đang nhân bản cả dữ liệu.
Tôi đã khắc phục điều này bằng một quy tắc mà tôi gọi là source-first (ưu tiên nguồn). Nó gồm hai phần.
Phần một: Một mức chi phí chỉ tồn tại ở một nơi duy nhất.
Tôi đã ngừng việc nhập số thủ công vào văn bản và bảng biểu. Giờ đây, hàm tính toán là nguồn duy nhất. Các bảng và ví dụ viết tay sẽ lấy số trực tiếp từ hàm đó trong quá trình build. Nếu hàm thay đổi, mọi con số trên trang sẽ tự động thay đổi theo. Bạn không thể gặp tình trạng sai lệch vì các con số đều có cùng một giá trị.
Phần hai: Mọi con số đều phải hiển thị nguồn gốc của nó.
Dữ liệu chi phí không phải là một sự thật vĩnh viễn. Nó có thời hạn. Tôi đã thêm một đối tượng dữ liệu nhỏ vào mỗi phép tính. Nó hiển thị:
- Kịch bản được sử dụng.
- Nguồn của dữ liệu.
- Ngày truy cập dữ liệu.
- Thời điểm cần xem xét lại dữ liệu.
Điều này giúp dữ liệu luôn trung thực. Nếu dữ liệu nguồn sai, toàn bộ trang web sẽ sai. Nhưng ít nhất, trang web sẽ nhất quán. Người dùng sẽ nhận ra sự mâu thuẫn ngay lập tức. Điều đó sẽ phá hủy niềm tin.
Bài học rất đơn giản:
- Nếu hai vị trí trên một trang hiển thị cùng một con số, một trong hai nên import nó. Đừng gõ lại.
- Sử dụng quy trình build để đồng bộ hóa dữ liệu. Điều này biến một vấn đề về kỷ luật thành một điều không thể xảy ra về mặt kỹ thuật.
- Ngừng việc viết tay các con số mà một hàm đã có thể tính toán được.
Tôi đã dành cả một ngày để xóa các con số thay vì viết chúng. Mã nguồn của tôi gọn nhẹ hơn và nó không còn nói dối người dùng nữa.
Nguồn: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9