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

Не начинать с отмазки и нытья

Плохая практика начинать свой рассказ с отмазки, давления на жалость и запроса преференций:

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

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

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

Gmail: про эксклюзивность

Gmail: про эксклюзивность

Сегодня про то, как с помощью эксклюзивности привлекается база пользователей в продукт.

В 2004 году Google запускает бета-тестирование своего почтового сервиса Gmail, но делает это весьма интересно. Чтобы получить доступ, тебя должны пригласить. У одного пользователя было только одно приглашение.

Вокруг сервиса образовалась такая шумиха, что дело доходило до безумия. Народ продавал инвайты на Ebay от $65 до $125 за штуку. Те, кто получал заветное приглашение, чувствовали себя избранными.

По итогу сервис привлек большую аудиторию и выпустил версию для всех.

Мясо

Прием эксклюзивности или чего-то "закрытого" применяется часто. Из известных у меня на памяти: Лепра и Аура Яндекса. Помню, как в ленте фейсбука все клянчили друг у друга приглашения.

Люди активно реагируют на то, что ему недоступно. Принцип дефицита позволяет создать дополнительную ценность продукта и привлечь внимание. А что делать уже с этим вниманием дело ваше.

Посмотрите на свои продукты. Можно ли к ним применить принцип эксклюзивности?

Что необычного с точки зрения бизнес-модели Tesla?

Что необычного с точки зрения бизнес-модели Tesla?

А вот что:

1. Другие автомобили теряют в стоимости сразу же после выезда из автосалона. У Tesla этот эффект не так ярко выражен.

Для сравнения: в первый год использования Mercedes Benz или BMW стоят на 10-15% дешевле. А за три года — до 40%. У Tesla показатель падения стоимости едва достигает 10% за три года.

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

Для сравнения: установка Full Self-Driving на Tesla занимает один час. Запись — через мобильное приложение. В недалеком будущем авто едет на апгрейд самостоятельно. У Mercedes и другой классики апгрейд это условный выкуп дилером старого авто и выдача нового за доплату.

А теперь к фишке и вероятному ответу, почему стоимость Tesla не падает по сравнению с остальными:

3. Без софта Tesla — это дизайнерская железка с четырьмя моторизированными колесами. А вот софт и компьютер — ядро, не теряющее в цене со временем. Апгрейды и опции включаются программно и часто без необходимости личного посещения автосервиса.

Хочешь разгоняться чутка быстрее? Не вопрос. Тапни в приложении вот здесь, отдай $2000 и вот разгон до 100 км/ч уже на полсекунды быстрее. Нужен крутой автопилот? Да, пожалуйста — держите электронную квитанцию об оплате $8000.

Получается, бизнес-модель детища Маска это «Железка как сервис?» и главное конкурентное преимущество.


https://www.facebook.com/100011222233927/posts/1320897518294310/?d=n

Обучать или не обучать UX-дизайнеров?

Обучать или не обучать UX-дизайнеров?


Давайте коротко про минусы и плюсы, а детально про то как это организовано, можно в статье по ссылке почитать.

Итак, плюсы — какие выгоды компании это даёт:
— На рынке готовых спецов практически нет, поэтому дотягивать по качеству и скиллам иногда единственный вариант прокачать команду и получить хороший результат проектов.
— Это большой плюс при найме — к нам больше хотят, потому что мало кто себе может такое позволить.
— Средняя экспертность команды растёт, постепенно все люди дорастают до уровня, когда им можно дать любые задачи, а не думать: «Он не справится с такой задачей, что бы ему дать попроще?»
— Удержание: для сильных людей программа развития становится очень индивидуальной, но так как процессы развития и обучения поставлены на поток, сильные не остаются в стороне, а начинают сильнее влиять на бизнес и команду.
— Качество и скорость задач и проектов растут.
— Появляется единое информационное поле: новые знания быстро распространяются и внедряются.
— Выявляются стагнирующие или неразвивающиеся люди, которые тянут кор-команду на дно и занимают очень много времени сильных людей. Что делать с этим — каждый решает сам, а система позволяет это увидеть и отследить.
— Организация и постоянный обмен обратной связью позволяет держать руку на пульсе настроения команды и каждого сотрудника и можно решать не только барьеры в работе, но и психологические проблемы конкретных членов команды.

