An attempt at describing what I think makes for great software architecture