hardware design best practices