Design Patterns for Long Term Maintainability