Pirobits
  

El valor de la optimización

alberto avatar Alberto Sola · 4/3/2024 · 3 min

Una de las cosas que más valoro es la optimización, ya sea una web, una aplicación nativa o un algoritmo. Detrás de un programa optimizado, hay personas que se preocupan por entender el caso de uso, su funcionamiento y cuidar su producto. Y esto me encanta.

No siempre es necesario optimizar las cosas, en la mayoría de los casos hoy en día con hacer algo "normal" es suficiente rápido (el término "normal" es subjetivo y puede variar entre personas). En general, cuando haces algo simple, sencillo y acotado suele ir rápido, y cuando un producto se ve pulido, mola más desde el punto de vista del consumidor.

El problema suele aparecer cuando de repente tu web tiene más tráfico, cuando tu producto necesita analizar mayor cantidad de datos, etc. Aquí es cuando se ve si has cuidado los esquemas de tu base de datos, el modelado, los índices, las llamadas de tu código fuente, las estructuras de datos... o incluso si has añadido sobre-ingeniería, pero esto lo dejo para otro post.

En ciencias de computación se conoce como la "notación O grande", que indica cómo de rápido es un algoritmo (o cuánto espacio necesita) según es el tamaño de la entrada. Aquí un algoritmo O(n^2) puede ir rápido para una entrada pequeña, pero conforme esta crece, el tiempo o memoria se disparan.

La semana pasada resolví el reto del billón de líneas (realizar un "map-reduce" sobre un fichero de 14GB y 1.000.000.000 líneas), y en mi caso que utilicé Go conseguí optimizarlo "fácilmente" (fácil porque llevo mucho tiempo interesado por el mundo de la optimización) a 3.5 segundos (y ojo, hay gente que sabe más y se puede seguir mejorarando). Inicialmente tardaba 140 segundos.

Hacía tiempo que no realizaba estos retos. Me ha hecho reflexionar sobre la "relatividad" del tiempo, ya que para nosotros 1 segundo puede parecer rápido, pero 1 segundo en tiempos de CPU son muchísimas operaciones: si un CPU tiene una frecuencia de 3GHz, esto equivale a 3.000.000.000 de operaciones en un segundo (aproximadamente).

Cuando luego accedo a una página web y va lenta, tarda en cargar, o me descargo una aplicación "nativa" (en realidad, suele ser un navegador basado en chromium en muchos casos), me pregunto qué estará ocurriendo en los servidores (o en el código) que hay detrás.

Además, que un producto vaya lento puede tener diferentes consecuencias:

  • La sociedad hoy en día está acostumbrada a lo inmediato. Esto puede llevarte a perder clientes, y por tanto, dinero.
  • Si tienes que escalar tu servicio te va a costar más: por un lado necesitarás gastar más dinero en servidores, y por otro lado puedes encontrarte límites difíciles de arreglar rápidamente.
  • La imagen que da hoy en día algo lento no suele ser buena.

Amazon pierde un 1% de conversión por cada 100ms que su web tarda en cargar..

Como conclusión, simplemente quiero incidir en que es relativamente fácil hoy en día realizar cómputos que vayan rápido, pero a la vez, es muy fácil descuidarte y si no cuidas tu producto posiblemente termine yendo lento. Y esto no suele ser algo bueno, ya que al final el coste de oportunidad lo tendrás presente de una forma o de otra.

Por eso, valoro los productos que se cuidan y que van rápido.

Si te ha resultado útil este artículo agradecería si te suscribes a mi newsletter. Recibirás contenido exclusivo de calidad y también me ayudarás enormemente. Cada suscripción apoya el trabajo que realizo y me permite conocer mejor los temas que te interesan, de forma que puedo mejorar los conocimientos que comparto contigo.


Posts recientes