Quizá estamos pasando una época en la que el mismo concepto de éxito se está redefiniendo de una manera totalmente distinta. Hasta hace bien poco, se consideraba una persona de éxito aquella que económicamente ha conseguido reunir una gran fortuna o patrimonio (sin importar la forma), una empresa de éxito aquella que ha crecido con dos dígitos porcentuales de año en año (sin importar la satisfacción laboral de sus ejecutivos, empleados y clientes), una familia de éxito aquella que vive rodeada de comodidades y maravillosas vacaciones en hoteles con todo incluido (sin importar tampoco la falta de conexión entre sus miembros), por poner algunos ejemplos. Al mismo tiempo el downshifting laboral comienza a ser un fenómeno cada vez más común.

¿Y qué demonios tiene esto que ver con el desarrollo de software?

Como en cualquier otra actividad profesional proyectamos en ella muchos defectos y virtudes que heredamos de nuestra vida diaria, aunque la relación no la veamos directamente.

Recientemente El Libro Negro del Programador ha recibido un comentario bastante elogioso desde Amazon.com y que, con permiso de su autor (al que agradezco profundamente), copio y pego a continuación:

"Lectura indispensable para los que nos dedicamos a la programación porque trata temas esenciales en cuanto a la productividad, la eficiencia, la calidad del software y el manejo del tiempo. La gran ventaja de este libro es que no es un libro mas sobre teoría de la ingeniería de software, sino que el autor aporta la gran experiencia que tiene y acierta en la solución los problemas a los que nos enfrentamos los desarrolladores a la hora de afrontar proyectos de desarrollo, explica con detalle cuáles son las malas prácticas que llevan al fracaso de los proyectos y plantea soluciones efectivas. Un punto clave que platea el autor es la importancia de nuestra profesión en el contexto actual mostrando las ventajas de ser un buen profesional del desarrollo, estas ventajas las muestra presentando un panorama muy positivo con grandes expectativas en el entorno productivo."

Para mí que el éxito se tiende erróneamente a asociar más al efecto que a la causa que lo provoca y de ahí que cometamos recurrentemente el error de embarcarnos en un proyecto sólo por su remuneración económica (vale, vale, ya sé que la pasta es importante, pero ni mucho menos es lo único), o ser amable con alguien para conseguir algo de esa persona, o apuntarnos a un intenso programa de ejercicio para adelgazar esos kilos de más, etc.

La cosa no funciona así, en absoluto: primero hay que ser (pero qué místico me está quedando esto), después hay que hacer y como resultado de todo eso, viene el tener: ser - hacer - tener. Ese es el orden ineluctable y que no falla nunca. 

Sólo cuando un proyecto resulta de utilidad a otras personas redundará en éxito económico, sólo cuando alguien nos cae sinceramente bien y le tratamos con respeto esa amabilidad se volverá a nuestro favor y sólo cuando nos gusta y hacemos ejercicio con regularidad y como algo integrado en nuestra vida, entonces conseguiremos estar en forma de manera perdurable.

Se suele hablar de éxito sólo desde un punto de vista económico, pero eso es una visión demasiado estrecha y simplista de la realidad. Nada me satisface más que uno de mis trabajos, como El Libro Negro del Programador, sea considerado de utilidad para otras personas: si con este proyecto he conseguido mejorar la vida y perspectivas profesionales de algunas personas, si les he ayudado a mejorar un poco, aunque sólo haya sido un poco, sus trayectorias laborales, si les ha servido para no cometer alguno de los errores más típicos y recurrentes en software, sólo entonces, consideraré El Libro Negro del Programador como un trabajo de éxito, y sólo si esto es así será cuando algo me llegue en forma de royalties...

El comentario anterior me llena de satisfacción y ánimo por la sencilla razón de que me muestra que el libro resulta de utilidad: esta es en realidad la esencia de cualquier proyecto con el que queramos conseguir algo. Cualquier trabajo, del tipo que sea, enfila hacia el éxito si sabe identificar necesidades no cubiertas y si al final resulta de utilidad a un grupo de gente que estará dispuesta a pagar por él. Así de sencillo, pero al mismo tiempo tan difícil de tenerlo en cuenta en todas nuestras decisiones.

