Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Practical microtasks

Practical microtasks

Sobolev Nikita

February 10, 2020
Tweet

More Decks by Sobolev Nikita

Other Decks in Programming

Transcript

  1. Наверное, есть некоторая проблема > Теперь я - тимлид, но

    почему мне так плохо? > Как вырасти из разработчика в тимлида и жить с этим дальше
  2. Наверное, есть некоторая проблема > Теперь я - тимлид, но

    почему мне так плохо? > Как вырасти из разработчика в тимлида и жить с этим дальше > Как я не усидел на двух стульях и нашел третий
  3. Наверное, есть некоторая проблема > Теперь я - тимлид, но

    почему мне так плохо? > Как вырасти из разработчика в тимлида и жить с этим дальше > Как я не усидел на двух стульях и нашел третий > Кто такие тимлиды, и какова их реальная задача?
  4. О чем поговорим со страдающими инженерами? > Про основу автоматизации

    управления > Слухи, скандалы, сплетни и домыслы
  5. О чем поговорим со страдающими инженерами? > Про основу автоматизации

    управления > Слухи, скандалы, сплетни и домыслы > Реальные проблемы на пути
  6. О чем поговорим со страдающими инженерами? > Про основу автоматизации

    управления > Слухи, скандалы, сплетни и домыслы > Реальные проблемы на пути > Разбор типичных ситуаций
  7. Задача на неделю > Может занять две. Или три. Или

    год > Будет конфликтовать с другими
  8. Задача на неделю > Может занять две. Или три. Или

    год > Будет конфликтовать с другими > Может сожрать лишние ресурсы
  9. Задача на неделю > Может занять две. Или три. Или

    год > Будет конфликтовать с другими > Может сожрать лишние ресурсы > Непрозрачна: нужен наш контроль
  10. Задача на час > Маловероятно займет больше > Не будет

    конфликтовать с другими > Очень скромная по ресурсам
  11. Задача на час > Маловероятно займет больше > Не будет

    конфликтовать с другими > Очень скромная по ресурсам > Прозрачна: наш контроль не нужен
  12. Что можно делать с прозрачностью? > Мотивировать людей > Собирать

    статистику и предсказывать > Общаться с заказчиками
  13. Что можно делать с прозрачностью? > Мотивировать людей > Собирать

    статистику и предсказывать > Общаться с заказчиками > Настраивать нотификации и быть спокойным
  14. Что на самом деле сложно? > Управлять большим количеством задач

    > Гонять CI, делать ревью кода > Архитектура
  15. Что на самом деле сложно? > Управлять большим количеством задач

    > Гонять CI, делать ревью кода > Архитектура > Сохранять стабильность сборки
  16. Что на самом деле сложно? > Управлять большим количеством задач

    > Гонять CI, делать ревью кода > Архитектура > Сохранять стабильность сборки > Деплоить и откатывать, мониторить
  17. 44

  18. Основные требования > Удобно создавать Task Chains > Выставить свой

    статус > Отказаться от задачи > Настроить напоминалки
  19. Основные требования > Удобно создавать Task Chains > Выставить свой

    статус > Отказаться от задачи > Настроить напоминалки > Настроить таймауты
  20. Необходимый список ботов > Бот для релизов > Бот для

    rebase > Бот для работы с задачами > Бот для управления программистами
  21. Необходимый список ботов > Бот для релизов > Бот для

    rebase > Бот для работы с задачами > Бот для управления программистами > Бот для ревью кода
  22. CI становится узким местом Время 0 10 20 30 40

    Июль Время: 15 минут Время: 15 минут
  23. CI становится узким местом Время 0 10 20 30 40

    Июль Время: 8 минут Время: 15 минут Время: 15 минут
  24. test: script: # Building test image and saving the cache:

    - docker pull "${IMAGE_NAME}:dev" - docker tag "${IMAGE_NAME}:dev" "${PROJECT_NAME}:dev" # The logic itself: - docker-compose build - docker-compose run --rm web test # Pushing back the result for future runs: - docker tag "${PROJECT_NAME}:dev" "${IMAGE_NAME}:dev" - docker push "${IMAGE_NAME}:dev"
  25. test: script: # Building test image and saving the cache:

    - docker pull "${IMAGE_NAME}:dev" - docker tag "${IMAGE_NAME}:dev" "${PROJECT_NAME}:dev" # The logic itself: - docker-compose build - docker-compose run --rm web test # Pushing back the result for future runs: - docker tag "${PROJECT_NAME}:dev" "${IMAGE_NAME}:dev" - docker push "${IMAGE_NAME}:dev"
  26. test: script: # Building test image and saving the cache:

    - docker pull "${IMAGE_NAME}:dev" - docker tag "${IMAGE_NAME}:dev" "${PROJECT_NAME}:dev" # The logic itself: - docker-compose build - docker-compose run --rm web test # Pushing back the result for future runs: - docker tag "${PROJECT_NAME}:dev" "${IMAGE_NAME}:dev" - docker push "${IMAGE_NAME}:dev"
  27. test: script: # Building test image and saving the cache:

    - docker pull "${IMAGE_NAME}:dev" - docker tag "${IMAGE_NAME}:dev" "${PROJECT_NAME}:dev" # The logic itself: - docker-compose build - docker-compose run --rm web test # Pushing back the result for future runs: - docker tag "${PROJECT_NAME}:dev" "${IMAGE_NAME}:dev" - docker push "${IMAGE_NAME}:dev"
  28. release-image: image: wemakeservices/kira-release:latest before_script: - docker pull "${IMAGE_NAME}:latest" - docker

    pull "${IMAGE_NAME}:dev" - docker build -t "${IMAGE_NAME}:latest" --cache-from="${IMAGE_NAME}:latest" --cache-from="${IMAGE_NAME}:dev" --build-arg DJANGO_ENV=production -f docker/django/Dockerfile . script: - docker push "${IMAGE_NAME}:latest"
  29. release-image: image: wemakeservices/kira-release:latest before_script: - docker pull "${IMAGE_NAME}:latest" - docker

    pull "${IMAGE_NAME}:dev" - docker build -t "${IMAGE_NAME}:latest" --cache-from="${IMAGE_NAME}:latest" --cache-from="${IMAGE_NAME}:dev" --build-arg DJANGO_ENV=production -f docker/django/Dockerfile . script: - docker push "${IMAGE_NAME}:latest"
  30. release-image: image: wemakeservices/kira-release:latest before_script: - docker pull "${IMAGE_NAME}:latest" - docker

    pull "${IMAGE_NAME}:dev" - docker build -t "${IMAGE_NAME}:latest" --cache-from="${IMAGE_NAME}:latest" --cache-from="${IMAGE_NAME}:dev" --build-arg DJANGO_ENV=production -f docker/django/Dockerfile . script: - docker push "${IMAGE_NAME}:latest"
  31. release-image: image: wemakeservices/kira-release:latest before_script: - docker pull "${IMAGE_NAME}:latest" - docker

    pull "${IMAGE_NAME}:dev" - docker build -t "${IMAGE_NAME}:latest" --cache-from="${IMAGE_NAME}:latest" --cache-from="${IMAGE_NAME}:dev" --build-arg DJANGO_ENV=production -f docker/django/Dockerfile . script: - docker push "${IMAGE_NAME}:latest"
  32. Уже лучше Время 0 10 20 30 40 Было Стало

    Время: 15 минут Время: 15 минут
  33. Уже лучше Время 0 10 20 30 40 Было Стало

    Время: 4 минут Время: 15 минут Время: 15 минут Время: 15 минут
  34. Уже лучше Время 0 10 20 30 40 Было Стало

    Время: 5 минут Время: 8 минут Время: 4 минут Время: 15 минут Время: 15 минут Время: 15 минут
  35. class NodeVisitor(object): def visit_Num(self, node: ast.Num) -> None: ... def

    visit_Bytes(self, node: ast.Bytes) -> None: ... def visit_Str(self, node: ast.Str) -> None: ... def visit_NameConstant(self, node) -> None: ...
  36. Подзадачи 2. Новый умный слой абстракции: github.com/wemake- services/wemake-python-styleguide/issues/1135 1. Новая

    методика подсчета покрытия: github.com/ wemake-services/coverage-conditional-plugin 105
  37. Подзадачи 2. Новый умный слой абстракции: github.com/wemake- services/wemake-python-styleguide/issues/1135 1. Новая

    методика подсчета покрытия: github.com/ wemake-services/coverage-conditional-plugin 3. Постепенный рефакторинг: https://github.com/ wemake-services/wemake-python-styleguide/issues/ 1141 105
  38. Проводим исследования > Понять, какие зависимости можно удалить: github.com/wemake-services/ wemake-python-styleguide/issues/1139

    > Добавить полезное из другой библиотеки: github.com/wemake- services/wemake-python-styleguide/ issues/422 > Проверить, что зависимости работают с python3.8: github.com/wemake-services/ wemake-python-styleguide/issues/1138
  39. Полезные ссылки > Microtasks at GitHub: dev.to/mscccc/ how-we-use-ship-small-to-rapidly- build-new-features-at-github-5cl9 >

    Microtasks at Google: google.github.io/eng-practices/ review/developer/small-cls.html > Program development by stepwise refinement: dl.acm.org/doi/ 10.1145/362575.362577