در دنیای فناوری پرشتاب، تیم ها اغلب با کشمکش بین «سرعت توسعه»—یعنی تمایل به عرضه سریع ویژگی ها—و «قابلیت نگهداری کد»—یعنی نوشتن کد تمیز و مقیاس پذیر که به راحتی قابل به روزرسانی است—مواجه می شوند. در حالی که سرعت امروز سهم بازار را به دست می آورد، نگهداری تضمین می کند که محصول فردا زیر وزن خود فرو نریزد.
برجستهها
سرعت به شما زمان در بازار می دهد، اما نگهداری به شما طول عمر می دهد.
سرعت کنترل نشده منجر به «کد میراثی» می شود که در نهایت غیرقابل تغییر می شود.
قابلیت نگهداری سرمایه گذاری ای است که بعدا بهره «منفی» در زمان توسعه ایجاد می کند.
موفق ترین تیم ها یک «حالت پایدار» پیدا می کنند که هر دو عامل را متعادل می کند.
سرعت توسعه چیست؟
سرعتی که یک تیم می تواند از یک مفهوم به یک ویژگی زنده و کاربردی در تولید منتقل شود.
اغلب ویژگی های «حداقل محصول قابل قبول» (MVP) را در اولویت قرار می دهد تا بازخورد فوری کاربران را جمع آوری کند.
ممکن است شامل استفاده از میانبرها، مقادیر سخت کدگذاری شده یا رد کردن مجموعه های جامع تست باشد.
این موضوع برای استارتاپ هایی که باید مدل کسب وکار خود را قبل از تمام شدن سرمایه اثبات کنند، حیاتی است.
به شدت به نمونه سازی سریع و ادغام های آماده با شخص ثالث متکی است.
می تواند منجر به «بدهی فنی» شود که مانند بهره مالی روی کدهای ضعیف نوشته شده عمل می کند.
قابلیت نگهداری کد چیست؟
سهولت فهم، اصلاح و بهبود نرم افزار در طول کل چرخه عمرش.
بر اصول کد پاک، معماری ماژولار و قراردادهای نام گذاری سازگار تأکید دارد.
مستندسازی جامع و پوشش تست خودکار بالا برای جلوگیری از پسرفت لازم است.
زمان «ورود به کار» برای توسعه دهندگان جدیدی که به پروژه بلندمدت می پیوندند را کاهش می دهد.
هزینه کل مالکیت را با سریع تر کردن رفع باگ های آینده کاهش می دهد.
اطمینان حاصل می کند که سیستم می تواند مقیاس پذیر باشد تا کاربران بیشتری را بدون نیاز به بازنویسی کامل پشتیبانی کند.
جدول مقایسه
ویژگی
سرعت توسعه
قابلیت نگهداری کد
هدف اصلی
زمان ورود به بازار
ثبات بلندمدت
پیچیدگی کد
ریسک کد اسپاگتی بالا
Low (ساختاریافته و مدولار)
پروفایل هزینه
پایین در پیش رو، بالا در ادامه
جلوی بالا، پایین بعدا
آزمون سخت گیری
مینیمال/دستی
گسترده/خودکار
مستندات
پراکنده یا اصلا وجود ندارد
جامع و واضح
عامل ریسک
شکنندگی سیستم
پنجره های بازار از دست رفته
مقایسه دقیق
تأثیر بدهی فنی
تمرکز صرف بر سرعت باعث ایجاد بدهی فنی می شود که همان راه حل های «سریع و ساده» هستند که باید بعدا به آن ها پرداخته شود. اگر یک تیم خیلی سریع و طولانی حرکت کند، بدهی جمع می شود تا هر ویژگی جدید ده برابر بیشتر طول بکشد چون کد پایه بسیار شکننده است. Maintainability تلاش می کند این بدهی را از ابتدا با طراحی دقیق پرداخت کند.
مقیاس پذیری و تکامل
سیستمی که برای سرعت ساخته شده اغلب به «سقف» می رسد و نمی تواند داده یا کاربران بیشتری را بدون کرش مدیریت کند. کد قابل نگهداری با لایه های انتزاعی ساخته می شود که به توسعه دهندگان اجازه می دهد با کمترین اصطکاک اجزا را تعویض یا زیرساخت را ارتقا دهند. این ماژولار بودن همان چیزی است که یک نمونه اولیه را از یک برنامه حرفه ای سازمانی متمایز می کند.
روحیه توسعه دهندگان و گردش مالی
کار در محیطی با سرعت بالا و نگهداری کم اغلب منجر به فرسودگی توسعه دهندگان به دلیل «آتش نشانی» مداوم باگ ها می شود. در مقابل، کدبیس های قابل نگهداری حس غرور را تقویت می کنند و به توسعه دهندگان اجازه می دهند تا بر ساختن چیزهای جدید تمرکز کنند، نه اصلاح همان منطق شکسته. یک کدبیس تمیز یکی از بهترین ابزارها برای حفظ بهترین استعدادهای مهندسی است.
ارزش کسب وکار در طول زمان
ارزش تجاری سرعت از پیش تعیین می شود؛ این به شما کمک می کند مسابقه را ببرید. با این حال، ارزش تجاری قابلیت نگهداری نمایی است؛ این تضمین می کند که در مسابقه باقی بمانید. اکثر شرکت های موفق در نهایت از ذهنیت «سریع حرکت کن» به مرحله «رشد پایدار» روی می آورند تا دارایی های اصلی خود را محافظت کنند.
مزایا و معایب
سرعت توسعه
مزایا
+ورود سریع تر به بازار
+هزینه اولیه پایین تر
+بازخورد فوری
+چابکی بالا
مصرف شده
−سیستم شکننده
−راه حل های پرهزینه آینده
−مقیاس بندی سخت است
−فرسودگی شدید توسعه دهندگان
قابلیت نگهداری کد
مزایا
+مقیاس پذیری آسان
+باگ های تولید کمتر
+ورود سریع تر
+عملکرد پایدار
مصرف شده
−پرتاب اولیه کندتر
−هزینه اولیه بالاتر
−ریسک مهندسی بیش از حد
−بازخورد تأخیری
تصورات نادرست رایج
افسانه
نوشتن کد قابل نگهداری همیشه دو برابر زمان می برد.
واقعیت
اگرچه در ابتدا نیاز به تفکر بیشتری دارد، توسعه دهندگان باتجربه اغلب کدهای قابل نگهداری را با سرعتی مشابه کد «نامرتب» می نویسند چون از الگوهای تثبیت شده استفاده می کنند که از خطاهای منطقی دایره ای جلوگیری می کند.
افسانه
بدهی فنی همیشه چیز بدی است.
واقعیت
بدهی فنی می تواند ابزاری استراتژیک باشد. مانند وام کسب وکار، این امکان را به شما می دهد که حضور بازار را همین حالا «بخری» به شرطی که برنامه روشنی برای بازپرداخت قبل از اینکه بهره پروژه را خراب کند، داشته باشید.
افسانه
کد قابل نگهداری به معنای «بدون باگ» است.
واقعیت
باگ ها در هر سیستمی اجتناب ناپذیرند. با این حال، کد قابل نگهداری باعث می شود این باگ ها بسیار راحت تر پیدا شوند، جدا شوند و رفع شوند بدون اینکه سه ویژگی نامرتبط دیگر در این فرآیند آسیب ببینند.
افسانه
می توانید بعدا وقتی پروژه موفق شد، کد را «پاک سازی» کنید.
واقعیت
در واقعیت، پس از موفقیت یک پروژه، فشار برای ارسال ویژگی ها معمولا افزایش می یابد. بسیار نادر است که یک تیم به اندازه کافی «توقف» داشته باشد تا آشفتگی عمیق معماری را اصلاح کند.
سوالات متداول
«نسبت طلایی» بین سرعت و نگهداری چیست؟
درصد ثابتی وجود ندارد، اما یک استاندارد رایج صنعت، قانون ۸۰/۲۰ است. ۸۰ درصد از تلاش خود را صرف تحویل ویژگی ها و ۲۰ درصد صرف «بازسازی» یا پرداخت بدهی فنی کنید تا کدبیس سالم بماند.
چطور نیاز به قابلیت نگهداری را به ذینفعان غیر فنی توضیح دهم؟
از تشبیه «نگهداری خودرو» استفاده کنید. شما می توانید با سرعت ۱۰۰ مایل بر ساعت بدون تعویض روغن رانندگی کنید تا در زمان صرفه جویی کنید، اما در نهایت موتور قفل می کند و در کنار جاده گیر می کنید در حالی که رقبایتان از کنار شما عبور می کنند.
آیا ابزارهای خودکار می توانند به نگهداری و نگهداری کمک کنند؟
بله، ابزارهایی مثل Linters، Static Analysis و SonarQube می توانند به طور خودکار کد نامرتب یا پیچیدگی بالا را علامت گذاری کنند. با این حال، این ابزارها نمی توانند معماری اساسا خراب را اصلاح کنند؛ این هنوز نیازمند طراحی انسانی و آینده نگری است.
آیا توسعه چابک سرعت را نسبت به نگهداری ترجیح می دهد؟
چابک اغلب به اشتباه به عنوان «سریع حرکت کن و چیزها را بشکن» تفسیر می شود، اما مانیفست چابک در واقع بر «برتری فنی» تأکید دارد. True Agile نیازمند نگهداری است تا تیم بتواند در هر اسپرینت به تغییرات پاسخ دهد.
چه زمانی می توان کاملا قابلیت نگهداری را نادیده گرفت؟
این قابلیت برای «نمونه های اولیه دورریختنی» قابل قبول است—کدی که به طور خاص برای آزمایش یک مفهوم بصری یا یک جریان منطقی نوشته شده و شما صددرصد قصد دارید پس از اثبات مفهوم، آن را حذف و از ابتدا بازنویسی کنید.
«مستندسازی» چگونه در این مقایسه جای می گیرد؟
مستندسازی یکی از ستون های نگهداری است. بدون آن، هدف کد زمانی که نویسنده اصلی می رود، از بین می رود و عملا کد «اسپیدی» به یک جعبه سیاه تبدیل می شود که هیچ جرأت لمس آن را ندارد.
اولین نشانه هایی که نشان می دهد سرعت پروژه ام را نابود می کند چیست؟
به دنبال «باگ های رگرسیون» (اصلاح یک چیز چیز دیگر را خراب می کند) و «کاهش سرعت» باشید. اگر تیم شما سخت تر کار می کند اما هر ماه کارهای کمتری انجام می دهد، بدهی فنی احتمالا مسیر توسعه شما را مسدود کرده است.
آیا «مهندسی بیش از حد» ریسک نگهداری پذیری است؟
قطعا. توسعه دهندگان می توانند هفته ها صرف ساخت یک سیستم «کاملا مقیاس پذیر» برای محصولی کنند که شاید هرگز بیش از ده کاربر نداشته باشد. هدف، قابلیت نگهداری «به موقع و به موقع» است—ساختن برای مقیاسی که در ۶ تا ۱۲ ماه آینده انتظار دارید.
حکم
سرعت توسعه را برای نمونه های اولیه مراحل اولیه، ضرب الاجل های فشرده یا هنگام اعتبارسنجی یک فرضیه بازار جدید انتخاب کنید. سرمایه گذاری در قابلیت نگهداری کد برای محصولات اصلی کسب وکار، سیستم های مالی یا هر برنامه ای که قرار است بیش از شش ماه دوام بیاورد و رشد کند.