Pull to refresh
58
0
Edtech на удаленке @Skyeng-Habr

Пишем код, который меняет систему образования

Send message

Как я уронил прод на полтора часа (и при чем тут soft delete и partial index)

Reading time7 min
Views36K

В жизни любого разработчика наступает момент, когда он роняет прод. Представьте: полдень, в Skyeng час пик, тысячи запланированных онлайн-уроков, а наша платформа лежит… 

Все упало из-за ошибки в процессе деплоя, которая связана с тонкостью PostgreSQL. К сожалению, на этом моменте у нас прокололась не одна команда. И чтобы такое больше не произошло ни у нас, ни в другой компании — велкам под кат.

Читать далее
Total votes 172: ↑168 and ↓4+164
Comments174

Решаем ошибку при миграции на Storybook 7

Level of difficultyMedium
Reading time3 min
Views688

Привет, я фронтенд-разработчик в Skyeng. При переходе с шестой версии Storybook на седьмую встретилась ошибка «Providers from the BrowserModule have already been loaded. If you need access to common directives such as NgIf and NgFor, import the CommonModule instead».

В этой статье объясняю, почему возникает баг и как его исправить.

Читать далее
Total votes 13: ↑13 and ↓0+13
Comments0

Как я искал ПДн в 300 базах данных [и сохранил рассудок]

Reading time9 min
Views8.4K
image

Пришли как-то ко мне парни из службы безопасности и говорят: «Надо обойти все БД и собрать с них персональные данные». Потому что в России изменилось законодательство и теперь их нужно хранить в особо защищённых хранилищах.

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

Вот только у нас несколько сотен баз данных, где-то около трёхсот. Даже если просто заглянуть в них и попытаться сделать выборку — это займёт весьма продолжительное время. И никто не имеет полной картины, где что хранится.

Скорее всего, вам скоро предстоит такое же, поэтому сейчас покажу артефакты, которые я нашёл в процессе.
Читать дальше →
Total votes 25: ↑22 and ↓3+19
Comments35

Итоги ежегодного опроса PHP-сообщества: результаты за 2023

Reading time5 min
Views8.9K

Привет! Как и в предыдущие три года, в декабре 2023 было запущено исследование русскоязычного PHP-комьюнити. По итогам получился срез данных: на каких версиях PHP сидят в командах, какой фреймворк выбирают для рабочих проектов, а какой для личных, как относятся к ИИ-инструментам для разработки, кого считают человеком года и многие другие аспекты. Опрос помогают составлять и распространять ребята, которые развивают городские и региональные PHP-сообщества, а также руководят каналами и подкастами про PHP.

Посмотрим, каким был 2023 для сообщества, в 1120 мнениях.

Результаты также можно найти на phpcommunity.ru. Вот итоги за 2022, 2021, 2020.

Читать далее
Total votes 37: ↑37 and ↓0+37
Comments7

Как новому тимлиду завоевать доверие команды: 9 правил, которые я усвоил за полгода в этой роли

Level of difficultyEasy
Reading time10 min
Views5.7K

Привет! Меня зовут Кирилл Комиссаров, я пришел на позицию лида примерно полгода назад. Срок небольшой, но за это время многое понял о том, почему доверие в команде так важно. 

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

Позиция тимлида вообще предполагает relationship management, который может быть направлен как и на команду, так и наверх, в сторону стейкхолдеров. Но в этой статье я хочу поговорить именно про связку TL + Dev Team. Руководителю важно выстроить и поддерживать доверительные отношения с сотрудниками. Это поможет эффективно управлять командой и добиваться слаженной и продуктивной работы.

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

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

Читать далее
Total votes 23: ↑21 and ↓2+19
Comments8

Продакт против директора

Reading time9 min
Views6.6K
image
Аджайл-аэропорт

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

Продуктовый менеджер, или ПМ, — относительно новая профессия, появившаяся в момент, когда стало нужно управлять командами в бизнесе, который основан на ИТ.

