𝗧𝗵𝗲 𝗪𝗼𝗿𝗸𝗲𝗱 𝗘𝘅𝗮𝗺𝗽𝗹𝗲 𝗧𝗵𝗮𝘁 𝗗𝗶𝘀𝗮𝗴𝗿𝗲𝗲𝗱 𝗪𝗶𝘁𝗵 𝗜𝘁𝘀 𝗢𝘄𝗻 𝗖𝗮𝗹𝗰𝘂𝗹𝗮𝘁𝗼𝗿
میں گھر کی بہتری (home improvement) کے اخراجات کے کیلکولیٹرز کے لیے ایک ویب سائٹ چلاتا ہوں۔
ہر صفحہ چار جگہوں پر اخراجات دکھاتا ہے:
- ایک انٹرایکٹو ویجیٹ (interactive widget)۔
- ایک اسٹیٹک ریفرنس ٹیبل۔
- متن میں لکھی ہوئی مثالیں۔
- ایک FAQ سیکشن۔
مجھے ایک بڑا بگ (bug) ملا۔ ایک لکھی ہوئی مثال میں ایک پروجیکٹ کی لاگت $62,300 بتائی گئی تھی۔ جبکہ ویجیٹ میں اسی پروجیکٹ کی لاگت $56,779 تھی۔
ان کے درمیان $5,500 کا فرق تھا۔
یہ نمبرات محض اتفاقی نہیں تھے۔ یہ مختلف پوشیدہ مفروضوں (assumptions) سے نکلے تھے۔ تحریری متن میں ایک نئے HVAC یونٹ کا مفروضہ لیا گیا تھا۔ جبکہ ویجیٹ نے یہ فرض کیا کہ آپ موجودہ سسٹم ہی استعمال کریں گے۔ دونوں ہی درست تھے، لیکن وہ ایک دوسرے سے منسلک نہیں تھے۔
یہ ایک عام ناکامی ہے۔ جب آپ ایک ہی حقیقت کو دو جگہوں پر محفوظ کرتے ہیں، تو وہ ایک دوسرے سے الگ ہو جاتی ہیں۔ آپ صرف مواد (content) کی نقل نہیں کر رہے ہوتے، بلکہ آپ ڈیٹا کی نقل کر رہے ہوتے ہیں۔
میں نے اسے ایک اصول کے ذریعے ٹھیک کیا جسے میں "source-first" کہتا ہوں۔ اس کے دو حصے ہیں۔
پہلا حصہ: لاگت صرف ایک ہی جگہ موجود ہونی چاہیے۔
میں نے اپنے متن اور ٹیبلز میں نمبر ٹائپ کرنا بند کر دیا۔ اب، کیلکولیٹر فنکشن ہی واحد ذریعہ (source) ہے۔ ٹیبلز اور لکھی ہوئی مثالیں بلڈ پروسیس (build process) کے دوران براہ راست اس فنکشن سے اپنے نمبر حاصل کرتی ہیں۔ اگر فنکشن تبدیل ہوتا ہے، تو صفحے پر موجود ہر نمبر خود بخود تبدیل ہو جاتا ہے۔ آپ میں کوئی تضاد نہیں ہو سکتا کیونکہ تمام نمبرز کی ویلیو ایک ہی ہوتی ہے۔
دوسرا حصہ: ہر نمبر کو اپنا اصل ذریعہ (origin) دکھانا چاہیے۔
لاگت کا ڈیٹا کوئی مستقل حقیقت نہیں ہے۔ اس کی ایک میعاد ہوتی ہے۔ میں نے ہر کیلکولیشن میں ایک چھوٹا سا ڈیٹا آبجیکٹ (data object) شامل کیا۔ یہ درج ذیل چیزیں دکھاتا ہے:
- استعمال شدہ منظرنامہ (scenario)۔
- ڈیٹا کا ذریعہ۔
- جس تاریخ کو اسے حاصل کیا گیا۔
- ڈیٹا کا جائزہ کب لیا جانا چاہیے۔
یہ ڈیٹا کو درست رکھتا ہے۔ اگر اصل ڈیٹا غلط ہے، تو پوری سائٹ غلط ہوگی۔ لیکن کم از کم سائٹ میں تسلسل (consistency) تو ہوگا۔ صارف تضاد کو فوراً محسوس کر لیتا ہے، اور یہ اعتماد کو ختم کر دیتا ہے۔
سبق سادہ ہے:
- اگر صفحے پر دو جگہوں پر ایک ہی نمبر دکھایا جا رہا ہے، تو ایک جگہ اسے امپورٹ (import) کرنا چاہیے، اسے دوبارہ ٹائپ نہ کریں۔
- ڈیٹا کو سنک (sync) کرنے کے لیے اپنے بلڈ پروسیس کا استعمال کریں۔ یہ نظم و ضبط کے مسئلے کو ایک تکنیکی ناممکن بنا دیتا ہے۔
- وہ نمبر ہاتھ سے لکھنا بند کریں جن کا حساب ایک فنکشن پہلے ہی لگا چکا ہے۔
میں نے نمبر لکھنے کے بجائے انہیں ڈیلیٹ کرنے میں ایک دن گزارا۔ میرا کوڈ بیس (codebase) اب چھوٹا ہے اور یہ میرے صارفین سے جھوٹ نہیں بولتا۔
ماخذ: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9