When developing business applications, it is normal to face considerable pressure to meet tight deadlines, as well as ever-changing functionalities. Our typical first reaction is to begin coding without having a pre-established design or plan. Although this approach normally bears fruit, it leads to the following situations:
Something that should have been a "disposable" prototype is gradually provided with more and more functionality and ends up being the final application
As the system grows, it gets more difficult to test the application, because the modules are coupled and they cannot be tested separately
We find everything mixed and a simple change in the UI forces us to modify code in the business logic or data
All these reasons justify a greater investment of time in the design of the application architecture.