La razón de BDD. (Behaviour Driven Development) Parte 1
Agosto 27th, 2010
En estos últimos 6 años, la forma de programar y encarar proyectos de software ha ido evolucionando. Cuando uno comienza a trabajar, siempre elige una manera (sobre todo si se siente cómodo con ella) y la va adaptando según el proyecto en el que se esté realizando.
Muchos de estos cambios se producen por los requerimientos, magnitudes y alcances de los proyectos, y también con el tipo de clientes con el que se esté tratando. En los tiempos actuales, los clientes se han vuelto mucho más exigentes a la hora de solicitar un producto, generalmente van cambiando sus ideas y no solo eso, sinó que muchas veces (la mayoría) lo que el cliente pide no es lo que más necesita.
Esto también obliga a cambios a la hora de desarrollo de productos. Si queremos crecer (como empresa o freelance) obligadamente tenemos que adaptarnos a estos cambios.
BDD (Behaviour Drive Development) es una técnica de desarrollo de software ágil que fomenta la colaboración entre desarrolladores, QA (garantía de calidad) y participantes no técnicos o de negocios en un proyecto de software. Para más info sobre BDD Aquí (en inglés)
A continuación comparto con ustedes una serie de artículos escritos por David Chelimsky del por qué cambiar:
La mayoría del software que escribimos nunca se utilizará. No es nada personal,
es sólo que es una industria en la que no somos muy buenos dándole a la gente lo que
que quieren. La razón subyacente de esto es que los métodos tradicionales de software están diseñados para fallar -trabajan realmente en contra nosotros-. Individuos heroicos ofrecen software a pesar de su proceso de desarrollo y no a causa de él. Veremos cómo y por qué los proyectos fallan, y enfocaremos la atención en algunos de los desafíos que enfrenta el Desarrollo Ágil de Software.
Cómo fallan los procedimientos tradicionales
Los proyectos tradicionales fallan por muchas razones. Una buena manera de identificar los diferentes modos de fallo es preguntarle a tu jefe de proyecto lo que hace por la noche. (Es bueno hacerlo de vez en cuando, ayuda a su autoestima.) Es probable que nuestro jefe de proyecto se planteará una lista de temores similares a los nuestros:
Entrega tardía según el presupuesto
Estimamos, planificamos, tenemos todas las contingencias hasta la enésima potencia y luego, sucede la verdadera decepción de la vida real. Cuando nos deslizamos de la primera fecha, a nadie le importa demasiado. Es decir, sólo será un par de semanas. Si esto sigue sucediendo semanalmente, y así mensualmente, el suficiente número de personas, se han ido y se han unido a que podamos finalmente, poner el proyecto fuera de su miseria. Dieciocho meses a dos años suele ser suficiente. Este es software que no tiene importancia.
Entregando la cosa incorrecta
La mayoría de nosotros usamos un software que se entregó con retraso y más presupuesto en nuestros escritorios, en nuestros teléfonos móviles, en nuestras oficinas y hogares. De hecho nos hemos acostumbrado a los sistemas que se actualizan con correcciones de errores y nuevas características en forma de service packs y actualizaciones del sistema, o sitios web que ofrecen nuevas características con el tiempo. Pero ninguno de nosotros utiliza el software que no resuelve el problema que tenemos.
Es sorprendente cuánto esfuerzo de gestión de proyectos se dedica a cuidar el calendario o el presupuesto cuando el software persigue fines infinitamente más útiles que los mencionados.
Entonces, ¿cómo sucede esto? Tal vez los requisitos cambian después de que estuvimos de acuerdo con ellos, porque el negocio siguió adelante. Tal vez no fueron lo suficientemente claros en primer lugar. Puede ser que entregamos lo que la empresa pidió en vez de que lo que necesitaban. En cualquier caso ponemos una carga de esfuerzo en entregar el proyecto, dentro del presupuesto y a tiempo, pero resulta que nadie conseguirá realmente ningún beneficio de ello. Este es software que no tiene importancia.
Inestable en producción
¡Hurra! El proyecto llegó a tiempo y dentro del presupuesto, los usuarios lo miraron y decidieron que les gustó, por lo que lo ponemos producción. El problema es que el software falla dos veces al día. Creemos que es algo de memoria, o algo de la configuración, o algo de clustering, o de infraestructura, o …, pero ¿a quién estamos engañando? Nosotros no sabemos realmente lo que está causando la excepción, lo que es
más bien embarazoso y nos está costando mucho dinero. Si tan solo hubiéramos pasado más tiempo en probarlo!. La gente lo utilizará esta vez y se dará por vencido cuando se cae “constantemente”. Este es software que no tiene importancia.
Costoso de mantener
Hay una serie de cosas que no necesitamos considerar si estamos escribiendo software disponible. Mantenibilidad es uno de ellas. Sin embargo, si esperamos seguir con la Versión 1, Versión 2, Versión 3, o incluso una versión 2010 Professional Super Vaca Power Edition entonces fácilmente nos podemos pintar en una esquina, por no considerarnos desarrolladores río abajo.
Para empezar es probable que no participamos en la puesta en producción anticipada (early release) y no estamos al tanto de las decisiones y conversaciones que condujeron al diseño actual. Si el código no es obvio, los desarrolladores tendrán que luchar para entenderlo. Del mismo modo si el diseño no es obvio, si hay un montón de acoplamiento o redundancia innecesaria, si un montón de trozos fueron copiados y pegados y éste cambió ligeramente, entonces tendrán que luchar para resolver las implicaciones de los cambios que se hacen, lo cual es un éxito seguro a la hora de introducir defectos de regresión.
Con el tiempo el ritmo al que se pueden introducir nuevas características disminuirá hasta que los desarrolladores terminarán gastando más de su tiempo rastreando regresiones inesperadas y desarmando el “código spaguetti”. En algún momento, costará más mejorar el software que los ingresos que puede generar. Este es software que no tiene importancia.
Seguir leyendo la segunda parte
Traducido al castellano de “The Rspec Book, BDD with Rspec, Cucumber and Friends” Chapter 7 de David Chelimsky http://www.pragprog.com/titles/achbd/the-rspec-book ISBN: 978-1-93435-637-1
La razón de BDD. (Behaviour Driven Development) Parte 2
Agosto 27th, 2010
Por qué proyectos tradicionales fallan
La mayoría de estos modos de fallo ocurre con personas inteligentes tratando de hacer un buen trabajo. Para la mayor parte del software, las personas son diligentes y bien intencionadas. También es poco probable que los
errores en los proyectos son el resultado de la incompetencia o la incapacidad. Debe haber otra razón.
Tal vez este tipo de fracaso es un resultado inevitable del enfoque que hemos estado tomando (el método tradicional o cascada de entrega de software). No importa cuán inteligentes o bien intencionadas sean las personas, las cosas se pueden crear para el fracaso, y es sólo por los esfuerzos sobrehumanos que el software se entrega totalmente terminado.
Cómo funcionan los proyectos tradicionales
La mayoría de los proyectos de software se basan en la secuencia familiar de Planificación, Análisis, Diseño, Código, pruebas, implementación. Su proceso puede tener diferentes nombres, pero las actividades básicas en cada fase será bastante consistente. (Estamos asumiendo una especie de justificación de negocio que ya ha ocurrido, aunque incluso, no es siempre el caso)
Empezamos con la Fase de planificación: ¿cuánta gente, cuánto tiempo, qué recursos se necesitan, básicamente, ¿cual es el costo de entregar este proyecto y qué tan pronto vamos a ver algo funcionando?
Luego nos adentramos en una fase de análisis. Aquí es donde se articula en detalle el problema que estamos tratando de resolver, lo ideal sería sin prescribir cómo debe ser resuelto, aunque esto casi nunca es así.
Entonces tenemos una fase de diseño. Aquí es donde pensamos en cómo podemos utilizar un sistema informático para resolver el problema que tenemos articulado en análisis. Durante esta fase que pensamos sobre el diseño y la arquitectura, las decisiones técnicas a gran y pequeña escala, las diversas normas en torno a la organización, y poco a poco se descompone el problema en fragmentos manejables para que podemos producir especificaciones funcionales.
Ahora pasamos a la fase de codificación, donde escribimos el software que va a resolver el problema, de acuerdo a las especificaciones que salieron de la fase de diseño. Una suposición común es que en esta etapa, todo es coser y cantar, porque todo el pensamiento duro ya se hizo. Esto no es tan malo como parece, lo que estamos diciendo es que ahora se deben realizar las actividades de programación y pruebas (testing) a un riesgo relativamente bajo debido a que ya hicimos la planificación por adelantado (el análisis y diseño).
Ahora ya somos adultos responsables que tienen una fase de testing en la que probar el software para asegurarse de que hace lo que tenía que hacer. Esta fase incluye actividades con nombres como Testing de aceptación por los usuarios o Performance testing para destacar que nos estamos acercando a la entrega final.
Finalmente llegamos a la fase de implementación en la que desplegamos la aplicación en producción. Con un nivel adecuado de fanfarronería, se desliza nuevo software en producción y comenzamos a ganar dinero!
Todas estas fases son necesarias. No se puede comenzar a resolver un problema que no se ha articulado, no se puede iniciar la aplicación de una solución que no se han descrito, no se puede probar software que no existe y no se puede (o al menos no se debería) implementar software que no ha sido probado.
Por supuesto, en realidad, se pueden hacer cualquiera de estas cosas pero por lo general termina en lágrimas.
¿Cómo funcionan realmente los proyectos tradicionales
Hemos entregado proyectos en más o menos de esta manera desde que empezamos a escribir los sistemas informáticos. Ha habido varios intentos de mejorar el proceso y hacerlo más eficiente y menos propenso a errores, utilizando los documentos para formalizar la mano de fuerza, la creación de plantillas para los documentos, montaje de comités de revisión de las plantillas de los documentos, el establecimiento de normas y la acreditación formal para los comités de examen. . . . Por supuesto que podemos ver cuando el esfuerzo se ha ido.
La razón de toda esta ceremonia alrededor del hands-offs, opiniones, y cosas semejantes es más tarde en el ciclo de vida de entrega de software, detectar un defecto -o introducir un cambio- es más caro que ir por el camino correcto. Y no sólo un poco más – de hecho, la evidencia empírica en los últimos años ha demostrado que es exponencialmente más caro cuanto más tarde se averigua.
Con esto en mente, tiene sentido de adelantar el proceso. Queremos asegurarnos de que hemos reflexionado sobre los posibles resultados y cubierto todos los ángulos de manera temprana para que no nos sorprendamos por “desconocidos desconocidos” al final del día.
Están también, por supuesto, las cuestiones de la rendición de cuentas y responsabilidad cuando las cosas van mal inevitablemente. En una organización con una cultura de culpa tradicional cada grupo tiene que ser capaz de demostrar que no era culpa de ellos: los analistas, los arquitectos, los programadores, testers, el equipo de operaciones y en última instancia, el director del proyecto. Esto hace que, al reunir a un grupo de personas para firmar una declaración de que un artefacto -un plan de proyecto, un documento de requerimientos, especificación funcional, código – cumple con el nivel adecuado de fiabilidad. Si algo va mal ahora, debe ser debido a un error humano (es decir, la incompetencia, y más importante incompetencia de otra persona ) más adelante en el proceso.
Pero esto no es toda la historia. Sin embargo somos diligentes en cada una de las fases de desarrollo, cualquiera que haya entregado el software de manera tradicional hará constar la cantidad de trabajo que ocurre “debajo del radar”. El equipo de programación firma el plan del proyecto, resplandeciente en su detalle, las dependencias, los modelos de recursos, y gráficos de Gantt. Entonces los analistas comienzan a recibir a los apretones el detalle del problema y decir cosas como: “Hmm, esto parece estar más complicado de lo que pensábamos. Nos gustaría mejorar el plan, esta va a ser algo grande. ”
A continuación, los arquitectos empiezan a trabajar sobre sus características funcionales, que descubren una serie de preguntas y ambigüedades sobre los requisitos. ¿Cómo estos datos se refieren a esa pantalla? ¿Qué pasa si este mensaje no es recibido por ese otro sistema? A veces los analistas de inmediato pueden responder a la pregunta, pero más a menudo que significa que necesitamos más tiempo de análisis y por lo tanto más de los analistas. Mejor actualización de dicho plan. Y conseguir que fuera firmado. Y firmar el nuevo documento, mayores exigencias.
Usted puede ver cómo este costo de coordinación puede montar rápidamente para arriba. Por supuesto que realmente se inicia durante la fase de prueba. Cuando el probador plantea un defecto, el programador pone sus manos en el aire y dice que hizo lo que había en la especificación funcional, el arquitecto culpa al analista de negocios, y así, sobre derechos de copia de seguridad de la cadena. Es fácil ver donde este coste exponencial viene.
En este ir y venir se convierte más en una carga, nos volvemos con más miedo de hacer cambios, lo que significa que la gente hace el trabajo fuera del proceso y los documentos fuera de sincronización entre sí y con el propio software. Las Pruebas se comprimen, la gente trabaja tarde en la de noche, ya la liberación del software se caracteriza generalmente por llanto y el crujir de los dientes, los ojos inyectados en sangre, y varios intentos fallidos de descifrado las instrucciones de las notas de publicación.
Esto se ve agravado por el hecho de que las personas suelen trabajar en una fase de un proyecto y luego seguir adelante, así que para cuando el probador está señalando los defectos que el analista de negocios hace tiempo que se unió a un proyecto diferente y ya no está disponible.
Una profecía autocumplida
En resumen, los proyectos se vuelven exponencialmente más caros al cambior cuanto más nos adentramos en ellos, debido al efecto acumulativo de mantenimiento de todos los artefactos de proyecto en sincronía, por lo que adelantar el proceso con una gran cantidad de planificación para mitigar los riesgos, actividades de análisis y diseño para reducir la posibilidad de reelaboración.
Ahora, ¿cuántos de estos artefactos (el plan del proyecto, la especificación de requisitos, la alta y documentos de diseño de bajo nivel, el software en sí) existían antes de que comenzó el proyecto? Eso es, exactamente ninguno! Así que todo ese esfuerzo -que crece exponencialmente- se debe a que ejecutamos los proyectos de la manera en que hacemos! Así que ahora tenemos una situación de gallina y el huevo o un bucle de refuerzo en la Terminología del Pensamiento Sistémático.
La ironía del enfoque tradicional de los proyectos es que el propio proceso hace el coste exponencial de cambio! Cuando les preguntamos a nuestros jefes de proyecto la forma en que planifican este coste exponencial de los cambios que nos dicen es “a través de la experiencia.”
Han visto suficiente de proyectos en situaciones bastante pasar por el mismo dolor.
La respuesta de nuestra industria ha de ser reforzar el bucle en lugar de intentar algo que podría romper el ciclo completo. Sin embargo el desarrollo de software es todavía una industria muy joven, así que ¿de dónde viene esta curva de costes, en primer lugar?
Yendo más profundo, resulta que la curva se origina en la ingeniería civil. Tiene sentido que es posible que se desee pasar mucho tiempo en las fases de diseño de un puente o una embarcación. Una vez que los pilares de hormigón estén armados, si se hunden y la infraestructura de hierro fundido está en su lugar, las cosas se vuelven muy caras de corregir!
Sin embargo, estas normas sólo se aplican al desarrollo de software, porque se lo permitimos! El software es, así, suave. Se supone que es la parte que es fácil de cambiar, y con el enfoque correcto y algunas herramientas decentes puede ser muy maleables. Así que utilizando la metáfora de la ingeniería civil e igualando software con acero y concreto, nos hemos hecho a nosotros mismos un flaco favor.
Seguir leyendo la tercera parte
Traducido al castellano de “The Rspec Book, BDD with Rspec, Cucumber and Friends” Chapter 7 de David Chelimsky http://www.pragprog.com/titles/achbd/the-rspec-book ISBN: 978-1-93435-637-1
La razón de BDD. (Behaviour Driven Development) Parte 3
Agosto 27th, 2010
Redefiniendo el problema
No todo es pesimismo sin embargo. Hay muchos equipos por ahí que hacen sus entregas de proyectos a tiempo, dentro del presupuesto, y deleitan a sus participantes titulares, y se las arreglan para hacer una y otra vez. No es fácil. Se necesita disciplina y dedicación, y se basa en un alto grado de comunicación y colaboración, pero es posible.
El Desarrollo Orientado al Comportamiento es una de varias metodologías ágiles. En concreto se trata de una metodología ágil de segunda generación, construído sobre el labor de unos muchachos realmente inteligentes. Vamos a ver cómo estos métodos Agiles se produjeron y cómo abordar los riesgos de los proyectos tradicionales, entonces podemos ver cómo BDD nos permite concentrarnos en la escritura de software, que es realmente lo que importa.
Cómo hacen frente a los riesgos del proyecto los métodos Ágiles
Los autores del manifiesto van mucho más allá de las pocas líneas antes mencionadas en el mismo. También documentaron los principios que sustentan su pensamiento. Cabe destacar en este es un deseo de “ofrecer software de trabajo con frecuencia, desde un par de semanas a un par de meses, con una preferencia a la escala de tiempo más corto.”
Imaginemos por un momento que usted puede hacer esto, a saber, la distribución de software de calidad de producción cada dos semanas para sus grupos de interés, en su proyecto actual, en su organización actual, con su equipo actual, a partir de mañana. ¿Cómo se hace frente a los riesgos tradicionales de entrega que se indicaron antes?
No más entregas tardías según el presupuesto
Como las entregas son pequeñas, iteraciones de una o dos semanas o mini proyectos, utilizando un equipo pequeño, de tamaño fijo, es fácil de calcular nuestro presupuesto del proyecto: se trata simplemente de la velocidad de producción del equipo en el número de semanas, además de algunos de hardware y licencias.
Siempre partimos de una suposición razonable en el tamaño total del proyecto, es decir cuánto estamos dispuestos a invertir en la solución del problema de negocio en el primer lugar, y se da prioridad a las características apropiadamente, entonces el equipo puede entregar las cosas realmente importantes en las iteraciones tempranas. (Recuerde, estamos entregando por característica, no por módulo). Así
a medida que hacia el momento en que el dinero se acaba, debemos, por definición, trabajar en funciones de menor prioridad. También podemos medir la cantidad que realmente se produce en cada iteración, conocida como nuestra velocidad o rendimiento, y usar esto para predecir cuando en realidad estamos con probabilidades de terminar.
Si, como nos acercamos a la fecha límite, las partes (clientes) siguen teniendo ideas y características nuevas y ven las cosas maravillosas sucediendo, pueden optar por financiar el proyecto de unas pocas iteraciones más. A la inversa que pueden decidir antes el plazo que es suficiente para la funcionalidad que ha sido entregada, o bien que quieren terminar temprano. Esta es otra opción que tienen.
No más entregas de cosas incorrectas
Estamos entregando los programas necesarios para los interesados cada dos semanas (por ejemplo), lo que significa que estamos ofreciendo características demostrables. No tenemos dos semanas de “repetición de esquema de base de datos” o “repetición de middleware.” Después de cada iteración podemos demostrar las nuevas características para los interesados y pueden hacer ningún ajuste o corregir cualquier malentendido cuando la obra está aún fresca en el desarrollo equipo de la mente. Estos regulan, a pequeña escala micro-correcciones que garantizan que no se terminan hasta varios meses abajo de la línea con el software que simplemente no hace lo que los actores querían.
Para dar inicio a la siguiente iteración podemos reunirnos con los interesados para reevaluar las prioridades de las características en caso de que algo ha cambiado desde el pasado tiempo. Esto significa que cualquier nueva idea o sugerencia se pueden programar, y la cantidad correspondiente de trabajo puede ser descomprimida (tiempo extra)
No más inestable en Producción
Estamos entregando cada iteración, lo que significa que tenemos que ser buenos en la construcción y en el despliegue de la aplicación. De hecho contamos con la automatización en gran medida en proceso para manejar esto por nuestra cuenta. No es raro que un equipo Agil con experiencia produzca más de 100 construcciones de buen software cada semana.
En este contexto, liberar a la producción o pruebas de hardware puede ser considerado simplemente otra costrucción para otro ambiente. Los servidores de aplicaciones se configuran automáticamente y se inicializan, esquemas de bases de datos que se actualizan automáticamente, el código es automáticamente incorporado, montado y desplegado a través del cable, todo tipo de pruebas se ejecuta automáticamente para asegurar que el sistema se está comportando como se esperaba. De hecho, en un entorno ágil, la relación entre el equipo de desarrollo y las operaciones “río abajo” y los DBA es a menudo mucho más saludable y más solidaria.
Ya no es costoso mantener
Este último es uno de los mayores beneficios tangibles de un proceso ágil. Después de su primera iteración el equipo está en modo de mantenimiento eficaz. Ellos son la adición de características a un sistema que “funciona” por lo que tienen que ser muy cuidadosos.
Suponiendo que pueden resolver las cuestiones de la seguridad de cambiar el código existente a fin de no introducir a los defectos de regresión, sus prácticas de trabajo deberían ser exactamente las mismas que los desarrolladores de apoyo intermedio. No es raro que un equipo de desarrollo ágil trabaje en varias versiones de una aplicación al mismo tiempo, la adición de características a la nueva versión, la prestación de apoyo directo a una versión temprana recientemente publicada, y proporción de corrección de errores apoyando a una versión de producción de más edad
Traducido al castellano de “The Rspec Book, BDD with Rspec, Cucumber and Friends” Chapter 7 de David Chelimsky http://www.pragprog.com/titles/achbd/the-rspec-book ISBN: 978-1-93435-637-1
La evolución natural desde el proyecto paralelo al negocio full-time
Julio 17th, 2009
Estaba leyendo un artículo denominado “The natural evolution from side project to full-time business”, es muy recomendable para aquellos que tengan una idea y quieran armar su propio proyecto o empresa.
Mucho se comenta y se escribe acerca de cómo encarar el proyecto propio y la mayoría de las cosas que aconsejan es renunciar a su trabajo y dedicarse por completo a ese nuevo emprendimiento, sin embargo en la realidad que nos toca vivir en nuestro país, se hace díficil conseguir el financiamiento adecuado para llevar adelante un proyecto de manera óptima.
Es interesante la visión del autor cuando manifiesta que al renunciar a todo, nos encerramos en una situación en dónde tenemos que conseguir beneficios inmediatamente o ver como se hunde todo.
Es importante la optimización de nuestro tiempo y como dedicándole unas pocas horas al día podemos llevar el emprendimiento a buen puerto.
Basta con observar cómo funciona la evolución en la naturaleza. No hay saltos gigantes y bruscos. Las cosas cambian incrementalmente.
En este otro artículo comenta cómo fué la evolución de su negocio y la verdad que da como para hacer otro análisis en otro post.
Consejos Basicos para Emprendedores
Diciembre 11th, 2008
Encontre un artículo muy bueno en en ALT1040 de un emprendedor que se puso a pensar en que cosas ha aprendido el tiempo que lleva trabajando por su cuenta y cual es la mejor manera de resumirlas y destilarlas. No se muy bien si esta lista va de consejos o son simples ideas sueltas, pero me está bueno conocerlas ahora que todo está comenzando.
- Para ser un emprendedor tienes que tener muchas ideas todo el tiempo. Es algo que siempre veo en las personas que crean proyectos nuevos y se colocan al frente para dirigirlos. Están siempre llenos de ideas, relacionadas con nuevas empresas o en la forma de mejorar su proyecto actual. La parte difícil es lograr el equilibrio entre tantas ideas, el tiempo, la vocación y los recursos.
- Las buenas ideas hay que filtrarlas, no todo lo que se nos ocurre funciona. Dos factores son determinantes el tiempo y la pasión. Un factor extra (que es más fácil de superar) es el conocimiento (muchas veces contratando a alguien se soluciona). Pero si no tienes tiempo y lo que vas a emprender no te apasiona, vas a tirar la toalla muy rápido.
- Tienes que reconocer que tipo de persona eres en tu relación con el dinero. Principalmente hay dos tipos de personas, quienes trabajan en algo porque sienten la vida en su profesión o proyecto, y luego están quienes sienten pasión por el dinero, colocándolo en una escala superior a la vocación. Al reconocer que tipo de persona eres será más sencillo encontrar el camino adecuado para cumplir tus objetivos.
- Usa el sentido común. Tu proyecto tiene que generar ingresos, primero para hacerlo sustentable en el tiempo por si mismo (sin necesidad de créditos e inyección de capital al infinito). En otras palabras, tu compañía tiene que generar ingresos para que tenga buena salud. Y luego tiene que generar ganancias para ti y muchas de las personas involucradas.
- Nunca creas que lo que va a ocurrir es que llegará Google o amigos a comprar tu compañía.
- Si vas a copiar la idea que otra persona u compañía ha tenido, ten en mente que copiar no es sencillo. Muchas personas creen que algo que tiene éxito de una manera en algún sitio, va a repetirse en otra ciudad o país. Esto no es automático. Muchas personas copian ideas sin tener un conocimiento del negocio que quieren duplicar y fracasan. El éxito nunca es fácil, a veces parece que un negocio determinado puede caminar solo y no vemos el esfuerzo en ideas, creatividad y personas que hay detrás de muchas cosas.
- Preparate para por lo menos 2 años difíciles. Lo más seguro es que sea menos tiempo, pero hay ideas que tienen que germinar antes de alcanzar la gloria.
- Comienza las cosas siempre en pequeño. Un error grande es ir creciendo la compañía a un ritmo muy rápido. Mientras mantienes las cosas lógicamente pequeñas, si tienes algunos meses malos, vas a sobrevivir. Si la dimensión de tu compañía es muy grande (con muchos empleados, tiendas, oficinas) y el flujo de caja se detiene por una crisis, un producto que fracasa, etc. No vas a poder manejar el tamaño de tu empresa. Vas a despedir gente o lo que es peor, vas a tener que cerrar.
- No tengas miedo. No tienes idea de lo agradable que es no tener jefe. Si haces bien las cosas es casi imposible que fracases. Mientras trabajes en un empleo normal ahorra un dinero que puedas usar para mantenerte unos 3-6 meses. Siempre vas a poder conseguir un nuevo trabajo. Pero hay un nivel de riesgo que tienes que asumir. Levántate ya de ese letargo, mientras más joven comiences mejor.
- Si fracasas vuelve a intentarlo. No necesariamente lo mismo. El sentido común y tu pasión te dirán si puedes seguir con la misma idea o necesitas reformularla.
- Aunque parezca mentira, muchos proyectos, sobre todo con la llegada de Internet tienen una inversión inicial de 0 euros o 0 dólares.
- Nunca engañes o dañes a nadie en la vida. Extrañamente y contra toda posibilidad ocurre que cuando comienzas a crear un proyecto personal vas a necesitar a mucha gente, directa o indirectamente, y siempre te vas a encontrar con los ojos de alguien al que posiblemente trataste mal. No es que vas a vivir una vida marcada por el interés en tus relaciones personales. Solo se una buena persona. Los emprendedores mas exitosos son aquellos que van por la vida sumando y sumando (y también sonriendo). Los amargados y los sectarios pueden alcanzar el éxito, pero probablemente haciendo lo contrario: jodiendo a sus amigos y clientes.
- No seas arrogante. Nunca vas a saber todas las cosas.
- Se honesto y en la medida de lo posible completamente transparente. Ganar dinero actuando mal es más sencillo que hacerlo actuando bien, pero es increíblemente menos divertido.
- Escucha los consejos de tus amigos y clientes. Jamás escuches la envidia a través de los consejos de amigos y clientes.
- Aprende los conceptos básicos de la contabilidad y administración. Delega en un profesional estos aspectos “cotidianos” de toda compañía.
- De verdad nunca hagas algo por lo cual no sientes una pasión medianamente desenfrenada. La razón que el mundo esta tan lleno de compañías mediocres es que solo se enfocan en el dinero y las ganancias. Por supuesto que si tu colocas el dinero en la escala superior, esto importara poco. Pero la razón que muchas empresas parecen zombies de una mala película B, tiene que ver con este aspecto. No significa que las empresas no tienen que tener el ganar dinero como objetivo, no está relacionado con eso. Es más que tu compañía gane mucho dinero haciendo algo que apasione a quienes están dentro. Apple vs Microsoft demuestra que muchas veces la pasión puede más que el dinero. Las compañías mas interesantes del mundo tienen mucha pasión dentro. Y estas mismas compañías cuando se ponen viejas y terminan quebrando es que perdieron ese sentimiento, no lo pierdas tu antes de comenzar.
- Y el mejor y más secreto consejo: no leas libros de autoayuda, ni libros de gerencia que comen quesos y vacas. Y jamás, por más linda que este, tengas sexo con la secretaria.


