Кто мы такие и чему мы учим
Всем привет! На связи Евгений и Сергей — авторы проекта StringConcat. На двоих у нас уже больше 30 лет опыта в разработке. В этой статье коротко расскажем о себе, о том, что мы делаем, зачем и кому это нужно.
Два слова о нас
Мы — идейные задроты. Пошли в айтишечку, когда за нее платили банан и проездной на троллейбус (если вообще удавалось найти работу). А весь жир был в нефтянке. Ну или можно было пойти сисадмином или эникеем — если, опять же, найдешь работу. Но, как оказалось, это было примерно как купить биткоин в 2010-м. Айтишечка поперла, а мы — вместе с ней. Айтишечка поперла, а мы — вместе с ней. Мы работали, меняли проекты, успели побывать обычными разработчиками, а потом доросли до руководителей и технических директоров. Были в телекоме, финтехе и медицине. Разрабатывали десктопные приложения, софт для железок и серверные системы. Писали на PHP (ужас), Python (ужас-ужас), C, C++ и еще куче языков, пока в итоге не осели в JVM-болоте энтерпрайзных монстров, где и квакаем до сих пор.

Как все начиналось
Но самое удивительное — сколько бы мы ни ходили по проектам, проблемы везде были абсолютно одинаковые. Думаю, вы и себя в этом списке узнаете:
  • Никто уже не понимает сложную бизнес-логику и спрятался в своем маленьком огородике
  • При починке одного бага возникает еще три новых (хорошо если вообще что- запускается).
  • Мониторинг есть только в формате «недовольные клиенты обрывают телефон техподдержки».
  • Как устроена система целиком, знают только пара старцев, которым уже пора на пенсию (у одного из них старческое слабоумие).
  • Релиз и деплой — это микроинсульт у тимлида.
  • В очередной раз сделали совсем не то, что было нужно.
Мы наступили, кажется, на все возможные и невозможные грабли — архитектурные, организационные и продуктовые. Более того, мы и сами неоднократно участвовали в создании подобных проблем. Видели, как быстрые решения и компромиссы превращаются в многолетнюю боль, как модные подходы ломаются о реальность и как отсутствие базовых инженерных принципов со временем начинает стоить очень дорого. Особенно это ощущается сейчас, когда каждая компания борется за эффективность. Раньше многие проблемы можно было просто залить деньгами, а теперь их нет.

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

Именно этот опыт и стал отправной точкой.

В какой-то момент мы поймали себя на мысли: а что, если собрать все, что мы считаем важным, в единый, последовательный набор принципов? Такой себе путеводитель по разработке сложных систем. Сначала это было нужно только нам самим. Потом мы поняли, что это нужно и другим. Попробовали вынести наши подходы за пределы своих команд — и неожиданно оказалось, что запрос есть, причем вполне понятный. Они устали постоянно разгребать последствия, хотят делать свою работу более осознанно и оставаться востребованными специалистами.

Кстати, мы всю дорогу рассказывали, что разработка — это процентов 20 всего процесса. Остальное — понимание бизнеса, предметной области, архитектуры, требований, компромиссов и всего того, что большинство старается скипнуть (я тут код пришел писать, а не вот это всё). И знаете, приятно иногда оказаться правыми. Пришел ИИ, навыки кодинга неплохо так подешевели, а вся остальная часть профессии никуда не делась (про ИИ как-нибудь поговорим отдельно, так что подписывайтесь).

Так появился проект, который в итоге мы назвали StringConcat. Когда-то мы шутили, что главное в нашей работе — правильно склеивать строки в браузере.

Что есть сейчас
Сейчас проект состоит из нескольких частей:
  • Telegram-канал. Там заметки, шутеечки, иногда полезные материалы и ссылки на то, что мы публикуем.
  • YouTube-канал. Есть как жизновый контент, так и душный (который никто не смотрит).
  • Блог. Вы здесь.
  • Образовательный проект «Разработка боли и сожалений». В нем мы последовательно проходим весь путь разработки сложной системы — от требований до эксплуатации. На каждом этапе обязательно наступаем на все возможные грабли, получаем по лбу, а потом разбираемся, как сделать так, чтобы в следующий раз этого не произошло. Остановимся на нем чуть подробнее
Разработка без боли и сожалений
В первую очередь это для тех, кто уже умеет писать код, но начал замечать, что реальные проблемы разработки находятся совсем не в синтаксисе и не в выборе очередного фреймворка (или ИИ-агента).
В основе проекта — система инженерных взглядов и решений, которые не привязаны к конкретным технологиям. Языки программирования меняются, приходят и уходят фреймворки, появляются бигдаты, микросервисы, аджайлы, блокчейны и ИИ. Но фундаментальные проблемы и принципы остаются.

