Esta semana leía un post en HackerNews que forma parte de la categoría de preguntas cíclicas en ingeniería de software: en todo foro aparecen cada X tiempo. Se trataba de esta pregunta:

Ask HN: How bad should the code be in a startup? | Hacker News

A mi esta vez además me ha tocado la fibra sensible, me ha pillado lidiando con las (bastante negativas) consecuencias de tener un miembro de equipo que cree que esta pregunta tiene sentido.

Tenemos prisa. OK, si tardamos mucho en crear un producto, nos pueden mojar la oreja y podemos llegar tarde.

Surprisingly, many users would rather use software with some rough edges today than wait a year for the shiny, bells-and-whistles version (and in fact what they will need a year from now may be completely different anyway).

Es más, ni siquiera sabemos exactamente qué necesitan ni cómo lo necesitan los usuarios. La manera más eficiente de descubrirlo es salir al mercado e iterar, en lugar de dejárselo a la imaginación: buscar el mítico product-market fit.

Con esto en mente, tenemos que preocuparnos por el ahora, evitar la optimización prematura. Donald Knuth, uno de los padres de la programación, allá por 1974 (ha cambiado poco la película en este caso), la definía como "the root of all evil":

Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered.

El problema es oir campanas y no saber de dónde vienen, quedarse en la idea superficial de que "si no duele [verlo], es que has salido [a producción] tarde", y no profundizar en qué es lo que hay que sacrificar. El software que creamos puede no tener todas las features que nos gustaría, puede tener "rough edges"... pero tiene que ser "good enough":

The phrase “good enough’’ does not imply sloppy or poorly produced code.

De nuevo, The Pragmatic Programmer.

El supuesto trade-off entre calidad del código y duración de un proyecto es un tema vie-jí-si-mo sobre el que se ha escrito EXTENSIVAMENTE. Por citar unos cuantos recursos clásicos más donde se habla de esto: