На что будешь опираться при расстановке приоритета задач?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Расстановка приоритетов задач: мой подход
Приоритизация — это искусство и наука. За 10+ лет я выработал систему, которая работает в любом контексте: от стартапа до корпорации, от спринта до долгосрочного планирования.
1. Матрица Eisenhower (Urgent vs Important)
Это основа моего подхода. Все задачи делятся на 4 квадранта:
┌─────────────────────────────────────────┐
│ ВАЖНЫЕ & СРОЧНЫЕ │ ВАЖНЫЕ & НЕ СРОЧНЫЕ │
│ (DO FIRST) │ (SCHEDULE) │
│ │ │
│ - Production issues │ - Архитектура │
│ - Deadline bugs │ - Рефакторинг │
│ - Security threats │ - Документация │
│ - Крупные сбои │ - Skilling up │
├─────────────────────────────────────────┤
│ НЕ ВАЖНЫЕ & СРОЧНЫЕ │ НЕ ВАЖНЫЕ & НЕ СРОЧНЫЕ │
│ (DELEGATE) │ (DELETE) │
│ │ │
│ - Email │ - Чат сообщения │
│ - Чужие дедлайны │ - Nice-to-have │
│ - Суета │ - Золотая посуда │
│ - Звонки │ - Perfectionism │
└─────────────────────────────────────────┘
В боевых условиях:
- Квадрант 1 (URGENT + IMPORTANT): Беру лично, решаю немедленно. Production issue — я на это бросаю всё
- Квадрант 2 (NOT URGENT + IMPORTANT): Планирую в спринт, это мой приоритет в обычное время
- Квадрант 3 (URGENT + NOT IMPORTANT): Делегирую если возможно, или батчую (решаю несколько сразу)
- Квадрант 4 (NOT URGENT + NOT IMPORTANT): Удаляю или откладываю на бесконечность
2. Business Impact
Ключевой метрик: сколько денег/юзеров затрагнет это решение?
// Мой внутренний скоринг
type ImpactScore = {
affectedUsers: number; // 1M users = высокий приоритет
revenueAtRisk: number; // $100K/день на кону = критика
conversionImpact: percentage; // -5% конверсия = очень важно
reputationDamage: boolean; // Может выплыть в соцсети? = важно
timeToFix: hours; // Быстрый фикс выше в приоритете
};
// Примеры приоритизации
const priorities = [
// 1. Production горит, тысячи юзеров потеряли доступ
{ task: 'Payment gateway down', impact: 'Critical', priority: 1 },
// 2. Безопасность
{ task: 'SQL injection vulnerability', impact: 'Critical', priority: 2 },
// 3. Часто используемый фича сломана
{ task: 'Login button not working', impact: 'High', priority: 3 },
// 4. Редкий edge case
{ task: 'Button color in dark mode', impact: 'Low', priority: 10 },
];
3. Effort vs Reward (MoSCoW Method)
Комбинирую с классификацией MoSCoW:
MUST HAVE (Must Have)
- Базовая функциональность
- Блокирующие для запуска фичи
- Критические баги
SHOULD HAVE (Should Have)
- Важные улучшения
- Мягко влияет на UX
- Может подождать на спринт
COULD HAVE (Could Have)
- Nice-to-have
- Не влияет на основную функцию
- Когда будет время и сил
WON'T HAVE (Won't Have в этом спринте)
- Отложить на будущее
- Можно заменить более простым
- Слишком сложно для текущего контекста
Практический пример:
Spring backlog:
[MUST] Fix authentication bug (blocks mobile users) — 8h
[MUST] Optimize database query (N+1, kills performance) — 6h
[SHOULD] Add caching layer (good-to-have optimization) — 10h
[COULD] UI improvements (polish) — 5h
[WON'T] Refactor old code (technical debt, low impact) — 20h
4. Risk Assessment
Я оцениваю риск потери:
type RiskFactors = {
dataLoss: boolean; // CRITICAL
userDataExposure: boolean; // CRITICAL
reputationDamage: boolean; // HIGH
downtime: Duration; // HIGH if > 1 hour
inconsistency: boolean; // MEDIUM
poorUX: boolean; // LOW if workaround exists
};
// Примеры:
// CRITICAL RISK - немедленно
const issues = [
'Database connection pool exhausted (blocks all users)',
'Memory leak causing OOM every 4 hours (scheduled restart needed)',
'Security token validation broken (anyone can forge token)',
];
// HIGH RISK - в спринт
const highRisk = [
'API timeout sometimes returns 500 instead of retrying (affects 2% of requests)',
'Cache invalidation bug causes stale data (rare, but serious)',
];
// MEDIUM RISK - планируем
const mediumRisk = [
'Pagination doesn't work on 100K+ items (could optimize later)',
'Error messages not user-friendly (but logs are clear)',
];
5. Dependency Graph
Что блокирует другие задачи?
// Визуализирую зависимости
const dependencies = {
'Auth system': {
blocks: ['User profiles', 'Admin panel', 'Permissions'],
priority: 'FIRST',
},
'Database migration': {
blocks: ['New features', 'Refactoring'],
priority: 'SECOND',
},
'UI redesign': {
blocks: ['Nothing critical'],
priority: 'Can be delayed',
},
};
// Правило: решай задачи в порядке их блокирующей способности
6. Team Capacity & Velocity
Не могу расставлять приоритеты, не учитывая реальность.
type SprintContext = {
totalCapacity: 40; // часов в спринт
currentVelocity: 35; // часов в среднем делаем
interruptions: 3; // часов на внезапные issues
bufferForQA: 5; // часов на тестирование
availableForNewTasks: 27; // реально, вот так
};
// Если у меня 27 часов в спринт:
// - Не беру 40-часовую задачу (не влезет)
// - Оставляю буфер на неожиданное
// - Беру MUST первыми, потом SHOULD
7. Stakeholder Input (когда важно)
Я спрашиваю:
- Product Manager: какие метрики самые важные?
- CEO/CTO: стратегические направления?
- Support team: какие баги жалуют пользователи?
- Lead: есть ли блокирующие зависимости?
Но я не даю другим людям ПОЛНЫЙ контроль. Я консультируюсь, но решение остаётся за мной как technical expert.
// Сценарий:
PM: 'Сделай эту фичу, очень нужно'
Меня: 'Понимаю приоритет. Но она займёт 40 часов, а у нас есть production bug на 3 часа. Что важнее: новая фича или стабильность?'
// Обычно они выбирают стабильность. Если нет — это политическая игра, не моя задача.
8. ROI (Return on Investment)
Сложные задачи vs простые задачи:
type TaskROI = {
effort: hours;
impact: benefit;
roi: impact / effort;
};
const tasks = [
{ task: 'Add index to slow query', effort: 1, impact: 100, roi: 100 }, // FIRST!
{ task: 'Implement new auth', effort: 40, impact: 50, roi: 1.25 }, // Later
{ task: 'Polish button colors', effort: 5, impact: 1, roi: 0.2 }, // Never
];
// Сортируем по ROI и берём максимальный ROI первыми
9. Technical Debt vs Features
Балансирую между развитием и долгом:
2-недельный спринт (80 часов команды):
- 50% на новые фичи (что просит PM)
- 30% на баги и стабильность (что нужно бизнесу)
- 20% на tech debt (что нужно инженерам)
Этот баланс может меняться:
- Если много багов: 40/40/20
- Если срочный дедлайн: 70/20/10
- Если code старый: 30/30/40
10. Мой реальный процесс в спринте
// День 1 (Планирование)
1. Посмотрю на incoming issues
2. Разделю по Eisenhower матрице
3. Дам оценку (effort)
4. Посчитаю impact
5. Отобрал top-5 задач в спринт
// День 2-9 (Выполнение)
1. Начну с MUST HAVE
2. Блокирующие задачи выше
3. Если появился production issue: pause, fix, resume
4. Если освободилось время: беру SHOULD
// День 10 (Review)
1. Что успели
2. Почему не успели (реалистичен)
3. Lessons learned
4. Корректирую оценки на следующий спринт
11. Когда я деюсь приоритета
Ситуации, когда я пересматриваю:
- Production issue — пауза всему, боремся с этим
- Security vulnerability — все руки на деку
- Новая информация — узнал, что задача нужна раньше
- Зависимость готова раньше — могу поднять приоритет
- Context switch стоит дороже — может быть, делать в другом порядке
12. Anti-patterns, которых избегаю
// ❌ Неправильно: брать всё и срочное
const badPrioritization = [
'Everything is HIGH priority (means nothing is)'
'Doing whatever asked first (reactive)'
'Ignoring impact, only effort (polish instead of value)'
'No buffer for interruptions (burnout)'
];
// ✅ Правильно: система с принципами
const goodPrioritization = [
'Clear criteria for priority'
'Business impact first'
'Team health second'
'Technical excellence third'
];
Итог: мой приоритизационный framework
1. Impact — сколько юзеров/денег затрагивает? 2. Urgency — действительно ли это срочно? 3. Risk — что потеряем если не сделаем? 4. Effort — сколько времени займёт? 5. Dependencies — что это блокирует? 6. Team capacity — реально ли мы это можем сделать? 7. Stakeholder input — что говорят product/business? 8. ROI — effort vs reward
Это не формула, это эвристика. Я применяю эти принципы гибко, в зависимости от контекста. Главное — быть систематичным и прозрачным в своих решениях. Когда люди видят, что я расставляю приоритеты по понятным правилам, они мне доверяют.