A general, reusable solution to a commonly occurring problem in software engineering and architecture