Mucho se habla del código legacy, pero en esas charlas nunca (o casi nunca) se tiene en cuenta el legacy en CSS que, al igual que los vampiros, “existe”.

Cualquiera que haya trabajado en un proyecto de largo recorrido en años, ya sea desde sus inicios o aterrizando en algún punto de su etapa de desarrollo, va a sentir un escalofrío pensando en ese CSS por el que han pasado tantas manos. No quiero ser demasiado hater, pero (por experiencia) puedo decir que normalmente muy pocas manos tratan bien al CSS y tienen en cuenta que será heredado por alguien que vendrá detrás. Y como esto lo he sufrido en mis carnes muchas veces, quiero hablar sobre cómo creo que se puede prevenir y hacernos la vida mucho más sencilla a todes.

Como todo en la vida, en el desarrollo de software está la teoría y luego la práctica. Muchas veces hacemos las cosas mal por desconocimiento, por falta de tiempo o por dejadez. Contra el desconocimiento y la falta de tiempo, puedo ayudaros con este post y, con un poco de suerte, también con la dejadez al ponéroslo fácil para implementar algunos truquis sencillos.

La teoría

En un mundo ideal, cuando comenzamos a desarrollar un producto contamos con un sistema de diseño que nos permite sentarnos a pensar una buena arquitectura de todo nuestro front y, por supuesto, también de nuestro CSS.

Pero los mundos ideales raramente suelen existir y tenemos que tirar de donde podemos. Nuestro siguiente recurso es apelar a las buenas prácticas de CSS, pero ¿Qué son las buenas prácticas? Dices mientras clavas tu pupila #0000FF en… Las buenas prácticas se supone que son reglas no escritas que, por convención, todos cumplimos basándonos en nuestra interpretación de las mismas. Y ya está. No están escritas en piedra ni certificadas ante notario.

Las buenas prácticas son un poco como la elegancia del código: un concepto abstracto que utilizamos para hacernos los interesantes, pero que en muchas ocasiones es un ser mitológico que desafía a todas las leyes de la ciencia conocida.

¡Ojo! Quiero hacer una diferenciación entre los estándares establecidos en función del conocimiento de CSS y la aplicación de los principios SOLID en el desarrollo de software con las buenas prácticas que inundan miles de posts en internet.

Como la mejor manera de hacerme entender es con un ejemplo, aquí va uno sobre un estándar establecido:

Y aquí va uno sobre una “buena práctica mitológica”:

Si os soy sincera creo que hay muy pocas buenas prácticas como tal y todas van a apelar al correcto conocimiento de la cascada de CSS y a cuestiones de accesibilidad (como que no se quitan jamás de los jamases los estilos globales de los :focus). Todo, absolutamente todo lo demás que me he encontrado en la vida han sido, precisamente, preferencias personales.

La práctica

Está feo que hable de preferencias personales cuando este post puede interpretarse como una defensa de las mías, así que voy a intentar argumentar bien a qué me refiero, porque es muy probable que tengamos costumbres muy asentadas a la hora de hacer CSS que ni siquiera respondan a nuestros gustos, sino a que simplemente nos enseñaron a hacerlo así, o siempre lo hemos visto de esa manera y no se nos ha ocurrido que pudiera ser de otra.

En mi opinión, la única manera sana de generar unas “buenas prácticas” que se mantengan y sean escalables es que estas sean “de equipo”. He trabajado en equipos en el que dentro de un marco Scrum había una política explícita sobre cómo escribir los commits y qué código se seguía a la hora de nombrar ramas… Si eso nos parece importante, creo que el CSS también lo es.

Por eso, para mí los dos puntos fundamentales para generar unas “buenas prácticas de equipo” son:

Con el primer punto, nadie impone a nadie su parecer aka su manía (o eso espero), y con el segundo hacemos que quienes vengan después que nosotros tengan una source of truth en la que basarse y de la que aprender.

A veces, tengo la sensación de que hablar de esto para un no lenguaje de programación tan fácil (ironía off) es darle demasiadas vueltas a algo que no lo merece. Luego pienso en todas las veces en las que he tenido que ir probando en varias declaraciones de clases a ver cuál era la que verdaderamente aplicaba por no cascar un !important… y se me pasa.

