← Назад к вопросам
Как на проекте выглядит задача которая к тебе приходит?
1.0 Junior🔥 131 комментариев
#Soft Skills
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Жизненный цикл задачи на проекте
На современном проекте задача приходит в виде структурированной карточки в системе управления проектами (Jira, Linear, GitHub Issues). Расскажу о полном жизненном цикле.
Формат задачи в системе
Обычно задача содержит:
[BACKEND-1234] Реализовать API для получения списка пользователей
Описание:
- Создать endpoint GET /api/v1/users
- Добавить пагинацию (limit, offset)
- Добавить фильтрацию по статусу
- Вернуть структурированный JSON
Приёмочные критерии:
- Unit тесты с coverage > 90%
- E2E тесты для основных сценариев
- Документация в API docs
- Code review пройден
Дополнительно:
- Spike: https://issue-tracker/SPIKE-123
- Mock API: https://mockapi.example.com
- Связанные задачи: BACKEND-1233
Типовая задача на бэкенде
1. Обсуждение требований
Когда задача в статусе "Backlog", происходит:
- Refinement — уточнение требований на встречах
- Оценка — team estimate в стори-поинтах
- Разбор неясных моментов — вопросы к PM/дизайнеру
2. Техническое планирование
Чаще всего в начале задачи добавляются:
# Примеры из CLAUDE.md и Architecture docs
# Слои приложения должны быть:
# domain/ -> application/ -> infrastructure/ -> presentation/
# Требования к коду:
# - DDD (Domain-Driven Design)
# - Clean Architecture
# - SOLID принципы
# - TDD (тесты писать первыми)
# - Coverage > 90%
# - make lint && make test (с tail!)
В задаче обычно уже указано:
- Какой слой архитектуры затрагивается
- Требования к тестированию
- Стандарты кода проекта
- Чеклист Code Review
3. Как я начинаю работу
Шаг 1: Изучение кодовой базы
# Ищу похожие функции/структуры
grep -r "get_list" backend/ --include="*.py"
ls -la backend/src/application/users/
# Смотрю структуру проекта
tree -L 3 backend/src/domain/
Шаг 2: Проверка документации
docs/architecture/— как устроена архитектураdocs/api-design/— как должны выглядеть endpointsREADME.md— как запустить проект локально
Шаг 3: Вопросы и уточнения
По CLAUDE.md нужно:
- Изучить кодовую базу
- Задать вопросы (по 3 штуки за раз)
- Уточнять, пока всё не согласуется на 100%
- ТОЛЬКО ПОТОМ писать план
# Типичные вопросы к PM:
# 1. Должна ли пагинация поддерживать cursor-based?
# Или достаточно offset/limit?
# 2. Как фильтровать по датам?
# Диапазон (from/to) или конкретное число дней?
# 3. Нужны ли права доступа?
# Может ли пользователь видеть всех юзеров
# или только из своего подразделения?
4. Разработка по TDD
Тогда начинается разработка:
# Шаг 1: RED - написать падающий тест
def test_get_users_returns_list():
response = client.get("/api/v1/users")
assert response.status_code == 200
assert isinstance(response.json(), list)
# Шаг 2: GREEN - минимальная реализация
@router.get("/users")
def get_users():
return []
# Шаг 3: REFACTOR - улучшить без изменения тестов
@router.get("/users")
async def get_users(
session: AsyncSession = Depends(get_session),
skip: int = 0,
limit: int = 100
):
users = await get_all_users(session, skip, limit)
return [UserSchema.from_orm(u) for u in users]
Статусы задачи
Backlog → Ready for Dev → In Progress → Code Review
↓ ↓
(уточнение требований) (тесты, документация)
↓
Staging Test → Approved → Done
Как я отмечаю готовность
Перед тем как заявить "готово":
# 1. Проверяю линтер
make lint
# 2. Запускаю все тесты
make test | tail -50
# 3. Проверяю coverage
make test:coverage
# Должно быть >= 90%
# 4. Локально тестирую основные сценарии
pytest tests/integration/test_users_api.py -v
# 5. Проверяю документацию обновлена
grep -r "GET /api/v1/users" docs/
Важные ограничения
- НИКОГДА не коммитим — только разработчик может делать push
- НИКОГДА не деплоим — только через Dokku
- НИКОГДА не берём решения сами — спрашиваем при неясных моментах
- TDD обязателен — тесты пишем ПЕРВЫМИ
- Coverage >= 90% — это требование, не рекомендация
Пример полной задачи в коде
# tests/integration/test_users_list.py
import pytest
from fastapi.testclient import TestClient
@pytest.mark.asyncio
async def test_get_users_returns_paginated_list(client, db_session):
"""GET /api/v1/users возвращает список пользователей"""
# Arrange
user1 = await create_user(db_session, name="Alice")
user2 = await create_user(db_session, name="Bob")
# Act
response = client.get("/api/v1/users?skip=0&limit=10")
# Assert
assert response.status_code == 200
data = response.json()
assert len(data) == 2
assert data[0]["name"] == "Alice"
assert data[1]["name"] == "Bob"
@pytest.mark.asyncio
async def test_get_users_with_filter(client, db_session):
"""GET /api/v1/users?status=active фильтрует по статусу"""
await create_user(db_session, name="Alice", status="active")
await create_user(db_session, name="Bob", status="inactive")
response = client.get("/api/v1/users?status=active")
assert response.status_code == 200
assert len(response.json()) == 1
assert response.json()[0]["name"] == "Alice"
Так выглядит полный цикл задачи от получения до сдачи.