Как избавиться от рутины на проекте?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Как избавиться от рутины на проекте
Рутинная работа — это проблема почти каждого проекта. За 10+ лет я выработал систематический подход к её устранению, который сильно повышает продуктивность.
Первый шаг: Идентификация рутины
Прежде всего, нужно отслеживать время на каждый вид задач:
from datetime import datetime, timedelta
from collections import defaultdict
class TaskTracker:
def __init__(self):
self.tasks = defaultdict(timedelta)
self.start_time = None
self.current_task = None
def start_task(self, task_name: str):
if self.start_time:
elapsed = datetime.now() - self.start_time
self.tasks[self.current_task] += elapsed
self.current_task = task_name
self.start_time = datetime.now()
def report(self):
for task, duration in sorted(self.tasks.items(), key=lambda x: x[1], reverse=True):
hours = duration.total_seconds() / 3600
print(f"{task}: {hours:.1f} часов")
Виды рутины и способы её избежать
1. Повторяющиеся проверки качества кода:
Решение: автоматизация линтинга и форматирования
# pre-commit hooks автоматизируют это
# .pre-commit-config.yaml
repos:
- repo: https://github.com/psf/black
rev: 23.3.0
hooks:
- id: black
- repo: https://github.com/PyCQA/ruff
rev: v0.0.260
hooks:
- id: ruff
Вместо того чтобы вручную проверять форматирование, запускаю black и ruff, и всё встало в строй.
2. Повторяющиеся тестовые данные:
import factory
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = User
username = factory.Faker('username')
email = factory.Faker('email')
is_active = True
user = UserFactory()
3. Повторяющиеся скрипты и команды:
.PHONY: test lint format clean
test:
pytest --cov=src/ --cov-report=html
lint:
ruff check .
black --check .
format:
black .
ruff check . --fix
clean:
find . -type d -name __pycache__ -exec rm -rf {} +
find . -type f -name "*.pyc" -delete
Теперь вместо длинных команд: make test, make lint, make format.
4. Ручное развертывание:
#!/bin/bash
set -e
echo "Running tests..."
python -m pytest --tb=short
echo "Running linters..."
python -m ruff check .
python -m black --check .
echo "Building Docker image..."
docker build -t myapp:latest .
echo "Pushing to registry..."
docker push myapp:latest
echo "Updating deployment..."
kubectl set image deployment/myapp myapp=myapp:latest
echo "Deploy complete!"
Систематический подход к автоматизации
Использую этапы для определения приоритетов:
Этап 1: Быстрый выигрыш (1-2 часа, экономит 5+ часов/неделю)
- git hooks для форматирования кода
- Bash скрипты для часто повторяющихся команд
- CI/CD пайплайны для тестирования
Этап 2: Средний выигрыш (4-8 часов, экономит 10+ часов/неделю)
- Фабрики для тестовых данных
- Docker Compose для локальной разработки
- Скрипты для миграций БД
Этап 3: Большой выигрыш (1-2 недели, экономит 20+ часов/неделю)
- CI/CD с автоматическим деплоем
- Система для багов и фич
- Документация с вики
Конкретный пример: Проект с большим числом интеграций
На проекте e-commerce было много интеграций. Каждая требовала ручной проверки. Решение: единый скрипт
#!/usr/bin/env python
import subprocess
import sys
from pathlib import Path
INTEGRATIONS = ['payment', 'shipping', 'logging']
def run_integration_test(integration: str) -> bool:
print(f"Testing {integration}...")
result = subprocess.run(
['pytest', f'tests/integrations/{integration}/', '-v'],
capture_output=True,
text=True
)
if result.returncode != 0:
print(f"FAILED: {integration}")
print(result.stdout)
return False
print(f"PASSED: {integration}")
return True
def main():
failed = []
for integration in INTEGRATIONS:
if not run_integration_test(integration):
failed.append(integration)
if failed:
print(f"Failed: {', '.join(failed)}")
sys.exit(1)
print("All integrations passed!")
if __name__ == '__main__':
main()
Раньше каждый интегрейшен проверялся отдельно (30+ минут). Со скриптом — автоматически за несколько минут.
Принципы автоматизации
- Если делаешь дважды — автоматизируй
- Если кто-то говорит "а я сделаю руками быстрее" — это признак плохой автоматизации
- Инвестируй в tooling: pre-commit, Make, Docker
- Документируй процессы: люди забывают, скрипты нет
- Версионируй конфиги: как код в git
Итоговый совет
Рутина обычно говорит: "Это просто и быстро". Но просто и быстро 10 раз в день = 10 часов в неделю впустую. Потратить день на автоматизацию — отличная инвестиция на долгосрок.