The choice between two software architectures, one suitably general and the other concrete, is equivalent to the choice of ease of affecting functionality when the desired implementation differs from the initial desire. In other words, if the spec is guessed to differ significantly from its initial form, it makes more sense to use a more generalized solution if it is immediately apparent versus a concrete solution even if the generalized solution is more work initially as the overall work resulting from transforming the initial concrete solution into a solution that satisfies the new spec.