Software Design Principles Dry