Saeid Noormohammadi
خواندن ۳ دقیقه·۲ ماه پیش

چرا و چگونه سیستم ها را دپریکیت کنیم؟ - بخش دوم

در بخش اول متوجه شدیم که چرا دپریکیت کردن سیستم های قدیمی مهم است، چگونه این فرایند می تواند سرعت توسعه را افزایش دهد، و چرا کد را باید به عنوان بدهی در نظر گرفت. همچنین به اهمیت برنامه ریزی از ابتدا برای ساده تر کردن حذف سیستم ها اشاره کردیم.

بخش اول: https://vrgl.ir/a2UQz

قانون Hyrum می گوید هرچه شمار کاربران یک سیستم بیشتر باشد، احتمال استفاده آن ها از سیستم به روش های غیر منتظره بیشتر است. این موضوع فرایند دپریکیت کردن و حذف سیستم را به شدت پیچیده می کند. در این شرایط، چیزی که در ظاهر کار می کند، در واقع تضمینی برای عملکرد صحیح ندارد. حذف یک سیستم در این شرایط تغییری اساسی است که نه تنها در آن رفتار سیستم را تغییر می دهیم، بلکه آن را به طور کامل از بین می بریم. این تغییر معمولا وابستگی های پنهان و پیش بینی نشده زیادی را نمایان می کند.

معمولا تا زمانی که یک سیستم جدیدتر با کارکرد مشابه یا بهتر آماده نشود، دپریکیت کردن سیستم های قدیمی ممکن نیست. سیستم جدید همیشه تفاوت هایی با سیستم قدیمی دارد، حتی اگر کارآمدتر باشد. این تفاوت ها موجب می شود پیدا کردن تطابق کامل بین سیستم قدیمی و جدید دشوار باشد و لازم است برای هر مورد استفاده خاص، راه حل متناسب با سیستم جدید پیدا کنیم. در گوگل یک شوخی قدیمی وجود دارد که می گوید دو راه برای انجام کارها وجود دارد، راهی که منسوخ شده و راهی که هنوز آماده نیست!. این اتفاق زمانی رخ می دهد که راه حل جدید تقریبا آماده باشد اما هنوز نمی تواند جایگزین سیستم قدیمی شود.

دپریکیت کردن سیستم علاوه بر زمان بر بودن، هزینه بر نیز هست. تشکیل یک تیم، صرف منابع و اجرای این فرایند نیاز به تامین بودجه و برنامه ریزی دقیق دارد. در مقابل، هزینه های پنهان ناشی از حفظ سیستم های قدیمی به راحتی قابل اندازه گیری نیستند و این امر متقاعد کردن ذی نفعان برای پذیرش دپریکیشن را دشوارتر می کند. به خصوص وقتی که این فرایند ممکن است توسعه ویژگی های جدید را به تعویق بیندازد.

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

گوگل به این نتیجه رسیده است که مهاجرت به سیستم های کاملا جدید فوق العاده پرهزینه است و هزینه های آن اغلب دست کم گرفته می شود. برای همین تلاش های تدریجی برای ارتقای سیستم های موجود، علاوه بر کاهش هزینه ها، امکان ارائه ارزش به کاربران را ساده تر می کند.

شاید طراحی سیستم هایی که بتوان آن ها را به راحتی دپریکیت کرد، در نگاه اول عجیب به نظر برسد. اما این رویکرد در سایر رشته های مهندسی، مثل ساخت نیروگاه های هسته ای، کاملا معمول است. همان طور که برنامه ریزی برای تعطیلی یک نیروگاه از ابتدا انجام می شود، سیستم های نرم افزاری نیز می توانند با در نظر گرفتن پایان عمرشان طراحی شوند. ولی در دنیای نرم افزار این رویکرد اغلب نادیده گرفته می شود. فشار برای انتشار سریع محصولات جدید، افراد را مجبور می کند بیشتر بر ساخت و توسعه تمرکز کنند تا مدیریت پایان عمر سیستم.

برای طراحی سیستم هایی که بتوان به راحتی آن ها را دپریکیت کرد، باید به این سوالات اساسی پاسخ داد:

1. انتقال کاربران به سیستم جایگزین چقدر ساده است؟

2. چگونه می توان بخش هایی از سیستم را به تدریج جایگزین کرد؟


منبع: کتاب Software Engineering at Google

شاید از این پست‌ها خوشتان بیاید