Первую версию мы выпустили в 2020 году, и до сих пор практически все, о чем мы говорили тогда, остается актуальным. А может быть, даже стало еще более актуальным в эпоху ИИ. Мы говорим про основы: мышление, архитектуру, ответственность за решения и их последствия. Мы нащупали подходы, которые работают независимо от того, какой стек вы используете сегодня и какой будете использовать через пять лет.

На момент написания этой статьи мы затеяли масштабное обновление проекта. Хотим добавить больше практики и самостоятельной работы, чтобы не просто рассказать про подходы, а дать возможность набить руку. К тому же за последние годы мы гораздо лучше поняли реальные потребности людей.

Этот проект не является нашей основной деятельностью, и у нас нет цели заработать на нем как можно больше денег. То, что мы делаем, не является масс-маркетом и не оптимизировано под максимальную коммерческую эффективность. Мы вкладываем в него много сил и внимания, потому что нам важно сделать его хорошо. Без KPI, без менеджеров и прочих радостей корпоративного мира (справляемся силами самобичевания).

Мы ведем его до тех пор, пока у нас есть силы, время и внутренний смысл продолжать. В какой-то момент все может измениться или закончиться. Однажды мы уже были близки к мысли все закрыть, ибо работа и нагрузка никуда не деваются. А еще иногда хочется просто деградировать, лежать и смотреть рилсики с шутками про пердёж. 
Для чего это все?
Наверное, громко будет сказать, что мы хотим изменить мир. Это невозможно, да и мы не очень похожи на проповедников успешного успеха, которых хлебом не корми — дай поменять мир и рассказать всем, как правильно жить. А вот изменить подход к разработке хотя бы вокруг себя — было бы неплохо. И отчасти это уже получается.
А зачем вообще что-то менять?

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

Со временем вокруг проекта сформировалось сообщество участники. Мы общаемся, встречаемся, поддерживаем связь. Несмотря на географию, многих знаем лично. Были случаи, когда мы брали ребят к себе в команды или рекомендовали их знакомым. Многие выросли до руководителей, развивают свои идеи и двигают дальше то, что когда-то обсуждали вместе с нами.

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

Несколько неприятных выводов о разработке
За годы в индустрии мы успели набить довольно много шишек. Где-то наступали на свои грабли, где-то наблюдали, как это делают другие. И со временем у нас сформировалось несколько простых, но не всегда приятных выводов.

  1. Код никому не нужен, если он не решает реальную проблему. Можно написать идеально красивый код, использовать правильные паттерны и последние технологии, но если это не решает реальную задачу — ценность такого кода стремится к нулю. Мы видели много проектов, где технически всё было сделано очень даже неплохо, но результат в итоге никому не был нужен. А лучшие решения получались тогда, когда команда пыталась сама понять потребность пользователей или заинтересованных лиц (даже при отсутствии аналитиков).
  2. Разработка — это система взаимосвязанных практик и подходов, а не код как таковой. Здесь есть работа с требованиями, архитектура, тестирование и (о ужас) огромное количество коммуникации с людьми.
  3. То, что ваш проект больше невозможно поддерживать, обычно не вина неправильных фреймворков и баз данных. Редко когда проекты загибались из-за не тех алгоритмов (привет адептам алгособесов). Гораздо чаще всё ломалось из-за отсутствия тестов, понимания системы и возможности безопасно вносить изменения. Когда, например, полный ручной регресс занимает два месяца, любое изменение превращается в приключение или инсульт.
Вместо заключения
Мы видели много красивых обещаний, новых фреймворков и попыток сделать разработку хотя бы предсказуемой. Мы застали времена, когда веб был молодым (и быть фронтендером было незазорно), когда микросервисы считались спасением от всего, когда Agile должен был решить проблемы команд, а теперь наблюдаем эпоху ИИ. Каждый раз индустрия обещает, что вот сейчас-то всё станет проще. И каждый раз оказывается, что сложность просто переезжает в другое место.
Наверное, это нормально, ибо разработка сложных систем никогда не была и не будет простой. В ней всегда будут ошибки, компромиссы, странные решения и моменты, когда хочется закрыть ноутбук и уйти выращивать картошку.

StringConcat — это наша попытка систематизировать собственные шишки. За эти годы мы сломали достаточно всего, чтобы теперь хотя бы примерно понимать, где грабли бьют сильнее всего. Если кому-то наши ошибки помогут не повторить свои — уже хорошо.

Спасибо, что дочитали. Будем продолжать.
Читайте также