Six ideas that improve your software design