Busco tutorial: ¿Como tratar con clientes morosos? :)

No llevo mucho tiempo en esto de ser freelancer, hace poco consegui un proyecto mas o menos importante y acordamos un esquema de pagos de 50% al iniciar el desarrollo y 50% al finalizar. Todo quedo plasmado en el contrato y el cliente estuvo muy de acuerdo...

El primer 50% fue pagado puntualmente y yo muy feliz me puse a desarrollar. Ahora que el sistema esta terminado e implementado me encuentro con que mi cliente ya nunca se encuentra disponible para recibirme y su secretaria practicamente me manda al demonio cada vez que trato de comunicarme. En fin, parece que no tengo muchas esperanzas de recibir ese pago.

Para todos los freelancers del foro: ¿Han tenido estas experiencias antes? ¿Que se puede hacer al respecto?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

ya lo entregaste?

Ya entregaste el sistema o estás esperando el pago para entregarlo?

Si ya lo entregaste, tienes acceso al mismo todavía? por ejemplo un sitio web, y que todavía tengas los passwords para el server...

Si no lo has entregado, pues escribeles y hablales y déjales una carta en persona donde diga que ya está el sistema terminado y cuando quieran te busquen para revisar la entrega y realizar el pago para finiquitar todo.

Si ya lo entregaste es un poco más complicado/delicado; si ya tienes mucho tiempo buscándolos y no dan la cara, pero el sistema ya está corriendo y tienes acceso al mismo, podrías entrar al servidor y bajar el sistema, quitar la aplicación, lo que sea, depende del sistema que sea. Pero mucho cuidado porque te podrías meter en problemas graves si es un cliente muy lacra porque a lo mejor hasta te quiere demandar. Tienes que tener muy claro que esto es un último recurso porque en el momento que lo hagas ya no hay vuelta atrás y ya prácticamente no hay manera de terminar bien esa relación con el cliente. O te amenazan con demandarte y tienes que restaurar todo y al rato te pagan, o te mientran la madre y luego de un rato te pagan, o te demandan y si al final ganas tú puede que te paguen.

Para la próxima, maneja una granularidad mayor. Define más hitos en el proyecto y programa juntas con el cliente para que revisen cada punto de la entrega parcial y te paguen esa parte. Así ya no hay tanta bronca si cancelan el proyecto cuando ibas por la segunda entrega de 5, o por la sexta entrega de 7; el trabajo que hiciste y que no te van a pagar es un porcentaje menor del proyecto, bastante menor que la mitad.

El sistema ya esta completo

El sistema ya esta completo y entregado.Todavia tengo acceso SSH al servidor donde esta la aplicacion pero no he querido quitar la aplicacion precisamente porque no quiero que la relacion entre los dos se haga mas dificil.

¿Lo ironico? Mi cliente es un despacho de cobranza.....

Imagen de ArenasMx

recomendación

una mejor solución seria des habilitarlo, así ya no corres el riego de que no cumpliste con tu parte del trato, si solo que es muy lacra hacer eso, pero es una protección asi cuando logres por fin resolver los problemas de pago simplemente lo vuelves a activar...

Imagen de ezamudio

algo sutil...

Como cambiar el dueño de todas las tablas de la base de datos, y negarle permisos al usuario de la app, con eso empiezan a salir errores por todos lados... y para arreglarlo pues probablemente tendrán que llamarte, y les dices que con mucho gusto lo arreglas, en cuanto veas el depósito de lo que te deben.

Imagen de Nopalin

excepta en login

hmm si tienes acceso al sistema todavia y puedes actualizar el codigo, sugiero que modifiques el metodo login (estoy suponiendo que es multiusuario) y exceptes siempre con el error: "La licencia ha expirado" o "Sistema en desuso por incumplimiento de contrato" y listo.

Creeme cuando te digo que si hay errores lo primero que hacen es llamar al programador antes de ver que tipo de error es. Ahora toma precauciones, no les dejes el codigo por nada del mundo a menos que te hayan pagado todo, ya que podrian contratar otro programador y te la pelas. Si son los puros jars los que tienes, bueno tambien podrian contratarlo, pero es mucho mas dificil corregirlo y no creo que un programador les vaya a cobrar barato.

