During a project there are often discussions about maintainability. Often between people that never maintained any application in their hole life!
They speak about loosly coupled systems with high cohesion. They do wired things such as converting an object at every interface boundry. (How should one find the usage of this object?)
The only thing to get an maintainable application is to keep it simple an DRY!
If you can use Ruby on Rails it’s easy. But if you have to use Java don’t overdesign your application with abstract classes or interfaces. Don’t use transfer objects or other usless stuff!
All you normaly want to do is to present the data from the database to the user. So why should you create an integration, a business, a service and a client layer?
Try to come back to nicely designed object oriented applications with as few code as possible!