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) и команды.

10 самых важных принципов

10 самых важных принципов

Если бы меня попросили выписать 10 самых важных принципов, в которые я верю на текущий момент, то, пожалуй, этот список был бы таким:

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

2. Не бывает быстрых сверхрезультатов. Если кто-то обещает "быстро разбогатеть после просмотра ролика", то это всегда разводилово. Все взлёты — это итог предварительной тяжёлой работы. Быстро не бывает.

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

4. Нельзя кого-то заставить что-то сделать.
На заре карьеры проектного менеджера, начитавшись MSF, я сделал для команды проекта отдельные блокноты "Журнал участника такого-то проекта". Туда надо было фиксировать итоги встреч, планы и т.п. Рассказал про это поверхностно и сказал — делайте. Никто не делал. Либо ты зажигаешь людей, поясняя и объясняя, либо ничего путного из этого не получится.

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

6. Надо пробовать новое.
Нельзя законсервироваться: я хороший спец или в компании всё хорошо и так будет всегда. У консервов есть срок годности. Если не пробовать новые направления, не проявлять живой интерес к новому, закрывать глаза на возможности — срок годности консервы выйдет.

7. Надо искать обратную связь.
Нельзя понять уровень себя, продукта, компании, отношений, не получая регулярную обратную связь. Обратная связь — это глаза во внешний мир.

8. Для результата нужен фокус.
Нельзя добиться результата без фокусировки. Надо самому создать шоры, направив свой фокус на то, что для тебя важно на текущем этапе. Звучит просто, а сделать сложно.

9. Дисциплина важнее вдохновения.
Не вдохновение, а дисциплина помогает мне и куче других авторов писать регулярно. Запланированная задача, которая должна быть решена.
Кто пишет на вдохновении, тот пишет так: "Котаны, долго не писал, но есть одна тема, которая прёт. Скоро напишу". И скоро не наступает.
И тоже самое во всём.
Дисциплина — путь к росту. Вдохновение — цветочки на этом пути.

10. Надо уметь строить прочные отношения.
Круги общения — самый важный путь к росту в профессии, семье и увлечениях. Время, вкладываемое в людей, со временем возвращается в гораздо большем размере. Этот принцип я познал, к сожалению, не так уж давно.

А сегодня хочу написать про пару способов, чтобы ломать боязнь чистого листа

Сегодня как раз обсуждали этот вопрос с моей mentee: ей нужно написать стратегию на следующие несколько месяцев; продуктовая область обширная и сложная - с чего начать? Несколько лет назад я в ее ситуации открывала Google Doc и, понятное дело, прокрастинировала. Мыслей много, но они как спутанный клубок ниток: непонятно, за какую нужно потянуть. Мозг пугается и решает: может, лучше и не трогать?

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

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

Опытные ребята создают такие шаблоны для себя сами. Условно, я десятки раз писала стратегию, роадмап, PRD - за это время уже успела понять, что для этих документов важно, на какие аспекты нужно обратить внимание. Вместо того, чтобы каждый раз начинать с чистого листа, нужно сделать для себя заготовку. Конечно, можно исправлять/убирать/добавлять вопросы; суть в том, что у вас остается костяк, на который потом легче и быстрее нанизывать основное содержание.

2) "Мы уже это сделали".
Это вариация на тему Амазоновского working backwards. Наш мозг не очень хорошо умеет предполагать, зато отлично умеет объяснять – и этим надо пользоваться. Сравните:

"Представь, что нам надо сделать лучший в мире мессенджер. Что бы ты предложил?"

"Сейчас 2025 год, и мы запустили лучший в мире мессенджер. Что мы сделали, что у нас получилось?"

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

Я очень люблю делать это упражнение с командой. Например: "2 месяца спустя, мы запустили фичу X, но она с треском провалилась. Что пошло не так?".

3) "Это не я"
Этим способом я пользуюсь реже всего, но иногда он помогает :)
Представьте, что вы общаетесь с лучшим другом, и он/она задает вам вопрос: "А что бы ты мне посоветовал в ситуации Х?". (Ситуация Х, собственно, и есть ваш вопрос, над которым вы прокрастинируете).
Это забавно, но нам легче принимать решения за других, чем делать это для себя. Иногда новая перспектива, когда вы будто немного в стороне и просто даете совет, помогает абстрагироваться и снять творческий блок.

Отмена

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

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

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

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

Специальные организмы

Специальные организмы

