As developers, our primary concern is to write code that can produce the expected functionality and results. While this principle holds true, the way we achieve our final implementation goal is also very important.
A properly designed application is not just about achieving the final goal of the application but it should also be about implementing an easily extensible and maintainable code-base.
Using a modular approach certainly helps us with achieving such objectives but as we make changes to our code-base, and as our application goes through its life cycle, we need to make sure all the pieces of the application still work properly.
When we make a change to one part of the application, we need to make sure that the change does not adversely affect the other parts of our code base. Of course, one way of assuring this, is to test everything manually and check every aspect of our application under all the circumstance that it was designed for. But such an...