pulse-doc/README.md

235 lines
19 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Набор команды и первые шаги
## Минимальная команда, размер и состав
По моему опыту, самая минимальная команда (Skeleton Crew) следующая:
1. Lead/Senior Backend Developer, вилка 300-500 тысяч рублей в месяц
2. Lead/Senior Frontend Developer, вилка 300-500 тысяч рублей в месяц
3. Lead/Senior Android Developer, вилка 300-500 тысяч рублей в месяц
4. Lead/Senior iOS Developer, вилка 300-500 тысяч рублей в месяц
5. Senior DevOps Engineer, вилка 150-500 тысяч рублей в месяц
6. Senior Project Manager, вилка 100-200 тысяч рублей в месяц
7. UI/UX Designer, Art Director, вилка от 100 до плюс бесконечности
8. Рекуртер, естественно. Стандартная ставка - от 1 до 3 месячных окладов найденного специалиста
В будущем разработчики по каждой категории (Frontend, Backend, iOS, Android) формируют команды разработки соответственно Frontend, Backend и т.д. Сколько брать в команду? Нужно смотреть по загруженности. Но обычно с одним Lead идут 1-2 Senior и 3-5 Middle/Junior разработчиков, это оптимальный размер команды. Если больше - то нужно дробить по более мелким командам.
DevOps может быть один, или может быть команда. Но команда DevOps растет не так быстро как команда разработки. Достаточно длительное время может быть один девопс на большую команду.
Project Manager обычно один, потому что он объединяет коммуникации со всей командой.
UI/UX Designer - это просто дизайнер, а Art Director это условно лид по дизайну, который задает общий тон и общий стиль всем остальным дизайнерам. На начальном этапе дизайнер может быть один.
Рекрутер - обычно это фрилансер который находит разработчиков по заданным критериям, чтобы мы могли его прособеседовать. На начальном этапе
## Найм и сложность найма
Разработчиков сложнее всего найти. Поэтому обычно поиск разработчиков нужно начинать раньше всего, и начинать заранее.
Ключевая позиция у Backend Lead, потому что от него будет зависеть все остальные разработчики. К примеру, пока не готова авторизация, профиль пользователя, лента новостей и прочие API, фронтенду и мобильным разработчикам нечего делать. Они будут рисовать интерфейсы и забивать их рыбными текстами, но это не то. Можно условно сравнить Frontend, Android и iOS разработчиков с строителями-отделочниками, сантехниками и электриками. Типа, пока дом не построен, отделывать нечего.
Поэтому на позицию Backend нужно выбирать тщательно. Если Backend будет медленно работать, то работа всей команды будет замедлена.
Frontend, Android и iOS - это уже позиции попроще. Там разработчики намного более взаимозаменяемы. Если один плохо справляется, можно достаточно быстро заменить его на другого.
В позиции Frontend, Android и iOS разработчики уровня Senior отличаются от уровня Middle/Junior тем, что в случае возникновения какого-то сложного бага, Senior решают этот баг быстрее. Однако если просто писать стандартный интерфейс используя стандартные компоненты, то Senior и Middle будут работать с одинаковой скоростью. Пример: опытный водитель и неопытный почти неотличимы на дороге. Различия проявляются только когда на дороге нестандартная ситуация - занос, дрифт, неожиданное препятствие и т.п.
При найме DevOps проблема в основном в том, что рынок завален резюме от псевдо-DevOps которые изучили Docker/Kubernetes по курсам и кроме этого ничего не знают. Опасность последних заключается в том что при более-менее нештатной ситуации они превращаются в беспомощных котят. Настоящих же DevOps находить может быть сложно.
Project Manager найти легко, по рынку ходят огромное количество безработных PM-ов и с низкими зарплатными ожиданиями. Можно взять любого PM-а наугад и он будет более-менее достоино справляться со своими обязанностями. Найти среди них лучшего будет довольно сложно. Я обычно выбираю PM-а главным образом чтобы у него в портфолио не было провальных проектов.
Про поиск UI/UX дизайнера. Если я просто делаю сайт для заказчика, то я могу взять любого безработного дизайнера за не слишком больщой прайс и он сделает более-менее достойный дизайн как у всех. Но если нужен уникальный дизайн, то здесь сложно что-то посоветовать. Рекомендую идти на https://www.behance.net/ , https://www.deviantart.com/ , https://dribbble.com/ или https://www.artstation.com/ и смотреть то что вам понравится. Если нашли то что вам нужно - пишите дизайнеру и приглашайте на работу. Но учтите, что в таком случае дизайнер может быть из другой страны, и еще дизайнер может заломить высокий ценник.
Рекрутеров искать легко, их достаточно много на рынке. Также на рынке полно рекрутинговых агентств, они везде предлагают свои услуги.
# Этапы
1. Находим рекрутера
2. Ищем Backend разработчика и дизайнера
3. Ищем остальных разработчиков и остальную команду (Android, iOS, Frontend, DevOps и т.д.)
4. Проходят раунды собеседований - из найденных резюме кто-то отсеивается, кто-то сам выбирает другой оффер, и в итоге формируется команда
5. Параллельно оформляется юрлицо
6. Когда юрлицо готово, можно регистрировать аккаунт в облачных сервисах (Yandex Cloud или Облако Mail.Ru или аналоги), регистрировать аккаунт разработчика в Apple ($300 в год) и в Google Play ($25 единоразово)
7. Собираем требования, проектируем архитектуру
8. Дизайнер делает дизайн, бекенд-разработчик делает прототип бекенда
9. Остальные разработчики подключаются к работе и делают веб часть, Android и iOS приложение
И дальше уже работаем по итерациям.
Параллелить можно так:
```
1----2----3----4
\ \
\ \
7----8----9--- ...разработка...
/
/
5-----6-----
```
## Подходящие объявления для вакансий
### Lead/Senior Backend Developer
**Обязанности:**
Разработка и поддержка серверных приложений на Node.js.
Работа с базами данных SQL и NoSQL.
Участие в проектировании архитектуры проектов.
Оптимизация производительности и масштабируемости приложений.
Автоматизация процессов развертывания и тестирования.
**Ожидания:**
Опыт работы с Node.js не менее 3-5 лет.
Глубокое понимание принципов работы серверных технологий.
Опыт работы с системой контроля версий Git.
Знание принципов разработки безопасного кода.
Опыт работы с Docker или Kubernetes.
Умение самостоятельно решать сложные задачи и принимать технические решения.
**Требования:**
Знание JavaScript (Node.js), Express.js, NestJS.
Опыт работы с базами данных PostgreSQL.
Опыт работы с RabbitMQ или его аналогами.
Навыки написания unit-тестов (Mocha, Jest).
DevOps: Docker, Kubernetes, CI/CD инструменты.
Работа с API, опыт построения API (REST или GraphQL).
### Lead/Senior Frontend Developer
**Обязанности:**
Разработка и поддержка фронтенд-приложений, основанных на React JS.
Создание адаптивных веб-интерфейсов.
Сотрудничество с UX/UI дизайнерами для реализации дизайна в жизнь.
Оптимизация приложений для максимальной скорости и масштабируемости.
Интеграция фронтенд-компонентов с серверными API.
**Ожидания:**
Опыт в разработке веб-приложений от 3-5 лет (React+Redux, NextJS)
Уверенные знания HTML, CSS, Javascript, TypeScript, React, Redux
Умение верстать адаптивные и кроссбраузерные интерфейсы
Опыт работы с Figma
Понимание принципов ООП, REST архитектуры, работы HTTP-протокола
**Требования:**
Основные: знание JavaScript (ES6+), React JS, Redux/MobX, NextJS.
Знание стилей: CSS, Sass/LESS.
Навыки написания unit-тестов: Jest, Enzyme, Cypress.
Знание дополнительных инструментов: GraphQL, Axios, Lodash.
Навыки работы с Chrome DevTools, ESLint, Prettier.
### Lead/Senior Android Developer
**Обязанности:**
Разработка и поддержка приложений для Android.
Проектирование и реализация сложных пользовательских интерфейсов.
Оптимизация производительности и стабильности приложений.
Работа с API (REST, GraphQL и другие).
Обеспечение совместимости приложений с различными версиями Android и устройствами.
Применение лучших практик кодирования и поддержание высоких стандартов качества кода.
Сотрудничество с UX/UI дизайнерами для реализации дизайна в жизнь.
Взаимодействие с другими командами разработчиков (Backend) и менеджером проектов.
**Ожидания:**
Опыт разработки на Android не менее 5 лет.
Знание Kotlin и Java.
Опыт работы с Android SDK и различными версиями Android.
Понимание принципов работы Material Design.
Опыт работы с архитектурными паттернами (MVC, MVP, MVVM).
Знание принципов работы с базами данных (SQLite).
Опыт автоматизации тестирования (JUnit, Espresso).
Желательно - опыт работы с Android NDK.
**Требования:**
Знания языков программирования Kotlin, Java.
Навыки разработки для разных версий Android, обработка жестов, анимации.
Опыт работы с базами данных: SQLite или Room.
Знание архитектурных паттернов: MVC, MVP, MVVM.
Навыки написания unit-тестов с использованием JUnit или Espresso.
Знание инструментов и библиотек: Android Jetpack, Retrofit, Dagger/Hilt.
Знание Git.
Желательно иметь опыт работы с Android NDK и опыт написания кода на C/C++.
### Lead/Senior iOS Developer
**Обязанности:**
Разработка и поддержка приложений для iOS.
Реализация сложных пользовательских интерфейсов с использованием Swift, Storyboard и UIKit.
Работа с CoreData и Realm для локального хранения данных.
Интеграция приложений с серверными API (RESTful и GraphQL).
Обеспечение совместимости приложений с разными версиями iOS и устройствами Apple.
Использование Auto Layout и Size Classes для создания адаптивных интерфейсов.
Применение best practices для обеспечения высокого качества и безопасности кода.
Сотрудничество с UX/UI дизайнерами для реализации дизайна в жизнь.
Взаимодействие с другими командами разработчиков (Backend) и менеджером проектов.
**Ожидания:**
Опыт разработки на iOS не менее 5 лет.
Глубокие знания Swift и понимание Objective-C.
Опыт работы с iOS Frameworks, включая UIKit, CoreData, CoreAnimation.
Понимание принципов работы MVC, MVP, MVVM и других архитектурных паттернов.
Опыт работы с системой версионирования Git.
Опыт написания unit-тестов.
**Требования:**
Знание языков программирования: Swift, Objective-C.
Знание фреймворков: UIKit, CoreData, CoreAnimation, SwiftUI.
Опыт работы с Storyboard.
Знание архитектурных паттернов: MVC, MVP, MVVM.
Навыки написания unit-тестов с использованием XCTest, SwiftLint.
Опыт работы с инструментами и библиотеками: Alamofire, Realm, Firebase.
Опыт работы с CocoaPods.
Опыт работы с системой версионирования Git.
### Senior DevOps Engineer
**Обязанности:**
Автоматизация процессов разработки, тестирования, развертывания и мониторинга.
Управление инфраструктурой на платформах облачных сервисов (AWS, Azure или Google Cloud).
Разработка и поддержка CI/CD пайплайнов.
Управление контейнеризацией и оркестрацией (Docker, Kubernetes).
Обеспечение безопасности инфраструктуры и данных.
Работа с системами мониторинга и логирования (Prometheus, Grafana, ELK stack).
Оптимизация ресурсов для повышения производительности и снижения затрат.
Взаимодействие с командами разработчиков для обеспечения CI/CD и эффективности процессов разработки.
**Ожидания:**
Опыт работы в DevOps не менее 4 лет.
Глубокое знание Linux.
Знание скриптовых языков Bash, Python.
Опыт использования одной из систем CI/CD: Jenkins, GitLab CI, CircleCI.
Опыт работы с IaC, например Terraform, Ansible.
Знание и опыт работы с Docker и Kubernetes.
Опыт работы с облачными платформами.
Понимание принципов и методологий безопасности.
Опыт работы с системами мониторинга и логирования.
Требования:
Облачные платформы: AWS, Azure, GCP.
Контейнеризация и оркестрация: Docker, Kubernetes.
CI/CD: Jenkins, GitLab CI, CircleCI.
Инфраструктура как код: Terraform, Ansible.
Скриптовые языки: Bash, Python.
Мониторинг и логирование: Prometheus, Grafana, ELK Stack.
Безопасность: Стандарты и практики безопасности в облачных средах.