ہمارے انجینئرنگ کیریئر کے دوران ہر روز، ہر لمحہ، ہمیں مختلف پیچیدگیوں اور حالات کے بہت سے مختلف مسائل کا سامنا کرنا پڑتا ہے جہاں ہمیں ڈیٹا کی کمی کی وجہ سے فیصلہ کرنے یا اسے ملتوی کرنے کی ضرورت ہوتی ہے۔ جب بھی ہم نئی خدمات کی تعمیر کرتے ہیں، بنیادی ڈھانچے کی تعمیر کرتے ہیں، یا یہاں تک کہ ترقی کے عمل کو تشکیل دیتے ہیں، ہم مختلف چیلنجوں کی ایک بہت بڑی دنیا کو چھوتے ہیں۔
تمام مسائل کی فہرست بنانا مشکل ہے، اور شاید ناممکن بھی ہے۔ آپ کو ان میں سے کچھ مسائل کا سامنا صرف اس صورت میں کرنا پڑے گا جب آپ کسی مخصوص جگہ پر کام کریں۔ دوسری طرف، بہت سے ایسے ہیں جنہیں ہم سب کو سمجھنا چاہیے کہ کس طرح حل کیا جائے، کیونکہ وہ آئی ٹی سسٹمز کی تعمیر کے لیے بہت اہم ہیں۔ ایک اعلی امکان کے ساتھ، آپ ان کا سامنا تمام منصوبوں میں کریں گے۔
اس مضمون میں، میں سافٹ ویئر پروگرام بنانے کے دوران جن مسائل کا سامنا کرنا پڑا ان میں سے کچھ کے بارے میں اپنے تجربات شیئر کروں گا۔
اگر ہم ویکیپیڈیا پر نظر ڈالیں تو ہمیں درج ذیل تعریف ملے گی۔
پہلو پر مبنی سافٹ ویئر ڈویلپمنٹ میں، کراس کٹنگ خدشات ایک ایسے پروگرام کے پہلو ہیں جو کئی ماڈیولز کو متاثر کرتے ہیں، ان میں سے کسی میں بھی شامل ہونے کے امکان کے بغیر۔ یہ خدشات اکثر ڈیزائن اور نفاذ دونوں میں بقیہ سسٹم سے صاف طور پر نہیں گلے جا سکتے ہیں، اور اس کے نتیجے میں بکھرنے (کوڈ کی نقل)، الجھنا (سسٹم کے درمیان اہم انحصار) یا دونوں ہو سکتے ہیں۔
یہ بہت وضاحت کرتا ہے کہ یہ کیا ہے، لیکن میں اسے تھوڑا سا بڑھانا اور آسان بنانا چاہتا ہوں:
کراس کٹنگ تشویش نظام/تنظیم کا ایک تصور یا جزو ہے جو بہت سے دوسرے حصوں کو متاثر کرتا ہے (یا 'کاٹ کر')۔
اس طرح کے خدشات کی بہترین مثالیں سسٹم آرکیٹیکچر، لاگنگ، سیکیورٹی، ٹرانزیکشن مینجمنٹ، ٹیلی میٹری، ڈیٹا بیس ڈیزائن اور بہت سے دوسرے ہیں۔ ہم اس مضمون میں بعد میں ان میں سے بہت سے کے بارے میں تفصیل سے بتانے جا رہے ہیں۔
کوڈ کی سطح پر، کراس کٹنگ خدشات کو اکثر اسپیکٹ اورینٹڈ پروگرامنگ (AOP) جیسی تکنیکوں کا استعمال کرتے ہوئے لاگو کیا جاتا ہے، جہاں ان خدشات کو الگ الگ اجزاء میں ماڈیولرائز کیا جاتا ہے جو پوری درخواست میں لاگو کیا جا سکتا ہے۔ یہ کاروباری منطق کو ان خدشات سے الگ رکھتا ہے، کوڈ کو مزید پڑھنے کے قابل اور برقرار رکھنے کے قابل بناتا ہے۔
پہلوؤں کو مختلف خصوصیات جیسے دائرہ کار، سائز، فعالیت، اہمیت، ہدف، اور دیگر کے ساتھ تقسیم کرکے درجہ بندی کرنے کے بہت سے ممکنہ طریقے ہیں، لیکن اس مضمون میں، میں ایک سادہ دائرہ کار کی درجہ بندی استعمال کرنے جا رہا ہوں۔ اس سے، میرا مطلب یہ ہے کہ اس مخصوص پہلو کی ہدایت کہاں کی جاتی ہے چاہے وہ پوری تنظیم ہو، کوئی خاص نظام ہو، یا اس نظام کا کوئی خاص عنصر ہو۔
لہذا، میں پہلوؤں کو Macro اور Micro میں تقسیم کرنے جا رہا ہوں۔
میکرو پہلو سے میرا مطلب ہے بنیادی طور پر ان باتوں پر جن کی ہم پورے نظام کے لیے پیروی کرتے ہیں جیسے کہ منتخب کردہ سسٹم فن تعمیر اور اس کے ڈیزائن (یک سنگی، مائیکرو سروسز، سروس پر مبنی فن تعمیر)، ٹیکنالوجی اسٹیک، تنظیمی ڈھانچہ وغیرہ۔ میکرو پہلوؤں کا تعلق بنیادی طور پر اسٹریٹجک اور اعلیٰ سطح سے ہے۔ فیصلے
اس دوران، مائیکرو پہلو کوڈ کی سطح اور ترقی کے بہت قریب ہے۔ مثال کے طور پر، ڈیٹا بیس کے ساتھ تعامل کے لیے کون سا فریم ورک استعمال کیا جاتا ہے، فولڈرز اور کلاسز کے پروجیکٹ ڈھانچے، یا یہاں تک کہ مخصوص آبجیکٹ ڈیزائن پیٹرن۔
اگرچہ یہ درجہ بندی مثالی نہیں ہے، لیکن یہ ممکنہ مسائل کے بارے میں سمجھنے میں مدد کرتا ہے اور ان حلوں کی اہمیت اور اثرات جو ہم ان پر لاگو کرتے ہیں۔
اس مضمون میں، میری بنیادی توجہ میکرو پہلوؤں پر ہوگی۔
جب میں نے ابھی سافٹ ویئر فن تعمیر کے بارے میں جاننا شروع کیا تو میں نے Conway کے قانون اور تنظیمی ڈھانچے پر اس کے اثرات کے بارے میں بہت سے دلچسپ مضامین پڑھے۔ خاص طور پر یہ ایک ۔ تو یہ قانون کہتا ہے۔
کوئی بھی تنظیم جو نظام کو ڈیزائن کرتی ہے (بڑے پیمانے پر بیان کی گئی ہے) وہ ایک ایسا ڈیزائن تیار کرے گی جس کا ڈھانچہ تنظیم کے مواصلاتی ڈھانچے کی نقل ہو۔
میں نے ہمیشہ یقین کیا ہے کہ یہ تصور واقعی بہت آفاقی ہے اور سنہری اصول کی نمائندگی کرتا ہے۔
پھر میں نے ماڈلنگ سسٹمز کے لیے ایرک ایونز کے ڈومین سے چلنے والے ڈیزائن (DDD) اپروچ کو سیکھنا شروع کیا۔ ایرک ایونز باؤنڈڈ سیاق و سباق کی شناخت کی اہمیت پر زور دیتے ہیں۔ اس تصور میں ایک پیچیدہ ڈومین ماڈل کو چھوٹے، زیادہ قابل انتظام حصوں میں تقسیم کرنا شامل ہے، ہر ایک اپنے محدود علم کے ساتھ۔ یہ نقطہ نظر موثر ٹیم مواصلات میں مدد کرتا ہے، کیونکہ یہ پورے ڈومین کے وسیع علم کی ضرورت کو کم کرتا ہے اور سیاق و سباق کی تبدیلی کو کم کرتا ہے، اس طرح بات چیت کو زیادہ موثر بناتا ہے۔ سیاق و سباق کی تبدیلی اب تک کی سب سے بری اور سب سے زیادہ وسائل استعمال کرنے والی چیز ہے۔ یہاں تک کہ کمپیوٹر بھی اس کے ساتھ جدوجہد کر رہے ہیں۔ اگرچہ سیاق و سباق کی تبدیلی کی مکمل عدم موجودگی کو حاصل کرنے کا امکان نہیں ہے، لیکن میرا خیال ہے کہ ہمیں اسی کے لیے کوشش کرنی چاہیے۔
کانوے کے قانون کی طرف لوٹتے ہوئے، مجھے اس کے ساتھ کئی مسائل ملے ہیں۔
پہلا مسئلہ جس کا سامنا میں نے کانوے کے قانون کے ساتھ کیا ہے، جس سے پتہ چلتا ہے کہ نظام کا ڈیزائن تنظیمی ڈھانچے کا آئینہ دار ہے، پیچیدہ اور جامع باؤنڈڈ سیاق و سباق کی تشکیل کی صلاحیت ہے۔ یہ پیچیدگی اس وقت پیدا ہوتی ہے جب تنظیمی ڈھانچہ ڈومین کی حدود کے ساتھ منسلک نہیں ہوتا ہے، جس کے نتیجے میں باؤنڈڈ سیاق و سباق پیدا ہوتے ہیں جو بہت زیادہ ایک دوسرے پر منحصر ہوتے ہیں اور معلومات سے لدے ہوتے ہیں۔ یہ ترقیاتی ٹیم کے لیے بار بار سیاق و سباق کی تبدیلی کا باعث بنتا ہے۔
ایک اور مسئلہ یہ ہے کہ تنظیمی اصطلاحات کوڈ کی سطح پر لیک ہو جاتی ہیں۔ جب تنظیمی ڈھانچے میں تبدیلی آتی ہے، تو اس کے لیے کوڈ بیس میں ترمیم کی ضرورت ہوتی ہے، قیمتی وسائل استعمال ہوتے ہیں۔
اس طرح، Inverse Conway Maneuver کی پیروی کرنا اس نظام اور تنظیم کو بنانے میں مدد کرتا ہے جو مطلوبہ سافٹ ویئر فن تعمیر کی حوصلہ افزائی کرتا ہے۔ تاہم، یہ کہنا قابل ذکر ہے کہ یہ نقطہ نظر پہلے سے تشکیل شدہ فن تعمیر اور ڈھانچے میں بہت اچھا کام نہیں کرے گا کیونکہ اس مرحلے میں تبدیلیاں طویل ہوتی ہیں، لیکن یہ اسٹارٹ اپس میں غیر معمولی کارکردگی کا مظاہرہ کر رہا ہے کیونکہ وہ کسی بھی تبدیلی کو متعارف کرانے میں جلدی کرتے ہیں۔
یہ پیٹرن یا "اینٹی پیٹرن" بغیر کسی فن تعمیر کے نظام کی تعمیر کو چلاتا ہے۔ ناگزیر بڑھتی ہوئی پیچیدگی پر قابو پانے کے بارے میں کوئی اصول، کوئی حدود، اور کوئی حکمت عملی نہیں ہے۔ سافٹ ویئر سسٹم کی تعمیر کے سفر میں پیچیدگی سب سے بڑا دشمن ہے۔
اس قسم کے نظام کی تعمیر سے بچنے کے لیے ہمیں مخصوص اصولوں اور پابندیوں پر عمل کرنے کی ضرورت ہے۔
سافٹ ویئر آرکیٹیکچر کی بے شمار تعریفیں ہیں۔ مجھے ان میں سے بہت سے لوگ پسند ہیں کیونکہ وہ اس کے مختلف پہلوؤں کا احاطہ کرتے ہیں۔ تاہم، فن تعمیر کے بارے میں استدلال کرنے کے لیے، ہمیں قدرتی طور پر ان میں سے کچھ کو اپنے ذہنوں میں بنانے کی ضرورت ہے۔ اور یہ کہنا قابل ذکر ہے کہ یہ تعریف تیار ہوسکتی ہے۔ تو، کم از کم ابھی کے لیے، میرے پاس اپنے لیے درج ذیل تفصیل ہے۔
سافٹ ویئر آرکیٹیکچر ان فیصلوں اور انتخاب کے بارے میں ہے جو آپ ہر روز کرتے ہیں جو بلٹ سسٹم کو متاثر کرتے ہیں۔
فیصلے کرنے کے لیے آپ کو اپنے "بیگ" کے اصولوں اور پیدا ہونے والے مسائل کو حل کرنے کے لیے پیٹرن کی ضرورت ہے، یہ بتانا بھی ضروری ہے کہ ضروریات کو سمجھنا ایک کاروبار کی ضرورت کی تعمیر کے لیے کلید ہے۔ تاہم، بعض اوقات تقاضے شفاف نہیں ہوتے ہیں یا اس کی وضاحت بھی نہیں کی جاتی ہے، اس صورت میں، بہتر ہے کہ مزید وضاحت حاصل کرنے کے لیے انتظار کریں یا اپنے تجربے پر بھروسہ کریں اور اپنی بصیرت پر بھروسہ کریں۔ لیکن بہرحال، اگر آپ کے پاس انحصار کرنے کے لیے اصول اور نمونے نہیں ہیں تو آپ صحیح طریقے سے فیصلے نہیں کر سکتے۔ اسی جگہ میں سافٹ ویئر آرکیٹیکچر اسٹائل کی تعریف کی طرف آرہا ہوں۔
سافٹ ویئر آرکیٹیکچر اسٹائل اصولوں اور نمونوں کا ایک مجموعہ ہے جو سافٹ ویئر بنانے کا طریقہ بتاتا ہے۔
منصوبہ بند فن تعمیر کے مختلف اطراف پر توجہ مرکوز کرنے والے بہت سے مختلف آرکیٹیکچرل اسٹائلز ہیں، اور ان میں سے متعدد کو ایک ساتھ لاگو کرنا ایک عام صورتحال ہے۔
مثال کے طور پر، جیسے:
یک سنگی فن تعمیر
ڈومین سے چلنے والا ڈیزائن
اجزاء پر مبنی
مائیکرو سروسز
پائپ اور فلٹرز
واقعہ پر مبنی
مائکروکرنل
خدمت پر مبنی
اور اسی طرح…
بلاشبہ، ان کے اپنے فوائد اور نقصانات ہیں، لیکن سب سے اہم چیز جو میں نے سیکھی ہے وہ یہ ہے کہ فن تعمیر بتدریج ارتقاء پذیر ہوتا ہے جبکہ اصل مسائل پر منحصر ہوتا ہے۔ یک سنگی فن تعمیر سے شروع کرنا آپریشنل پیچیدگیوں کو کم کرنے کے لیے ایک بہترین انتخاب ہے، بہت امکان ہے کہ یہ فن تعمیر پروڈکٹ کی تعمیر کے پروڈکٹ-مارکیٹ فٹ (PMI) مرحلے تک پہنچنے کے بعد بھی آپ کی ضروریات کو پورا کرے گا۔ پیمانے پر، آپ خود مختار تعیناتی، متفاوت ٹیک اسٹیک ماحول، اور کم جوڑے ہوئے فن تعمیر (اور اس دوران ایونٹ سے چلنے والی اور پب-سب اپروچ کی نوعیت کی وجہ سے کم شفاف) کے حصول کے لیے ایونٹ پر مبنی نقطہ نظر اور مائیکرو سروسز کی طرف بڑھنے پر غور کر سکتے ہیں۔ ان کو اپنایا جاتا ہے)۔ سادگی اور کارکردگی قریب ہے اور ایک دوسرے پر بہت اچھا اثر ڈالتی ہے۔ عام طور پر، پیچیدہ فن تعمیر نئی خصوصیات کی ترقی کی رفتار کو متاثر کرتے ہیں، موجودہ خصوصیات کی حمایت اور برقرار رکھنے، اور نظام کے قدرتی ارتقا کو چیلنج کرتے ہیں۔
تاہم، پیچیدہ نظاموں کو اکثر پیچیدہ اور جامع فن تعمیر کی ضرورت ہوتی ہے، جو کہ ناگزیر ہے۔
منصفانہ طور پر، یہ ایک بہت ہی وسیع موضوع ہے، اور قدرتی ارتقاء کے لیے نظام کی ساخت اور تعمیر کے بارے میں بہت سے عظیم خیالات موجود ہیں۔ اپنے تجربے کی بنیاد پر، میں نے درج ذیل طریقہ کار پر کام کیا ہے:
ڈی اے یو (ڈیلی ایکٹو یوزرز)، ایم اے یو (ماہانہ ایکٹیو یوزرز)، آر پی سی (درخواست فی سیکنڈ) اور ٹی پی سی (ٹرانزیکشن فی سیکنڈ) جیسے نمبرز اور میٹرکس کو سمجھنا بھی ضروری ہے کیونکہ یہ آپ کو انتخاب کرنے میں مدد دے سکتا ہے کیونکہ فن تعمیر 100 فعال صارفین اور 100 ملین فعال صارفین مختلف ہیں۔
حتمی نوٹ کے طور پر، میں یہ کہوں گا کہ فن تعمیر کا پروڈکٹ کی کامیابی پر نمایاں اثر پڑتا ہے۔ اسکیلنگ میں پروڈکٹس کے لیے ناقص ڈیزائن کردہ فن تعمیر کی ضرورت ہوتی ہے، جو کہ ممکنہ طور پر ناکامی کا باعث بنتا ہے کیونکہ جب آپ سسٹم کو اسکیل کرتے ہیں تو گاہک انتظار نہیں کریں گے، وہ ایک مدمقابل کا انتخاب کریں گے، اس لیے ہمیں ممکنہ اسکیلنگ سے آگے رہنے کی ضرورت ہے۔ اگرچہ میں تسلیم کرتا ہوں کہ بعض اوقات یہ ایک دبلی پتلی نقطہ نظر نہیں ہوسکتا ہے، خیال یہ ہے کہ ایک توسیع پذیر لیکن پہلے سے اسکیل شدہ نظام نہیں ہے۔ دوسری طرف، ایک بہت ہی پیچیدہ اور پہلے سے ہی سکیلڈ سسٹم کے ساتھ کوئی گاہک نہیں ہے یا ان میں سے بہت سے حاصل کرنے کا منصوبہ ہے، اس سے آپ کو اپنے کاروبار پر بغیر کسی قیمت کے پیسے خرچ ہوں گے۔
ٹیکنالوجی کے اسٹیک کا انتخاب بھی ایک میکرو لیول کا فیصلہ ہے کیونکہ یہ بھرتی، نظام کے قدرتی ارتقاء کے تناظر، اسکیل ایبلٹی، اور سسٹم کی کارکردگی کو متاثر کرتا ہے۔
یہ ٹیکنالوجی اسٹیک کو منتخب کرنے کے لیے بنیادی تحفظات کی فہرست ہے:
ایک سے زیادہ ٹکنالوجی کے اسٹیک ہونے سے کاروبار کی نمو کیسے متاثر ہو سکتی ہے؟
ایک نقطہ نظر سے، ایک اور اسٹیک متعارف کروانے سے آپ کی خدمات حاصل کی جا سکتی ہیں، لیکن دوسری طرف، یہ دیکھ بھال کے اضافی اخراجات لاتا ہے کیونکہ آپ کو دونوں اسٹیکوں کو سپورٹ کرنے کی ضرورت ہے۔ لہذا، جیسا کہ میں نے پہلے کہا، میرے نقطہ نظر میں، صرف اضافی ضرورت کو مزید ٹیکنالوجی کے ڈھیروں کو شامل کرنے کی دلیل ہونی چاہیے۔
لیکن کسی خاص مسئلے کے لیے بہترین ٹول کو منتخب کرنے کے اصول کے بارے میں کیا ہے؟
بعض اوقات آپ کے پاس کوئی اور چارہ نہیں ہوتا ہے سوائے ایک مخصوص مسئلے کو حل کرنے کے لیے نئے ٹولز لانے کے لیے جو اوپر بیان کیے گئے انہی باتوں پر مبنی ہیں، ایسی صورتوں میں، بہترین حل کا انتخاب کرنا سمجھ میں آتا ہے۔
کسی مخصوص ٹکنالوجی کے ساتھ اعلی جوڑے کے بغیر نظام کی تخلیق ایک چیلنج ہوسکتی ہے۔ پھر بھی، ایسی حالت کے لیے کوشش کرنا مددگار ہے جہاں نظام کو ٹیکنالوجی کے ساتھ مضبوطی سے جوڑا نہیں گیا ہے، اور اگر کل، کوئی مخصوص فریم ورک یا ٹول کمزور یا فرسودہ ہو جائے تو یہ نہیں مرے گا۔
ایک اور اہم غور اوپن سورس اور ملکیتی سافٹ ویئر انحصار سے متعلق ہے۔ ملکیتی سافٹ ویئر آپ کو کم لچک اور اپنی مرضی کے مطابق ہونے کا امکان فراہم کرتا ہے۔ پھر بھی، سب سے خطرناک عنصر وینڈر لاک ان ہے، جہاں آپ وینڈر کی مصنوعات، قیمتوں، شرائط اور روڈ میپ پر انحصار کرتے ہیں۔ یہ خطرناک ہو سکتا ہے اگر وینڈر سمت بدلتا ہے، قیمتیں بڑھاتا ہے، یا پروڈکٹ کو بند کر دیتا ہے۔ اوپن سورس سافٹ ویئر اس خطرے کو کم کرتا ہے، کیونکہ کوئی ایک ادارہ اسے کنٹرول نہیں کرتا ہے۔ تمام سطحوں پر ناکامی کے ایک نقطہ کو ختم کرنا ترقی کے لیے قابل اعتماد نظام کی تعمیر کی کلید ہے۔
ناکامی کا واحد نقطہ (SPOF) کسی نظام کے کسی بھی حصے سے مراد ہے، اگر یہ ناکام ہوجاتا ہے، تو پورے نظام کو کام کرنا بند کردے گا۔ ہر سطح پر SPOFs کو ختم کرنا کسی بھی نظام کے لیے بہت ضروری ہے جس کے لیے اعلیٰ دستیابی کی ضرورت ہوتی ہے۔ علم، عملہ، سسٹم کے اجزاء، کلاؤڈ فراہم کرنے والے، اور انٹرنیٹ کیبلز سمیت ہر چیز ناکام ہو سکتی ہے۔
ناکامی کے واحد نکات کو ختم کرنے کے لیے ہم کئی بنیادی تکنیکوں کا اطلاق کر سکتے ہیں:
اس مضمون میں، ہم نے میکرو کے کئی اہم پہلوؤں اور ان کی پیچیدگی سے نمٹنے کے طریقے کا احاطہ کیا۔
پڑھنے کے لیے آپ کا شکریہ! اگلی بار ملتے ہیں!