Patterns of Software System Failure and Success