«У 99% команд старый код и коробочные решения, нет бюджетов и DevOps, а мы слушаем инфлюенсеров из Facebook» Статьи редакции

«Технари» из крупных компаний обещают найти высокотехнологичные решения проблем, с которыми малый бизнес, возможно, никогда не столкнётся. Но на его потребности мало кто обращает внимание. О том, какие мифы возникли из-за этого в индустрии, — в конспекте.

Пересказ колонки основательницы фирмы-разработчика ПО Akita Software Джин Янг.

Источник: Flexware Innovation

Бессерверные вычисления, язык запросов GraphQL, распределённая трассировка, DevOps-методологии — обо всём этом всё чаще говорят «технари». Однако эти и другие расхожие в 2020-х понятия не всегда отражают реальность, в которой работает 99% программистов, пишет основательница компании-разработчика ПО Akita Software Джин Янг.

По её словам, основной шум вокруг технических и продуктовых решений создают так называемые инфлюенсеры-разработчики — специалисты из быстрорастущих компаний вроде сервиса бронирования жилья Airbnb и финтех-стартапа Stripe или техгигантов биржи Nasdaq: Facebook, Amazon, Apple, Netflix и Google. Для последних даже придумали акроним — FAANG.

Многие в индустрии считают, что абсолютно все компании должны так или иначе стремиться стать хотя бы мини-версией этих технологических «китов». Однако эта философия в корне неверная, заключает Янг. У проектов поменьше совсем иные потребности, а ещё наверняка есть legacy-системы — устаревшие методы, технологии и код. Такое наследство обычно нелегко адаптировать к изменениям и масштабировать.

При этом компании, в которых работают эти «невидимые» 99% разработчиков, так их называет программист Microsoft Скотт Хансельман, необязательно бедствуют. Они строят сервисы и приложения для сфер страхования, медицины, торговли, банкинга, просто делают это тихо.

И если при проектировании ПО не думать об их потребностях, мир рискует лишиться принципиально важных для качества жизни разработок, пишет Янг и развенчивает несколько мифов, которые появились в современной ИТ-индустрии.

Я обожаю испытывать передовые технологии и раздвигать границы возможного. Но порой вспоминаю о тех 99% — тёмной материи в мире разработки — и напоминаю о них своим коллегам. Ведь инструментами крупных компаний пользуются в том числе и они.

Скотт Хансельман, программист, архитектор финансовых систем

Первый миф: в разработке действует теория «просачивания благ сверху вниз»

Зачастую на крупных отраслевых конференциях, в популярных блогах и социальных сетях высказываются технические специалисты из больших компаний вроде Facebook, Netflix, LinkedIn, Google и Amazon. Они говорят о том, какими бюджетами управляют и какие высокотехнологичные решения придумывают для проблем, с которыми однажды наверняка столкнётся малый или средний бизнес.

Однако у последних, как правило, другие потребности и возможности. У них может не быть целого штата тестировщиков, а также экспертов по наблюдаемости (observability) и эффективности разработчиков. И задачи, за которыми в компаниях вроде Facebook и Google закрепляют сразу несколько профильных команд, заниматься будут инженеры без нужных навыков.

А ещё малый бизнес часто работает с ограниченным бюджетом и чужими коробочными решениями — это готовые к использованию программные продукты, которые чаще всего достаточно лишь минимально настроить. С одной стороны, это способ сэкономить время и деньги и отказаться от разработки с «нуля». С другой, функционал «коробки» всё равно ограничен.

То же касается и масштабирования. Facebook ежедневно генерирует 4 петабайт данных в день — это 1 млн Гбайт. И, конечно, чтобы хранить эти информационные массивы, компания построила свои цифровые склады Tao и Hive. А Neflix, чтобы эффективно работать сразу с несколькими облачными инфраструктурами, построила сервис непрерывной доставки Spinnaker, чтобы множеству команд было проще работать над одним кодом.

Вот только у 99% разработчиков этих проблем, возможно, нет в принципе, пишет Янг. У них нет миллиардов пользователей или десятков тысяч партнёров и поставщиков. И данные они, конечно, собирают, но не в петабайтах. Поэтому разрекламированные высокотехнологичные решения, скорее всего, никогда им не пригодятся.

Второй миф: стремиться нужно к идеалу

Разработчики из крупных технологических проектов нередко публично хвалятся своими успехами. Рассказывают, какие безупречные юнит-тестирования проводят и какой чистый у них код. Говорят, что их staging-среда — пространство, где обкатывают функции перед релизом, — на 100% повторяет основной продукт. И что придраться к их процессам реагирования на инциденты — например, кибератаки — просто невозможно.

При этом секрет успеха они объясняют очень просто, пишет Янг: нужно найти грамотного руководителя и поддерживать дисциплину в инженерных командах.

Однако от такой утопии порой далеки даже сами спикеры. Разработчик ПО Segment, например, отказался от хвалёной микросервисной архитектуры, на которую недавно перешёл, и вернулся к монолитной — такую систему трудно трансформировать и легко сломать.

А стриминговый сервис Spotify признал, что его гибкая методология разработки перестала работать, когда компании нужно было масштабироваться. За каждой областью функций она закрепил ответственную команду, формируя автономный мини-стартап. Руководил им менеджер по продукту, он же «гендиректор». Инженеры-разработчики при этом привязаны к одной группе не были, и ни в одной из команд не было технического директора, который бы мог следить за их работой.