Главная сила ПМ — возможность очень быстро разворачивать продукт в сторону потребностей рынка. Это руководители, которые в первую очередь знают, что нужно рынку, и уже потом делают общее руководство вроде планирования, бюджетирования, работы с командой и так далее. То есть главное требование к ПМ — умение проверять гипотезы.

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

На практике в наших проектах «чистый» ПМ, уж простите, скорее всего, пропустит важные риски и с некоторой вероятностью сделает суперпродукт, но, скорее, облажается по срокам, юнит-экономике или команде. «Чистый» менеджер сделает всё в бюджете, в срок, экономика будет сходиться, но продукт не будет нужен рынку.

Про важность общего управления почему-то говорят очень мало. Кажется, пора признать, что нам всем оно нужно.
Читать дальше →
Total votes 24: ↑19 and ↓5+14
Comments5

Инклюзивность в продуктах: новые возможности? Или путь в никуда?

Level of difficultyEasy
Reading time8 min
Views1.8K

Привет, я Марго — инклюзивный продакт. Впервые вопросом «Какого черта одним можно, а другим нет?» я задалась после отдыха в Турции, где мы с друзьями покоряли горки в аквапарке. Все было круто, потом мы прилетели в Россию и решили повторить, но на аттракционы… меня не пустили.

В ответ на праведный и почти цензурный гнев я услышала что-то про СанПиН (которых не нашла) и грязные колеса (которые я не подумала протереть, да же ж?).

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

И если вы подумали: «Эта ваша мораль и этика вовсе не про бизнес, а мы тут деньги зарабатываем», у меня для вас новости.

Инклюзивность — это действительно +100500 к карме, а еще способ сыграть на метриках и получить прибыль. Как? Погнали читать!

Читать далее
Total votes 18: ↑14 and ↓4+10
Comments5

Распланировать бюджет компании и не поседеть: как мы автоматизировали процесс, который не любит никто 

Level of difficultyEasy
Reading time5 min
Views4K


Любой бизнес, хоть кофейня, хоть компания по производству космических шаттлов, планирует ресурсы и считает, что во сколько обойдется. А одна из главных статей расходов — это ФОТ, фонд оплаты труда. Нужно же знать, сколько заплатить сотрудникам, какие вакансии открыть, сколько на них можно потратить и как все это приблизит компанию к ее мечте. 

Полировать бюджет можно месяцами. Особенно если у вас 3 000 сотрудников. Нужно решение, которое позволит быстро запланировать ФОТ и не запутаться.

Меня зовут Марго Седова, я Head of HR Product в Skyeng. Планировать ФОТ в нашем случае вручную ― вообще не вариант. Расскажу, как мы боролись с нервным тиком при словах «планируем годовой бюджет» и пробирались через чащу ручных процессов к светлому автоматизированному будущему. Пристегните ремни, погнали.
Читать дальше →
Total votes 16: ↑14 and ↓2+12
Comments2

Как мы отправляем фишинг на своих сотрудников, чтобы не расслаблялись по ИБ

Level of difficultyEasy
Reading time11 min
Views22K
image
Социнжиниринг выглядит вот так

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

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

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

Наш случай сразу пошёл далеко от идеального. Рассказываю.
Читать дальше →
Total votes 36: ↑31 and ↓5+26
Comments59

Standalone компоненты и tree-shaking

Level of difficultyEasy
Reading time5 min
Views7.4K

Уже сложно представить наши приложения без такой оптимизации, как tree shaking.
Tree-shaking — «встряхивание дерева», удаление неиспользуемого кода из бандла приложения.

А причем тут standalone компоненты в названии статьи?

Просто существуют некоторые нюансы при встряхивании, о которых стоит знать при работе с такими компонентами. Как говорится, предупрежден — значит вооружен.
Далее можете почитать немного теории или сразу перейти к основной мысли.

Читать далее
Total votes 12: ↑12 and ↓0+12
Comments2

Метаданные как обезбол при миграции

Level of difficultyMedium
Reading time5 min
Views3K

Привет! Меня зовут Наташа Красильникова, я старший аналитик команды Operations Analytics в Skyeng. Мы завязаны на работе с сотней сервисов компании: забираем данные из сервисов и интегрируем много локальных документов с бизнесовыми маппингами, таргетами, а иногда и просто какими-то дополнительными данными.

Когда пришло время мигрировать наше многолетнее легаси на новый DWH… что ж, мы пережили целый спектр острых эмоций. И, конечно, выработали ноу-хау, чтобы сгладить переход и сделать его менее болезненным. В статье расскажу, что придумали и как применяли.

Читать далее
Total votes 16: ↑15 and ↓1+14
Comments2

Ещё пара революций школьного образования

Level of difficultyEasy
Reading time11 min
Views5K
image

Нам понадобилось переизобрести онлайн-образование для дошкольников и школьников.

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

Узким местом онлайн-системы стал учитель. В школе эта проблема решается просто: там учитель делится на всех учеников класса. А вот при переходе к онлайн-формам выяснилось, что это не работает так же хорошо, как в офлайне.

Собственно, у нас было два пути:

  • Повышать цены для родителей, чтобы привлекать больше учителей. Но нет, так не выйдет, мы упёрлись в эластичность по цене, в России у людей не настолько много денег.
  • Или менять саму методологию так, чтобы убрать «бутылочное горлышко».

Автоматизировать учителя или убирать человека из обучения — это очень плохая идея.

Кроме самой программы обучения, идеально отточенной методологами, нужна мотивация. Без живого человека мотивация пока не работает ни в одной системе образования.

В итоге научно-методологических исследований и практических опытов, а потом года обкатки всего этого в реальности мы всё же нашли промежуточные решения и вышли на понимание, как поменяется профессия учителя в будущем.

В общем, сейчас традиционный учитель делает вовсе не то, в чём он может дать максимальный эффект для прогресса учеников.
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments13

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

Level of difficultyEasy
Reading time5 min
Views13K
image
Ачивка «Терминатор»: прибить проект, потому что проще заново

У нас есть внутренний продукт для оценки сотрудников. Он сменил три проджекта, три тимлида разработки, двух дизайнеров. Я была третьим проджектом в этой наследной цепочке.

Что пошло не так? Ну, в какой-то момент пришёл бизнес и сказал: чуваки, вот у нас замечательное ТЗ, его нужно сделать. Команда в первом составе собрала аналитику, прикинула список действий, заложила 15% времени на непредвиденное и приступила к разработке.

А в декабре бизнес сказал, что мы должны запуститься через месяц.

Мы катастрофически не успевали, стали выпускать поэтапно и седеть. В этот месяц родилось то, что мы очень вежливо называем MVP. Он был настолько прекрасен, что части бека выполнялись на фронте. Потому что фронтендер помогал, чем мог, и делал математику для обработки данных прямо в формах ввода этих данных.

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

Второй тимлид выгорел и уехал в условный Гондурас.

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

Короче, мы посовещались и пристрелили к чертям весь проект.

Мечта была в том, чтобы написать его заново.
Читать дальше →
Total votes 26: ↑21 and ↓5+16
Comments40

Не пропусти это при работе с Nx

Level of difficultyMedium
Reading time4 min
Views4K

Работая с монорепозиторием, ты наверняка слышал о наборе инструментов Nrwl Nx. Если вкратце, то Nx ускоряет и упрощает работу с монорепой, снабжает полезными утилитами. Держи документацию.

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

Предлагаю отправиться на изучение официальной документации и поискать лайфхаки вместе со мной. Ниже приведу список полезных инструментов и механизмов, вкратце расскажу о них и дам ссылки для детального изучения. 

Итак, что же ты мог упустить при работе с Nx:

nx run-many
dependency graph + nx affected
nx-enforce-module-boundaries es-linting
computation cache
nx cloud
buildable libs 

Читать далее
Total votes 15: ↑15 and ↓0+15
Comments8

Меня нанял робот, или рекрутинг сотрудников как продукт

Level of difficultyEasy
Reading time10 min
Views3K
image

