هنوز چند بایت مونده که پیدا کنم...

نرم افزارها را بازنویسی نکنید!

Do not rewrite softwares

باز نویسی نکنید!

به عنوان یه قانون کلی، شما به هیچ عنوان نباید نرم افزارتون رو بازنویسی کنین. به ندرت نرم افزارهای بازنویسی شده ای رو دیدم که موفق شدند و چیزی که مشاهده کردم این بود که همه ی این ها یه سری تجربیات مشابه و وحشتناک داشتن؛ شاید براتون جالب باشه بدونین:

  • این برنامه های بازنویسی شده بیش از حد انتظار زمان بردن؛ درواقع بازار در حال حرکت بود و کل کار این بیزینس (تجارت) متوقف شده بود.
  • این بازنویسی ها میخوان کارها و خصوصیاتی که طی چندین سال نوشته شدن رو در زمان کمی دوباره پیاده سازی کنن...به نظرتون قابل قبوله؟!
  • از طرفی تیم توسعه (برنامه نویس ها) هم تحت فشار قرار میگیره که این کار رو انجام بده و خب این باعث میشه که این حس بهشون القا بشه که همیشه از برنامه عقبن...
  • صاحبان مشاغل هم منزجر میشن و نمیفهمن چرا پروسه بازنویس اینقدر طولانی شده.
  • حالا نسخه ی بازنویسی شده که آماده شد، تازه مشخص شد که تعداد بسیار کمی از کارکرد های جدید رو ارائه داده این نسخه...
  • یه سری قوانین کاری (Business Logic) هم  وجود داره که در طول زمان کلاً فراموش شده بودن و کسی هم معنیشونو نمیدونسته و نهایتا به یه باتلاق تبدیل شدن.
  • از طرفی تا زمانی که همه ی ویژگی های سیستم قدیمی به سیستم جدید منتقل نشده باشه، نمیشه سیستم قدیمی رو کاملاً کنار گذاشت.
  • حین توسعه پیدا کردن سیستم جدید، سیستم قدیمی باید نگهداری می شد.
  • صاحبان بیزینس معمولا توقعاتشون رو تغییر و توسعه میدن که با فرض اینه که از نو نویسی انعطاف بیشتری میاره غافل اینکه زمان مهمترین فاکتور هست.
تعداد زیادی مقاله دررابطه با مشکلات بازنویسی نرم افزارها وجود داره و خالی از لطف نیست که چندتا خوبشو بهتون معرفی کنم:

اتفاق نظر کلی همه ی این مقاله ها اینه که هرگز نرم افزاری رو بازنویسی نکنید؛ مگر اینکه واقعا مجبور باشید.

خب! فکر می کنین چه زمانی شما مجبور به بازنویسی میشین؟ منظورم اینه که وااااقعا مجبور بشین!

خب بعضی وقتا هست که بازنویسی واقعا غیرقابل اجتناب میشه. مثلا  شرکت دیگه اصلا به منبع کدهای محصول اصلیش دسترسی نداشت. این یکی از سخت ترین موقعیت هایی هست که میتونی درش قرار بگیری و اینجاست که میتونم بگم دیگه راهی جز بازنویسی باقی نمیمونه...

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

اگه مجبور به بازنویسی شدید...

بازنویسی همیشه بیشتر از چیزی که فکر می کنین طول می کشه. برای کار طولانی و زیاد آماده باشین :) داشتن یه استراتژی خوب و مؤثر خیلی لازم و ضروریه...درواقع تایمی که داره صرف بازنویسی میشه میتونست صرف اضافه کردن ویژگی های جدید برای پیشرفت تجارت بشه...

صاحب محصول (Product Owner) رو هم درگیر کنین. اونا هم مشتاقن تا هرچه سریعتر بازنویسی رو تکمیل کنن؛ چون پیاده سازی دوباره ی عملکردهایی که داشتنش، براشون هزینه بره. پس حتما اونا رو در جریان پروسه قرار بدین چون میتونن سریعتر مشخصه ها رو اولویت بندی کنن؛  از طرفی میتونن به سؤالاتتون هم پاسخ بدن.

مشخصه های اصلی – که تجارت بدون اونا نمیچرخه – رو شناسایی کنین. تمرکزتون روی این ویژگی ها باشه تا هرچه سریعتر به یک نسخه قابل انتشار از این مجموعه مشخصه ها برسین.

مشخصه ها رو اولویت بندی کنین. اطمینان حاصل کنین که دارین روی مهم ترین مجموعه ی مشخصه ها کار می کنین.

نیازی نیست همه چیز رو هم بازنویسی کنین. خشن باشین:) هرچیزی که فکر می کنین به دردتون نمیخوره رو دور بریزین. به این نکته باید توجه داشته باشین زمانی که داره صرف بازنویسی این مشخصه میشه، میتونست صرف اضافه کردن یه مشخصه ی جدید بشه که به تجارت کمک میکنه.

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

از یه تکنولوژی مستحکم و شناخته شده استفاده کنین. حالا وسوسه نشین برین از جدیدترین و بهترین تکنولوژی ها استفاده کنین فقط به این بهونه که میخواین از نو شروع کنین:) نکته ی کلیدی، اینجا، سرعته...نیازی نیست که با یه تکنولوژی عجیب و غریب و ناشناخته سروکله بزنین...

در اسرع وقت منتشرش کنین؛ البته عجله ی زیادی هم خوب نیست. به یاد داشته باشین که مشتری های فعلی شما نمیخوان سیستم جدیدی که در اختیارشون قرار میدین، درست کار نکنه یا یه سری از مشخصه های مهم رو نداشته باشه.

داده ها رو هرچه زودتر به سیستم جدید منتقل کنین. انتقال داده رو نذارین برای دقیقه ی نود! شما باید ببینین سیستم جدیدتون با داده هایی که دارین کار می کنه یا نه؟! اگر به این مساله توجه نکنید احتمال نیاز به باز نویسی ماژول های اصلی خیلی زیاده.

هر ویژگی را به صورت کامل پیاده سازی کنید. لازم نیست رو لایه های افقی برنامه مثل لایه ی دیتابیس، خدمات، UI و... تمرکز کنین.

اگر ممکنه سیستم قدیمی رو تکه به تکه جایگزین کنید. اگه بتونین بخش هایی از سیستم جدید رو که نوشتدی با با سیستم قدیمی ادغام کنید ، کارتون زودتر پیش میره و زودتر میتونین منتشرش کنین.

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

کثیف کاری نکنید. تست های زیادی برای کار بنویسین (انواع تست ها). یه نرم افزار پر اشکال، هزینه و زمان بیشتری میبره – حتی در یه زمان کوتاه.

هم نویس: شمیم گلچین نژاد
نویسنده : محمد ملک مکان
شنبه 6 دی 1399
+ 80 -

خوشحال میشیم نظرتُ بدونیم