Concurrency is a tough issue to both specify and implement correctly. Further, concurrency concerns can be highly dependent on the target environment for a component.
To that end, all components can at least identify the main limited resources they will have access to. These resources should represent the items that will present the most difficulty in scaling this component, and are typically consisted of the following:
- Domain objects
- File system objects
- Threads
- Network objects
Once these are identified, a component can outline both the method that was chosen in addressing these concerns and future directions that can be taken by the component. (For example, the current implementation is not distributed, but future versions may be. Or, this component chose standard java socket implementations for simplicity, but future versions may need to use NIO in order to reduce the required number of threads.)