Опишите структуру и процессы команды на вашем последнем проекте.

Ответ

На последнем проекте команда разработки состояла из 5 человек и работала по гибридной методологии Scrum/Kanban.

Роли в команде

  • Тимлид (Tech Lead) — 1 человек. Отвечал за архитектуру, технический долг и взаимодействие с заказчиком.
  • Бэкенд-разработчики (Java) — 2 человека (включая меня).
  • Фронтенд-разработчик (React) — 1 человек.
  • QA-инженер (Manual/Automation) — 1 человек.

Технологический стек

  • Бэкенд: Java 11, Spring Boot (Web, Data JPA, Security), Apache Kafka, PostgreSQL.
  • Фронтенд: React, TypeScript, Redux Toolkit.
  • Инфраструктура: Docker, Kubernetes (k8s), Jenkins, GitLab CI.

Процессы и взаимодействие

  1. Планирование: Двухнедельные спринты с планированием (Sprint Planning) и оценкой задач по Story Points.
  2. Ежедневные стендапы: 15-минутные встречи для синхронизации по прогрессу и блокерам.
  3. Разработка:

    • Использовали Git Flow с ветками feature/, release/, hotfix/.
    • Каждая задача сопровождалась код-ревью через Merge Request (MR) в GitLab. Требовалось минимум один апрув.
    • Пример моего кода (контроллер для заказов):

      @RestController
      @RequestMapping("/api/v1/orders")
      @RequiredArgsConstructor // Lombok для инъекции зависимостей
      public class OrderController {
      private final OrderService orderService;
      
      @GetMapping("/{id}")
      public ResponseEntity<OrderDto> getOrder(@PathVariable Long id) {
          // Сервисный слой обрабатывает бизнес-логику и маппинг в DTO
          return ResponseEntity.ok(orderService.getOrderById(id));
      }
      }
  4. Тестирование: QA создавал тест-кейсы в Jira. После разработки задача передавалась на тестирование. Для регресса использовались автотесты на Selenium и API-тесты в Postman/Newman.
  5. Деплой: После прохождения тестов и мержа в main срабатывал Jenkins-пайплайн, который собирал образ Docker и разворачивал его в k8s-кластере.

Ключевые особенности: Акцент на непрерывную интеграцию (CI), обязательное покрытие кода юнит-тестами (минимум 80%) и парное программирование для сложных задач.

Ответ 18+ 🔞

Да ты послушай, какая история была на прошлом проекте! Команда у нас, блядь, как швейцарские часы — всего пять человек, но работали по этой вашей хитрожопой методологии Scrum/Kanban. Гибридной, сука, чтобы и волки были сыты, и овцы целы.

Кто был кто в этой басне

  • Тимлид (Tech Lead) — один, царь и бог. На нём вся архитектура висела, технический долг, как гиря на яйцах, и общение с заказчиком, который вечно «а можно вот эдак».
  • Бэкенд-разработчики (Java) — двое, я и ещё один чувак. Два сапога, блядь, пара.
  • Фронтенд-разработчик (React) — один бедолага, который всё это безобразие на экране рисовал.
  • QA-инженер (Manual/Automation) — один, но с прицепом. И тест-кейсы пилил, и автотесты гонял. Герой, ёпта.

На чём всё это держалось

  • Бэкенд: Java 11, Spring Boot (этот твой Web, Data JPA, Security), Apache Kafka для сообщений, PostgreSQL — база, как шкаф.
  • Фронтенд: React, TypeScript, Redux Toolkit. Без этого никуда.
  • Инфраструктура: Docker, Kubernetes (этот твой k8s), Jenkins, GitLab CI. Всё в контейнерах, чтоб не разбежалось.

Как мы крутились, как белки в колесе

  1. Планирование: Спринты по две недели. Сидим, тыкаем в задачи пальцем, даём story points. Иногда такие оценки выходят, что волнение ебать, но живём как-то.

  2. Ежедневные стендапы: 15 минут, не больше. Кто что сделал, кто на чём запоролся. Главное — не начать философские дискуссии про смысл жизни, а то терпения ноль ебать.

  3. Разработка:

    • Git Flow священный. Ветки feature/, release/, hotfix/. Кто в main без ревью мержит — тот полупидор, сразу говорю.
    • Код-ревью — это святое. Создаёшь Merge Request в GitLab и молишься, чтобы тимлид или коллега не нашёл какую-нибудь дичь. Апрувов минимум один надо было.
    • Вот, смотри, как я, например, контроллер для заказов писал. Никакой самодеятельности, всё по канону:
    @RestController
    @RequestMapping("/api/v1/orders")
    @RequiredArgsConstructor // Это Lombok, чувак, чтоб руками конструктор не городить
    public class OrderController {
        private final OrderService orderService;
    
        @GetMapping("/{id}")
        public ResponseEntity<OrderDto> getOrder(@PathVariable Long id) {
            // Вся бизнес-логика — в сервисе. Контроллер тупой как пробка.
            return ResponseEntity.ok(orderService.getOrderById(id));
        }
    }
  4. Тестирование: Наш QA-мучитель в Jira тест-кейсы строчил. Сделал задачу — отдал ему. Он там ковырялся, а потом ещё и регресс гонял на Selenium и API-тестах из Postman. Без его кивка в прод — ни ногой.

  5. Деплой: Всё прошло? Jenkins, как верный пёс, хватает код, собирает Docker-образ и заталкивает его в k8s-кластер. Красота, блядь.

Самое сокровенное: У нас был, сука, культ непрерывной интеграции (CI). Покрытие кода юнит-тестами меньше 80%? Иди нахуй, переделывай. И да, для особо ебучих задач садились в парное программирование — один рулит, второй смотрит, чтобы в канаву не съехали. Иногда, правда, хотелось друг другу вилкой в глаз, но работало, блядь, работало!