Първо, извинявам се за твърде общото и вероятно твърде широко заглавие.

Със сигурност съм наясно с факта, че терминът „технология“ обхваща широк набор от неща и значения за различни хора, така че нека го стесня малко. Технологията, за която ще говоря, е предимно софтуер, помислете за езици за програмиране и техните версии, междинен софтуер, версии на рамка и т.н.

Проблемът

Така че тук говорим за софтуер или уеб инженерство. И въпреки че това може да се приложи към хардуер и други неща очевидно, голямата разлика би била цената. Надграждането на софтуер просто струва малко време (поне когато говорим за софтуер с отворен код) за надграждане и тестване дали нищо не е счупено, докато надграждането на хардуер може да струва цяло състояние, в зависимост от вашата ситуация. Но вие получавате представа за какво е тази публикация в блога.

Сега знам, че вече има тонове статии и какво ли още не по тази тема, витаещи в дълбините на киберпространството, така че защо да пускаме още една, може да попитате?

Просто казано, това е моят опит да бъда още един глас на причината защо актуализирането има смисъл и трябва да се извършва редовно.

През цялата си кариера се натъкнах на безброй проекти, където кодовата база и/или заобикалящата я технология бяха (полу)изоставени, десетилетни, безнадеждно остарели и честно казано, тиктакаща бомба със закъснител по отношение на сигурността. Бонус точки, ако използваната технология е била някакво неясно нещо, което може да е изглеждало обещаващо тогава, и някой (вероятно някой беден разработчик, на когото е възложено да направи целия проект) просто е бил опитен в тази технология. Разбира се, този човек отдавна беше продължил напред и дори беше напуснал компанията, така че никой не разбираше цялата кодова база и технологията. Или в някои случаи той е успял да предаде знанията си, но технологията просто е умряла преди години и тъй като работи „съвсем добре“ в производството и вероятно генерира някакъв вид приходи за компанията, би било трудно да се оправдае възстановяването то с актуална, най-съвременна технология. Поне от гледна точка на бизнеса (четете мениджърите), т.е.

Вместо това, остарялото приложение беше закърпено с течение на времето, докато приложението все повече и повече не се харесваше от нещастните инженери, които бяха поставени да отговарят за него (да, това често бях аз).

Позволете ми да ви направя бърз преглед на последствията, които това има:

  • Общността продължава напред, което свива наличните ресурси около технологията
  • Когато технологията бъде изоставена, тя няма да получава повече актуализации, което може да е критично по отношение на сигурността
  • Инженерите са принудени да работят с остаряла технология, което може да повлияе на мотивацията им. Никой инженер не иска да работи с нещо, което няма да бъде полезно в бъдеще.
  • Ако най-накрая трябва да надстроите нещата, ще бъде много по-трудно да го направите, защото ще има по-значителни промени и несъвместимости, когато надстроите от, да речем, версия 1 до версия 5, вместо постепенно да надграждате второстепенни версии на всеки няколко месеци или нещо такова. В крайна сметка времето, изразходвано за това, както и нивото на разочарование, което носи, ще бъдат експоненциално по-високи. Това също ще струва на бизнеса повече пари.

Трябва да има по-добър начин, нали? Едно, което прави собствениците на бизнес, заинтересованите страни, клиентите и инженерите щастливи.

Как да останете на върха

Нека ви кажа как правим нещата тук в Offskip.

Като общо правило надграждането на второстепенни версии се насърчава и не се нуждае от специално одобрение. Това е просто част от процеса на развитие. Ключът тук обаче е наличието на надеждни автоматизирани тестове. Така че надграждането на някои зависимости или рамката обикновено не е голяма работа. Ние просто провеждаме нашите тестове и коригираме всеки възникнал проблем. Това работи добре в 99% от всички случаи за второстепенни надстройки на версията.

И така, какво ще кажете за основните актуализации? Харесванията, които със сигурност въвеждат чупливи промени и несъвместимости?

За тези задачи обикновено извършваме някои изследователски и развойни дейности. Обикновено събираме информация, свързана с технологията, която използваме, като например информация за скорошни или предстоящи версии, нови функции и критични промени.

Когато излезе стабилна версия, ние правим тест с тази версия и ако всичко работи добре, планираме надстройки за цялата компания. Инженерите, отговарящи за тестовете, не само ще осигурят необходимите стъпки за ефективно извършване на надстройката, но също така и за срещнатите клопки и проблеми, ако е имало такива, и как да ги преодолеете.

