ویرگول
ورودثبت نام
صابر طباطبائی یزدی
صابر طباطبائی یزدیبرنامه نویس۴۴ساله. از مدرک MCSD دات نت سال 2002 شروع کردم البته بعد از لیسانس و تمام عمرم رو در مدیریت با ابزار های شیرپوینت و MSPS و CRM و غیره گذراندم. https://zil.ink/sabert
صابر طباطبائی یزدی
صابر طباطبائی یزدی
خواندن ۴ دقیقه·۴ ماه پیش

🧩 چرا قدیم مستقیم روی Main کامیت می‌زدیم و مشکلی نبود، اما امروز یک اشتباه کوچک فاجعه درست می‌کند؟

🧩 چرا قدیم مستقیم روی Main کامیت می‌زدیم و مشکلی نبود، اما امروز یک اشتباه کوچک فاجعه درست می‌کند؟

یک نگاه تحلیلی به تجربه تیم‌های قدیمی و نیازهای تیم‌های مدرن


🔹 مقدمه: پرسش اصلی از کجا آمد؟

کاربر در صحبت ابتدایی خود اشاره کرد:

«تیم‌های قدیمی ما همیشه کامیت مستقیم روی برنچ main می‌زدند و هیچ مشکلی هم نداشتند.
علتش این بود که همه یک سری قوانین را رعایت می‌کردند. اما الان که پروژه‌ها لایو هستند، یک تغییر اشتباه می‌تواند به درآمد شرکت ضربه بزند…»

این تجربه‌ کاملاً واقعی است و برای بسیاری از تیم‌ها اتفاق افتاده است.
اما چرا همان روشی که در گذشته «بی‌ضرر» بود، امروزه «خطرناک» شده است؟
در این مقاله به شکل بخش‌بندی‌شده و پرسش‌محور به این موضوع می‌پردازیم.


۱) ❓ آیا «کامیت مستقیم روی Main» همیشه اشتباه است؟

✔ تفاوت محیط قدیم و امروز

در گذشته بسیاری از تیم‌ها مستقیماً روی main کار می‌کردند، زیرا:

  • پروژه هنوز لایو نبود،

  • کاربری وجود نداشت که آسیب ببیند،

  • SLA و تعهدات رسمی نبود،

  • درآمدی در خطر نبود.

به همین دلیل یک باگ معمولاً «کشف» می‌شد، نه «فاجعه‌بار».
اما امروز؟

امروز همان باگ کوچک، می‌تواند در یک سرویس لایو:

  • پرداخت مشتری را مختل کند،

  • سفارش را خراب کند،

  • دیتای حساس را تغییر دهد،

  • یا هزاران کاربر را گرفتار کند.

❓ پس چه تغییری کرده؟

پروژه‌ها بزرگ‌تر، عمومی‌تر، وابسته‌تر و پول‌سازتر شده‌اند.

این یعنی قوانین توسعه هم باید به همان نسبت ارتقا پیدا کند.


۲) ❓ پس چرا تیم‌های قدیمی مشکلی نداشتند؟

✔ چهار دلیل که شرایط را برای آنها ساده می‌کرد

🔸 ۱. پروژه لایو نبود

هیچ کاربری وجود نداشت که از باگ آسیب ببیند.

🔸 2. تیم کوچک و هماهنگ بود

همه اعضا رفتارهای هم را می‌دانستند و نوعی Code Review طبیعی وجود داشت.

🔸 3. نرخ تغییرات پایین بود

چند فیچر محدود و بدون وابستگی زیاد.

🔸 4. بازگشت به عقب (Rollback) بسیار ساده بود

نه دیتابیس بزرگ بود، نه سیستم پیچیده.

نتیجه؟
ریسک خیلی کم بود.
و هر روشی در ریسک پایین جواب می‌دهد—even bad practices.


۳) ❓ چرا امروز همان روش تبدیل به یک خطر بزرگ شده است؟

✔ دلیل اصلی: محصول شما اکنون «زنده» است

وقتی سرویس شما اینترنتی، پرکاربر و درآمدزا است:

🔸 ۱. یک باگ کوچک = خسارت مالی بزرگ

دیگر "کشف باگ" نیست؛ "رخداد حادثه" است.

🔸 2. تیم بزرگ است و رفتارها متفاوت

نمی‌توان به «حس مشترک» تکیه کرد.
فرآیند لازم است، نه خاطره‌های خوب گذشته.

🔸 3. وابستگی‌ها و معماری پیچیده

