Here's a list of things I consider when evaluating an application's architecture:
FunctionalityDoes the application satisfy its business requirements?
PerformanceDoes 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.
ScalabilityHow 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?
- How robust is the message bus/messaging framework?
- How does your application handle events?
Memory ManagementDoes your application architecture provide memory management/garbage collection mechanisms?
TestabilityHow easy is it for developers to test features of your application, e.g., memory management or use case functionality?
Error HandlingHow does the application handle errors and exception cases?
LoggingHow does the application handle logging of normal and/or exception cases?
ConsistencyDoes the application code look like somebody cared or written by a disparate group of developers with their own styles and whimsical coding techniques?
ExtensibilityHow easy is it to extend the functionality of the application?
Reusable ComponentsHow well does the application make use of reusable components?
SecurityDoes the application handle security?
- Data Security
- User authentication
- Accounting/logging of Security Events
- 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?