En software a veces se nos olvida que lo que hacemos, el código que escribrimos, las interfaces de usuario que diseñamos no las hacemos para nosotros mismos sino para el cliente final. También se nos olvida que debemos escribir código de forma que cualquier persona que retome el proyecto en el futuro lo pueda asumir sin tener que desentrañar una aplicación con un diseño críptico e imposible de entender.

Me temo que me encuentro con personas que alardean de trabajar para una gran compañía, de ámbito internacional, pero que al mismo tiempo se quejan de tener que viajar tan frecuentemente que no pueden estar todo el tiempo que les gustaría con sus familias. Quizá tienen un saldo bancario excelente, pero ¿qué tipo de éxito es aquel que nos impide lo esencial, como es el estar con nuestros hijos, a cambio de una remuneración alta? Desde fuera pueden ser vistas como personas de éxito, pero desde dentro la cosa será muy distinta. Es sólo un ejemplo de cómo ese mismo éxito tiene muchas caras, luces y sombras.

Las personas que llegan a nuestra profesión exclusivamente como salida laboral tienen pocas probabilidades de encontrar un hueco a largo plazo en esta actividad tan exigente; claro que es legítimo buscarte la vida lo mejor que uno pueda, pero esta exigencia que es consustancial a nuestra profesión sólo se puede superar si realmente te gusta.

Los mejores profesionales que conozco son aquellos que realmente disfrutan con lo que hacen, que adoran su trabajo y a veces lo confunden con su mejor hobby. Un síntoma inequívoco que nos indica si lo que hacemos nos apasiona es si llegamos a ese estado de flujo en el que el tiempo, sencillamente, deja de existir y el cansancio no es más quen una simple anécdota. Si este estado del que hablo te suena a chino, entonces es que nunca has estado tan inmerso en una tarea que no te ha importado nada más.

Sólo estas personas pueden aguantar los momentos de crisis, las tensiones que se producen cuando se acercan las fechas de entrega peligrosamente, porque saben que en el fondo, están esperando esa maravillosa sensación adictiva que es entregrar un buen trabajo e irte a casa con la sensación de que te mereces el dinero que cobras por él.

¿Utópico?, de ningún modo, conozco personas así y son las que al estar con ellas irradian energía de arriba abajo, que hablan de lo que hacen con un entusiamo visceral y que lo proyectan en todo lo que hacen. Eso sí que es para mí éxito, la enorme suerte de poder vivir de aquello que te apasiona y no trabajar para otros mercenariamente por una nómina. Ni que decir tiene que tenemos que vivir de algo, pero ¿qué sería del mundo si asumiéramos un concepto de éxito más en relación a la calidad de vida, bienestar y sosiego mental, satisfacción con lo que uno tiene y es, relaciones armoniosas, ausencia de estrés y, por supuesto, la satisfacción de aportar y dar por sí misma? Seguro que el PIB sería entonces muy distinto...

¿Somos los mejores profesionales que podríamos llegar a ser?

¿Aportamos valor realmente a la compañía para la que trabajamos o a los clientes que nos pagan los honorarios? ¿o nos limitamos a hacer lo que nos dicen y nada más y no sabemos tomar la iniciativa en ningún asunto?

Se usa a menudo la expresión aportar valor pero en la mayoría de las ocasiones sólo queda como un simple titular de promoción interna en los departamentos de recursos humanos. Queda muy bien, pero realmente no se cambia absolutamente nada para que exista una cultura corporativa que promueva el valor, el talento y la proactividad. Veo demasiada gente hablando de proactividad pero actuando muy poco proactivamente: decimos una cosa pero después hacemos otra totalmente distinta. A mí esto me suena al principo de la locura.

No sabremos aportar valor en nuestro entorno si no invertimos en nosotros mismos. Es, de hecho, la mejor inversión que podemos hacer.

Quizá nos han educado para buscar un empleo del que vivir, trabajar en algo con lo que ganarnos la vida y pagar las facturas a final de mes. Quizá, digo, no pusieron durante nuestra educación el énfasis necesario para que siempre busquemos trabajar en algo que no sólo nos guste, sino que nos apasione. Otra cosa distinta es que eso mismo lo busquemos como empleado o como empleador, aunque lo que aquí quiero recalcar es que la excelencia, la calidad, siempre surge cuando amamos lo que hacemos con una intensidad superior al resto de nuestras obligaciones.

