Nov 5, 2009

Código fuente ¿se debe entregar?

Hoy he leído un post en decabeza titulado Archivos fuentes, ¿se deben entregar? que me ha parecido muy interesante. Como mi opinión es bastante extensa, he decidido continuar la conversación aquí (weedo, espero que no te importe ;) ) Como el título indica, el tema versa sobre si se debe entregar el código fuente al cliente y si éste debe pagar un plus por ello.


Antes de nada, comentar que he estado en las dos bandas: programando para clientes hace tiempo y actualmente externalizando muchos proyectos en mi agencia. Por lo tanto, mi opinión está basada en las dos experiencias.

Para ponernos en situación: vamos a asumir que cuando hablamos de código fuente hay una parte que corresponde puramente al encargo, y en muchos proyectos hay otra parte de “valor añadido” (porque se está utilizando un framework propio, unas librerías muy complejas, una clase que facilita muchísimo x tarea, etc). Entiendo que con la primera no hay problema, porque al fin y al cabo te pagan por eso, y es en el segundo caso donde sabe mal “regalar” nuestro trabajo. A partir de aquí pienso todo el rato en situaciones con este “código de valor añadido”.

Para mí, casi siempre se debe entregar el código fuente. Sino se hace así, el cliente está encadenado. ¿Qué le impediría luego al desarrollador pedir cantidades desorbitadas por cualquier cambio? En caso de que al cliente no le interese trabajar con el autor original, debe tener la posibilidad de modificar él mismo el programa o pasárselo a terceras personas. Obviamente habrá excepciones, por ejemplo desarrollos muy complejos donde se entra en un sistema de licencias para explotación.

Si el cliente puede (y debería) exigir los archivos, el programador también puede pedir una cantidad mayor. En el primer comentario del post original se lee “para entregarse los fuentes, tiene que haber mucho dinero encima”, y me consta que hay muchísima gente de la misma opinión. Si un programador tiene el derecho de pedir mucho dinero, obviamente el cliente tiene el derecho de preguntar qué está comprando:

  • ¿una clase propia para validar un mail? ¿un gestor entero de contenidos?
  • ¿y qué calidad tiene el código fuente? ¿tipo Grant Skinner o tipo estudiante de segundo curso?
  • ¿está el código 100% libre de bugs?
  • ¿es fácil de implementar? ¿es fácil de extender?
  • antes de que yo ponga encima de la mesa el dinero ¿me vas dejar investigar a ver si merece la pena?
  • y más allá del código en sí… ¿me puedes asegurar que es imprescindible utilizar ese código que aumenta tanto el presupuesto?

Intento ilustrar las preguntas anteriores con un par de ejemplos:

1) Yo como “contratista”, hago un encargo a un freelance que me pasa un presupuesto muy elevado porque incluye el código fuente de un motor de tweens que ha desarrollado durante 2 años. Habiendo librerías gratuitas tan buenas como GTween o TweenLite, me niego a pagar el coste (seguramente nadie lo haría)

Ahora lo hacemos extensible, por ejemplo, a un conjunto de Expresiones Regulares. El freelance se ha currado una librería durante meses con decenas de ellas, y piensa que el cliente podrá aprovecharse de ello para otros proyectos. Yo dudo si pagarlo, porque considero se pueden encontrar en google de manera más o menos fácil.

Y lo hacemos extensible a un algoritmo que se ha inventando Yugop para deformar imágenes y que no se consigue en ningún lado y blablabla y yo lo pago encantado.

¿Qué marca el límite sobre lo que es fácil de conseguir y lo que no? ¿qué es reutilizable y qué no? ¿qué es único y qué no? Y más importante, ¿tienen nuestros clientes un nivel de conocimientos suficiente para tratar estas cuestiones?

2) Un cliente me contrata para un proyecto. Decido utilizar mi package de utilidades, que simplifica un montón de tareas y me permitirá hacer el trabajo en 5 días. El cliente se niega a pagarme el código, así que yo rehago el presupuesto sin incluir mis “utils”, lo voy a hacer todo de cero. Esto significa que en vez de 5 estaré 10 días y que doblo el presu final. Para el cliente no soy competitivo y se busca otra alternativa.

Son sólo dos ejemplos, pero a mí personalmente me responden muchas cuestiones. Y aún más, vamos a alejarnos un poquito de la perspectiva flash, por ejemplo pensando que hacemos un site en html+css+php, ¿no entregas todo? ¿el programador php teme que utilicen sus clases? ¿que aprovechen el css para otro site?