مایکروسرویس، Gateway، SSO، پرداخت، کش، صف، دیتابیس…
یک تغییر اشتباه می‌تواند زنجیره‌ای از خطاها ایجاد کند.

🔸 4. Rollback بسیار پرهزینه است

دیگر مثل گذشته نیست که یک دیتابیس ساده را برگردانی!

پس طبیعی است که امروز:
Merge Request از یک گزینه اختیاری به یک ضرورت حیاتی تبدیل شده است.


۴) ❓ واقعاً Merge Request چه مشکلی را حل می‌کند؟

✔ کارکرد MR فراتر از «ادغام کد» است

MR علاوه بر merge کردن کد، وظایف زیر را هم دارد:

🔹 Code Review

کد یک نفر دیگر توسط فردی دیگر بررسی می‌شود.

🔹 تست و بررسی کیفیت

قبل از رسیدن به main باید pipeline، تست خودکار و lint همه تأیید شوند.

🔹 مستندسازی تغییر

انتشار در main همیشه قابل ردگیری و قابل rollback است.

🔹 ایجاد "پکیج تغییر"

چندین کامیت مرتبط کنار هم قرار می‌گیرند و معنای واحد می‌سازند.

این چیزی است که کاربر هم در متن اولیه‌اش اشاره کرد:

«اگر همه یک بسته‌ی مرج ریکویست بشن هم راحت‌تر مرج میشن هم اینکه بعدا میشه برشون گردوند.»

کاملاً درست؛ MR تغییرات را قابل فهم و قابل بازگشت می‌کند.


۵) ❓ آیا کامیت زیاد بد است یا پراکندگی کامیت‌ها؟

✔ مشکل در «خالی بودن» نیست؛ در «بی‌ارتباط بودن» است

کامیت‌های کوچک و زیاد خوب هستند، اگر مرتبط باشند.

اشتباه اینجاست:

  • کامیت‌های پراکنده

  • بدون پیام واضح

  • بدون وابستگی

  • روی main

این‌ها debug و rollback را کابوس‌وار می‌کنند.

MR این مشکل را حل می‌کند:
تغییرات را در یک بسته واحد قرار می‌دهد.


۶) ❓ پس در نهایت چه نتیجه‌ای می‌گیریم؟

✔ همان روش قدیمی برای محیط امروز مناسب نیست

چرا؟

گذشته امروز پروژه‌های کوچک و بدون مشتری محصول لایو با هزاران کاربر تیم کوچک تیم‌های گسترده و متنوع وابستگی کم معماری پیچیده و حساس ریسک پایین ریسک مالی / امنیتی بالا rollback ساده rollback دشوار و پرخطر

بنابراین:

کامیت مستقیم روی main در پروژه‌های لایو یک خطر بالقوه است.
Merge Request یک ابزار ضروری برای کنترل ریسک، کیفیت و پایداری سیستم است.


۷) پرسش‌های پایانی برای تیم‌ها

🔸 آیا تیم شما امروز به اندازه کافی بزرگ است که بدون MR دچار خطا شود؟

🔸 آیا پروژه شما لایو است و مشتری واقعی دارد؟

🔸 آیا rollback کردن واقعاً ساده است؟

🔸 آیا درآمد شرکت به کیفیت کد شما وابسته است؟

🔸 آیا می‌توانید تضمین کنید همه قوانین تیمی همیشه رعایت شوند؟

اگر پاسخ به این‌ها «نه» است، پس MR دیگر یک انتخاب نیست—یک ضرورت است.


🔚 نتیجه‌گیری

تجربه‌هایی که در گذشته برای تیم‌ها بدون مشکل بوده، به معنی درست بودنشان نیست.
محیط توسعه تغییر کرده، ریسک‌ها بزرگ‌تر شده، و فشار روی کیفیت بسیار بیشتر است.
امروز Merge Request ستون فقرات توسعه حرفه‌ای است و هر تیمی که محصول لایو دارد باید آن را جدی بگیرد.

code reviewبرنامه نویسیاسکرام مستر
۶
۰
صابر طباطبائی یزدی
صابر طباطبائی یزدی
برنامه نویس۴۴ساله. از مدرک MCSD دات نت سال 2002 شروع کردم البته بعد از لیسانس و تمام عمرم رو در مدیریت با ابزار های شیرپوینت و MSPS و CRM و غیره گذراندم. https://zil.ink/sabert
شاید از این پست‌ها خوشتان بیاید