No existe ningún trabajo en el que todas las tareas que tienes que realizar sean siempre gratas; para conseguir un objetivo final, un proyecto con resultados, hay que hacer muchas cosas diferentes, unas nos pueden gustar más, otras menos, pero si cuando terminamos el proyecto, dando paso a una nueva fase en él o comenzando otro completamente nuevo, no sentimos cierta satisfacción, orgullo personal o una sencilla alegría por haber terminado algo con calidad y lo mejor posible dadas las circunstancias, entonces es que no estamos dedicando nuestra vida laboral a lo que realmente nos apasiona.

En software esto tiene un impacto enorme, aunque no siempre nos damos cuenta de las consecuencias desastrosas que esto tiene para la ejecución con éxito de un proyecto.

De acuerdo, hay quienes son capaces de dedicar ocho o más horas a una actividad que ni les va ni les viene, lo cual no deja de ser una virtud, necesaria además en aquellos países donde la crisis financiera todavía tiene un impacto grande. No obstante, quienes nos planteamos nuestra carrera laboral como algo ascendente, con pasos positivos y progresivos hacia el éxito, lo que sea que cada uno entienda por éxito, no podríamos trabajar en algo por lo que realmente no sentimos pasión.

Nunca vas a ser bueno, un profesional altamente cualificado, si has elegido hacer algo que no te llena, que no te gusta. Es así de sencillo pero así de contundente.

Del mismo modo, en una profesión donde la excelencia tiene una relación tan directa en la vida de los productos software que construimos, esta característica de los desarrolladores es más relevante que en cualquier otra profesión.

Me gusta mi profesión, a veces tan poliédrica, me gusta realizar productos que le resulta a un usuario final de enorme utilidad. Hay ocasiones en las que un sencillo pero elegante refactoring que hago y que mejora de algún modo la calidad del código que escribo, me hace sentir muy bien.

Igualmente me siento bien cuando me resulta fácil detectar cualquier problema en la instalación de un cliente donde tenemos desplegados algunos de nuestros productos (se ha hecho el suficiente esfuerzo para que el software se pueda depurar), cuando nos plantean una nueva necesidad y vemos que perfectamente se puede encajar en las capacidades de integración del producto, cuando un cliente te felicita porque le resulta fácil utilizar la interfaz de usuario sin recurrir a la guía de usuario (interfaces amigables) o cuando te felicita también porque lo que antes tardaba en hacer varias horas, ahora lo puede realizar a golpe de clic ahorrando costes a su compañía (valor para el cliente final), y un largo etcétera.

Para conseguir eso, hacen falta muchísimas horas de trabajo, disciplina, perseverancia en la creación de pruebas unitarias y de integración, refactorización continua de código y de diseños en cada nueva funcionalidad, clase, librería, etc. implementada y todo eso, desde luego, no se podría hacer si no te has vuelto adicto a ese momento mágico en que etiquetas una nueva versión de tu producto o creas un nuevo branch sabiendo que la versión que cierras en ese momento está bien conseguida, tanto en funcionalidad como en calidad interna de código. Si a esto lo llamamos excelencia, entonces no puedes llegar a ella si pasas ocho horas o más al día trabajando esperando que te ingresen una nómina a final de mes.

Uno de estos momentos, que yo llamo de epifanía, fue cuando colgué mi primera web allá por el 2008 (bueno, no es que ahora esté realmente orgulloso de ese trabajo, pero esa era mi primera incursión en entornos web después de años dedicado a aplicaciones y entornos de backend muy escalables y optimizados).

Una persona que no encaja en lo que hace y en lo que pasa muchas horas de su vida, necesariamente no se va a esforzar por realizar el mejor trabajo posible: la pregunta que los desarrolladores de software profesionales se deben hacer cuando terminan una tarea, es ¿puedo mejorar esto en algo?, ¿puedo abstraer de aquí algo para mejorar el diseño de la solución?, ¿podría simplificarlo aún más?.

Un desarrollador puede terminar su trabajo y ya está, un desarrollador bueno se plantea algunas o todas esas preguntas de vez en cuando o puntualmente, pero un desarrollador excelente se hace esas preguntas continuamente.

Como responsable de grupo de trabajo, una de mis funciones es crear un equipo con personas que se sienten a gusto haciendo lo que hacen, que les guste realmente la mayor parte de las tareas de desarrollo que desempeñan, pero, sobre todo, que se sienten felices cuando se termina algo con una calidad magnífica.

