Ответ
Приоритеты расставляются в следующем порядке:
1. Технологический стек и качество кода (Фундамент):
- Современные практики: Использование актуальных, поддерживаемых версий фреймворков (Spring Boot 3+, Java 17+).
- Качество кода: Наличие code review, статического анализа (SonarQube), стандартов оформления.
- Тестирование: Культура написания unit-, интеграционных и e2e-тестов. Измеряемое покрытие кода.
- Архитектура: Четкое разделение на слои, использование DTO, слабая связность.
2. Процессы разработки и инфраструктура (Эффективность):
- CI/CD: Автоматизированные пайплайны сборки, тестирования и деплоя.
- Agile/Scrum: Предсказуемый процесс планирования и обратная связь.
- Инфраструктура: Использование контейнеризации (Docker, K8s), облачных сервисов, мониторинга.
3. Команда и культура (Рост):
- Компетентные коллеги: Возможность учиться у senior-разработчиков и архитекторов.
- Технический долг: Понимание его наличия и планы по его сокращению.
- Обмен знаниями: Проведение митапов, техдоков, внутренних воркшопов.
4. Продукт и домен (Мотивация):
- Значимость: Работа над продуктом, который решает реальные проблемы пользователей.
- Влияние: Возможность влиять на технические решения и архитектуру.
5. Условия (Баланс):
- Режим работы: Гибкий график, гибридный или удаленный формат.
- Профессиональный рост: Бюджет на конференции, курсы, сертификации.
- Компенсация: Конкурентная зарплата, соответствующая уровню ответственности и рынку.
Красный флаг (пример плохой практики):
// Класс-бог (God Class) с нарушением всех принципов
@Service
public class EverythingService {
// 2000 строк кода, которые делают всё:
// - работа с БД
// - отправка email
// - сложная бизнес-логика
// - парсинг JSON
}
Работа в проекте с таким кодом без плана на рефакторинг означает высокие риски и низкую скорость разработки.