top of page

Codea como un pro: modelos mentales para desarrolladores

Las modelos mentales son como mapas en nuestra mente que nos ayudan a dar sentido a las cosas. Son la razón por la que pensamos que algunas cosas son más importantes que otras y nos ayudan a resolver problemas.


Básicamente, un modelo mental es nuestra pequeña comprensión o imagen de cómo funciona algo. ¿No podemos acordarnos de todos los detalles minuciosos sobre todo, verdad? Entonces, creamos estos modelos mentales para desglosar toda esa información compleja en partes que podemos manejar y entender fácilmente.


"No alcanzas el nivel de tus objetivos. Caes al nivel de tus sistemas." 

- James Clear


¿Qué significa esto? Significa que no podés apuntar alto sin un sistema que lo respalde. O más simplemente, significa que lo que lográs es el resultado de tus sistemas, el resultado de cómo seguís tus procesos internos/externos, y no el resultado de apuntar alto.


modelos mentales

¿Por qué son tan importantes para un desarrollador?


Ya hablamos mucho sobre cómo podés ser simplemente un "Cerrador de Tickets" o podés apuntar alto y convertirte en un "Organizador de Problemas". Si no te acordás, andá y leé nuestro artículo “Redefiniendo el seniority: de cerradores de tickets a organizador de problemas”.


Si querés ser ese "Organizador de problemas", o incluso si empezás como un "Cerrador de tickets", necesitás un sistema, procesos y formas de pensar que respalden tu trabajo. Necesitás una manera de enfrentar problemas, leer ese código que debes mantener y hacerlo de la manera más saludable, productiva y profesional posible. Y lo más importante: necesitás hacerlo sin tener que reinventar la rueda todo el tiempo.


En mi opinión, los modelos mentales son comparables a los patrones de diseño: son soluciones generales y reutilizables para problemas que se encuentran con frecuencia. No son soluciones listas para usar que se pueden aplicar directamente; en cambio, funcionan como un conjunto de "mejores prácticas" que se pueden usar en diversas situaciones.


Modelos mentales para desarrolladores


Hay un montón de modelos mentales dando vueltas por ahí. De hecho, existen catálogos de modelos mentales que podés encontrar online. Pero, al igual que con los patrones de diseño, puede haber casos en los que sea difícil aplicar la descripción abstracta del modelo a una situación práctica de la vida real donde sería beneficioso.

Por eso elegí estos modelos mentales que, en mi opinión, son los más útiles para los desarrolladores de software, y les añadí uno o más ejemplos de la vida real sobre cómo pueden ser aplicados.


Navaja de Occam

La navaja de Occam, también conocida como la Ley de la parsimonia, sugiere que al intentar entender un fenómeno complejo o resolver un problema, siempre se debe elegir la explicación o estrategia más simple entre las opciones disponibles. No garantiza que sea la solución más simple, simplemente sugiere que debe ser la primera opción a explorar.


En el ámbito del desarrollo de software, este modelo podría usarse cuando estás tratando de solucionar un error. Después de un tiempo buscándolo, empezás a pensar que no podés arreglarlo; luego a tener una crisis de confianza (¡hola síndrome del impostor!); un par de horas después, estás cuestionando tu carrera para terminar el día cuestionando toda tu vida. A la mañana siguiente te das cuenta de que solo era un punto y coma faltante o un simple error tipográfico. El verdadero problema (y la explicación más simple) era que estabas demasiado metido en el agujero (o simplemente cansado).


Si estás buscando algún otro ejemplo de este modelo siendo utilizado en software, acordate del principio de diseño KISS (Keep It Simple Stupid).


Círculo de competencia

Se refiere a la idea de que cada uno de nosotros, individualmente o como organización, tiene un rango de habilidades o comprensión en ciertas áreas. El concepto hace énfasis en la importancia de mantenernos dentro de nuestras áreas de experiencia para la toma de decisiones y esfuerzos. Conocer nuestros límites nos permite entender cuándo tenemos una ventaja en una determinada situación frente a cuándo tenemos un "borde rugoso" que nos hace vulnerables.


Conocer nuestros límites nos permite mejorar la toma de decisiones sin que nuestro ego nos ciegue. ¿Alguna vez discutiste un tema fuera de tu expertise solo para evitar admitir que no tienes ni idea? No es una posición cómoda, especialmente cuando se trata de tomar decisiones. 


Inversión

Inversión es un modelo mental simple pero muy poderoso en el que abordás una situación desde el extremo opuesto al punto de partida normal. En lugar de pensar en cómo tener éxito, pensás en cómo fallar. Esto te ayuda a entender qué errores evitar.


Supongamos que vos y tu equipo de desarrollo de software prometieron a un cliente que van a producir un código mantenible. ¿Qué significa realmente eso? Si les preguntas, te responderán "Código limpio", como si eso fuera suficiente para garantizar la mantenibilidad de tu código. En cambio, podés preguntarle a tu equipo qué pueden hacer para hacer tu código fuente inmantenible. Te dirán "No agregar comentarios", "usar nombres de variables/funciones crípticos", "codificar todo dentro de una sola clase/archivo", etc. Esto te dará una lista útil de cosas que evitar en tu proceso de codificación, asegurando así una mayor mantenibilidad.


La inversión, como método, puede ser desafiante para nosotros debido a tres razones científicas clave:

  • Rompe nuestros patrones de pensamiento convencionales.

  • Nos obliga a contemplar resultados no deseados.

  • Cambiar nuestro enfoque habitual de resolución de problemas a la inversión ejerce una presión adicional sobre nuestros cerebros.


