First, application scenarios
1. Project period long enough
2. no longer needs frequent changes
3. Code reuse high
Second, the difficulty
1. Technical requirements
2. stable interface or interfaces
3. Quality Awareness
4. familiar with the system by manual testing