A veces los programadores tendemos a pensar que nuestra manera de resolver problemas es la mejor posible. La autovalidación en sí misma no es mala, pero cuando se convierte en vicio está lejos de ser realista. Basta con buscar un poco de información en internet acerca de algún problema que estemos intentando resolver, y nos vamos a encontrar con un montón de propuestas diferentes, a veces hasta contradictorias, y unas cuantas discusiones acerca de por qué ciertas soluciones son perfectas y las demás son producto de los pensamientos de una mente idiota. Nuestra propia solución probablemente no esté fuera del cuestionamiento de los críticos. De hecho, hasta podemos estar increíblemente errados.
Y si bien es cierto que los críticos a veces pueden estar en lo cierto, y en otras ocasiones ser un hato de imbéciles, es estúpido confiar en que nuestra forma de hacer las cosas es infalible. Siempre va a haber al menos un caso en el que nuestros métodos fallen, que nuestra propuesta de solución no se adapte las necesidades de la situación. Se nos va a presentar la dicotomía entre hacer una excepción mientras perdemos consistencia con respecto a lo que venimos haciendo, o conservar nuestra solución aunque esté lejos de ser la más óptima posible.
Sea cual sea el camino que elijamos, y ya sea sencillo o complicado, podemos encontrarle un cierto costado productivo: nos puede servir para replantearnos la manera en la que venimos haciendo las cosas.
Sabemos lo difícil que es pararse a hacer replanteos a veces, y también es cierto que no podemos vivir entre replanteos. No hace falta ser programador para saber esto; podemos deducirlo de cualquier relación problemática que hayamos tenido alguna vez con cualquier persona. Pero si de vez en cuando nos detenemos en el problema antes de poner manos a la obra, podemos evaluar cuáles son las cosas que necesitamos mejorar, las que siguen funcionando, o si hace falta modificar nuestro enfoque en algo o por completo.
Pero lo realmente importante acá es seguir, no quedar paralizados en la duda. Los contratiempos son obstáculos, pero sabemos que tarde o temprano los vamos a poder sobrepasar, incluso aunque no lo hagamos de la mejor manera posible, o pese a que nuestra propia solución no nos convenza. Nos vamos a deprimir, a desmoralizar, y a pensar que somos unos inútiles, o que los demás son unos idiotas. Pero una vez que nos hayamos tomado el tiempo suficiente para sentirnos mal, necesitamos volver a lo que estábamos haciendo, y tener en cuenta que en el futuro vamos a tener que seguir replanteando enfoques para poder seguir construyendo.
Ni lo que somos ni lo que hacemos es una cadena interminable de errores. En todo caso, algunas cosas nos salieron bien y otras mal, y lo que necesitamos es ser honestos con nosotros mismos al respecto de lo que nos sirve de lo que hicimos y lo que no. Solamente teniendo presente lo que funciona y evitando repetir lo que no nos da resultados podemos seguir nuestro trabajo con vistas a hacerlo cada vez mejor, y a ser cada vez menos infelices.
Cuando un sistema está repleto de trabajo irreflexivo, hecho a las apuradas, y con un mantenimiento solo destinado a resolver problemas ocasionales, termina convirtiéndose en una montaña de malas decisiones. Eventualmente va a llegar a un punto en el que se vuelva inmantenible o inmanejable, y eso solamente se va a poder resolver con un replanteo completo del sistema. Es inevitable que nos pase en algún punto, pero creo que es deseable que ocurra lo menos posible. Y suele ocurrir cuando no se reflexiona acerca del hecho de que un sistema que cumple ciertos requisitos importa más que la manera en que se llega a esos requisitos. También cuando confiamos demasiado en nuestra experiencia, en nuestro sentido común o en nuestra mera intuición, sin ninguna autocrítica acerca de nuestro trabajo o nuestra forma de entender ciertas cosas.