اجتناب از گسترش دامنه¶
«افزایش تدریجی دامنه» زمانی رخ میدهد که فهرست مشکلاتی که با یک مشارکت حل شدهاند یا ویژگیهایی که پیادهسازی شدهاند، بهطور قابلتوجهی فراتر از آنچه در آغاز کار در نظر گرفته شده بود، رشد کند. شما با یک مسئله ساده شروع میکنید؛ یک مشکل مرتبط را کشف میکنید و تصمیم میگیرید آن را هم اصلاح کنید؛ سپس مسئلهای سوم… قبل از آنکه متوجه شوید، یک درخواست کشش دارید که پنج مسئله را بسته و سه ویژگی جدید اضافه کرده و شامل دهها فایل است.
گسترش دامنه پروژه برای همه پیش میآید. این مفهومی است که برای توسعهدهندگان باتجربه کاملاً آشناست؛ همه ما بارها آن را تجربه کردهایم و با تمام مشکلاتی که به همراه دارد روبهرو شدهایم.
دلایل بسیار عملی برای اجتناب از گسترش دامنه وجود دارد. هرچه یک مشارکت بزرگتر شود، کار با آن دشوارتر میشود. شناسایی موارد حاشیهای یا مشکلات احتمالی سختتر میشود، که به این معنی است که کیفیت کلی مشارکت ممکن است کاهش یابد. بازبینیها نیز زمانی که بازبین باید با چندین زمینهٔ بالقوه نامرتبط سروکار داشته باشد، دشوارتر میشوند. یک مشارکت بزرگتر به معنای نظرات بازبینی بیشتر است و برای شما بهعنوان مشارکتکننده، دنبال کردن چندین رشتهٔ بازبینی میتواند دشوار شود. حتی تجربهٔ شما در گیتهاب نیز آسیب میبیند – رابط کاربری گیتهاب با بزرگتر شدن اندازهٔ یک PR کند میشود، به این معنی که پیمایش فایلها از طریق رابط گیتهاب و تلاش برای گذاشتن نظرات بازبینی بهطور فزایندهای دشوار میشود.
هر زمان که دلیلی برای افزودن چیزی به مشارکت خود پیدا کردید که بهطور صریح بخشی از پیشنهاد اصلی یا گزارش باگ نباشد، باید بررسی کنید که آیا در حال مواجهه با گسترش دامنه هستید یا خیر. آیا دو ویژگی متمایز وجود دارد که بتوان آنها را بهطور جداگانه پیادهسازی کرد؟ آیا میتوان یک ویژگی را با یک محدودیت یا باگ شناختهشده پیادهسازی کرد و آن باگ را در یک درخواست کشش بعدی رفع نمود؟ آیا بخشی از رفع باگ از بخش دیگر مستقل است؟ اگر بخشی از یک تغییر را میتوان بدون دستکاری مشارکت اصلی حذف کرد، احتمالاً باید این کار انجام شود.
توسعه نرمافزار همیشه فرآیندی از بهبود تدریجی است. هر مشارکت فردی باید پس از ادغام، پایگاه کد را در وضعیتی بهتر قرار دهد، اما کاملاً قابل قبول است که باگها یا بخشهایی از ویژگیها را بهعنوان کار برای بهبودهای آینده باقی بگذاریم. این ممکن است به معنای تقسیم یک درخواست برداشت (pull request) به چند بخش مستقل برای بازبینی جداگانه باشد، یا ثبت یک مسئله تا شخص دیگری بتواند آن را بررسی و حل کند.
محدود کردن دامنه هر مشارکت به همه افراد درگیر، از جمله خودتان، کمک میکند. بازبینان شما و حتی خودتان از آن قدردانی خواهید کرد.