Рівень коду:
- Використовуються користувацькі класи помилок для різних типів виключень. Як і для чого їх використовують?
- Налаштований глобальний обробник(и) unhandled exceptions на вхідні запити. Приклади: Nest.js exception filters, Express error handler. Які задачі вирішує цей обробник?
- Налаштовані process.on('unhandledRejection') і process.on('uncaughtException'). Що вони роблять?
- Налаштований ESLint з правилами, що полегшують роботу з помилками. Які саме це правила?
Рівень застосунку:
- Є розділення Operational і Programmer Errors. Чим вони відрізняються?
- Налаштований retry для звернень до сервісів. Як саме він реалізований?
- Зміни в базі даних використовують транзакції. Як вони налаштовані?
- Реалізована стратегія “graceful shutdown” при критичних помилках або вимкненні. Що це таке і навіщо необхідно?
- Виконується валідація всіх вхідних даних. Як це реалізовано? Чому це необхідно?
- Визначена відповідальність за текст помилок для кінцевого користувача. Яка вона? Чи є інтернаціоналізація тексту помилок?
Рівень логування:
- Помилки в логах серіалізуються із збереженням stack-trace. Як це робиться? Що таке stack-trace?
- Помилки в логах серіалізуються із збереженням cause. Як це робиться? Що таке cause?
- Немає partial stacktrace. Чим це може бути викликано і як цього уникнути?
- Логи містять traceID для відстеження запитів. Як реалізовано його створення і логування?
- Інтегровані системи моніторингу та оповіщення про помилки. Які саме?