К основному содержимому
к презентации
Конспект выступления2020Fellow

Современные подходы к разработке софта

Работа над продуктом начинается раньше написания кода и продолжается после его выпуска. Доклад последовательно расширяет простую схему «идея — реализация», добавляя проектирование, хранение данных, поставку изменений, качество, безопасность и эксплуатацию. На примерах Тинькофф автор показывает, почему работающая программа ещё не означает, что её удобно развивать и безопасно использовать в реальных условиях.

Devfest 20203 минуты

Конспект сокращён относительно исходного материала; примеры и оценки передают опыт и позицию автора.

Основная линия материала
01

Требования и зависимости определяют возможность развития

Быстрая реализация без проектирования может быть уместна для прототипа или исследования. Проблемы начинаются, когда такой код становится долговременной системой: накопленные связи затрудняют каждое следующее изменение. Поэтому перед реализацией нужно разделить вопросы «что делаем» и «как делаем», учитывая не только функции, но и характеристики качества. Требования к надёжности и сопровождению нельзя оставлять за пределами обсуждения продукта.

Внутреннюю структуру автор объясняет через слои и правило зависимостей чистой архитектуры: предметная логика не должна зависеть от деталей внешних механизмов. На уровне системы обсуждаются монолит, сервисный подход и микросервисы. Монолит может быть разумным началом, а разделение требует осмысленных границ, для которых полезен предметно-ориентированный подход. Большее число сервисов само по себе не является признаком лучшего проекта.

02

Данные и поставка требуют отдельных инженерных решений

Обзор хранения данных различает транзакционные и аналитические нагрузки, реляционные базы, объектные хранилища и распределённую обработку. Эти инструменты решают разные задачи. Выбор нужно связывать с характером доступа, объёмом и требованиями к согласованности, а не представлять переход к очередному типу хранилища обязательной ступенью развития любой системы. В распределённой среде особенно важно понимать последствия выбранных гарантий.

Поставка изменений проходит путь от ручного копирования файлов к сценариям и полноценным конвейерам CI/CD. Одновременно инфраструктура развивается от отдельных серверов к виртуализации, облачным ресурсам, контейнерам и платформенным сервисам. Смысл этих подходов — сделать размещение, масштабирование и повторение операций управляемыми. При этом часть ответственности переходит к платформе или провайдеру, а требования приложения и контроль результата остаются задачей команды.

03

Качество, безопасность и эксплуатация входят в общий цикл

Проверка качества только перед выпуском обнаруживает проблемы слишком поздно. Подход shift left вовлекает QA уже в обсуждение требований: тестовые сценарии помогают уточнять ожидаемое поведение, а участие в проектировании — обеспечивать проверяемость решения. Во время разработки часть проверок автоматизируется. Аналогично безопасность следует учитывать заранее, чтобы финальная проверка не становилась первым знакомством специалистов с системой и причиной дорогостоящих переделок.

После выпуска работа продолжается: SRE рассматривает эксплуатацию как инженерную задачу, а DataOps связывает движение данных с аналитикой и развитием продукта. Наблюдение за использованием даёт материал для следующего цикла решений. Итоговая схема сложнее написания кода по поступившей идее, но именно связь этапов позволяет получать продукт с заданными свойствами и продолжать его развитие. Отдельный инструмент не заменяет согласованности всего процесса.

Выводы

Что стоит унести с собой

  1. 01Проектирование должно учитывать функции и характеристики качества, а зависимости — оставлять возможность дальнейших изменений.
  2. 02Выбор хранилищ, архитектуры и инфраструктуры определяется нагрузкой и требованиями, а не модой.
  3. 03Проверки качества и безопасности начинаются с требований; эксплуатация и данные замыкают цикл развития продукта.

Источники