software architecture lecture 23