IT-жахастики: розробники розповіли про наслідки legacy-проєктів, помилку вартістю $100 тисяч і раптову зупинку цілого заводу
Гелловін — традиційна пора страхітливих історій та байок. Вистачає їх і в роботі програмістів. Українські розробники розповіли DOU про робочі жахастики, серед яких телепортація до юрського періоду мобільної розробки, помилка в одному рядку коду, що мало не коштувала їм $100 тисяч і раптову зупинку цілого заводу через економію роботодавця на тестовому завданні.
Страшилка про те, як виконуючи тестове я зупинив завод
Андрій Роговський, Senior DevOps, засновник Ukrainian Scientific Journal of Emotional Intelligence Research
Ця історія трапилася тоді, коли я планував змінити роботу та якраз виконував тестове завдання для однієї компанії. Задача була проста: є стандартне середовище, куди надходили файли й за своєю внутрішньою логікою розподілялися у різні піддиректорії й глибше. Файлів багато, все дуже гальмувало. І треба було ті файли, які давніші від певної дати, перекинути в тимчасову директорію, щоб потім їх хтось подивився і далі з ними щось зробив. Усе б нічого, тільки мене ніхто не попередив, що тестове середовище, до якого мені дали доступ, насправді робоче. У компанії, очевидно, вирішили під тестове дати реальну задачу. А що? Зручно: і тестове є, і частина роботи виконана.
Оскільки я не знав, що це продакшн, запустив як тест викладання усіх старих файлів в одну директорію. Аж раптом виявився один цікавий баг: ця система маскувалася під Linux, але це був не він, а запущений емулятор на старій IBM. І там були свої внутрішні обмеження, зокрема щодо роботи з файлами. І коли в тимчасову директорію надійшло більше файлів, ніж зазвичай, і все працювало не на Linux, а на мутації, я повністю вибив з роботи апаратну ноду (хост), на якій були запущені віртуалки. Виявилось, що ця штука під’єднувалась до заводу. І таким чином я зупинив серйозне виробництво.
Усе це чи то через необачність відповідальної за це людини в компанії, чи то через бажання зекономити на тестовому завданні. Зрозуміло, далі зі мною щодо вакансії ніхто не спілкувався. Результат був вельми однозначний. Після цього досвіду можу дати колегам пораду: коли виконуєте тестове завдання, двічі перепитайте, чи точно воно не є «живим» компонентом робочої системи. Бо це може виявитись ще тією страшилкою як для компанії, так і для розробника.
Страшилка про помилку у рядку коду вартістю $100 тисяч
Володимир Рожков, Software Architect у Devlify, автор телеграм-каналу rozho)))k
Кілька років тому ми розробляли кешбек-сервіс. Люди завантажували застосунок, виконували умови, отримували нарахування й далі могли вивести гроші або на картку, або на мобільний рахунок. Паралельно ми розробляли сервіс для краудсорсингу, де користувачі могли виконувати завдання та отримувати за них винагороду. Щоб не розробляти окрему систему для виплат, вирішили скористатися кешбек-сервісом і робили нарахування в ньому. Щоб запобігти фроду та зламам, ми підготували систему лімітів, яка не давала вивести більше ніж $N за добу. Також на рахунку, з якого виводили гроші, ніколи не було великих сум, щоб мінімізувати втрати. Щодня в Slack публікували статистику щодо виплат.
Одного вечора ми виправляли помилку. Здається, користувачам краудсорсу не нараховувалась винагорода. Програміст закомітив фікс, перевірив, ніби все було гаразд. А за кілька годин нам написав клієнт і повідомив, що люди почали виводити більше грошей, ніж зазвичай. Ми швидко перевірили статистику та переконалися: справді якимось чином багато користувачів отримали на баланс більше грошей, ніж мали б. Деякі з них це помітили, вирішили, що це акція щедрості, і почали виводити кошти.
Ми швидко зупинили це та почали шукати джерело помилки. З’ясувалося, що розробник для зміни балансу написав SQL-запит на кшталт «UPDATE users SET balance = balance + 1». Таким чином ми за кожне завдання робили нарахування не тільки користувачу, який його виконав, а всім юзерам кешбек-сервісу взагалі. За кілька годин роботи наш алгоритм нарахував близько сотні тисяч доларів.
Це був один з небагатьох моментів у моїй роботі, коли я відчув реальний страх. На щастя, завдяки лімітам реальних втрат від виведення було приблизно на $500. Ми швидко виправили помилку та до ночі відновлювали коректні баланси. Клієнт був розлючений, а у нас виявився надзвичайно стресовий вечір. Зрештою, ми ще вжили додаткових заходів, щоб запобігти таким ситуаціям. А з тим клієнтом працюємо й досі.
Страшилка про legacy-проєкт і карантин, який зіграв зі мною злий жарт
Дмитро Скороход, Senior iOS Developer в Noteworth
В одній з компаній, де мені доводилось працювати, був legacy-проєкт, написаний на Objective-C. У
Я почувався археологом, і в мені зародився страх, що якщо затримаюсь на цьому проєкті, то втрачу свої навички в сучасних технологіях. Я уявляв собі, як через деякий час мене не беруть на роботу в жодну компанію через забутий Swift. Я навіть взяв собі п’ять днів відпустки та витратив її на те, щоб написати власний проєкт на Swift, освіжити її в пам’яті. Вільний час я присвячував вивченню SwiftUI та Combine, сучасних архітектурних підходів на кшталт VIPER, MVVM і Coordinator, трендів машинного навчання та доповненої реальності.
Але попри все моїм страхам таки судилося збутися. У травні 2020 року, на піку коронавірусного карантину, мене звільнили. Ситуація на ринку праці була настільки складною, що часто вакансії закривали швидше, ніж я встигав на них податися. Відмови йшли за відмовами, я був нікому не потрібний. Ситуація ускладнювалася тим, що ми з дружиною виплачували квартиру в новобудові. Дружина була в декреті, я не міг знайти нову роботу, а тим часом з кожним наступним днем без доходів ми ризикували втратою житла. Тоді ми вирішили переїхати з Одеси до тещі в село в Рівненську область, щоб зекономити на оренді. Більше їхати не було куди, адже мої батьки живуть за кордоном.
Це могло б бути сумною історією, але все закінчилося гепіендом. Після двох місяців пошуків я знайшов роботу, причому на новому проєкті, повністю написаному на Swift з використанням прогресивних технологій, як-от PromiseKit, і крутих архітектурних підходів. Протягом випробувального терміну працював дистанційно з села, а потім повернувся до Києва. У Києві через деякий час я перейшов на кращі умови в іншу компанію, але й досі вдячний тим людям, які після довгих і складних пошуків взяли мене на роботу в липні 2020 року та допомогли зберегти квартиру. У жовтні 2021 року ми внесли останній платіж. Тепер у мене немає страхів, адже я знаю, що «коли ти чогось дуже хочеш, весь Всесвіт допомагатиме тобі», як писав Пауло Коельйо в «Алхіміку».
Страшилки для джунів та «жахастик-контролер» для програмістів
Сергій Журавель, Software Engineer в Absio
Знаю жахастик з роботи мого друга Максима про одну відому компанію. Там працюють лише дистанційно (і робили так ще до того, як ми сховалися по домівках від коронавірусу). Ця компанія пропонує високі рейти (наприклад, 50 доларів на годину), але пильно стежить за працівниками, що, врешті, може стати справжнім кошмаром для розробника. Кожен співробітник має поставити на свій комп’ютер програму, яка робить знімки екрана та камери, відстежує, що ви набираєте на клавіатурі, скільки разів клацнули мишкою. Оплата йде лише за години, зафіксовані через цю програму.
Мій друг протримався пів року, потім попросився на пів ставки, відтак пішов в іншу компанію. Про схожі системи трекінгу я чув багато разів, і не знаю нікого, кому б сподобалося працювати з ними. Маю зізнатися, що одну з перших версій цієї системи саме в цій компанії (вона тоді інакше називалася) я допомагав розробляти на початку своєї кар’єри програміста, але тоді геть не розумів, яку страшну річ ми робимо і скільки людей вона налякає.
Також є кілька професійних страшилок для молодих, і почати варто з Internet Explorer 6. Ходять жахливі історії про те, як веброзробники мали підтримувати IE6, в якому все «не працювало» (насправді в ньому все працювало, просто по-своєму). А нині є ймовірність, що його дух може знову переродитися.
Нещодавно читав цікаву статтю про те, що браузер Safari має усі шанси повторити шлях IE, адже дуже відстає від реалізації сучасних API, повільно оновлюється і має «власний погляд» на деякі реалізації веб-API. Крім того, через політику компанії Apple розробники браузерів не можуть використовувати власний рушій, тому всі браузери (наприклад, Chrome чи Firefox) змушені використовувати WebKit.
А ще новачків нині часто лякають клаудом. Точніше тим, що у разі неправильних заходів безпеки є ризик отримати платіжку на десятки тисяч доларів — наприклад, від Amazon. І це справді часто трапляється. Працювати з Amazon можна почати абсолютно безкоштовно, приблизно рік тримаючи свій власний невеликий сервер. Або отримати сюрприз — рахунок на N тисяч доларів. Особливо якщо ви втратили логін/пароль чи секретні ключі. Ще новачки роблять щось не те випадково або тому, що не розібралися з best practice. Наш DevOps проводить курси із Cloud і там нерідко жартує: «От прийде наш главбух і спитає, чи плануємо ми купувати Amazon, бо рахунок великий прийшов». Щоб не забували вчасно видаляти непотрібні ресурси.
Байки про криптомайнінг і бійки на інтерв’ю
Денис Ювженко, Co-Founder у TADA
Чув я байку про одну львівську контору, де на проєкті працювали з AWS. Місцевий адмін-DevOps дав всій команді з близько 20 людей права адміністраторів. В одну з ночей хтось вирішив запустити в хмарі софт для майнінгу криптовалюти. Оскільки був налаштований Auto Scaling, то AWS почав автоматично під’єднувати все нові й нові додаткові ресурси... Врешті-решт, замовнику надійшов зранку чек на близько $20 тисяч за одну ніч. Винного так і не знайшли, а бідного адміністратора звільнили як крайнього. Хоча, може, то він сам усе й зробив.
Є ще одна весела байка, яка передається по «галерах». Це сталось більш як 10 років тому, точно невідомо, коли й де саме, але багато хто каже, що то було в Luxoft, в дебрях автомотиву.
Прийшов на співбесіду хлопець спортивної статури. Інтерв’ював його інший хлопець. У процесі співбесіди кандидат почав відповідати неправильно, або ж інтерв’юеру так здалося. Слово за слово, і почалася бійка. Перекинули стіл, порозбивали один одному носи. Чувак тоді, звісно, роботу не отримав, але з того часу на більшість офлайн-співбесід ходять по двоє інтерв’юерів з боку компанії, щоб на критичний випадок мати кількісну перевагу.
Выдуманная страшилка про ‘undefined’ is not an object
Андрій Губський, Software Architect у компанії Video intelligence AG
Когда меня попросили поделиться страшной историей, связанной с программированием, то сначала я думал рассказать о том, как разработчики во время релиза новой версии системы узнали о том, что QA-отдел провел регрессию предыдущей версии, а новую никто не тестировал. Но это не так чтобы и страшно. Затем я хотел рассказать о разработчике, у которого было открыто две вкладки с Cloud 9, в одной из них было настроено тестовое окружение, а во второй — рабочее. И о том, как этот разработчик чуть не выполнил terraform destroy не в той вкладке. Но и подобные истории далеко не редкость и напугать могут только совсем юных специалистов.
Поэтому я решил, что нужна по-настоящему страшная история. Про поезд. А начинается она с того, что один программист как-то решил поехать в другой город к своему другу. Утром он купил в кассе билет, а днем уже был на вокзале и ждал отправления. Ждать пришлось гораздо дольше, чем планировал наш герой. По расписанию поезд должен был прибыть в 14:18, тем не менее остановился только в 17:01. Когда он подъехал к перрону, было видно, что поезд абсолютно новый и, судя по всему, первый раз принимает пассажиров. Вагоны были выкрашены в черный цвет с замысловатыми узорами в виде зеленых шестигранников.
Когда программист поднялся в тамбур, то увидел, что, кроме него, в вагоне только проводник. Спустя пять минут после прибытия поезд тронулся, а затем начал набирать разгон. Программист, который смотрел в окно на удаляющийся перрон, заметил, что что-то здесь не так. Кое-что не давало ему покоя: все вещи в вагоне вели себя очень странно, они вдруг сами по себе начали перемещаться, исчезать и внезапно появлялись в другом месте, одни меняли цвет, а другие форму.
Впрочем, наш герой толком и удивиться не успел — практически сразу, как он заметил неладное, посреди вагона появился проводник и громко объявил: «Уважаемые пассажиры, — что было довольно странно само по себе, ведь в вагоне, кроме них двоих, никого не было, — хочу обратить ваше внимание, что вам очень повезло! Вы едете в экспериментальном поезде, в котором нет машиниста, а сам поезд и все его механизмы управляются искусственным интеллектом, написанным выпускниками ІТ-курсов на языке...» На каком языке был написан искусственный интеллект, сказать проводник не успел, так как в этот момент он просто растворился и исчез. А через мгновение свет в вагоне померк, послышался страшный грохот, и зловещий голос бесстрастно произнес ‘undefined’ is not an object!
Ни программиста, ни поезда с тех пор никто не видел.
Ілюстрація Аліни Самолюк.