El diseño defensivo es la práctica de planificar contingencias en la etapa de diseño de un proyecto o emprendimiento. Básicamente, es la práctica de anticipar todas las formas posibles en que un usuario final podría hacer un mal uso de un dispositivo y diseñar el dispositivo de manera que sea imposible ese mal uso o minimice las consecuencias negativas. Por ejemplo, si es importante que un enchufe se inserte en un tomacorriente en una orientación particular, el tomacorriente y el enchufe deben diseñarse de manera que sea físicamente imposible insertar el enchufe incorrectamente. Los tomacorrientes suelen tener una forma especial para evitar la transposición de corriente y neutro. También están empotrados en la pared de manera que sea imposible tocar los conectores una vez que están activos.
El diseño defensivo en ingeniería de software se denomina programación defensiva . La ley de Murphy es una declaración bien conocida de la necesidad del diseño defensivo y también de sus limitaciones finales.
Las decisiones de implementación y los enfoques de diseño de software pueden hacer que el software sea más seguro y detectar errores de los usuarios. El código que implementa esto se denomina verificación de integridad .
Muchos conectores eléctricos aplican este principio al ser asimétricos. Por otra parte, los conectores USB-C son simétricos mecánicamente, pero no eléctricamente, pero logran una ilusión de simetría que resulta de la forma en que los dispositivos responden al cable y, por lo tanto, se pueden conectar de dos maneras. El software hace que los conectores y los cables se comporten como si fueran simétricos.