Если у кого-то получается добиться идеала, то об этом, безусловно, нельзя молчать. Но и о реальности забыть не стоит. Как, например, работать со старыми кодами, авторы которых давно ушли из компании, ведь менять их зачастую страшно — вдруг сломается сразу всё. Или как эффективно тестировать и накатывать код, если в штате ни одного DevOps-специалиста.

Джин Янг, основательница Akita Software

Google может сколько угодно говорить, что образцовое покрытие кода — когда тестирование запускает сценарии в коде — только 90% и более. Но чаще всего добиться высоких показателей невозможно, ровно как предсказать, как «поведёт» себя код в итоге.

Как сказала соучредительница фирмы-разработчика ПО Honeycomb Чарити Мейджорс, после развертывания ИТ-отдел тестирует не код, а сложную систему — из пользователей, самого кода, окружающей его среды, инфраструктуры и временных отрезков.

Третий миф: строить нужно в однородных экосистемах

Разработчики-инфлюенсеры часто пропагандируют новые инструменты и языки так, будто именно на них они замыкают все свои высокоэффективные процессы. «Они будто евангелизируют единственно верный программный каркас, из-за чего всем кажется, что решение подойдёт абсолютно всем и его легко внедрить», — пишет Янг.

По её словам, проекты часто рассчитывают перейти на новую систему в условном «следующем квартале и лишь потом понимают, что процесс это продолжительный — даже для слаженных команд. А для тех «невидимых» 99% он может в принципе тянуться вечность — если речь о переходе, например, на микросервисную архитектуру.

Всё потому, что в большинстве стеки технологий неоднородные — это комбинация разных программных систем и инструментов, а также языковых слоёв, потому что найти идеальный язык трудно. Причём многие из них, возможно, «жили» в компании дольше, чем её действующие сотрудники.

Янг считает, что возводить новинки индустрии разработок в абсолют не стоит, поскольку новизна — не принципиальный фактор. Лучше сосредоточиться на другом: принесёт ли инструмент практическую пользу разработчикам и проекту и можно ли его незаметно интегрировать в действующие инженерные процессы.

«Круглый стол» разработчиков ПО Akita Software — о том, почему разработчикам трудно анализировать все процессы в системах. Одна из причин в том, что они неоднородные — именно потому, что много разных инструментов и языков
0
88 комментариев
Написать комментарий...
Евгений Романов

Большинство "аксиом" программирования, на самом деле, просто навязаны инфлюэнсерами из большимх компаний, хотя в реальности конкретно для вас и вашей компании это может быть даже во вред.

В статье упоминали микросервисы, которые точно не нужны большинству компаний, акции которых не продаются на бирже.

Я бы ещё добавил к списку тесты, которые пишут, потому что "а как же без них?!", хотя на проекте работает 1-2 человека одновременно и они могут спокойно писать качественный код безо всяких тестов. Имхо, если у вас на одном проекте команда меньше ±10 человек, тесты только удорожат и удлинят разработку, не дав особой пользы. С другой стороны, их писать очень модно, так что можно легко их впарить заказчику, содрав с него побольше денег.

Ответить
Развернуть ветку
Denis

Во многом согласен, кроме тестов. Тесты — это способ экономить своё время и спокойно спать ночью, просто порог вхождения высоковат (я имею в виду разницу между хреновыми тестами, которые тратят время разработчика, и хорошими тестами)

Ответить
Развернуть ветку
Alex Chernyshev

Тесты к сожалению в большинстве проектов что я видел это впустую потраченное время и силы, еще и способ ухода от ответственности.

1. Нельзя делать юнит-тестирование без функционального, функциональное - без смоук. Ну если только у вас не весь проект - какая-нибудь библиотека.
Если совсем просто то надо брать и протыкивать все что можно, на разных конфигурациях и самому, хоть временами.
2. Нельзя полностью заменить работу тестировщика автотестами.
Не заменит машина человека, хоть заобзывайтесь QA 'обезьянней работой'.
Попробуете заменить - получите продолжение классического 'а у меня все работает', только теперь еще и с автотестами.
Сказки про Github, 2500+ автотестов за коммит - кому-нибудь другому рассказывайте.
3. Нельзя юнит тестами покрывать вообще все.
Юнит тесты это внезапно тоже код, который нужно поддерживать: удалять устаревшие кейсы, чистить, комментировать и тд и тп.
Наличие большого количества юнит-тестов автоматически связывает вам руки при рефакторинге, тк один переделанный класс легко ломает по 50 тестов.
Поэтому юниты пишутся только для сложной логики, для кода который стабилен и не нуждается в серьезных переделках.

Ответить
Развернуть ветку
Denis
Нельзя полностью заменить работу тестировщика автотестами. Не заменит машина человека, хоть заобзывайтесь QA 'обезьянней работой'.

Так цели заменить человека машиной и нет. Суть автотестов в том, чтобы очертить спецификацию существующего стабильного поведения, чтобы экономить на относительно дорогом и долгом ручном тестировании (представь CI, в котором каждую ветку большого продукта тестировали бы вручную – каждая фича бы мерджилась месяцами). Плюс, тесты (если они не говно и не сыпятся как попало) повторяемы и не зависят от настроения и самочувствия тестировщика. Но, как правило, покрыть всё на 100% всеми возможными тестами – недостижимая (и ненужная) задача для живого меняющегося продукта. Идея скорее в другом – если какой-то тест выполняется вручную и эта часть продукта стабилизировалась, имеет смысл превратить его в автотест, чтобы ручные тестировщики могли сфокусироваться на меняющихся частях продукта, требующих внимания, анализа и человеческого ресурса в целом

Ответить
Развернуть ветку
85 комментариев
Раскрывать всегда