Mi conclusión final es que como programador siempre voy a dar el código fuente, y como cliente no voy a trabajar con nadie que no lo entregue. Y no voy a exigir más dinero al darlo, y no voy a pagar más si me lo dan. Para mí la gracia del negocio está en el valor que aporta el programador. Si trabajo con una persona que me resuelve cualquier problema, si puede aplicar cambios sin estar 4 días, si al pedir un cambio de funcionalidad no tiene que tirar media web abajo porque la implementó con patrones, si el código está perfectamente documentado… eso sí que no me importa pagarlo.  Y por contra, si el presupuesto es muy justo, pues se puede avisar de que se programará “rápido” (que no mal), que será más difícil de extender, poco modulable, etc.

Y en cuanto a nuestro trabajo de “valor añadido”, pues seamos listos. Si no se le quiere dar un plus al cliente, pues no metamos el package entero, simplemente las funciones/clases imprescindibles; si se utiliza un módulo que se puede reutilizar para otros proyectos, pues se crea un biblioteca de clases (swc); si paga las horas justísimas, pues no se comenta el código por falta de tiempo; etcétera etcétera.

Y obviamente, lo expuesto aquí es mi opinión. Cada uno es libre de valorar su trabajo y sus horas como quiera. Al final, como cada proyecto, cada cliente y cada programador es un mundo, se convierte en una ecuación de infinitas posibilidades. Por eso, se piense como se piense, lo importante es dejarlo todo por escrito desde el principio.

Información del artículo

Post publicado el 05 de November de 2009 a las 23:31 por llops

Categorias: Opinión

Comparte

1 trackback

