Here's a list of things I consider when evaluating an application's architecture:
Functionality
Does the application satisfy its business requirements?Performance
Does the application run fast enough?For example, if there are any views that take longer than 7 seconds to display, then you need to re-engineer something.
Scalability
How well does your application scale?- Can you easily add and remove components without affecting your application's performance or reliability?
- How loosely (or tightly) coupled is your application code?
Messaging
- How robust is the message bus/messaging framework?
- How does your application handle events?
Memory Management
Does your application architecture provide memory management/garbage collection mechanisms?Testability
How easy is it for developers to test features of your application, e.g., memory management or use case functionality?Error Handling
How does the application handle errors and exception cases?Logging
How does the application handle logging of normal and/or exception cases?Consistency
Does the application code look like somebody cared or written by a disparate group of developers with their own styles and whimsical coding techniques?Extensibility
How easy is it to extend the functionality of the application?Reusable Components
How well does the application make use of reusable components?Security
Does the application handle security?- Data Security
- User authentication
- Authorization
- Accounting/logging of Security Events
Maintainability
- How many lines of code does your application require to satisfy its functional requirements?
- How readable is your code? (Fancy one liners that are unreadable add to technical debt.)
- How defect-free is the application?
- How long does it take to add functionality give new enhancement requirements?


