“پراڈ پر کام کرتا ہے” — یہ وہ جملہ ہے جو ڈیولپر تب کہتا ہے جب بگ پروڈکشن پر ری پروڈیوس نہیں ہوتا، حالانکہ اسٹیجنگ یا لوکل مشین پر خرابی مستقل طور پر ظاہر ہوتی ہے۔ مسئلہ تقریبا ہمیشہ ماحول کے فرق کی وجہ سے ہوتا ہے: ڈیپنڈنسیوں کے مختلف ورژن، کنفیگریشن فائلیں، ڈیٹا بیس کی حالت یا سرور کی ترتیبات۔ Stack Overflow Developer Survey 2024 کے تجزیے کے مطابق، 43% ڈیولپرز مہینے میں کم از کم ایک بار اس صورتحال کا سامنا کرتے ہیں جب کوڈ لوکل مشین پر کام کرتا ہے لیکن پروڈکشن پر ناکام ہو جاتا ہے۔ آئیے سمجھیں کہ یہ فرق کیوں ہوتا ہے اور اسے کیسے روکا جائے۔
اہم نکات
“پراڈ پر کام کرتا ہے” — یہ ڈیولپرز کے درمیان ایک مستقل اظہار ہے، جو اس صورتحال کو ظاہر کرتا ہے جب کوڈ پروڈکشن سرور پر کام کرتا ہے لیکن ٹیسٹ ماحول یا ساتھی کی لوکل مشین پر کام کرنے سے انکار کر دیتا ہے۔ ظاہری طور پر یہ “کوئی مسئلہ نہیں” لگتا ہے جبکہ حقیقت میں مسئلہ موجود ہے — یہ صرف پروڈکشن ماحول میں ری پروڈیوس نہیں ہوتا۔ فرق کی جڑ ماحول کے درمیان کنفیگریشن، ورژن اور ڈیٹا کے فرق میں ہے۔
یہ جملہ ایک اور معروف بہانے — “میرے لوکل پر کام کرتا ہے” — کے متضاد کے طور پر پیدا ہوا۔ اگر ڈیولپر کہتا ہے “لوکل پر کام کرتا ہے” تو بگ صرف دوسروں کے پاس ہے۔ اور اگر “پراڈ پر کام کرتا ہے” — بگ صرف اسٹیجنگ یا ٹیسٹ ماحول میں ہے، لیکن پروڈکشن صاف ہے۔ قسمت کا کھیل: دونوں صورتوں میں مسئلہ حقیقی ہے، یہ صرف دیکھنے والے شخص پر ظاہر نہیں ہوتا۔ DevOps Research and Assessment (DORA) 2023 کی تحقیق کے مطابق، ڈیپلائمنٹ آٹومیشن کی اعلی سطح والی ٹیمیں ایسے فرقوں کا سامنا 3 گنا کم کرتی ہیں۔
کاروباری نقطہ نظر سے، “پراڈ پر کام کرتا ہے” کی صورتحال دکھنے سے زیادہ خطرناک ہے۔ اگر اسٹیجنگ پر بگ ہے لیکن پراڈ پر نہیں، ڈیولپر اسے نظر انداز کر سکتا ہے — اور اگلی ڈیپلائمنٹ پر خرابی پروڈکشن میں چلی جائے گی۔ عارضی سکون مستقبل کے مسئلے میں بدل جاتا ہے جسے صارفین کے دباؤ میں ٹھیک کرنا پڑے گا۔
اس جملے کے قائم رہنے کی نفسیاتی وجہ — دفاعی اضطراری۔ ڈیولپر جو اسٹیجنگ پر بگ دیکھتا ہے لیکن پراڈ پر نہیں، لاشعوری طور پر مسئلے کو کم اہم سمجھ سکتا ہے: “چونکہ پروڈکشن میں سب ٹھیک ہے، تو یہ فوری نہیں”۔ ایک کلاسک علمی تعصب — زندہ بچ جانے والے کی غلطی، جہاں پروڈکشن کی ظاہری کامیابی مستقبل کی ناکامی کے ممکنہ خطرے سے زیادہ وزنی ہوتی ہے۔
دوسری وجہ — غیر واضح ذمہ داری۔ اگر پروڈکشن کام کرتا ہے لیکن اسٹیجنگ نہیں، تو ماحول قصور وار ہے، کوڈ نہیں۔ ڈیولپر بگ کی ذمہ داری خود سے ہٹا کر DevOps انجینئر یا ایڈمن پر ڈال دیتا ہے۔ Atlassian State of DevOps 2022 کے مطابق، متحد ڈیپلائمنٹ ماحول (Docker, Kubernetes) کے بغیر ٹیموں میں ذمہ داری کا یہ منتقلی 60% زیادہ ہوتی ہے۔
تیسری وجہ — صفر ڈاؤن ٹائم کے ساتھ ریلیز کا خوف۔ اگر ڈیولپر اسٹیجنگ پر بگ ٹھیک کرتا ہے اور اصلاح ڈیپلائے کرتا ہے، تو اس کے لیے دوبارہ کوڈ ریویو، ٹیسٹنگ اور ڈیپلائمنٹ کی ضرورت ہوگی۔ “پراڈ پر کام کرتا ہے” کا جملہ اصلاح کو اگلی ریلیز تک ملتوی کرنے کی اجازت دیتا ہے، موجودہ بوجھ کو کم کرتے ہوئے۔ ملتوی اصلاح — ٹیموں میں تکنیکی قرض جمع ہونے کی اہم وجوہات میں سے ایک۔
پروڈکشن اور اسٹیجنگ کبھی مکمل طور پر ایک جیسے نہیں ہوتے — یہ پیمانے، بوجھ اور ڈیٹا کے فرق کی وجہ سے تکنیکی طور پر ناممکن ہے۔ تاہم، اہم پیرامیٹرز کا مطابقت ہونا چاہیے: آپریٹنگ سسٹم کا ورژن، کمپائلر، انٹرپریٹر، ڈیٹا بیس، ویب سرور اور پروجیکٹ کے تمام ڈیپنڈنسیاں۔ اگر کم از کم ایک پیرامیٹر مختلف ہو — کوڈ کا رویہ تبدیل ہو سکتا ہے۔
ماحول کے درمیان بنیادی فرق میں شامل ہیں:
کنٹینرائزیشن ان مسائل میں سے زیادہ تر حل کرتی ہے۔ پروڈکشن کے لیے بنایا گیا Docker امیج اسٹیجنگ پر بھی استعمال ہونا چاہیے۔ واحد فرق — ماحول کے متغیرات اور والیوم ماؤنٹنگ۔ Docker State of Application Development 2023 کے مطابق، تمام ماحول کے لیے متحد امیج استعمال کرنے والی ٹیمیں فرق کی تعداد 74% کم کرتی ہیں۔
| پیرامیٹر | لوکل ماحول | اسٹیجنگ | پروڈکشن |
|---|---|---|---|
| OS | macOS / Windows | Linux سرور | Linux سرور |
| ڈیٹا بیس | SQLite / لوکل MySQL | MySQL کلسٹر | ریپلیکیشن کے ساتھ MySQL کلسٹر |
| بوجھ | 1 صارف | 10–100 کا تخروپن | 1000+ حقیقی |
| ڈیٹا | فکسچر | ماسک شدہ | حقیقی |
| CDN / کیش | نہیں | جزوی | مکمل |
پہلی اور سب سے عام وجہ — ڈیپنڈنسیوں کے مختلف ورژن۔ ڈیولپر مقامی طور پر --save فلیگ کے ساتھ پیکج انسٹال کرتا ہے لیکن package.json یا لاک فائل کو اپ ڈیٹ کرنا بھول جاتا ہے۔ پراڈ پر ڈیپلائمنٹ پر ایک مختلف ورژن انسٹال ہوتا ہے جو مختلف رویہ دکھاتا ہے۔ npm ماحولیاتی نظام کے لیے لاک فائل مکمل طور پر مسئلہ حل کرتی ہے، دوسرے پیکج مینیجرز کے لیے — یکساں میکانزم (Gemfile.lock, Podfile.lock, pubspec.lock)۔
دوسری وجہ — غائب یا اضافی ماحول کے متغیرات۔ ڈیولپر لوکل مشین پر .env فائل استعمال کرتا ہے لیکن CI/CD پائپ لائن یا سرور پر متعلقہ متغیرات شامل نہیں کرتا۔ نتیجہ — کوڈ API یا ڈیٹا بیس سے کنکشن کی خرابی کے ساتھ ناکام ہو جاتا ہے۔ GitLab DevSecOps Survey 2023 کے مطابق، پراڈ پر 27% واقعات غلط ماحول کے متغیرات سے متعلق ہوتے ہیں۔
تیسری وجہ — ڈیٹا بیس کی حالت۔ اسٹیجنگ پر ڈیٹا بیس میں وہ ریکارڈ ہو سکتے ہیں جو پراڈ پر نہیں ہیں، یا اس کے برعکس — مائیگریشنز کی کمی ہو سکتی ہے۔ عام منظرنامہ: ڈیولپر کوڈ لکھتا ہے جو ٹیبل کے نئے فیلڈ کے ساتھ کام کرتا ہے، لیکن مائیگریشن ابھی پراڈ پر لاگو نہیں ہوئی۔ پسماندہ مطابقت کے ساتھ مائیگریشن حکمت عملی — ایسی صورتحال سے بچنے کا واحد طریقہ۔
چوتھی وجہ — علاقائی اور لسانی ترتیبات۔ تاریخ کی فارمیٹنگ، اعشاریہ عدد کے جدا کنندگان، متن کی انکوڈنگ — یہ سب ڈیولپر کی لوکل مشین اور سرور پر مختلف ہو سکتے ہیں۔ بین الاقوامی کاری والے پروجیکٹس کے لیے خاص طور پر اہم۔ حل — ایپلیکیشن کنفیگریشن میں مقام کو واضح طور پر بتائیں اور سسٹم کی ترتیبات پر انحصار نہ کریں۔
پہلا قدم — دونوں ماحول کے لاگ کا موازنہ کرنا۔ لاگنگ کی سطح میں فرق اکثر وجہ چھپا دیتا ہے: پراڈ پر INFO آن ہو سکتا ہے، جبکہ اسٹیجنگ پر DEBUG۔ ایک جیسی لاگنگ لیول سیٹ کریں اور یقینی بنائیں کہ دونوں ماحول ایسی شکل میں لکھ رہے ہیں جو مشینی موازنہ کی اجازت دے۔ مرکزی لاگ جمع کرنے کے نظام استعمال کریں — Sentry, Datadog, ELK Stack۔
دوسرا قدم — ڈیپنڈنسیوں کے ورژن چیک کریں۔ لاک فائلوں کا موازنہ کریں، دونوں ماحول پر انسٹال شدہ پیکجوں کی فہرست دکھائیں۔ معمولی یا پیچ ورژن کا فرق — عدم مطابقت کی سب سے ممکنہ وجہ۔ npm ls، pip freeze، mvn dependency:tree جیسے ٹولز تیزی سے عدم مطابقت کی نشاندہی کرنے میں مدد کریں گے۔
تیسرا قدم — پروڈکشن ماحول کو مقامی طور پر دوبارہ پیدا کریں۔ Docker Compose یا اسی طرح کے ٹولز استعمال کرکے پروڈکشن انفراسٹرکچر کی صحیح کاپی بنائیں۔ اگر بگ لوکل کنٹینر میں ری پروڈیوس ہوتا ہے — مسئلہ کوڈ میں ہے، ماحول میں نہیں۔ اگر نہیں ہوتا — کنفیگریشن میں فرق تلاش کریں۔
چوتھا قدم — فیچر فلیگ اور A/B ٹیسٹ چیک کریں۔ ممکن ہے پراڈ پر کوڈ مختلف موڈ میں کام کر رہا ہو کیونکہ غلط فلیگ آن ہے۔ LaunchDarkly State of Feature Management 2023 کے مطابق، پراڈ پر 40% تک غیر متوقع رویے غلط فیچر فلیگ اقدار سے منسلک ہوتے ہیں۔ تمام ماحول کے لیے متحد فلیگ مینی فیسٹ اس مسئلے کو حل کرتا ہے۔
روک تھام کا بنیادی آلہ — Infrastructure as Code (IaC)۔ تمام ماحول کو کوڈ میں بیان کیا جانا چاہیے: Dockerfile، docker-compose.yml، Terraform اسکرپٹس یا Ansible پلے بکس۔ سرور پر دستی تبدیلیاں ممنوع ہیں — کنفیگریشن میں کوئی بھی تبدیلی ریپوزٹری اور کوڈ ریویو سے گزرتی ہے۔ یہ یقینی بناتا ہے کہ تمام ماحول کی ایک جیسی کنفیگریشن ہے۔
دوسرا اہم ترین آلہ — متحد CI/CD پائپ لائن۔ ایک ہی بلڈ، ٹیسٹنگ اور ڈیپلائمنٹ اسکرپٹ تمام ماحول کے لیے استعمال ہونا چاہیے۔ فرق — صرف ٹارگٹ متغیرات میں (URL، کیز)۔ اگر اسٹیجنگ اور پروڈکشن کے لیے پائپ لائن مراحل میں مختلف ہو — فرق ناگزیر ہے۔
تیسرا آلہ — خودکار ڈیٹا مطابقت۔ باقاعدگی سے (دن میں ایک بار یا شیڈول کے مطابق) پروڈکشن ڈیٹا بیس کی گمنام کاپی سے اسٹیجنگ کو اپ ڈیٹ کریں۔ یہ مصنوعی فکسچر کے بجائے حقیقی ڈیٹا پر کوڈ ٹیسٹ کرنے کی اجازت دیتا ہے۔ ٹولز: PostgreSQL کے لیے pg_dump/pg_restore، MySQL کے لیے mysqldump، DataGrip جیسی خصوصی خدمات۔
چوتھا — فرق کی نگرانی۔ اسٹیجنگ اور پروڈکشن کے درمیان فرق کا پتہ چلنے پر الرٹس ترتیب دیں۔ ایک سادہ اسکرپٹ جو کنفیگریشن فائلوں کے ہیش یا انسٹال شدہ پیکجوں کے ورژن کا موازنہ کرتی ہے، ڈیبگنگ کے گھنٹے بچائے گی۔ روک تھام ہمیشہ تشخیص سے سستی ہے: ماحول کے فرق کو روکنا “پراڈ پر کام کرتا ہے” بگ کی وجہ تلاش کرنے سے کم محنت طلب ہے۔
اکثر پوچھے گئے سوالات
پہلی صورت میں بگ اسٹیجنگ پر نظر آتا ہے لیکن پراڈ پر نہیں۔ دوسری صورت میں — بگ ڈیولپر کے علاوہ سب کو نظر آتا ہے، جس کا کوڈ لوکل پر کام کرتا ہے۔ مشترکہ جڑ — ماحول کے فرق میں، لیکن صورتحال مختلف مراحل پر ظاہر ہوتی ہے۔
دکھائیں کہ اسٹیجنگ پر بگ وہ بگ ہے جو پہلے سے تیار ہے قریبی ڈیپلائمنٹ کے ساتھ پروڈکشن میں جانے کے لیے۔ ابھی ٹھیک کرنا صارفین کے دباؤ میں ہاٹ فکس سے سستا ہوگا۔ پروجیکٹ کی تاریخ سے مثالیں دیں۔
DORA 2023 کے اعداد و شمار کے مطابق، پراڈ پر تقریبا 25–30% واقعات ماحول کے درمیان فرق کی وجہ سے ہوتے ہیں۔ کنٹینرائزیشن کے بغیر ٹیموں میں یہ شرح 50% تک پہنچ جاتی ہے۔ کنٹینرائزیشن اسے 10–15% تک کم کر دیتی ہے۔
ہاں، یہ عام وجوہات میں سے ایک ہے۔ پراڈ پر CDN، Varnish یا Redis کیش آن ہوتا ہے، جبکہ اسٹیجنگ پر نہیں۔ اگر بگ کیشڈ ڈیٹا کی فراہمی سے متعلق ہے، تو یہ اسٹیجنگ پر ظاہر ہوگا اور پراڈ پر کیش کے پیچھے چھپ جائے گا۔
Docker تمام مراحل (ڈیولپمنٹ، ٹیسٹنگ، اسٹیجنگ، پروڈکشن) پر ماحول کی یکسانیت کو یقینی بناتا ہے۔ اگر امیج ایک بار بنایا جائے اور ہر جگہ استعمال ہو — ورژن اور کنفیگریشن کا فرق ختم ہو جاتا ہے۔ متحد امیج — ڈیپلائمنٹ کی تولیدی صلاحیت کی بنیاد ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں