dynamic architecture in software engineering