No podemos innovar en áreas de trabajo que no nos gustan del mismo modo que no podemos ser lo más productivos posibles en aquellos trabajos que odiamos.

La primera vez que leí sobre este aspecto del desarrollo de software fue en The Passionate Programmer, de Chad Fowler, uno de los libros que descubrí hace años y que me convencieron de que programar era mucho más que escribir líneas de código.

Sólo podemos programar bien si realmente nos gusta este trabajo y esta profesión tan exigentes.

Esto es exactamente de lo que habla Ken Robinson en el TED en la charla antológica y su libro El Elemento, de cómo la pasión por lo que uno hace lo cambia todo:

https://www.ted.com/talks/ken_robinson_says_schools_kill_creativity

Me sorprende a menudo cómo los desarrolladores de software nos complicamos la vida por no dar un paso atrás e identificar aquello que nos impide centrarnos en escribir código de producción y testearlo. Los problemas casi siempre surgen de no montar en entorno adecuado de pruebas que permita testear la nueva funcionalidad que incorporamos con comodidad. El extremo más radical de esto consiste cuando la única posibilidad de probar algo es ¡en el entorno de producción del cliente!. Me temo que sólo mecionarlo se me pone la piel de gallina, aunque lamentablemente lo he vivido y lo he visto en varias ocasiones.

Cuando comienzo un nuevo proyecto, aunque sea sencillamente probar una tecnología que desconozco y con la que comienzo a jugar, lo primero que hago es montar un entorno en el que trabajar con absoluta comodidad: si no lo hacemos así, a los problemas habituales de resolver errores y avanzar en aquello que no conocemos bien le añadiremos los inconvenientes de trabajar con ese entorno incómodo (o lo que es lo mismo, perderemos más tiempo en problemas con el entorno que en crear software útil).

Por poner un ejemplo, últimamente estoy haciendo algunas pruebas de concepto implementando algunos módulos en node.js que acceden a un servidor MongoDB. Lo primero que he hecho ha sido instanciar una máquina virtual con un Ubuntu Server en el que arrancar MongoDB; una vez que aprendo a limpiar completamente todas sus colecciones y realizar las tareas de administración básicas y suficientes para las pruebas que quiero implementar, todo lo demás lo puedo realizar mucho más rápidamente y cómodamente y, sobre todo, en pocos pasos.

Esto parece una trivialidad, pero si no lo hacemos así y estas operaciones elementales no las hiciera con sencillez, me resultaría muy complicado avanzar en las pruebas de node.js que estoy realizando: terminaría hastiado y acabaría abandonando más pronto que tarde.

El pricipio que me encanta aplicar en esto es aquel que indica que para las tareas repetitivas, sólo deberíamos trabajar una vez.

Efectivamente, sólo dedico algo de tiempo al comienzo para crearme un entorno de trabajo lo suficientemente cómodo como para poder centrarme en las pruebas o lo más importante del trabajo que me propongo realizar.

No hace mucho terminé de leer un libro que me ha encantado; se trata de El Efecto Compuesto de Darren Hardy (se puede encargar en español aquí), sobre cómo los pequeños hábitos y las pequeñas acciones, mantenidas en el tiempo y con constancia, representan realmente una gran diferencia.

Del mismo modo, ¿como sería nuestro trabajo si cada vez que quisiera ejecutar la prueba X necesitara pasar cinco minutos limpiando una base de datos, levantar ciertos servicios, etc.?, ¿cuánto tiempo perderíamos al usar un editor que no dominamos del todo?, ¿cuánto tiempo perdido si tuviéramos que probar algo leyendo el resultado en un documento txt?.Para ser productivos escribiendo el código de producción en el que trabajamos tenemos que crearnos entornos sencillos y eficientes, lo que requerirá seguramente dedicar algo de tiempo la primera vez que se genera ese entorno, aunque esa pequeña inversión de trabajo y tiempo la rentabilizaremos con creces posteriormente.

De nuevo, vemos cómo un buen y profesional desarrollador de software, competente en su ámbito, con suficiente experiencia, no llegaría al 10 si no se rodea de hábitos y condiciones que permiten que su trabajo se haga con comodidad y eficiencia.