Ese refactor del que usted me habla

¿Cuántas veces habéis tenido un refactor de CSS como tarea de deuda técnica? Es mi reto personal, tener al menos uno en cada proyecto que toco.

Hilando con lo que comentaba en el anterior apartado, dejar algo que “meh, lo podría hacer mejor, ya lo refactorizaré cuando tenga un huequito” en tu JS te da un poco de vergüenza y, probablemente, lo refactorices más pronto que tarde. Pero el “pongo esto aquí y ya volveré a por ello para abstraerlo en un mixin cuando esto crezca” es un clásico. Al final crearás el mixin, lo utilizarás en otros sitios, pero ese primer punto del que ni siquiera harás copy-paste, se quedará tal cual hasta el fin de los días.

No es que lo hagas tú, es que lo hacemos todos. Casi dos años y medio en un proyecto histórico me han hecho ser esa persona que deja cosas para después y 7 meses más tarde se da cuenta de que no lo hizo, le toca hacer ingeniería inversa, memoria y ponerlo todo correctamente. Y no pasa nada, todos somos humanos.

Personalmente, suelo buscarme huecos cuando ya estamos para entregar una funcionalidad, especialmente si ha sido largo su desarrollo. Reviso que no esté duplicando estilos que están aplicados en otros lugares y que se pueden reutilizar, que no me he dejado pruebas comentadas, apaños temporales que siempre se quedan al final de alguna hoja…

Hay algunas herramientas y librerías que permiten hacer este mantenimiento de una manera más sencilla. Soy muy old school y no las he probado, pero os listo algunas por si queréis probar: Project Wallace, PurifyCSS, unCSS y por supuesto el validador de CSS de la W3C.

Otro truco, en proyectos en los que tenemos componentes (en Vue.js ha sido mi experiencia) y que están desarrollando distintas personas a la vez, es hacer una revisión de los estilos que se han dado a esos componentes para ver cuáles están repetidos y sacarlos a una hoja de estilos común en los estilos generales. Creo que este es uno de los errores más comunes que se producen en este tipo de apps y, por eso, si llega el día en el que tienes que eliminar todos los border-radius de la aplicación te das cuenta de tu error… por las malas.

Por eso hay que poner en valor que, de vez en cuando (cada 5 sprints, una vez por Q, cuando vamos a sacar la feature esa que llevamos desarrollando 6 meses), alguien se líe la manta a la cabeza y refactorice el CSS que llevamos hecho. Especialmente, si somos muchos desarrollando en paralelo.

Sé que es difícil defender este tipo de tareas, la deuda técnica en general (y de CSS en particular), porque en cuestiones de rendimiento es probable que no afecte especialmente. Pero la mantenibilidad y escalabilidad son dos principios fundamentales a la hora de asegurar la calidad de los productos que desarrollamos.

CSS “elegante” 👔

Quizá muchos de los que me estéis leyendo tengáis un largo recorrido como maquetadores y sepáis ver lo malo en todos esos listados de buenas prácticas que cada uno escribe basándose en sus gustos. Pero si no es el caso, os dejo algunas cosas que he aprendido a lo largo de mi trayectoria profesional sobre los eternos debates relacionados con esas “buenas prácticas mitológicas”:

My two cents…

Seguro que os lo estáis viendo venir, pero lo mejor que puede hacerse para evitar que tu CSS sea un decorado de Halloween perenne es:

Soy consciente de que todos estos consejos dependen de una variable fundamental que es el tiempo y que muchas veces es escaso, por no decir que está en valores negativos. Es horrible, lo sé. En los casos en los que tengamos que tirar para delante sin mirar el reguero de cadáveres que estamos dejando atrás, os ruego que una vez las aguas se calmen, limpiéis el estropicio en la medida de lo posible. Así, cuando hagáis competiciones con otros fronts con archive.org de vuestros trabajos pasados, no tendréis un lugar destacado en el wall of shame.

Luchad por poner en valor este trabajo que cada vez se denuesta más y que muy pocas personas fuera de los niveles “profundos” del desarrollo conocen y entienden su importancia.

La mejor manera de luchar contra un CSS Frankenstein es darle al CSS la importancia que se merece.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.