Al dominar este método, potencialmente podemos revolucionar nuestras habilidades para resolver problemas.


Pensamiento de segundo orden

El pensamiento de segundo orden es un modelo mental que implica considerar no solo los resultados inmediatos de las decisiones, sino también cómo esos resultados podrían causar efectos adicionales en el futuro. Esta capacidad de previsión puede ayudar a prevenir problemas potenciales que no eran inmediatamente evidentes y nos permite tomar decisiones más informadas y estratégicas.


Este modo de pensar es fundamental en el desarrollo de software porque tomamos muchas decisiones a lo largo del día. Por ejemplo, ¿debería actualizar esta herramienta a la última versión para esta nueva función? ¿O debería optar por este nuevo estilo de diseño? Cada elección que hacemos tiene un efecto instantáneo, y generalmente acertamos en esa parte. Pero si no pensamos en lo que podría suceder a continuación debido a esa elección, podríamos arruinar otras partes de nuestro proyecto, o terminar con problemas inesperados más adelante porque la nueva versión no es estable.


Este modelo mental es especialmente importante al comienzo de un proyecto. En este momento, tomamos muchas decisiones que son difíciles de cambiar más adelante. Pensá en decisiones de arquitectura, tipo de base de datos, proveedor de nube, y una larga, larga lista de otras. Si querés profundizar en este tema, leé el concepto de decisiones Tipo 1 y Tipo 2 de Jeff Bezos.


Reciprocidad

Este es un principio muy simple pero poderoso. Si alguien te hace algo, es probable que tú hagas lo mismo de vuelta (o peor aún, a otros).


Un ejemplo de esto podría ser cuando hacemos una revisión de código para alguien. Si somos amables, honestos y educados en nuestra retroalimentación, es probable que esa persona haga lo mismo por nosotros e incluso con otros desarrolladores al hacer una CR.


Inercia

La inercia es una regla básica en la física que dice que si algo se está moviendo en una dirección determinada, seguirá yendo en esa dirección a menos que algo más lo detenga o cambie su dirección. Esta idea también se puede aplicar a diferentes áreas de nuestras vidas, incluido nuestro trabajo.


En muchas empresas, incluso a medida que crecen y cambian mucho, las partes técnicas como las bases de datos y los lenguajes de programación no cambian tan rápidamente. Esto es especialmente cierto para aspectos fundamentales como bases de datos, lenguajes de programación y proveedores de nube. Aunque es importante seguir haciendo las cosas rápidamente y de manera eficiente, también debemos asegurarnos de que sean fáciles de mantener.


Creo que esta idea de inercia se aplica también a proyectos de ingeniería de software. ¿Alguna vez intentaste cambiar las cosas justo después de unirte a un nuevo proyecto? Usualmente no va muy bien. A menudo uso una escena de la película "Indiana Jones: en busca del arca perdida" para explicar esto. En la escena, tratar de detener o redirigir una enorme roca rodante (como intentar cambiar un proyecto) ¡te aplastará!


La falacia del costo irrecuperable

La falacia del costo irrecuperable es como tirar dinero bueno tras malo. Sucede cuando seguimos haciendo algo porque ya hemos invertido mucho tiempo, dinero o esfuerzo en ello, incluso si puede que no sea lo mejor hacerlo ahora. El error está en pensar que, dado que ya hemos invertido tanto, deberíamos seguir adelante, aunque no podamos recuperar lo que ya hemos gastado. Básicamente, significa dejar que lo que hemos hecho en el pasado afecte nuestras decisiones ahora, en lugar de solo pensar en lo que es mejor para el futuro.


Este último modelo mental es muy común en nuestro campo. ¿Cuántos de ustedes estuvieron involucrados en un proyecto de desarrollo de software que debería haberse detenido mucho antes? Sin embargo, la gerencia siguió adelante hasta su finalización, lo que resultó en insatisfacción generalizada y el producto final ahora yace olvidado en un servidor sin usar.


No sólo señalemos con el dedo a los gerentes. Como desarrolladores de software, a menudo creamos sistemas complejos que pueden expandirse en todas las formas posibles, según los deseos del cliente. Pero luego nos damos cuenta de que las necesidades del cliente eran mucho más simples de lo que inicialmente pensábamos. Aun así, seguimos usando nuestro monstruo porque nos llevó mucho tiempo construirlo y se ve hermoso, en lugar de utilizar una estructura simple.


Conclusión


En el mundo de la programación, tener modelos mentales puede ayudarnos a pensar mejor y tomar decisiones más inteligentes. Son como un mapa guía que nos ayuda a entender situaciones complicadas, resolver problemas y prever lo que podría suceder a continuación. Pero es importante recordar que no hay un modelo mental que sirva para todo. Son simplemente herramientas para pensar, no reglas estrictas a seguir. Lo mejor es tener varios en tu arsenal para poder utilizar diferentes según la situación.


Al principio, puede requerir algo de esfuerzo acostumbrarse a estos modelos mentales mientras los usas en tu trabajo diario. Pero con el tiempo, van a pasar a ser algo natural e influir sutilmente en cómo tomás decisiones, haciéndote más fácil el manejo del complejo mundo del desarrollo de software. El objetivo no es tener una respuesta para todo, sino desarrollar una forma de pensar que te permita mirar los problemas desde diferentes ángulos y encontrar soluciones efectivas.

image.png

¿Querés leer más contenido como este?

Suscribite a nuestro newsletter para recibir mensualmente contenidos novedosos, noticias del sector tecnológico y búsquedas laborales destacadas.

bottom of page