Design is the great time to assess the impact of a software change. I want to talk about three aspects of impact that we should consider:
Business Impact: Any material change to the business process that is not specified in the requirements should be considered impact. This could be beneficial or detrimental, or value neutral – it is still change. If each user needs a second monitor on their desk, this is impact. If two steps are removed from the process, this is impact. If users now need acess to and training for an additional system in order to complete a process, this is impact.
Business impact is important because the changes need to be planned, and paid for. The user community needs to be able to accept or reject this impact. It should not come as a surprise.
Software Impact: Any material change to the software that is not explicitly specified in the requirements is to be considered impact. If the data model changes in ways that require an adjustment to software capabilities so that they continue to work correctly, this is impact. If the design calls for a change to a shared service, such that all other consumers of that service must adjust or ensure that they are still operational, this is impact. If the design requires a change to an interface language (i.e. XSD), then every application that participates in that interface language must change.
Software change is important because the collateral impact may create additional coding effort that was not originally considered, even beyond the boundaries of the application that is changing. Additionally, this can simply add additional scope to regression testing, to prove that changes to central/common code components do no harm to unchanged features.
Environmental Change: Environmental change is rarely if ever specified in requirements, however, design often proposes change to infrastructure. Storage space, or other system resources, new servers, even external conectivity all are typical environmental change. Occasionally, non-functional requirements can predict environmental change like requirements to improve performance. Likewise requirements to get data from external sources can expose needs to build connectivity.
The importance of this impact is pretty clear. The provisioning of these resources is work in the project plan that needs to be planned. It also adds complexity to testing and deployment.