Като пример, през последното тримесечие на 2020 г. проучихме надграждане от Vue 2 до Vue 3 и от Laravel 7.x до Laravel 8.

Тъй като разбрахме добре разликите и предстоящите предизвикателства, действителното надграждане протича сравнително гладко.

положителни страни

Като ни позволяват да отделяме малко време, за да поддържаме нещата актуални и да преработваме кода, ние избягваме изграждането на „наследен“ проект на първо място. Като основно правило, ако нещо се използва, то трябва да се поддържа добре и това включва поддържането му актуално, с всичко включено.

Разбира се, в много случаи потребителят няма да разбере или забележи разлика относно промените в основните технологии (може би фино повишаване на производителността?), а мениджърите и заинтересованите страни трябва да бъдат информирани за необходимостта, но дори и разликата се вижда и усеща главно от инженерите, работещи по даден проект, вярвам, че мрежата е по-добро място, когато се управлява от безопасна, производителна и актуална технология.

И така, за да обобщим защо трябва редовно да надграждате технологията си:

  • Безопасност и сигурност
  • производителност
  • В новите версии се въвеждат потенциално нови функции, които улесняват живота на инженера, подобряват производителността, сигурността и т.н.
  • Намирането на таланти, запознати със споменатата технология, е по-лесно, когато търсите да запълните свободни позиции (също така, колкото по-популярна е дадена технология, толкова по-лесно е да намерите инженери)
  • Избягвате да имате наследен код, защото надстройките често ви принуждават да прегледате кода си отново
  • Поддръжката е по-лесна, тъй като се поддържа свежа в паметта на инженерите
  • Инженерите работят с нови технологии, което повишава тяхната мотивация, както и техния набор от умения.
  • Но най-важното е, че избягвате да имате код, който някой беден човек трябва да гледа след години, докато има психически срив, или най-малкото, голям „wtf?“ момент

Недостатъци

Какво ще кажете за недостатъците? Ето някои от очевидните:

  • Трябва да инвестирате малко време, за да сте в крак с познанията си за технологиите, които използвате (което така или иначе има смисъл)
  • В някои случаи планът за надграждане на просто нещо като рамката или някои зависимости може да се превърне в нещо по-голямо, ако установите, че основната технология (като инсталираната версия на вашия език за програмиране или някакъв междинен софтуер) не е съвместима с новата версия от вашата рамка. Това също оказва влияние върху цялостната инфраструктура и трябва да се планира внимателно в няколко отдела или в цялата компания. Вероятно е необходима и някаква форма на одобрение, особено в по-големите компании и в зависимост от вашата позиция в компанията.
  • Някои хора може да се почувстват неудобно от постоянни промени (?) Не съм сигурен дали това е валиден аргумент, тъй като повечето от нас сменят смартфоните си най-късно на всеки две години, което в повечето случаи е по-голяма промяна от обикновен софтуерен ъпгрейд
  • „Не трябва ли вместо това да внедрим функция X или да коригираме грешка Y?“
    Нещо подобно обикновено излиза от устата на някой, който не е инженер, мислят мениджърите. Причината за това обикновено са парите. Очевидно колкото по-бързо предоставяте нова функция или коригирате грешка, толкова по-добре. Вярно е, че тези неща ще осигурят директна стойност, но пренебрегва факта, че поддържането на нещата актуални също носи стойност.
    Да речем, че надстроите своята рамка и тя носи подобрения в производителността и някои елегантни нови начини на писане определени части от вашия код.
    Първо, подобрението на производителността е очевидно, но освен това вече можете да пишете по-добър код, той е по-четлив, по-лесен за разбиране, по-лесен за поддръжка, по-лесен за тестване. Това улеснява и живота на разработчиците, а надолу по пътя ще спестите време и пари.

Заключение

И така, както можете да видите от тези примери, всичко се свежда до стария въпрос „Изчакайте, докато вече не е поносимо, и след това направете всичко наведнъж“ или „Правете малки стъпки от време на време“. В крайна сметка зависи от вас, наистина.

Надявам се обаче с тази статия да успях да обясня защо има смисъл да поддържате технологията си актуална, да правите „малките стъпки редовно“, рисковете да не го правите и как можете да го направите в начин, който не коства на компанията много време и пари.

Бих искал да чуя как вашата компания се справя с наследените технологии и надграждането им!