7 важных факторов PHP-приложения

7 важных факторов PHP-приложения

Инженеры платформы Heroku (https://www.heroku.com/) на основе собственного опыта создали методологию (https://12factor.net/ru/) для разработки SaaS-приложений.

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

12 факторов приложения стали шаблоном для многих разработчиков и Ops-инженеров, а мы постарались адаптировать самые важные из них для приложений на PHP.

Кодовая база (https://12factor.net/ru/codebase). Забота о коде начинается с принципов его версионирования и хранения. Используйте Git Flow или его адаптацию с учетом специфики работы ваших команд.

Зависимости (https://12factor.net/ru/dependencies). Используйте менеджер зависимостей Composer (https://getcomposer.org/) и его основные операции install и update для манипуляций c composer.json (https://getcomposer.org/doc/04-schema.md) и composer.lock.

Конфигурация (https://12factor.net/ru/config). Предпочтительным методом обработки конфигурации является использование переменных среды. Для работы с ними мы применяем компонент symfony/dotenv (https://github.com/symfony/dotenv).

Параллелизм (https://12factor.net/ru/concurrency). Выполняйте процессы в фоне, тем самым снижая время отклика при взаимодействии с вашим сервисом. Выделяйте веб-процессы в реальном времени и рабочие процессы. Первые принимают http-запросы от клиента, а вторые — выполняют фоновые задачи, например, с помощью брокера сообщений RabbitMQ (https://github.com/rabbitmq).

Паритет разработки/работы приложения (https://12factor.net/ru/dev-prod-parity). Для того чтобы обеспечить схожесть сред разработки, тестирования и продакшена, мы используем виртуализацию на основе Docker и специально подготовленные образы, содержащие одинаковые наборы и версии библиотек. Промышленные и тестовые среды отличаются лишь степенью масштабирования, на основе технологий K8S и Swarm.

Журналирование (https://12factor.net/ru/logs). Фактор утверждает, что приложение должно просто писать в STDOUT и STDERR, а среда должна отвечать за маршрутизацию этих сообщений в хранилище. Технология PHP-FPM позволяет производить вывод логов в STDOUT, что крайне полезно при работе с Docker-контейнерами. Для организации процесса логирования на уровне приложения мы используем сторонние внешние библиотеки, например Monolog (https://github.com/Seldaek/monolog) или компоненты фреймворков.

Задачи администрирования (https://12factor.net/ru/admin-processes). Реализовать сценарии администрирования приложения можно с помощью внешних библиотек, например Symfony Console (https://github.com/symfony/console). Большинство современных фреймворков имеют встроенные средства для организации запуска консольных команд для служебных целей и миграций. Например, в Yii Framework есть понятие консольного приложения (https://www.yiiframework.com/doc/guide/2.0/en/tutorial-console) и команды.

Отмена

Из этой заметки вы узнаете, почему кнопка отмены действия не должна иметь цвет.

Почему
«Отмена» закрывает текущий экран пользователя и возвращает его к предыдущему экрану. Эта отклоняющая кнопка является защитой от нежелательных изменений в системе. Но когда она похожа на кнопку призыва к действию, это трудно распознать. Поэтому делайте кнопку серой.

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

Выводы
Делайте кнопку «Отмена» темно-серой, чтобы пользователь воспринимал ее как возврат в безопасную зону, а не призыв к действию. 

Кандидаты-психопаты

Кандидаты-психопаты

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

________________________
1. Человек в течение последнего года присылает резюме каждый месяц.
А в нём ничего не меняется. За год ничего не появилось.
Ничегошеньки не изменилось. Портфолио так и не появилось.
И ты каждый раз говоришь: без опыта нет. И в вакансии пишешь — нет.
Надо хоть что-то. А ничего не меняется.

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

________________________
2. Человек откликается на каждую вакансию, присылает резюме, ему отвечают что не подходит. А он потом находит тебя в личке во ВСЕХ соцсетях и начинает писать: А почему нет?

Ну честно признаюсь, меня пугает, когда у человека в резюме сменяются работы каждые 1-2 месяца. А ещё больше пугает, что человек нашёл меня во всех соц.сетях, и везде задал вопрос, а потом начал спорить, что я не права и это никак ни на что не влияет.
А зачем ты мне доказываешь, что ты мне нужен?
Чтобы что?
Кажется, эта нелогичность сама по себе говорит, что нет.

________________________
3. Или тебе пишут: откликаюсь на вакансию на сайте. А ты дружелюбно: Извини, сейчас не набираем, но сохранили резюме, как только будем — напишем 🙂 И смайлик. Смайлик ставишь в конце. Ибо дружелюбно. И сейчас дружелюбно — очень сложно.

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

Чтобы что?!
Ты этот вопрос задаёшь, чтобы что?
Да мы раздолбаи, повесили на сайт вакансии, которые у нас когда-либо могут случиться, чтоб они там были. Год назад повесили, с тех пор висят вот. Сейчас не набираем. Или что, думаешь решим тебя взять после этого вопроса? Ох, да, извини, раз висит — давай тогда возьмём тебя.

________________________
Самое лайтовое, с чем сталкиваются все — это когда ты три раза пишешь в вакансии «давайте не тратить время друг друга — без опыта мы сейчас не готовы брать».
И тебе в почту падает 2/3 резюме от людей без опыта.

Чтобы что?
Чтобы мы вдруг решили, что нам надо троих взять вместо одного? Одного, чтоб нормально работу делал(как нам и надо). Второго, чтоб учил. Третьего чтоб был учеником.
Или потому что вы такой охуенный, точно надо брать.
Ну это не исключено, кстати 🙂

________________________
Мораль:

Когда общаетесь, задавайте себе вопрос «Я это делаю чтобы что?»

ЧТОБЫ ЧТО ПОЛУЧИТЬ?!

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

Сила комментария

Сила комментария

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

— На карточке клиента: за что предоставили скидку 20%
— На форме заказа: что в дверь звонить не надо
— В тикете техподдержки: ссылка на обсуждение в багтрекинге

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

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

Например, на «Дадате» мы используем систему защиты от сетевых атак. У нее есть интерфейс, где можно заблокировать конкретный IP-адрес. Указываешь IP, жмешь «добавить в черный список», злодей получает бан. Что может быть проще?

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

Но постойте, можно же сделать нормальные поля «сотрудник» и «причина блокировки»? Да, можно, но непонятно:

— точно ли нужны именно эти поля?
— действительно ли они нужны?

Добавлять поля просто «чтобы были» — так себе идея. А выяснить реальные сценарии как раз и поможет поле «комментарий». Потом, если что, можно заменить его на поля с конкретным назначением.

Комментарий — элемент хаоса. Но с ним система устойчивее.

Периодически обновлять фреймворк

У нас в ГдеМатериале есть хорошая практика — мы периодически проверяем актуальность зависимостей. Я говорю не о мелких обновлениях и не о фиксах безопасности (они давно автоматизированы), а об обновлении мажорных версий библиотек, скажем Django с 1.11 до 2.0.

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

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

Самое важное в обновлении фреймворка — не копить изменения. Гораздо проще 5 раз обновить джанго на соседнюю версию, чем прыгнуть с 1.8 сразу на 2.2. Маленькие обновления приносят меньше регрессий и в целом проходят легче — согласитесь, ведь всегда же лучше растянуть один пиздец на 5 маленьких пиздецочков. Даже психологически гораздо легче решиться на маленький апгрейд, чем на большой скачок.

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

Один на один

Самое полезное для меня открытие последнего времени — проведение общения с коллегами в формате один на один.
Прежде всего, формат один на один полезен при общении Старший/Младший, Куратор/Курируемый, Менеджер/Участник и т.д..
У нас в продуктовой команде Велвики один на один работает так:

  • Общение длится 1 час, а общаемся один раз в месяц.
  • С новыми участниками команды общение происходит чаще — раз в неделю.
  • Запросить встречу один на один может кто угодно и с кем угодно (пользуются редко).


В чём польза такого общения:

  • Доверительная беседа в течение часа позволяет обсудить не только рабочие, но и личные темы — помогает понять место работы в жизни коллеги.
  • Прекрасная возможность предоставлять и получать регулярную обратную связь и фиксировать прогресс - обратная связь становится неотъемлемой частью.
  • Когда установлено доверие, то легче и раньше поднимаются финансовые и коммуникационные вопросы — проблема гасится до того, как она становится проблемой.

Что важно для один на один:

  1. Надо готовиться и фиксировать итоги. Каждое новое общение это продолжение прошлого.
  2. Не отвлекаться. Оба участника должны быть сосредоточены на общении, а не на постороннем.
  3. Не ждать многого с первого раза. Первый раз получается скомканным — тот, кто раньше не участвовал в таких форматах, не сразу готов к доверительной беседе.

Кстати, подойти к коллеге и спросить у него: "Ну как дела? Всё хорошо?" или неформально пообщаться в кафе — это не один на один. Это как на улице спросить у знакомого: "Как дела?", на что он ответит: "Нормально! Сам как?". Вот и поговорили.