Using patterns and pattern languages to make better architectural decisions