martes, 16 de septiembre de 2008

Empezar como programador freelance

* No recomiendo tener mas de un programa grande al mismo tiempo.
* 90% (o mas) de los clientes necesitan proyectos relacionados con bases de datos, por lo que hacerte de unos libros y algo de experiencia en SQL (a mi gusto MySQL) es indispensable, sobre todo es muy importante lo referente a políticas de seguridad.
* Por el amor de Dios, si no tienes una licencia de desarrollo de Delphi, Borland C, Visual Basic (uhgh...) o alguna otra herramienta pagada, una de dos: o ahorra para la licencia o desarrolla en otro lenguaje, Ruby por ejemplo es bastante solido y elegante a mi gusto y puedes desarrollar aplicaciones con entorno gráfico en GTK+.
Se que esto puede sonar excesivo, pero a final de cuentas solo te perjudicas a ti a tus clientes.
* ¿Has leído alguna ves los disclaimers que vienen cada que instalas un software o en la primera corrida o en los about boxes? créeme, son necesarios, con ellos te deslindas de cualquier responsabilidad que muy probablemente ni siquiera haya sido tuya pero tus clientes te trataran de responsabilizar (flashback de Bart y Homero Simpson: "así estaba cuando llegue")
* Hablando de entorno gráfico, a los clientes les encantan los programas que se vean bonitos, puedes incluso hacer una interface con skins, eso les encanta.
* Antes aceptar hacer un software para un cliente, pídele permiso para estar un par de semanas en su empresa, viendo como hacen las cosas, involucrándote en lo posible (y permitido), incluso puedes hacer que te tomen como un empleado mas e inclusive (pero no te hagas muchas ilusiones) que te paguen como un empleado por esas semanas, esto te dara un buen panorama de que necesitan antes de que empieces a teclear algo.
* Regla de Moose no. 1 para programación Freelance: El cliente nunca sabe lo que quiere/necesita, infórmate bien antes de que el cliente te confunda, si puedes, averigua como trabajan compañías de similar giro Y tamaño, nunca empieces a teclear sin que ambos estén consientes de la necesidad real.
* Siempre cada cierto tiempo, muestra tus avances a quienes te contrataron Y quienes van a utilizar el programa, la retroalimentación temprana te salva de cientos de horas-codigo
* Casi siempre el que seas el "cuate del programa" implica que debas hacer soporte técnico si la empresa no cuenta con un departamento para ello. Lamentablemente esto es inevitable. Estate bien al corriente de redes, administración de sistemas (usualmente NT o XP), consigue tus pinzas para cable UTP y otras herramientas comunes (desarmadores, brochas para quitar polvo, martillos, taladro (créeme lo ocuparas))
* Programar elegantemente no solo hace que tu código sea bonito, también ayuda bastante a realizar los cambios radicales que te aseguro que tarde o temprano el cliente te va a pedir, si trabajas con programación orientada a objetos, muy presente el concepto de clases/objetos al momento de hacer tu código, y preserva modularidad.
* Vale la pena mencionar que mucho código de algunos proyectos te servirá para otros, tener una biblioteca (.DLL, .a, etc.) o archivos de inclusión (.H, .PAS etc.) con operaciones comunes es bastante útil, pero trata de mantener compatibilidad. Esto también aplica para interfaces gráficas, pero tienes que tener buenos skills de meta-programación para ello.
* Hablando de cambios radicales, siempre conserva un respaldo de antes de cualquier cambio radical, por si el cliente te dice un "siempre no" tu puedas recuperar buena parte de código, y si estas modularizando bien, inclusive pasar tus avances a la vieja versión.
* El cliente casi nunca va a necesitar solo un programa, va a necesitar una solución, muchas veces esto implica nuevo equipo, cableado, etc... por lo que ser distribuidor de equipo de cómputo es bastante útil, ya que ademas de que el cliente no debe de buscar por ellos mismos, puedes ganarte algo de dinero adicional, si de plano no puedes con las ventas mínimas, por lo menos trata de que algún distribuidor te venda directamente, siempre es mucho mas barato que comprar en tiendas especializadas.
* Tu mejor publicidad siempre será la recomendación personal. Siempre. Trata bien a tus clientes, que les de gusto que tu seas quien resuelve sus problemas, así proyectos nuevos con conocidos de ellos (los empresarios siempre conocen otros empresarios) van a llegar en el momento que menos lo esperas (esperamos que sea en el momento en que lo nesesites).
* Una gran ventaja del software a la medida, es que es muy difícil de piratear, ya que por mas parecidas que sean las otras empresas del ramo, nunca tienen las mismas necesidades, ademas de que tu cliente usualmente no les dará sus herramientas a su competencia.
* Hay un punto muy importante cuando tratas con los clientes, que las primeras veces siempre vas a tener problemas: el contrato. Este punto es bastante extenso y podría escribir un post entero acerca de el, como puntos generales: consigue a un abogado (todo mundo tiene al menos un pariente abogado) que te auxilie a redactarlo, incluye la clausa de que todas las adiciones a los puntos convenidos SON NEGOCIABLES POR SEPARADO, trata de incluir una muy buena descripción general de que es el programa y que va a hacer una ves terminado.
* La carta de finiquitado (la que dice que el cliente se encuentra satisfecho y todos los puntos convenidos fueron cumplidos) vale 1000 veces su peso en oro, es la diferencia entre meses de trabajo adicional mal pagados y meses de trabajo adicional bien pagados.
* Trata de mantener una buena imagen personal, se que después de un par de horas todo lleno de grasa después de montar un red no ayuda mucho, pero en general que el cliente tenga una buena imagen de ti, trata de no ir a la empresa cuando de plano estas muy enojado (puede pasar frecuentemente)/te sientas muy mal.
* Ten mucha paciencia y un tarro muy grande de aspirinas.

0 comentarios: