El peor error que puede cometer un programador

Ayer hace exactamente 25 años, Joel Spolsky publicó un famoso artículo que se volvió casi inmediatamente religión para toda una generación de programadores: Things You Should Never Do, Part I.

Joel explica el peor error que puede cometer un programador: reescribir su aplicación desde cero.

Netscape 6.0 finalmente está entrando en su primera versión beta pública. Nunca hubo una versión 5.0. El último lanzamiento importante, la versión 4.0, fue lanzado hace casi tres años. Tres años es un tiempo terriblemente largo en el mundo de Internet.

Durante este tiempo, Netscape no avanzó, se quedó impotente, mientras su tajada del mercado se hacía cada vez más pequeña.

Es un poco desvergonzado de mi parte criticarlos por esperar tanto tiempo entre lanzamientos. No lo hicieron a propósito, ¿verdad?

Bueno, sí. Lo hicieron. Lo hicieron cometiendo el peor error estratégico que cualquier empresa de software puede cometer:

Decidieron reescribir el código desde cero.

Todos en algún momento fuimos ese programador que dijo que podía escribir código más limpio y escalable en un fin de semana si tan solo nos dieran la oportunidad. Y no digas que no: el programador que no dijo eso nunca fue junior.

Pero esto es lo que quiero que tomes en cuenta: la crítica de Joel no es que la nueva versión haya tenido errores o funcionaba peor que la anterior, sino que, mientras Netscape se preocupaba por hacer un “big splash”, el resto de la industria, y su competencia, continuó iterando, avanzando y mejorando. Para cuando Netscape por fin lanzó su nueva versión “mejorada” ya era demasiado tarde.

No para el código, ni para las buenas prácticas. Para la empresa — la estrategia del negocio. Y si el negocio no funciona, el código que escribes es irrelevante.

Todo es más claro en retrospectiva. Puedes decir dhu, obvio sin detenerte a considerar que tal vez hoy mismo, en este momento, tú y tu empresa están tomando decisiones estratégicas para “mejorar” su producto igual que Netscape.

Si les pasó a ellos, por supuesto que también te puede pasar a ti.

Los programadores somos los que tenemos arranques de querer reescribir todo el código, pero la realidad es que las decisiones de ese calibre no las tomamos nosotros. Me sorprendería que un equipo de ingeniería pueda siquiera sugerir detener la operación de una empresa sin que el CEO les pregunte si su mamá los tiró de chiquitos.

Netscape renunció a cualquier mejora potencial del producto en el momento en que decidieron dejar de iterar. ¿Por qué creyeron que reescribir todo el código era una buena estrategia de negocio? ¿De quién fue la idea? ¿Quién la aprobó?

Los ingenieros de Mozilla decidieron a finales de octubre de 1998 desechar el código de Communicator y comenzar de nuevo desde cero utilizando el motor de renderizado Gecko que cumple con los estándares. Todos los recursos se movieron a trabajar en la versión de Netscape 6.0 usando Gecko, que algunos empleados de Netscape consideran uno de los mayores errores en la historia de la empresa.

Ah… Para ser justos, 1998 fue un año tumultuoso para Netscape, pero bueno…

Mi punto es que la responsabilidad de hacer que el negocio funcione no nada más es del equipo de liderazgo, sino de todos. En una empresa de software, un líder que no entiende (o no tiene ni la más mínima curiosidad de saber sobre) las implicaciones del desarrollo, y solo se dedica a dar órdenes y exigir, es tan peligroso como un programador que no entiende (o no tiene ni la más mínima curiosidad de saber) cuál es el problema que la empresa está intentando resolver, y nada más se dedica a hacer lo que el Project Manager le dijo.

Ahora, el artículo de Joel ignora algo: a veces, la decisión estratégica correcta es reescribir la aplicación desde cero. En software, más que en cualquier otra área, no hay definitivos; todo depende del contexto.

Por ejemplo, Siri. Todos los que tenemos un iPhone sabemos que es virtualmente inútil. Siri es un producto tan malo, que hasta ridículo se ha vuelto, y probablemente le va a costar a Apple algunos millones de dólares extra — no en desarrollo, sino en cuotas legales.

Apple debió de haber reescrito Siri hace más de 10 años. Y aunque es muy difícil pensar que Apple vaya a tener el mismo final que Netscape (pronto, por lo menos), el producto sufre igual: nadie lo usa, y daría lo mismo que no existiera. Pero Apple, la compañía, sí tiene una reputación que está más golpeada que nunca. Lo que le tomó décadas construir, se le está yendo una respuesta incorrecta a la vez.

En fin… el peor error que puede cometer una empresa no es reescribir el código desde cero, es hacerlo (o no) sin tomar en cuenta lo que esto significa para el negocio.