Компания Quadcode временно не ведёт блог на Хабре Мы в Quadcode мечтали сюда попасть целых 8 лет, но все не находилось времени, а 3 года назад компания наняла бренд-менеджера (меня), чтобы сдвинуть желание иметь свой блог с мертвой точки. Так мы и начали свою блогерскую карьеру на Хабре на русском языке. Это наша финальная статья, где мы не только подводим итоги нашего Хабр-путешествия, но и рассказываем про то, как начать вести собственный корпоративный блог и что вас ждет на этом пути. В статье будет много рефлексии, поэтому, если ваше настроение располагает, – добро пожаловать под кат!   Ошибки это один из самых важных аспектов любого языка программирования. То, как обрабатываются ошибки, влияет на приложения многими способами. То, как определяются ошибки в Golang, немного отличается от таких языков как Java, Python, Javascript. В Go ошибки – это значения. В процессе разработки биллинга, мы столкнулись с различными типами ошибок, которые могут возникать во время выполнения программы. В данной статье я хочу поделиться нашим опытом в структурировании и обработке этих ошибок, а также представить подходы, которые мы применили для их эффективной обработки и диагностики. Наша основная цель заключается в создании понятных и легко обрабатываемых ошибок, которые гарантируют надежную работу биллинга.  -  Ошибки, намеренные или нет, часто приводят к убыткам бизнеса. Причем убытки бывают просто огромные – десятки, сотни миллионов долларов США. В некоторых случаях и вовсе миллиарды. В одном только 2022 году проблемы с ПО принесли глобальному рынку ущерб на $7 трлн. Ежегодно лишь в США бизнес недосчитывается $2,41 трлн. Чаще всего проблема заключается во взломе корпоративного программного обеспечения. Но бывает и так, что киберпреступники вовсе ни при чем, компании сами себе "стреляют в ногу", если так можно выразиться. Давайте посмотрим, к чему может привести ошибка в коде ПО, неосторожность или даже халатность разработчика.  Как говорили китайские юниты в С&С: Generals "No system is safe" – все системы уязвимы. И люди уязвимы не меньше. Про фишинг вроде бы все знают, но он по-прежнему остаётся самым популярным и результативным методом получения доступов и данных. В частности в сезоны праздников или распродаж, когда атакующие особенно активны.  Компании нередко рассказывают на Хабре истории об отправке «учебных» фишинговых писем клиентам или сотрудникам. Мы тоже поделимся деталями предновогодней атаки на собственных сотрудников, о которой не знала даже команда реагирования безопасности (SOC). В статье вас ждёт процесс подготовки, схема атаки, а также поминутная хроника событий.  Когда я только начинал работать с Docker, мне было очень сложно разобраться во всём. Но вам не нужно беспокоиться. Я помогу. Docker — это превосходный инструмент, который просто нельзя игнорировать. Docker используется повсюду!  Мы уже рассказывали, как внедрили менторство в команде и делились историей одного из менторов. В последней части серии посмотрим на процесс со стороны менти на примере двух инженеров, один из которых уже завершил свою работу с ментором, а второй находится в самом её разгаре.  Это не хардкорная статья: в ней не будет примеров кода или разбора инструментов. Мы хотим показать, какие задачи даём новичкам в команде, чем менторы помогают с онбордингом и как ребята субъективно оценивают пользу процесса.   В прошлом материале мы рассказывали, что решили внедрить в команде менторство и самостоятельно развивать сотрудников. В этой части поделимся историей ментора, чьей главной задачей было прокачать софт-скиллы коллеги и помочь ему научиться принимать самостоятельные решения. Он расскажет, как выстроил процесс и как быстро получилось достичь нужного результата.   Команда Kubernetes Platform в Quadcode внедряет, поддерживает и сопровождает Kubernetes и все процессы вокруг него. Пять с половиной лет наши кластеры и подходы менялись и эволюционировали. В статье расскажем, с чего мы начинали, к чему пришли, и как получилось сделать сопровождение bare metal кластеров комфортным.  В 2019 году мы почувствовали необходимость сфокусировать силы разработки на реализации наиболее ценных бизнес-проектов, а не всего подряд. Внедрили сквозное планирование от стратегии компании до продуктовых роадмапов и задач на команды разработки на квартал. Но на коммуникации при самом планировании и реализации фичей уходило слишком много времени.  Тогда мы запустили первые agile-поезда. Эксперимент оказался успешным: сократилось время выдачи полезной функциональности, увеличился фокус команд, была хорошая обратная связь от бизнеса. Поэтому сейчас все инженерные команды и сотрудники функциональных команд Quadcode работают в том или ином поезде. В статье подробнее расскажем, почему понадобилось переходить на новую модель, где мы на пути к продуктовому подходу и верхнеуровнево пройдёмся по процессам. Меня зовут Азат Якупов, я люблю данные и люблю использовать их в разных задачах. Сегодня хочу поделиться своим опытом относительно B-Tree индексов в PostgreSQL. Рассмотрим их топологию, синтаксис, функциональные B-Tree индексы, условные B-Tree индексы и включенные B-Tree индексы.  Привет, Хабр. Меня зовут Юрий Зорин, в Quadcode я руковожу Ops-департаментом. В марте 2022 года мы внедрили в команде внутреннее менторство: теперь у наших junior-инженеров есть наставник, который помогает развивать нужные навыки. В этой статье хочу рассказать, какой путь мы прошли на текущий момент и подвести первые итоги. Над менеджментом секретов нужно задумываться с самого начала работы над проектом. Кто-то может со мной не согласиться, ведь на стадии разработки возникает куча первостепенных задач, и проблема хранения секретов уходит на второй план. Попытаюсь развеять ваши сомнения на примере собственного опыта. Меня зовут Сергей Киммель, я PHP Developer, Golang Developer и руководитель отдела разработки торгового движка. Сегодня поделюсь опытом своей команды в работе с секретами. Расскажу о проблемах, с которыми мы столкнулись, и об их решении. Дам варианты организации работы с секретами и покажу пример организации Golang-кода. На протяжении нескольких лет в нашу интернет-телефонию по кусочкам добавлялась разная функциональность. В итоге мы оказались в точке, где единственным плюсом сложившейся VoIP-архитектуры была её надёжность. При этом внесение любых изменений вызывало головную боль, а успешный результат их внедрения в прод никогда не был гарантирован. Мы решили это исправить и за год написали новое решение.  Меня зовут Якупов Азат, я дата-архитектор Quadcode, и с вами продолжение саги о типах таблиц в PostgreSQL. В этой части речь пойдёт про кластеризованные, внешние, партицированные и наследуемые таблицы. Посмотрим на примеры их создания, области применения, плюсы и минусы их использования.   В PostgreSQL существует большое количество разных типов таблиц. Каждая из них предназначена для решения конкретных задач. Самая распространённая и известная — heap table или стандартная таблица. Про её структуру я рассказывал в прошлой статье. Стандартная таблица позволяет хранить строки, обновлять данные, делать OLAP и OLTP-запросы.   Тем не менее, существует ещё целый ряд таблиц, про которые просто забывают. На мой взгляд, интересные таблицы сейчас — это нежурналируемые и временные таблицы. В этой статье мы поговорим именно про них и сравним их с журналируемыми таблицами.  Я в IT больше девяти лет и успел поработать в ряде интересных проектов, но самым большим своим достижением на данный момент считаю налаживание процессов в команде Billing API. Статья — именно об этом. Расскажу о наших проблемах во взаимодействии между разработчиками и QA-инженерами и том, как мы эти проблемы решали.      Golang продолжает развиваться, вместе с ним развивается и вся экосистема языка. В частности, появляются новые и обновляются существующие фреймворки. В этой статье мы сделаем небольшой обзор тех, что связаны с HTTP-бэкендом.  Я была С++ разработчиком, когда мне предложили стать тимлидом. В моей новой команде были и разработчики, и QA-инженеры. В тестировании я имела поверхностные знания, поэтому долгое время не понимала, как подступиться к задаче по развитию QA-специалистов. Поиск решения занял несколько лет, и в этой статье я поделюсь своим опытом. Надеюсь, она будет полезна для тех тимлидов, которые в тестировании не так хороши, как в программировании.   Меня зовут Якупов Азат, я дата-архитектор Quadcode. В индустрии я больше 20 лет, из них больше 6 лет — в архитектуре. Эта статья — немного сокращенный пересказ моего выступления на митапе по теме «Heap Table в PostgreSQL».  Речь в тексте пойдет об обычных таблицах, с которых начинается вся дата-инженерия. Посмотрим на то, как метаданные располагаются в Postgres, разберемся, что такое table page и fillfactor, а также поближе познакомимся с TOAST-таблицами.