Full stack разработчик

Зарплата

от 80 000 до 150 000 ₽

Местоположение и тип занятости

ПермьПолный рабочий деньМожно удаленно

Компания

Разработка программных продуктов для цифрового сельского хозяйства

Описание вакансии

Условия работы

Над чем предстоит работать

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

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

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

Как построен процесс работы

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

Процесс разработки построен на основе Agile с использованием Git, BitBucket, TeamCity, JIRA и Slack. Нет привязки к конкретной модели Kanban или Scrum. Используем комбинированный вариант, чтобы исключить формальные на наш взгляд моменты и сосредоточиться на этапах и мероприятиях, которые приносят максимальную пользу. Время от времени мы модифицируем процесс и вводим или разрабатываем сами технические средства для оптимизации.

При получении новой задачи она попадает на обработку аналитику. Происходит анализ и уточнение требований. Аналитик создает epic в JIRA с первичным описанием, а также организует получение эскизов с последующей загрузкой в Zeplin. Затем команда обсуждает постановку, чтобы учесть все нюансы, включая смежные блоки, не иметь проблем в будущем, а также для баланса между трудоемкостью и объемом новой функциональности. При необходимости аналитик вносит корректировки.

На основе постановки team lead делает декомпозицию на stories. Приложение разделено по зонам ответственности между разработчиками. Team lead может выбрать необходимого разработчика для story с учетом зоны ответственности и баланса между текущими задачами. Другими словами, story может делать не только ответственный за блок. Разработчик, который был назначен на story, составляет design document с описанием реализации, прилагая при необходимости диаграммы. Другие разработчики, задействованные в ревью кода, проверяют design document в рамках соответствующих задач в JIRA. Цель design document – сократить время на исправление замечаний архитектурного плана, найденных в ходе ревью кода уже готовой задачи. Для удобства проектирования ответственный за story разработчик может предварительно подготовить прототип (Proof of Concept).

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

Для того, чтобы процесс слияния веток подзадач проходил гладко, существует отдельный регламент по их созданию, актуализации и разрешению конфликтов.
Любой коммит инициирует сборку приложения на билд сервере с предварительным слиянием с source branch, запуском unit тестов и статического анализа кода. Автор коммита получает уведомление в Slack, если сборка падает.
Каждая задача проходит процесс ревью кода. Ревьюеры назначаются автоматически в зависимости от того, какие файлы были изменены в рамках  pull request. Проверка pull request происходит в соответствии c чек листом и задокументированными конвенциями.
Для каждой из подзадач story, а также других самостоятельных задач, указывается тестировщик. Тестировщик попадает в список ревьюеров в pull request наряду с разработчиками.
После реализации задачи тестировщики самостоятельно публикуют ветку для проверки на тестовый стенд с помощью TeamCity.

После одобрения pull request всеми ревьюерами, включая тестировщика, происходит слияние feature branch в source branch. Дальнейшее тестирование промышленной сборки и ее публикация осуществляется силами тестировщиков. Разработчики в данном процессе не участвуют.

Наши требования к кандидату

  1. Опыт командной разработки промышленных веб-приложений с соответствующим качеством кода более 2 лет.
    1. Грамотное наименование классов, методов, переменных.

    2. Легко читаемый, дружественный к рефакторингу, тестируемый код.

    3. Обработка исключительных ситуаций.

  2. Отличное понимание веб-технологий и знание стандартов программирования.

  3. Умение проектировать архитектуру приложения с учетом покрытия unit тестами.

  4. Знание и опыт работы с базами данных (MSSQL).

  5. Опыт в проектировании и разработке высоконагруженных веб-приложений с использованием:
    1. .NET Classic и C#

    2. Entity Framework

    3. async/await

    4. TypeScript

    5. CSS (LESS/SASS)

    6. ASP.NET MVC, Web API

    7. DI (желательно Autofac)

    8. Unit tests (MSTest/xUnit)

    9. Bootstrap – будет большим плюсом

  6. Обязателен опыт в проведении code review.

  7. Критическое отношение к своему коду.

  8. Опыт в использовании Git.

  9. Знание английского языка не ниже уровня intermediate.

  10. Инициативность по усовершенствованию процесса разработки.

    Дополнительные инструкции

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