Evita la codificación elegante. Cuanto más complicado sea el código, más probable es que haya errores. Por lo general, en los sistemas modernos, el código claramente escrito será lo suficientemente rápido y pequeño.
Use las bibliotecas disponibles. La forma más fácil de no tener errores al escribir una rutina de utilidad es no escribirla.
Aprenda algunas técnicas formales para las cosas más complicadas. Si hay condiciones complicadas, asegúrelas con lápiz y papel. Idealmente, conozca algunas técnicas de prueba. Si puedo probar que el código es correcto, casi siempre es bueno, excepto por errores grandes, tontos y obvios que son fáciles de solucionar. Obviamente, esto solo llega hasta cierto punto, pero a veces puedes razonar formalmente sobre cosas pequeñas pero complicadas.
Para el código existente, aprenda cómo refactorizar: cómo hacer pequeños cambios en el código, a menudo utilizando una herramienta automatizada, que hacen que el código sea más legible sin cambiar el comportamiento.
No hagas nada demasiado rápido. Tomarse un poco de tiempo por adelantado para hacer las cosas bien, verificar lo que ha hecho y pensar en lo que está haciendo puede dar buenos resultados más adelante.
Una vez que haya escrito el código, use lo que tiene para hacerlo bueno. Las pruebas unitarias son geniales. A menudo puede escribir pruebas con anticipación, lo que puede ser una excelente respuesta (si se realiza de manera consistente, este es un desarrollo basado en pruebas). Compile con opciones de advertencia y preste atención a las advertencias.
Haz que alguien más mire el código. Las revisiones formales de códigos son buenas, pero pueden no estar en un momento conveniente. Las solicitudes de extracción o similares si su scm no las admite permiten revisiones asincrónicas. La verificación de amigos puede ser una revisión menos formal. La programación de pares asegura que dos pares de ojos miran todo.