Actualizaciones (sabado 20 feb 14:30) al final del artÃculo.
Tengo una idea, solo me falta alguien que la programe
Estoy entrando en un blog de un participante en un evento de emprendedores cualquiera y leo "tengo una idea para un proyecto web, ahora solo necesito un programador que me monte la web". La persona que escribe esto no sabe programar, pero está al dÃa de todas las novedades en Internet y tecnologÃa, sigue a muchos otros bloggers, a emprendedores online, twitea, se compra todos los gadgets de Apple, etc. y piensa que ese conocimiento le sirve para crear un proyecto web.
Lamentablemente esto no es asÃ. Los viejecitos que se pasan el dÃa mirando obras en la calle no se conviertien en arquitectos, ni en albañiles, por horas que pasen mirando y comentando la construcción. Igualmente para montar un proyecto web hace falta saber programar o al menos tener un socio, no un asalariado, ni un freelance, que programe y esté totalmente involucrado. Si no hay socio programador simplemente no hay proyecto web.
Este artÃculo se centra en el proceso de arranque desde 0 de un proyecto web viable con ambiciones de convertirse en un modo de vida para sus fundadores. El artÃculo no abarca diferentes tipos de proyectos diferentes: webs presenciales, experimentales, ni proyectos webs con apoyados en inversiones, sino a start-ups de garaje con un equipo de fundadores con pocos o nulos recursos económicos y solo el tiempo disponible para invertir en el proyecto.
La cabeza pensante
"Cabezas pensantes" son quienes creen que lo importante de un proyecto web es la estrategia, la visión, los contactos, o su capacidad especular sobre el futuro de Google o Apple, etc. En definitiva, personas se dedican a tareas que a efectos prácticos no contribuyen a la creación de un proyecto.
Una "cabeza pensante" es la tÃpica persona que antes de tener ni una triste beta, ya cuenta todo su nuevo proyecto en el blog y su emoción en directo en twitter. Oigan, una cosa es marketing de guerrilla para generar expectacion y otra cosa es escribir una carta a los reyes magos en público.
La cabeza pensante está al dÃa de todo y lo bloguea o lo retuitea, sin embargo estar al tanto de la últimas novedades y bloguear tiene un gran inconveniente, no deja tiempo para otra cosa, el dÃa tiene 24 horas y o escribes, o haces cosas. A mi también me gusta marujear, pero reconozco que tiene el mismo valor práctico especular sobre el futuro del iPad sin haber tenido uno en las manos, como hablar del nuevo peinado de la vecina del quinto, o sea, cero. Lo reconozco, a mi también me gusta divagar, aunque intento limitarlo al máximo a la barra de un bar con amigos.
El cabeza pensante piensa que su idea es tan genial y el trabajo del programador tan irrelevante que ni siquiera hace falta que el programador tenga porcentaje de la empresa, un salario basta, o mejor aún, ese proyecto web podrÃa ser implementado por un freelance externo y baratico si puede ser.
Una cabeza pensante justifica su trabajo dando vueltas y más vueltas a las cosas y generando PPTs de manera infinita. Sin embargo este trabajo es inútil, no produce nada y es contraproducente, en Internet las ideas se desarrollan en vivo y online, no sobre una ppt ni en la cabeza de nadie. Las cabezas pensantes en la mayorÃa de los casos se creen honestamente lo que dicen, simplemente no tienen ni idea de como funcionan las cosas en el mundo de la start-ups de Internet porque nunca han hecho un proyecto.
La idea es sencilla: Un proyecto web se arranca escribiendo lÃneas de código.
Nadie emprende por un salario
Si un proyecto se arranca escribiendo lÃneas de código el papel del programador capaz de hacerlo es crÃtico. Progamar no es como hacer chorizos ni poner ladrillos, programar es un trabajo puramente intelectual, quizás la tarea más intensiva intelectualmente que conozco. A más horas, no hay más producción, a veces un programador puede ser más productivo en una mañana que en 2 semanas y lo más fascinante, esto no es un problema a resolver, sino algo inherente a la tarea de programar y hay que aceptarlo. Si no te gusta te puedes dedicar al cultivo del champiñón o cualquier otro negocio donde el resultado sea más predecible.
Cada programador tiene unos ritmos personales de productividad e improductividad. Por tanto no se pueden poner horarios ni ser estrictos en las fechas de finalización, sino de crear un ambiente que favorezca la productividad de tareas intelectuales, algo que intenta hacer Google en sus oficinas. La imposibilidad de poner fechas también explica por qué Google nunca anuncia nada con antelación, poner una fecha es desconocer como se trabaja en el mundo de la programación. Si quieres que los programadores se involucren en tu proyecto hay que respetar su manera de funcionar y no hablarles como si la programación fuese como la tarea de construir una pared a un ratio de X ladrillos por hora.
Un programador trabajando solo o con un pequeño equipo en una start-up le toca quedarse hasta las tantas de la madrugada muchos dÃas porque cuando estás a mitad de solucionar un problema no funciona lo de "son las 19:00, hora de irme, mañana más". Cuando estás a mitad de concentración, motivado para acabarlo, dejarlo para mañana puede significar realmente mañana, un par de semanas o un mes. ¿Un programador ineficiente? No, es simplemente asÃ, volver a concentrarse en esa tarea y acordarse de cada detalle conlleva una pre-tarea de varias horas y si hay otras tareas más urgentes que se cruzan, se postergará.
Nunca he programado, pero siempre he prestado mucha atención a cómo trabajan los progamadores por una razón muy simple, no se programar y siempre necesito un programador como socio. Tratar a un programador como un currito que hace sus horas y se va, es ignorar como funcionan las tareas intelectuales, la motivación humana, etc. Quizás se puedan tener curritos en proyectos consolidados, pero en proyectos web que arrancan, absolutamente no es posible.
Proponer a alguien programar un proyecto web viable solo a cambio de un salario o prespuesto cerrado (freelance) casi roza el insulto. Emprender conlleva un esfuerzo extra buscando un premio, por definición es incompatible pagar un salario fijo y pedir un esfuerzo extra.
Arrancar un proyecto web es escribir código
Hasta que se lanza la primera versión beta de un proyecto se requiere de un 90% de horas de programación y un 10% del resto (UI, estrategia, ideas, etc.). Eso quiere decir que el socio programador va a hacer la mayor parte del trabajo sin ni siquiera saber si el proyecto va a funcionar. Además el programador tampoco sabe a priori la implicación del no-técnico que inicialmente solo pone buenas palabras y pocas horas porque por definición inicialmente no hay mucho trabajo no-técnico que hacer. Todo es riesgo, incógnitas y mucho, mucho trabajo para el técnico.
Si la mayor inversión y riesgo es asumido por parte del programador, éste debe tener su recompensa. Hay muchas casuÃsticas, pero por ejemplo, en un proyecto de 2 personas, el programador debe tener algo que ronde el 70-30%, especialmente si inicialmente no hay salarios ni inversiones detrás. En el caso que haya inversión y se le pague un salario el porcentaje del técnico podrá ser menor, porque se arriesga menos, pero en cualquier caso debe ser lo suficiente para que si el proyecto vaya bien reciba un beneficio decente.
Una situación que yo he visto mucho es que el cabeza pensante ofrece al programador un porcentaje rÃdiculo y/o un salario muy bajo. Luego tÃpicamente el cabeza pensante se lamenta de no encontrar un socio tecnológico o de que le abandonen, es evidente, un programador que tenga iniciativa propia, por mucho que sepa que necesita un socio complementario, es normal que prefiera trabajar solo y tener el 100%, que trabajar varios meses gratis arriesgándolo todo por una participación mÃnima y sin saber la fiabilidad de su socio no-técnico.
Hay casos que parecen funcionar bien y el "cabeza pensante" apartentemente consigue convencer al programador, lo que terminará en una de estas dos situaciones:
a) El programador es malo y piensa que es él quien se va a beneficiar del "cabeza pensante" que supuestamente tiene unos contactos de la leche y lo solucionará todo en dos patadas, asà que uno por otro, nadie trabajará.
b) Un programador inteligente. Si es socio tecnológico se dará cuenta que el está echando el 90% de horas y el otro no pringa nada. Si es asalariado o freelance en cuanto se le pase la emoción inicial echará las horas convenidas, le hagan al proyecto falta más horas o no.
Cuando un técnico confÃa en un no-técnico
Descartada la opción de tener un freelance o un asalariado por insultante, solo queda la opción de un socio tecnológico con un porcentaje respetable, sin embargo esto no basta. Igualmente el programador es quien tiene que poner el 90% de las horas de trabajo iniciales y asumir todo el riesgo. ¿Cómo conseguir la confianza del técnico?
Es sencillo, el programador debe ver al no-técnico ejecutando y solucionando problemas concretos, en definitiva, manchándose las manos y teniendo una predisposición infinita a hacer tareas desagradables. Dada la enorme desproporción inicial en el trabajo ejecutado por uno y por otro, lo único que compensa al técnico es que otra persona le solucione las cosas que no le gustan o no sabe hacer. En ese contexto lo peor que un no técnico puede hacer es ponerse en plan "cabeza pensante", interrumpiendo al programador, sugiriendo todo el rato modificaciones que resultan en más trabajo y dedicarse a generar una PPT tras otra. Por buenas ideas que contenga una PPT no pone un proyecto online . Tras haber definido los prototipos y funcionalidades básicas, de mejor o peor manera, cualquier cosa que interfiera en la ejecución es una molestia, un "cabeza pensante" que interrumpe es un peso muerto.
Que el no-técnico se manche las manos es lo único que puede hacer al programador confiar y arriesgarse. Mancharse las manos es por ejemplo hacer tareas técnicas, pesadas, pero sencillas, por ejemplo, que te pasen una base de datos mundial donde la lista de ciudades más importantes del mundo no está correctamente priorizada (ej. Madrid, Texas, sale antes que Madrid, Spain) y hay que primero encontrar un listado con las 1.000 ciudades más importantes del mundo (o generarlo a manija) y luego modificar la base de datos registro a registro. Mancharse las manos es dar la bienvenida personalizada a cada uno de los primeros usuarios con algo más que un "hola". Mancharse las manos es subir un montón de contenidos realmente útiles al sitio web para hacerlo mÃnimamente funcional. Mancharse las manos es encontrar a los bloggers más relevantes de una temática relacionada y escribirles e-mails totalmente personalizados explicándoles tu proyecto. Mancharse las manos es no decirle al técnico "añade X cosa" sino decirle "Aquà tienes la lista X que tienes que añadir en la página X totalmente detallada" para que el programador no tenga que perder su valioso tiempo buscando la información.
Otra recomendación para el no-técnico es intentar entender como funciona la programación, es fácil, a los técnicos les encanta explicar porque algo es complejo, es cuestión de escucharles. Una tarea como enviar notificaciones via e-mail que parece sencilla, dependiendo del caso, puede tener una casuÃstica muy compleja. Un técnico te respeta si tu muestras respeto a interés por su trabajo y viceversa.
En conclusión: El programador es el artista, "la prima donna" en el mundo de los proyectos web. La tarea de ser socio de un técnico significa ocuparte de todo lo demás, comerte cualquier marrón y hacerle la vida lo más sencilla posible.
Un buen equipo
Idealmente en un equipo los perfiles de sus miembros deben complementarse. Hay muchos flancos que cubrir y queremos gente que haga de todo. Al menos hacen falta dos personas, un perfil técnico y el otro perfil que hace "todo lo demás".
TÃpicamente a quien le gusta programar no le gustan ciertas tareas, las que el socio no técnico tiene soluciona: desde gestión de comunidad (blog, foro, mails…) al soporte, la UI, encontrar un buen tagline, estrategia, producto, marketing de guerrilla, hasta comprar los dominios o simplemente cualquier gestión administrativa, repetitiva o burocrática. Es lo que Joel Spolsky llama el "Development Abstraction Layer", algo que en algunos casos los programadores ignoran fatÃdicamente y que es un ingrediente clave para que un proyecto funcione.
No pasa nada que los perfiles se superpongan un poco, hay veces que los dos fundadores son técnicos, pero a uno le gusta programar y al otro no y le gusta el resto del trabajo no técnico. Hay veces incluso que los dos son técnicos, pero lo hacen tan bien que el resto de tareas se van haciendo entre los dos. No hay reglas respecto a equipos, hay que escoger bien, pero a fin de cuentas solo puedes escoger entre la gente que conoces.
Excepciones
Lo unico que se puede subcontratar de un proyecto viable y no del todo es el front CSS, html, etc. el logo, etc. Son cosas para las que inicialmente no hay trabajo todos los dÃas, por tanto añadir a alguien asi al proyecto solo podrÃa dársele un porcentaje muy pequeños. Por cierto, que en ocasiones un diseñador de front que también haga "todo lo demás" es un buen socio a un programador. Por supuesto subcontratar se puede hacer en proyectos tipo webs presenciales, Alzado.org, etc. pero eso no son proyectos grandes con proyección, son proyectos personales, experimentos, hobbies, etc.
¿Y hay gente con éxito subcontratando? Claro, tÃpicamente proyectos con inversores detrás y donde lo crÃtico no es solo la web sino tener los contactos para conseguir acuerdos comerciales para conseguir clientes, proveedores con precios bajos en e-commerce, etc. es decir, proyectos donde la web es una herramienta más de una estrategia y donde el componenete offline es realmente el crÃtico.
Puntualizaciones sabado 20 feb a las 14:30
– Seguramente el tÃtulo del artÃculo deberÃa haber sido "Nadie emprende por un salario", pero quise dejar claro que me referÃa al programador y su trabajo, quizás el tÃtulo actual es algo confuso.
– El término "socio tecnológico" seguramente está mal escogido porque habitualmente se refiere a una empresa que aporta tecnologÃa, en este artÃculo es simplemente un programador que tiene participación como socio en el proyecto, no un mero asalariado.
– No me he explicado bien respecto a los diseñadores de front (html+css). El caso que centra el artÃculo es la unión de un cabeza pensante + un programador como socios de un proyecto. Si el socio no programador además de ocuparse de "todo lo demás" es capaz de hacer algo más, aún mejor y si encima es diseñador de front, es ya una combinación genial porque tÃpicamente los programadores odian diseñar el front y tener un socio diseñador agiliza increÃblemente el desarrollo. Yo sugerÃa no añadir diseñador de front (o hacerlo con una participación menor) cuando ya hubiesen esos dos socios porque no habrÃa suficiente trabajo exclusivo de front para el dÃa a dÃa. Dos puntualizaciones más. La primera que hablo de la fase de arrancar el proyecto, más adelante si puede haber suficiente trabajo de front. La segunda, que me refiero a un proyecto sin recursos ni inversiones, donde la única manera de incorporar personas es como socios con un porcentaje del proyecto.