Software quality¿Qué es lo que distingue un buen profesional de una persona que se gana la vida con aquello que le ordenan hacer?. Llevo mucho tiempo preguntándome qué es lo que realmente distingue a alguien por el que las compañías se pelearían en conseguir de aquellos que nada más entregar un currículum, éste va a parar a una enorme y creciente pila. Me temo que queda muy atrás el tiempo en que bastaba con decir tu título o profesión para convertirte en candidato: los paradigmas laborales están cambiando más rápidamente de lo que nos estamos dando cuenta.

No obstante, podemos esbozar un enorme y relevante corolario de logros en nuestra pasada vida laboral, mientras que sólo podemos ser verdaderamente profesionales en aquello que hacemos en el día a día.

Programadores, desarrolladores de software, aquellos en general que trabajan creando nuevas soluciones, sólo pueden prosperar de un modo, ni títulos, ni el soporte de grandes compañías en las que uno ha trabajado y nada de todo esto: somos profesionales cuando somos capaces de realizar un trabajo igualmente profesional.

Esto no es ninguna novedad, claro está, pero lejos de una actitud complaciente y egocéntrica que nos hace considerar todo lo que hacemos como lo mejor, tenemos que reconocer una cosa: hacer un trabajo pro requiere de una disciplina diaria que no tiene todo el mundo.

Me he encontrado en muchas ocasiones en la tesitura de tener que corregir detalles y bugs de compañeros, lo cual no está mal y forma parte de nuestro trabajo. Sorprende cuántas veces he descubierto cosas que manifiestamente se podrían haber hecho mucho mejor exactamente con el mismo esfuerzo.

Si cuesta el mismo trabajo hacer una cosa regular y hacerla de manera excelente, ¿por qué elegir la primera?. En muchos casos es sencillamente por pura pereza; en otros por que para exigirnos un nivel de excelencia en todo lo que hacemos se tienen que dar una serie de condiciones en el contexto en el que trabajamos.

No termino de entender cómo sabiendo hacer algo muy bien, por qué lo dejamos con un nivel de calidad pésimo si además nos cuesta el mismo esfuerzo. Un profesional esto lo tiene muy claro y es que la única métrica por la que se nos puede medir y valorar no es otra que la calidad del trabajo realizado. No hay más.

En el lugar donde trabajo llegan frecuentemente currículums y me sorprende que la mayoría de la gente no pone en valor la calidad de los trabajos realizados: casi siempre se ensalza el dominio de tal y cual tecnología, el haber trabajado en la renombrada empresa X, cuando en realidad lo que a un responsable de recursos humanos (o al menos es lo que yo mismo aplico) le gustaría ver algo como "Desarrollo de la aplicación tal actualmente en producción con tantos usuarios", "módulo X compartido en Github con tantos usuarios", etc. etc.

No somos profesionales por lo que decimos y ni siquiera por dónde trabajamos, sino por la calidad de lo que hacemos.

Lo sorprendente es que esta calidad en muchas ocasiones se consigue sencillamente eligiendo correctamene, a pequeños pasos y creando el hábito de hacer las cosas bien, obviando la pereza de terminar de cualquier forma, sin darnos cuenta de que así vamos dejando piedras que tarde o temprano se desmoronarán encima nuestra. No necesitamos participar en grandes y subvencionados programas de I+D para realizar cosas fantásticas (...): la mejor innovación se puede hacer cualquier día en el trabajo que estamos realizando. Si conseguimos como hábito que la excelencia sea la base de todo lo que realizamos, será entonces cuando irán surgiendo nuevas ideas, oportunidades de éxito y posibilidades para mejorar nuestra carrera profesional. Hacer, por lo contrario, un trabajo cutre, posiblemente nos permitirá pagar algunas facturas más, pero irá menoscabando nuestras oportunidades tarde o temprano.

Si aquello en lo que estoy enfrascado ahora mismo lo puedo hacerlo mejor, ¿por qué no hacerlo?. Un profesional se labra con el trabajo diario de muchos años.

¿Por qué leer El Libro Negro del Programador?

Adquirir desde:
Amazon (kindle eBook / papel)
CreateSpace (papel)
PayHip (epub / mobi / pdf)

El libro negro del programador.com
Segunda Edición - 2017

El libro negro del programador.com
Now available in english!

Archivo

Trabajo en...

Mis novelas...