End-to-end tests would help to ensure that the whole system works as expected for most of the cases, and that every component integrates and interacts well altogether.
They are more complex than unit tests or integration tests, so they should be fewer.