15. Оценить сроки разработки Bank API
Условие задачи:
Требуется оценить сроки разработки веб-сервиса Bank API, реализующего логику работы клиентов с банковскими счетами.
API физического лица должно позволять выполнять следующие действия:
Выпуск новой карты по счёту.
Просмотр списка карт.
Внесение средств на счёт.
Проверка баланса.
Добавление контрагента.
Просмотр списка контрагентов.
Перевод средств контрагенту.
Необходимо оценить, сколько времени понадобится на реализацию такого сервиса, и объяснить, от каких факторов зависит итоговая оценка.
Спойлеры к решению
Подсказки
💡 Перед оценкой необходимо уточнить границы задачи: требуется только backend или полноценное production-ready решение.
💡 Удобнее разбить сервис на отдельные функциональные блоки и оценить каждый из них отдельно.
💡 Помимо реализации REST API необходимо учитывать проектирование БД, бизнес-логику, валидацию, обработку ошибок и тестирование.
💡 Перевод денежных средств — наиболее сложная операция, поскольку необходимо учитывать транзакционность и конкурентное изменение баланса.
Решение
Точную оценку невозможно дать без уточнения требований.
Для предварительной оценки можно принять следующие условия:
сервис реализуется на
Java + Spring Boot;используется PostgreSQL;
реализуется только backend;
отсутствуют внешние банковские интеграции;
выпуск карты означает создание карты внутри системы;
авторизация либо отсутствует, либо реализуется в минимальном виде;
не требуется полноценная production-инфраструктура;
сервис реализует один backend-разработчик.
В первую очередь необходимо спроектировать модель данных.
Основные сущности могут выглядеть следующим образом:
Client
Account
Card
Counterparty
Transaction
Необходимо определить связи между сущностями, ограничения, индексы и способ хранения денежных значений.
На проектирование модели и первоначальную настройку приложения можно заложить примерно:
6–10 часов
Далее можно оценить отдельные функции API.
Выпуск новой карты по счёту:
POST /accounts/{accountId}/cards
Необходимо проверить существование счёта, его принадлежность клиенту и создать карту.
Оценка:
3–5 часов
Просмотр списка карт:
GET /accounts/{accountId}/cards
Оценка:
1–2 часа
Внесение средств:
POST /accounts/{accountId}/deposit
Например:
{
"amount": 1000.00
}
Необходимо проверить корректность суммы, существование счёта и выполнить изменение баланса в транзакции.
Оценка:
3–5 часов
Получение баланса:
GET /accounts/{accountId}/balance
Оценка:
1–2 часа
Добавление контрагента:
POST /counterparties
Необходимо проверить данные контрагента и сохранить связь с клиентом.
Оценка:
2–4 часа
Получение списка контрагентов:
GET /counterparties
Оценка:
1–2 часа
Наиболее сложной частью является перевод денежных средств.
Например:
POST /transfers
Запрос:
{
"accountId": 10,
"counterpartyId": 25,
"amount": 1500.00
}
При выполнении перевода необходимо:
проверить существование счёта отправителя;
проверить существование контрагента;
проверить корректность суммы;
проверить наличие достаточного количества средств;
списать деньги со счёта отправителя;
зачислить деньги получателю;
сохранить информацию о переводе.
Списание и зачисление должны выполняться в рамках одной транзакции:
@Transactional
public void transfer(...) {
// проверка счетов
// проверка баланса
// списание
// зачисление
// сохранение операции
}
Если на любом этапе возникает ошибка, изменения должны быть отменены.
Также необходимо учитывать конкурентные операции.
Например, на счёте находится:
1000 ₽
Одновременно приходят два запроса:
перевести 800 ₽
перевести 800 ₽
Нельзя допустить, чтобы оба перевода успешно списали средства.
Для решения этой проблемы в зависимости от архитектуры могут использоваться:
pessimistic locking;
optimistic locking;
атомарное обновление баланса на уровне БД.
На реализацию перевода можно заложить:
6–10 часов
Также необходимо предусмотреть валидацию и обработку ошибок:
404 — счёт не найден
404 — контрагент не найден
400 — некорректная сумма
400 / 409 — недостаточно средств
Например, через:
@RestControllerAdvice
public class GlobalExceptionHandler {
...
}
Оценка:
3–4 часа
Отдельное время потребуется на тестирование.
Желательно проверить:
создание карт;
получение карт;
пополнение счёта;
получение баланса;
создание контрагентов;
переводы;
недостаточный баланс;
откат транзакции при ошибке;
конкурентные операции.
Оценка:
6–10 часов
Также можно добавить документацию REST API через OpenAPI / Swagger.
Оценка:
1–2 часа
В итоге предварительная оценка может выглядеть следующим образом:
Проектирование и настройка 6–10 часов
Работа с картами 4–7 часов
Пополнение и баланс 4–7 часов
Контрагенты 3–6 часов
Переводы 6–10 часов
Валидация и обработка ошибок 3–4 часа
Тестирование 6–10 часов
Документация и доработка 2–3 часа
------------------------------------------------
Итого 34–57 часов
Для одного разработчика это примерно:
5–8 рабочих дней
если требуется качественно реализованный backend с транзакциями, обработкой ошибок и тестами.
Если необходимо сделать только демонстрационный MVP без глубокой проработки конкурентных операций, безопасности и инфраструктуры, задачу можно оценить примерно в:
2–4 рабочих дня
Если же речь идёт о production-ready банковском сервисе, необходимо дополнительно учитывать:
аутентификацию и авторизацию;
роли и права доступа;
интеграцию с внешними банковскими системами;
идемпотентность операций;
аудит;
защиту от повторного проведения платежей;
шифрование чувствительных данных;
мониторинг;
логирование;
CI/CD;
Docker / Kubernetes;
отказоустойчивость;
нагрузочное тестирование;
требования информационной безопасности.
В таком случае срок будет измеряться уже не несколькими днями, а неделями или месяцами в зависимости от конкретных требований.
На собеседовании важно не просто назвать число, а показать подход к оценке.
Можно ответить следующим образом:
«Сначала я бы уточнил требования: нужна ли авторизация, есть ли внешние интеграции, какие требования предъявляются к конкурентным переводам и насколько production-ready должно быть решение. Если речь идёт о standalone backend на Spring Boot с PostgreSQL без внешнего процессинга, MVP я бы оценил примерно в 2–4 рабочих дня. Более полноценную реализацию с транзакциями, обработкой ошибок, документацией и тестами — примерно в 5–8 рабочих дней».
Таким образом, оценка строится не только на количестве endpoint’ов, но и на сложности бизнес-логики, требованиях к консистентности данных, безопасности, тестированию и инфраструктуре.