Год назад мы перестроили процесс работы команды с китом в Figma и перестали проебываться с правками по десяткам экранов разом.

Для этого в общей теории атомарности мы вели специальные организмы.

Они отвечают за конкретный текст внутри сценария и позволяют быстро править тексты и иконки внутри этих сценариев. Например, требуются правки в сценарий входа — заменить с Подтвердить на Войти.

В нашей дизайнерской вселенной живут пять сущностей, две из них — наша находка.

1. Атомы
Базовые элементы-одноклеточные. Отвечают за стиль и используются много раз. Атомом бывает фигура или иконка.

2. Молекулы
Сумма атомов, основа дизайна: это целостный элемент, например кнопка, инпут, меню или тапбар. Отвечает за разметку (расстояния).

3. Организмы
Это состояния молекулы, которые передают цвет и отображение атомов. Например, состояния кнопки: при наведении или при нажатии.

4. Специальные организмы
Отвечают за текст и иконки и конкретный текст внутри сценария.

5. Общие организмы
Это специальные организмы, которые используются в неизменном виде в нескольких сценариях.

Что работает и не работает в нашей системе обучения и критериях качества по текстам в интерфейсах

Что работает и не работает в нашей системе обучения и критериях качества по текстам в интерфейсах

Провели работу наш ошибками над тем, что работает и не работает в нашей системе обучения и критериях качества по текстам в интерфейсах.

О чем вообще ты говоришь, женщина?
А вот о чём:
— У нас есть период онбординга нового члена команды, за который он выравнивается с командой на этом безопасном плато.
— Есть система обучения: разные форматы и подходы, которые помогают научиться писать тексты
(рассказывали на VC и давали примеры домашек)
— А есть критерии качества текстов и типографики — каждый может свою работу проверить, а до командного ревью она доходит уже без ошибок по этим чеклистам.

Спустя год, нам было над чем поразмыслить.

И вот что работает хорошо:

1. Рассказывать новичку о чеклистах — о том как надо, а как не надо писать текст, до первых задач смысла нет. Критерии не четкие как, например, в типографике, поэтому понятия «Краткость», «Человечность» тоже размыты.
Их не измеришь, а значит, теория до первого опыта неприменима. Рассказывать стоит уже в первых задачах, на примере уже написанного текста и с личным разбором. Показывать и объяснять, что плохо или хорошо и почему.

2. Сильно помогает предварительная UX-аналитика и интервью c ЦА. Портреты и характеристики пользователей помогают писать в правильном тоне и с единым уровнем детализации сложных понятий.

Грубо говоря — пишем как для офлайнового предпринимателя в продукте валютного контроля, или как для разбирающегося relations-менеджера в KYC-продукте.

3. Свежий взгляд на текст — как не парадоксально, это сильно помогает и об этом нельзя забывать. Утро вечера мудренее: написали тексты, ушли домой, а утром ещё раз просмотрели и сразу заметили грубые ошибки.

4. Ролевые игры 🙂
Практика, которую мы применяли в обучении UX-исследователей, работает и в обучении дизайнеров UX-текстам. Устраивает исследователь для дизайнера на его задачах. Многим новичкам помогает, так как они не понимают о пользователе ничего, включая реакции и потребности на конкретном шаге конкретного процесса.


А вот что у нас не работает или приносит несущественную пользу:

1. Домашки на выдуманной задаче не работают — дизайнер не в контексте продукта, без понимания пользователя и без ответственности за результат.
— Нужно объяснять почему что-то хорошо или плохо на конкретном рабочем примере.

2. Лекции, статьи, книги, командные разборы — работают на поддержание и рост, но не в начале наработки скила.
— Нужна индивидуальная работа и разборы текстов с экспертом из команды.

3. Мудборды по UX-текстам: сложно находить специально, человеку без опыта сложно понять, что хорошо, а что плохо.
— Мудборд нужно делать общекомандным и обязательно нужно разбирать и оставлять комменты о том что и почему в конкретном примере хорошо и плохо.

4. Главред — это зло, когда не умеешь им пользоваться. Сколько не говори о рейтинге и о том, что не надо на него смотреть и доводить свой текст до 8 и выше, люди в это выдрачивание всё равно скатываются.

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

5. Дрочить один и тот же текст — плохо. Чем дольше над ним сидишь и выдавливаешь из себя, тем более убогим он получится.


Ну вот и всё. Удачи вам с microcopy