А теперь самое сладенькое, бизнесовое, про минусы:
— Деньги. Это минус 500-700К рублей в месяц из расчёта часов команды и сильных спецов. Это на команду дизайнеров в 12 человек. Ну а чё поделаешь то…
— Всех не наймёшь: нельзя чтоб в команде было больше 25% джунов или новичков — процессы и качество рушатся, кор-команда стонет и не вывозит.
— Не все кто был в восторге от системы обучения на собесе, начнут учиться. Не все кто учатся — начнут применять знания в проектах. Появится много людей, которых тянуть за уши не надо ни в коем случае. Не надо пинать и навязывать — сильные останутся, слабые уйдут.
— К нам теперь идёт поток людей учиться: «Возьмите меня хоть бесплатно и учите, а я проекты буду делать». Надо понимать, что такие «бесплатные» люди стоят даже дороже джунов — самостоятельно они делать ещё ничего не могут, а времени сильных будут выжирать очень много.

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


Сотрудники и команда — основной ресурс, без них ничего бы не было. Они и есть компания, поэтому вкладываться в развитие стратегически важно:
http://bit.ly/3aLXqY1

Идеальный процесс

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

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

Женя Бондарев рассказал нам о типичной структуре разработки цифрового продукта:

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

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

Usability test
Тестирование всего продукта и финальные изменения — Женя советует писать гипотезы в гугл-доке на протяжении всего исследования, чтобы во время тестирования не упустить что-то важное.
По итогу тестирования выявляются критичные и не очень ошибки, после чего нужно решить, с чем можно выходить на рынок, а что требует обязательной доработки. На этом шаге может всплыть много неожиданностей, на эту тему как-то писал Костя Горский — t.me/desprod/239

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

После лекции Женя попросил нас расписать подобный план для своих проектов, где мы должны были указать основные чек-поинты, время, роли и артефакты.
Я немного упростил наш план, так как в оригинале он выглядел ещё больше:

1. Погружение

1. Связаться с заказчиком
Сделать:
- интервью с заказчиком
- запросить метрики
Итог:
- утвержденное направление работу
- утвержденные с заказчиком сроки
Срок: 4.03

2. Поиск референсов/конкурентов
Срок: 04.03

3. Интервью с пользователями
Сделать:
-подготовить вопросы
-найти респондентов
На выходе:
- уточненный портрет
- проблемы пользователей
Срок: 13.03

4. Попробовать
Сделать:
- Сделать заказ (понять процесс, опросить мастера)
- Зарегаться как мастер (понят, процесс, взять заказ)
На выходе:
- проблемы
- полное понимание бизнес-процесса
Срок: 11.03

Анализ полученных инсайтов
Артефакты: понять на каких проблемах фокусируемся, список инсайтов, фичерлист
Показываем заказчику — 12.03
— Ретро —


2. UX — проектирование

1. Информационная архитектура — 20.03
2. Структура — 20.03
3. Карта экранов — 31.03
4. Сценарии
5. Прототип
6. Тестирование прототипа (проверка гипотез) - 7.04

Анализ полученных решений
Артефакты: протестированный прототип, карта экранов, структура, информационная архитектура
Показываем заказчику — 9.04

— Ретро —


3. UI — визуальный язык

1. Существующие гайды продукта
2. Мудборд
3. Дизайн концепт 3-5 экранов — 14.04
4. Масштабирование
5. Анимация

Анализ полученных решений
Артефакты: финальный дизайн продукта, анимация
Показываем заказчику — 30.04

— Ретро —


4. Передача в разработку
5 занятий 10.05-19.05

5. Подготовка портфолио
9 занятий 22.05-09.06

6. Презентация
3 занятия

7. Защита
23 июня


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