viernes, 16 de marzo de 2012

Emprender una empresa de Software.


Emprender una empresa de Software.

En la historia y origen del ser humano solo existen dos sociedades que se pueden afirmar como connaturales a la propia existencia del hombre, la familia y la empresa, se asume que naturalmente los primeros seres humanos dieron origen a lo que llamamos familia, pero también ellos formaron las primeras empresas, esta afirmación puede sonar muy atrevida, pero, ¿acaso no es una empresa el agruparse para realizar una caza de un animal de mayor tamaño en donde varios individuos puedan ser mayormente beneficiados comparativamente que si lo hicieran solos y pudieran cazar solo presas pequeñas? Finalmente, las mismas pinturas rupestres dan testimonio de que este tipo de cacería mayor se realizaba en grupo.

Esto, explicado en palabras muy cortas es lo mismo que sucede en las empresas, o al menos es lo que debería suceder, una agrupación de individuos que se asocian o unen en el objetivo de obtener beneficios mayores a los que individualmente podrían alcanzar.

Soy ingeniero en sistemas, y junto con algunos amigos y ahora socios hemos fundado una empresa constructora de software, no es una empresa de miles de empleados como podríamos comparar con Google o Microsoft, solo tenemos 6 años en el mercado y en cantidad de personas que la conformamos pienso que aún somos muy pocos, pero es nuestra empresa y en lo personal cuando hago un repaso de nuestra pequeña historia me siento muy orgulloso de todo lo que hemos tenido que enfrentar y como hemos superado los obstáculos para ser lo que somos ahora.

Con mi formación de ingeniero y tal vez sea el común de los de nuestra “raza”, podríamos pensar que no se nos da lo de los negocios o la formación de empresas, pero creo que muchos al igual que yo, sí tienen la inquietud de hacer realidad el mentado dicho de “ser tu propio jefe”, lo que yo puedo decir en este sentido tal vez sea poco, pero lo compartiré, porque quiero expresar que si se puede.

En realidad no hay recetas especiales para fundar una empresa de software, son los mismos pasos que se necesitan para crear cualquier tipo de empresa, pero lo primero que nos debemos dar cuenta es que no siempre se debe pensar en inventar el hilo negro, creo que como primer elemento, debemos analizar nuestras capacidades y ponerlas al servicio de la sociedad, en una frase corriente diríamos que “zapatero a tus zapatos”, debo compartirles que mi familia es de comerciantes y siempre tuve la inquietud de crear empresa, pero como ingeniero, yo solo me cerré mis posibilidades, muy grande era mi interés en crear empresa pero fuera de toda lógica pensaba que en el ámbito de la ingeniería y los sistemas informáticos era muy complicado que pudiera lograrlo, así que decidí invertir en el prometedor negocio de la cría del avestruz..…. Así es, ahora lo pienso y digo “Que estaba pensando”, el final no es difícil adivinarlo, fracase, de esos avestruces no quedo nada, bueno si la deuda de la inversión, eso me enseño que si deseaba fundar una empresa, debería enfocarme en lo que sé hacer.

El segundo elemento es la persistencia, me costó trabajo levantarme pues fue un duro golpe, pero logre hacerlo, yo puedo decir de primera mano que el que tiene éxito no es el que no se equivoca, sino el que a pesar de los fracasos lo sigue intentando.

Aunque considero que hubo circunstancias que se dieron y que ayudaron a que pudiéramos construir nuestra empresa, del total de elementos que se necesitaron para fundarla, eso solo representaba el 20%, el otro 80% lo construimos los fundadores a fuerza de trabajo y nuestras aptitudes, lo que sabíamos hacer.

En una ocasión tuve la oportunidad de escuchar una conferencia de Don Lorenzo Servitje, fundador de Bimbo actualmente la mayor panificadora del mundo entero, mucho podría decir de esa conferencia y del señor Servitje pues valla que hay cosas que aprenderle al señor, pero hubo una cosa que me impacto, él me lo dijo tomándome la mano a manera de saludo para que me quedara claro “Los jóvenes emprendedores, lo que deben hacer es trabajar el doble que los demás y gastar la mitad que los otros”, podríamos pensar que cualquier empresa genera una cantidad tal de recursos que da para gastar mucho, pero no es así, por supuesto que estoy convencido de que como empresa a cualquiera le puede ir mejor que individualmente, pero debemos tener una férrea disciplina para no gastar de mas y solo lo indispensable y necesario para el crecimiento de la compañía, este sería el tercer elemento. No puedo dejar de reconocer a mis maestros de ingeniería que me enseñaron esa disciplina, eso se los aprendí a ellos.