De esta forma no te pueden exigir el programa puesto que ahi esta y tampoco te pueden demandar (creo). Yo una vez tuve el mismo problema, pero en mi situacion no habia contrato escrito, asi que yo se lo borre y eso que me habia pagado mas del 90% del sistema. Pero no se trata de cuanto le haya faltado si no de que no cumplio y la mera verdad no me siento mal por eso.

suerte

Imagen de ezamudio

Bomba de Tiempo

Por algo se inventaron las famosas bomas de tiempo en software... un mecanismo que hace que algo deje de funcionar o que ya no puedan entrar al sistema después de una fecha determinada.

Alguna vez tuve que implementar esto y para evitar que le fueran a meter mano, lo que hice fue esto:

  1. Crear un par de llaves RSA, poner la pública como un recurso en la aplicación.
  2. Crear un archivito de texto que decía "FECHA DE EXPIRACION: dd/mm/yyyy" y encriptarlo con la llave privada.
  3. Poner el archivo encriptado en un directorio visible para la aplicación (web app en un servidor dedicado)
  4. La aplicación periódicamente buscaba el archivo, lo descifraba con la llave pública, revisaba el texto y la fecha de expiración, comparándola con la fecha actual.
  5. Para continuar funcionando, la fecha de expiración debía ser posterior a la fecha actual (que por cierto no se tomaba del reloj del equipo sino que se hacía un query a un servidor web remoto, de una lista de varios, para leer la fecha en la respuesta HTTP). Cualquier otra cosa causaba que el sistema se diera de baja. Esto significa que si el archivo no estaba, o no se podía descifrar, o no se encontraba la llave pública, o la fecha resultante de expiración ya había pasado, adiós...

Por supuesto que no es un método infalible pero ya no está tan fácil de crackear. Para burlar esto había que hacer una o varias de las siguientes cosas:

  • Sustituir la llave pública por una de otro par de llaves, para poder crear un archivo similar y encriptarlo con la llave privada correspondiente, y que la app lo pueda descifrar. Esto se puede resolver metiendo la llave pública en código duro, o guardando un hash de la llave pública para compararla al momento de hacer la decripción. Incluso se puede guardar un hash en código duro para compararlo con uno que debe venir en el mismo archivo.
  • Obtener la lista de sitios que consulta la aplicación para obtener la fecha actual (monitoreando conexiones por ejemplo) y poner un web server falso que atienda esas peticiones para devolver una respuesta con una fecha previa a la de expiración. Esto sólo se puede si ninguno de los sitios consultados por la página son usados por ningún otro proceso o usuario del servidor.
  • Descompilar la aplicación completa y buscar qué clase es la que hace el descifrado del archivo y la comparación de la fecha. Finalmente debe ser un método que devuelva un boolean o algo así y que es invocado por un proceso que al obtener   como resultado, baje la aplicación. Se sustituye la clase por una que solamente tenga un   y listo. Esto se puede evitar o al menos dificultar bastante, ofuscando el código.

Nopalin tiene razón en algunos puntos: no les des el código hasta que te paguen completo. Eso es importantísimo. Si piden a un programador que modifique un sistema existente sin tener el código, pues siendo ese programador, hay que ser muy tonto para creerse los cuentos que le vayan a decir, o ser poco ético para descompilar todo y ponerse a trabajar, sabiendo que algo malo tiene que haber pasado para que no tengan el código de ese sistema.

Y al final, también tienes que cuidar tu reputación, no? Ese mismo cliente podría pedirte más cosas (ya está en ti el aceptarles o rechazarles más proyectos), recomendarte con otras personas y de ahí sale más chamba, etc. De igual forma pueden ponerse a hablar mal de ti por todos los medios que puedan y darte un quemón; eso puede costarte más que lo que dejaste de cobrar por este proyecto. También tienes que pensar a largo plazo...

wow

esto suena definitivamente bien. Lo intentare.

Imagen de Livio

ezamudio

no logro encontrar informacion de como hacer los pasos 1 y 2 que mencionas. Ando buscando la forma de limitar una aplicacion a 30 dias con el metodo que mencionas. Tendras alguna informacion, manual que me oriente?
Saludos.