Unit tests are essential for ensuring code reliability, even as it changes. They verify fundamental logic in code, run locally, and provide 80-100% code coverage, which boosts confidence in the code's functionality. Integration tests check interactions between different chunks of code in a local environment, verifying service/API interactions and "glue" between services. E2E tests simulate user interactions with the system, automating a user simulation to verify deployed behavior from a user perspective, improving confidence that the code will work in a real environment. Each test type has strengths and weaknesses, and their choice ultimately depends on whether its purpose/common use cases suit the system and its properties are viable for it.