18 comentarios

  • Hola Llop como andas?
    Me parece perfecto que sigas el tema por acá, la idea es justamente compartir y generar opiniones.
    Tocaste varios puntos interesantes del lado de las agencias que yo no nombre.
    En resumen creo que el secreto está en hablarlo y amoldarse según cada proyectos y no convertirse en un “defensor de tu código”… Ya que no era la idea de mi post.
    Pero si, si uno considera cobrar un 10% más del presupuesto por entregarlos, si el cliente está de acuerdo, bienvenido sea.

    Saludos, Sebas!

  • Si a todo! Estoy de acuerdo al 100% contigo Llops. Yo siempre entrego los fuentes y no pido mas por ello, considero que va en mi tarifa (que seguramente no sea de las mas bajas).

    No solo eso, normalmente curro con SVN mio o del cliente (o lo que sea), por lo que el cliente tiene acceso a los fuentes en cualquier momento. Seguramente me pueda jugar una mala pasada en el futuro, pero por suerte aun no me ha pasado.

    Solo una apreciacion sobre el HTML. Los PSDs se entregan tambien? Y las fuentes usadas? Y si son de pago?

    Salud!

    pd: ya que no tienes anuncios en el blog, te importaria poner el post completo en el RSS? Es un conyazo tener que venir aqui a verlo, sobre todo si estoy leyendo el Reader en el telefono cuando voy en el tren!

  • hi!

    @weedo
    La verdad es que tu post es muy correcto y ya se ve que no te cierras con una única opción ;) Si cobras un % por fuentes y a tus clientes les parece bien, genial. Por otro lado, me alineo más con la posición de Zárate, de cobrar un poco más caro y que vaya todo en un paquete.
    De todas maneras, eres tú quien mejor conoce a tus clientes y a lo mejor todos no pueden pagar un 10-15% más caro.

    @Zarate
    Joer, cuanta transparencia con lo del svn :) La verdad es que si no son de confianza da como un poco de rollo, no?
    En cuanto a lo de los PSD, es muy buena pregunta. Hay como un pensamiento generalizado de que nunca se deben entregar, pero realmente es un curro que te encarga al cliente, así que supongo que sí. Igualmente no tengo un postura 100% definida con esto…
    En cuanto a las fuentes sí: si las usas de pago las tiene que pagar el cliente. Sino se le presenta un diseño con Arial y a lo mejor se le convence :p

    pd: ya he cambiado lo del RSS, supongo que cuando escriba el próximo post se actualizará. De todas maneras, siempre he tenido varias dudas con esto, porque algunos lectores interpretan el “more” y lo cortan igualmente y otros juraría que no. Eso sí que no lo cambiaré, porque con los posts tan largos que escribo es un coñazo encontrártelos enteros cuando llegas al blog…

  • Hola Dani,

    Excelente post, estoy completamente de acuerdo contigo y Zarate. Desde siempre he trabajado así, porque pienso que todo lo que puedas facilitarle la vida al cliente y quedar bien con él tanto mejor para ti, pues quedará contento y volverá por más.

    Saludos!!!

  • Dependiendo de lo que se entienda que va dentro del presupuesto. Pero esto hay que dejarlo muy claro al principio. Yo suelo entregarlo.

    Viva el Open Source. :)

  • Interesante artículo, yo soy de los que entregan el código, creo que si trabajo bien me van a pedir a mí los cambios.

    Además si no tengo disponibilidad de hacerlos siempre los puede hacer el cliente (o al menos tratarlo, que últimamente yo estoy muy friki y en las agencias están muy pez).

    Lo que si hay que dejar claro es que al entregar los fuentes pierden cualquier tipo de garantía que puedas dar, si por ejemplo descubren un bug o algo parecido que se ha pasado por alto, ya que no puedes saber si lo hiciste tú mal o han “metido la zarpa”.
    Esto lo digo por experiencia, ya me he hartado de que me digan que algo no corre bien y ver 40 enterframes encima de mi codigo, o que me digan que se para el sonido y encontrar un stopAllSounds (!!)

    Un saludo

  • Es un buen punto el que comentas, Javi, y debería ser una “cláusula” en cualquier contrato.

    También entiendo que no se pierde automáticamente la garantía por entregar el código y que alguien lo modifique, sino porque se haga indebidamente. Luego ya entra la parte de quién hace de perito. Una de mis condiciones sería que yo, como proveedor, reviso los bugs, pero si descubro que no es mi culpa cobro esas horas.

    Saludos!

  • elSuricatoRojo

    Para mi no entregar los códigos fuente son por lo general un signo de amateur. Según vas teniendo experiencia es dificil que no aprecies las ventajas de entregarlos respecto a la de quedartelos pajo llave.

    La principal es la de fomentar la cofianza con tu cliente. Si este ya se ha visto en una situación de comerse una aplicación en flash sin poder cambiar un número de teléfono porque no le han pasado los fuentes, cuando tu le digas que se los das y ademas con instrucciones para que el u otro desarrollador puedan heredar la aplicación, vas a destacar positivamente y va a apreciar el valor añadido de ceder los fuentes.

    Por otro lado quedarte con los fuentes para garantizar posible futuras modificaciones es tirarse piedras a tu propio tejado. Si no das los códigos fuentes obligas al cliente a tirar de ti.. pero yo lo veo mas como que te obligas a ti mismo a estar disponible para cualquier modificación y esa modificación chorra que apenas se puede cobrar te va a implicar parar con el desarrollo en curso, buscar tus fuentes, hacer una inmersión en ese proyecto, hacer los cambios y volver al proyecto con el que estabas. Si das los códigos fuentes maximizas las posibilidades de ese tipo de modificaciones las haga el cliente.

    Si de lo que se trata es de hacer un nuevo módulo o un cambio mas complicado y que si te pueda interesar como proyecto, aunque el cliente tenga los códigos fuente tu posiblemente seas la opción mas rentable ya que conoces la arquitectura de la aplicación y el código te es familiar. Habrá casos en los que el cliente lo haga él o lo subcontrate a otros, pero mi experiencia es que casi siempre se lo intentan encargar a quien lo ha desarrollado porque va a ser mas rápido y por lo tanto mas barato.

    Lo unico que aconsejaría es que si noy hay ya una confianza enter tu y el cliente no des los códigos fuentes hasta no haber cobrado todo o parte o al menos tener garantias pr escrito de cobro.

  • spasmos

    Lo cierto es que el tema del codigo es un tanto delicado. Es cierto que el hecho de no entregar el código fuente en lenguages compilados como Flash es dejar al cliente atado de pies y manos pero creo que se han de valorar dos aspectos fundamentales.

    Principalmente, el precio. Cuando haces proyectos a precios muy bajos para poder conseguir al cliente no creo que se le haya de regalar el código. No tanto por el código en si sino por una manera de hacer. Cuando entregas el código fuente al cliente no sólo le entregas lineas de programación sino tambien una experiencia adquirida a lo largo de muchos proyectos. Cuando un cliente desea hacer una página web para tener presencia en la red, tu sadisfaces esa necesidad; es decir, el cliente paga por tener su web, su sitio en internet, no por el conocimiento que requiere ese trabajo. Es como si al ir a comprar un coche le pidieses al fabricante que te pasara los planos por si te interesa cambiar algo. Y así puede haber multitud de ejemplos. El cliente paga por un servicio. Si tu como desarrollador le quieres regalar tu manera de hacer al cliente como un valor añadido tuyo, adelante.

    En segundo lugar, tu entorno. Como empresa, has de competir con otras empresas y si consideras que tu manera de hacer las cosas tiene un valor del cual el resto carece regalarlo implica que tus competidores se enriquezcan de tu saber hacer. Esto último podría sonar casi a Microsoft y otras empresas que crean aplicaciones cerradas pero no hablamos de aplicaciones para millones de personas si no de una página web. La cual una vez hecha y entregado el código al cliente, deja de estar en tu poder, que tu manera de hacer las cosas pueda llegar a tus competidores que se pueden enriquecer con tu trabajo.

    En definitiva, pienso que cuando el cliente paga es por un servicio, por su presencia en la red y que si desea tu manera de hacer las cosas se ha de pagar aparte.

    Una solución a medias en estos casos es la de externalizar la información de la web. Es decir, yo con la web al cliente le proporciono un motor con el que poder presentar su información y que dicha información se recoja desde fuera del motor para que el cliente tenga acceso total a cambiar cualquier dato. En flash los .xml cumplen perfectamente este cometido así como otros formatos y encaso de querer ampliar la web sin contar con el desarrollador original se le explica como hacerlo ya que el sistema sería modular.

  • Me sorprende esa tendencia que veo por aquí acerca de entregar el código sin más. Parece que entregándolo eres mejor profesional y más guay según veo en vuestras opiniones.

    1) Muchos proyectos no necesitan ningún tipo de mantenimiento, como por ejemplo un microsite para una campaña publicitaria. Se terminan, y no hay más. Además está claro que “siempre” utilizaremos nuestro “framework” para ir más rápido, pero para eso lo fabricamos en su día y con nuestro sudor. Que alguien me explique para qué quiere un cliente el código de un micro de este tipo…

    2) Si se trata de un proyecto grande y con mantenimiento posterior al desarrollo inicial, pueden surgir muchas situaciones distintas. Pero voy a resaltar un caso: imaginemos que el cliente nos pide una aplicación, por ejemplo, un configurador de viviendas. Como cada 6 meses querrán un configurador distinto, me creo un “motor” basado en xml o base de datos que contemple mogollón de condicionales, anticipándome a posibles y/o futuros problemas.
    Esta herrramienta me costará muchas horas en principio, pero facilitará mi futura tarea para nuevos configuradores. ¿Debo dar el código fuente de este motor? Ni de coña, a no ser que el cliente me lo haya pedido expresamente y pague por ello.

    3) Como se ha comentado, cada caso es un mundo. Todo debe especificarse en un contrato por escrito, y no en llamadas de teléfono o emails informales. Hacer contratos de licencias, etc

    4) Me parece bien que el cliente sepa qué está pagando. Si quiere el código y lo paga, porque él mismo lo va a mantener, tiene derecho a conocer la calidad del mismo, si esta comentado, si es modulable, etc. Pero si no lo paga, como si le damos un .fla en as2 con código encima de botones y gotoAndPlay. Si el resultado de la aplicación es bueno, no se puede quejar ni exigir nada.

    @Zarate: Me alegro de que tengas clientes tan “buenos” y honrados. Muchos no son así. Me parece una locura lo del svn (yo también lo he hecho y no lo vuelvo a hacer). Compatir el svn con un cliente es como estar currando frente a tu monitor y tener un notas detrás de tu espalda viendo lo que haces. Además seguro que hará comentarios y se meterá en tu forma de hacer las cosas (también me ha pasado). Otra cosa es que se pacte entregar el código del proyecto en ciertos milestones, o que tu cliente participe activamente en el desarrollo. Entonces sí lo puedo entender.

  • Jaime

    Hola, en Valencia hace unos 5 años la empresa en la que trabajaba mi mujer tuvo un litigio con una empresa que les habia desarrollado una web en flash y no queria entregar el codigo fuente. El juez dictamino que el codigo fuente pertenecia a la empresa que pagaba.

    Lo cuento solo como informacion adicional.

    Un saludo

  • Diego

    Hola, gracias por toda la información :)

    Yo no tengo problema en entregar el código fuente, entiendo que es parte del encargo que me hizo el cliente. Ahora bien, éste me exige el código fuente ANTES de pagar, pues afirma que el trabajo no está finalizado hasta que no le entrego el código.

    Qué debo hacer? entregárselo todo y confiar que me pague, o exigirle el pago antes del código fuente?

    Yo he cumplido buena parte de mi trato, el desarrollo fue finalizado dentro de plazo, y el cliente lo tiene en explotación.

    Gracias!

  • Ummm complicado … si tú no te fías que una vez entregado el código fuente vayas a cobrar, quizá ellos no se fían que si pagan les des luego el código fuente…

    Si pactas porcentajes, (20% al empezar, 30% mitad de proyecto y el resto al acabar, por ejemplo), sí entiendo que hasta que no entregas el código no te pagan el resto.

    Pero como siempre, todas estas cosas mejor hablarlas al principio porque ahora lo tienes complicado…

  • paola andrea tovar pizarro

    como hago seme pedio mi pasado judical y no me se el codigo gracias

  • Elimar Torrealba

    Y si el codigo es de un programa que se esta haciendo para ser comercializado?? tambien se entregaria el codigo fuente?? porque podria llegar otro programador, tomarlo y solo cambiarle ciertas cosas, y comercializarlo el.. no se que hacer..

  • nunca debes entregar los codigos fuente .
    entonces donde kedan los derechos de author??
    facil toman esos codigos, los manipulan los transforman y te borran tu credito.
    si eres un designer con talla y peso, nunca debes de negociar tu codigos fuente.
    no trabajes por amor al arte. date tu luGAR O NUNCA SALDRAS DEL ANONIMATO

  • Álvaro

    No he podido resistirme a realizar un comentario.

    Creo que como programador no te contratan solo por hacer un codigo, y de como esta hecho, es en ultima instancia es tu responsabilidad, como tambien estoy en ambas lineas cliente-trabajador, si esta mejor o peor hecho no me importa lo ultimo que quiero es que funcione.
    Pero no solo existe esa necesidad para contratar a un programador o a un equipo.
    Tambien se debe valorar, tiempo, autonomia( que puedas hacerlo sin que nadie este encima), versatilidad(poder cojer desde un html hasta la BD mas compleja). Y muchas mas razones.
    Con lo que si mañana te vuelven a llamar o no el cliente, sera en base a un conjunto de experiencias, en donde muchas veces dar po no dar el codigo fuente ni influye, pero si digo que el hecho de tener que pagar mas por el codigo o la negativa de darlo puede ser un handicap a la hora de trabajar contigo.
    Y honestamente, mi codigo fuente no creo que sea mejor ni peor que el de nadie, y nadie me ha mirado las lineas para decir cuanto vale, al peso?, como bien dices LLops. Pero si me han valorado por mi rápidez, capcidad de cambios, versatilidad y responsabilidad, y eso es lo que se paga, a no ser que hagas algo que tenga precio, que sea solo tuyo, y no lo tenga nadie, vuelvo a las palabras de LLops con el ejemplo de Yugop.
    Ademas sinceramente no soy un Webmaster que mantengo un sitio dioss me libre, con lo que si doy el codigo fuente puedo hacer otro desarrollo nuevo que es lo que me gusta.

    Y habiendo vivido ambas experiencias como cliente y trabajador entiendo que la mejor solucion para todos es dar el codigo fuente.

  • Garrapata

    Si me compro una Coca-Cola, no puedo exigir la fórmula.
    Si compro el CD de Windows, no puedo exigirles el código fuente.
    Si compro pan en la amazandería, no puedo exigirles la receta.
    Pero si puedo pedir que usaron, puedo exigir que me indiquen los ingredientes que estoy consumiendo, puedo exigir la fecha de caducidad o de vencimiento, puedo exigir las contraindicaciones y también puedo exigir todo la que me puede afectar en mi salud, económicamente y legalmente como cliente.

    Si no hay acuerdo escrito firmado o de autenticidad evidente (para la ley), el código fuente tiene la misma legalidad que la fórmula de la Coca-Cola.