Un cuarto elemento y que pienso no todas las empresas lo ponen en práctica, pero que para mi es fundamental para una empresa de calidad es: nunca perder de vista la esencia de hacer empresa, es decir, aplicar lo mismo que nuestros antepasados tomaban en cuenta para cazar en grupo, si tienes una empresa, olvídate un poco de tus intereses particulares, individuales o egoístas, tienes que pensar en el beneficio de todos los que conforman la empresa; trabajadores, dueños, directivos, proveedores, clientes, sociedad, entorno ecológico, etc., si se hace así, pareciera cuento de hadas, pero existe una fuerza invisible que te regresa beneficios de la misma manera, aquí aplica lo que conocemos en el sentido de que a todo efecto corresponde una reacción, de tal manera que si das un trato justo a tus trabajadores, ellos te responderán con un mayor compromiso y entrega a la misma empresa, si estableces una alianza con tus proveedores, ellos te corresponderán dándote mejores condiciones en sus servicios, si eres honesto y eficiente con tus clientes, ellos te corresponderán contratándote mas, si aportas tu grano de arena a la sociedad, ella te devolverá también cuando busques mejores elementos para integrarse a la empresa, habrá de donde echar mano para hacer buenas contrataciones de personal, si cuidas el ambiente la misma empresa y la sociedad se vuelven sustentables.

Por supuesto que hay muchos elementos importantes, pero quise poner de manifiesto estos que son los que a mi más me han impactado, y espero que con esta lectura muchos se animen en la aventura de crear empresa y aunque tendría mas competencia, por supuesto que creo que se necesitan mas y mejores compañías de software en nuestro país para salir adelante como nación, así que bienvenida la competencia que finalmente también estoy seguro nos puede ayudar realizando alianzas estratégicas y forzándonos a dar mejores servicios.

Mi invitación parte de que podemos comparar la industria de software con la industria de la cerveza, en México tenemos dos grandes y flamantes compañías cerveceras que son reconocidas mundialmente, eso es muy bueno, pero también la cerveza alemana es altamente valorada mundialmente, ¿cual es la diferencia?, que mientras en México hay dos compañías que acaparan todo el mercado, en Alemania existen cerca de dos mil mini empresas que elaboran cerveza de manera artesanal, eso marca una GRAN diferencia en la distribución de la riqueza, así que en México tenemos la oportunidad de crear una industria de software altamente competitiva y que como hasta ahora no se concentre en pocas manos, pensemos en ello y marquemos diferencia.

Hay que crear empresa pero buenas EMPRESAS, pues esto beneficia a todos.

I.S.C. José Antonio Herrera Jiménez.
Gerente Comercial
Evolución T.I. S.A. de C.V.

Coordinador Académico de Ingenierías
Universidad Vasco de Quiroga.

jueves, 1 de marzo de 2012

SCRUM y desarrollo de software ágil.


SCRUM y desarrollo de software ágil.

El mundo del desarrollo de software tiene características que son totalmente contrarias a la lógica de negocios de otras industrias, para explicar esto en un ejemplo muy sencillo, podemos compararlo con una comercializadora de productos al mayoreo, cuando el volumen de venta aumenta, el proveedor puede castigar un poco su precio ya que el volumen de venta le dará finalmente una ganancia mayor, por el contrario en el desarrollo de software cualquier ingeniero podría caer en el error de pensar que al ofrecer la construcción de un sistema que sea de un tamaño significativo en la misma lógica que la comercializadora, el ingeniero podría ofrecer un precio menor, pero resulta que un software mientras mas grande sea, su nivel de complejidad aumenta en ocasiones exponencialmente, esto significa que mientras mas grande sea el producto a desarrollar, se deben considerar costos mayores, no hacerlo desemboca en el fracaso.

Buscando darle la vuelta a este problema se han  desarrollado técnicas para minimizar la complejidad del desarrollo de sistemas, todas estas técnicas se han agrupado en lo que conocemos como Ingeniería de Software, al cabo de los años se ha pasado por muchas etapas, cada una con sus claro-obscuros, podemos encontrar en un extremo el ingeniero que considera que el documentar el desarrollo de software es una perdida de tiempo, que esto solo repercute en el costo final y que prefiere sin realizar un análisis documentado  pasar directamente al diseño y desarrollo del producto, por lo general esto lo hacen compañías pequeñas que desarrollan también productos reducidos, en el otro extremo encontramos a los ingenieros y compañías que incluso cuentan con certificaciones tipo CMMI (Capability Maturity Model Integration) que lo que certifican es que se tienen las mejores prácticas en el desarrollo incluido lo concerniente a la Ingeniería de Software.

