Approaching Refactoring
Goals for Designing an Application’s Architecture
When designing an application’s architecture, one can prioritize tasks by goals. These goals include Engineering Velocity, Resiliency, Scalability and Cloud Readiness.
Engineering Velocity
Engineering Velocity is a measure of the amount of development work that can be completed in a development cycle. For example, dead-code slows engineering velocity.
Resiliency
Resiliency is the ability of a service to continue to function under a faulty state. For example, cross domain dependencies reduce resiliency.
Scalability
Scalability is the ability of a service (part of the application) to handle increased workloads without increasing the available resources for the entire application. For example, common classes reduce scalability.
Cloud Readiness
Cloud Readiness is a measure or assessment of the amount of work required to prepare the application to migrate to a cloud infrastructure.
Using TODOs to Achieve Architectural Design Goals
vFunction can map the type of TODO items derived in the analysis to the above goals per domain so the TODO items will be prioritized according to these goals.
In vFunction, the prioritization of TODO items is done using two levels of sorting:
- Domain Priority - Every domain can optionally be assigned with a priority (1-high, 2-medium, 3-low). The TODO items will first be sorted by the Domain Priority
- TODO Type according to the Goal assigned to the Domain - Each domain can be assigned with a specific goal, reflecting the user’s objectives for that domain: Increase Velocity, Increase Scalability, Increase Resiliency, and Cloud Readiness, then the TODO type (e.g., cross domain dependency to Resilience) will get prioritized accordingly.
When only low priority TODOs exist then one can decide the architecture is “good enough”.
High-priority TODOs should be mapped to high-priority refactoring tasks.