Казалось бы, рекрутинг высококвалифицированных сотрудников не может быть продуктом. Это процесс, который невозможно полностью автоматизировать: речь идёт о людях и их мастерстве. Особенно дело касается преподавателей, где в отличие от многих профессий процесс их привлечения включает много этапов: разностороннюю оценку квалификации, опыта, навыков, проверку биографии и так далее.

Однако мы с этой задачей справились, у нас просто не было другого выбора. Когда нужно привлекать по 800–1 000 новых преподавателей в месяц, невозможно делать это ручными методами, поэтому нам пришлось построить автоматическую систему найма, через которую сегодня проходит до 150 000 кандидатов в год. Это один из самых массовых наймов преподавателей в мире.
Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments2

Анализ и приоритизация задач в тикетной системе: реализуем красиво на PHP

Level of difficultyMedium
Reading time8 min
Views3.4K

Привет! Меня зовут Олег Мифле. Одной из команд, где удалось поработать за 7 лет с PHP, стала Customer Support. Мы автоматизировали анализ тысяч задач в день и оператору больше не нужно думать и включать голову для того, чтобы понять, какая задача прямо сейчас важна. О том, как работает приоритизация и что такое дерево игры, расскажу в статье.

На старте погружу в предметную область. Она непростая, но постараюсь быстро. Эта статья по моему докладу с PHP Russia 2022. Вот запись.

Читать далее
Total votes 20: ↑20 and ↓0+20
Comments0

Когда игра учит больше, чем уроки

Level of difficultyEasy
Reading time8 min
Views3.9K


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

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

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

Что касается метрик, то мы работаем над временем сессии и средним временем, которое игроки проводят в игре за неделю. Эти метрики мы считаем опережающими к LT. И если ученики будут много играть и игра сильно увеличит среднее время в неделю, то мы сможем оставить игру бесплатной для наших учеников.
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments9

Апгрейд и рефакторинг PHP-проектов — теперь это просто с Rector

Level of difficultyMedium
Reading time14 min
Views22K

Привет! В статье поделюсь, как инструмент автоматического рефакторинга Rector помогает обуздать легаси и автоматизировать обновление PHP проектов и пакетов, чтобы процесс проходил эффективнее и малой кровью. 

Статья написана на основе доклада с PHP Russia 2022.

Читать далее
Total votes 54: ↑54 and ↓0+54
Comments13

Готовим версионирование API в PHP-фреймворках: разбор способов и работа с организацией кода

Level of difficultyEasy
Reading time13 min
Views8K

Привет! Меня зовут Олег Мифле. В Skyeng работаю над проектом Skypro. В IT я уже больше десяти лет, семь из которых пишу на PHP. За плечами десятки разных проектов: e-commerce, финтех, CRM, а недавно добавился и EdTech. Были и классические фуллстек-проекты, и проекты, где фронтенд и бэкенд «живут» отдельно и коммуницируют друг с другом по API. Боль от отсутствия версионирования я испытал на себе. Хочу поделиться, как избежать проблем, как всё структурировать и организовать.

Обсудим:

• Что такое API.

• Зачем версионировать API и нужно ли вообще.

• Какие способы версионирования существуют и как его организовать — и с точки зрения подходов, и с точки зрения кода.

• Разберёмся, когда избавляться от старой версии или как жить с легаси до конца существования проекта.

Читать далее
Total votes 19: ↑19 and ↓0+19
Comments11

Итоги третьего ежегодного опроса PHP-сообщества (и по традиции — слон)

Reading time7 min
Views7.7K

Привет! В декабре вновь прошел опрос русскоязычного PHP-сообщества. Помогали составлять его и распространять ребята, которые развивают городские и региональные PHP-комьюнити, а также руководят каналами и подкастами про PHP.

Удалось собрать 1215 ответов. Расспросили сообщество, на какой версии PHP сидят в командах, какой фреймворк выбирают для рабочих, а какой для личных проектов, многие ли посматривают на Go. И не только.

- Итоги 2021

- Итоги 2020

Читать далее
Total votes 43: ↑43 and ↓0+43
Comments3

Information

Rating
Does not participate
Works in
Registered
Activity