Recientemente mentes audaces y creativas se han dado a la tarea de romper estos paradigmas y encontrar soluciones que integren lo mejor de ambos extremos dando origen a las técnicas de desarrollo ágil, ¿de que se trata esto?, los métodos tradicionales de desarrollo como puede ser el Método Espiral (analizo, diseño, desarrollo, pruebo, analizo, diseño, desarrollo, pruebo, analizo, diseño, desarrollo, pruebo, etc.) o el Método Cascada (analizo hasta el mínimo detalle, documento hasta el último detalle, diseño hasta el último detalle, y finalmente implemento con una seguridad mayor) implican como sus detractores lo indican una gran inversión de tiempo para poder llegar a el termino del producto final, y muchas veces toda la documentación que se genera queda en el entredicho su real utilidad y por el lado contrario los que acostumbran no realizar ninguna documentación, cuando el desarrollo empieza a ser de tamaño considerable convierten esas implementaciones en verdaderas bestias muy difíciles de dominar para agregar ampliaciones de funcionalidad o mejoras.

Aquí es donde entran la técnicas agiles, una de las mas populares es la Programación Extrema (Extreme Programming) que se basa en el levantamiento de historias o requerimientos pequeños, simplificar su documentación, atacarlos inmediatamente, y levantar los requerimientos al mismo tiempo que se esta haciendo el desarrollo, de esta manera se soluciona el problema de el “siempre presente” cambio de requerimientos que no se puede evitar, ya que si se esta levantado el requerimiento mientras se desarrolla, se tiene mas flexibilidad y se pueden hacer modificaciones sobre la marcha de una manera menos costosa.
La Programación Extrema ya fue un avance, pero en mi experiencia personal todavía resultaba muy compleja pues considero que es muy difícil medir el avance de los proyectos y tener una visión global de los mismos.

Pero las mentes audaces y creativas cuando realmente lo son, no paran y ahora ha surgido el SCRUM, lo he implementado y tengo resultados verdaderamente significativos, SCRUM es una metodología ágil, pero tiene una sencillez bárbara, verdaderamente esto logra que lo complejo del desarrollo del software sea su programación y no la administración del proyecto.

Es tan sencillo que se los describiré en un párrafo, si conocen las post-it, imaginen que tienen un pizarrón dividido en tres secciones, la primera sección es para las tareas que se tienen por hacer, la segunda sección es para las tareas que están en proceso, y la tercer sección es para las tareas que ya están terminadas, los post-it servirán para anotar cada una de las tareas por hacer (issues), cuando se tengan todas, se pegan en el pizarrón y se inicia el trabajo, y se van colocando los post-it en el lugar que corresponda según el proceso en que se encuentre, de entrada esto nos brinda una visión muy realista y global del avance de nuestro proyecto, SCRUM es ideal para equipos de desarrollo y para esos grupos o empresas que tienen una motivación baja porque no ven que alcancen sus metas y objetivos, con SCRUM todos pueden ver el avance del proyecto y eso da una motivación extra al equipo, parece poco, pero motivación es uno de los ingredientes esenciales para el éxito de proyectos grandes, se puede asignar una serie de issues a determinado desarrollador y se puede hacer un seguimiento de su avance, en el equipo se definen Sprint´s que son metas de desarrollo que van de una a 4 semanas, no mas de este tiempo para que sea una meta sencilla de alcanzar, se establecen juntas diarias de 15 minutos en donde se comentan los avances y problemas que se han tenido al jefe del proyecto y de esta manera se actúa con oportunidad ante los problemas imprevistos y no hasta que ya implique una gran inversión de tiempo corregirlos.

En lo personal una de las cosas que mas me gusta de SCRUM es la grafica de avance, en un solo vistazo podemos observar como va nuestro proyecto, existen software que nos ayudan a manejar  SCRUM por ejemplo Jira que es muy sencillo y su costo es muy reducido.

Los invito a investigar más de este tema, ya que esta explicación es muy superficial, recuerden que el mundo necesita de mentes audaces y creativas que nos den soluciones como esta, no olvidemos que todo es susceptible de mejora.

I.S.C. José Antonio Herrera Jiménez.
Gerente Comercial.
Evolución T.I. S.A. de C.V.
www.evolucionti.com.mx

Coordinador Académico del Área de Ingenierías
Universidad Vasco de Quiroga
www.uvaq.edu.mx