Qué debería tener un proyecto web Open Source

El uso de herramientas web open source es muy frecuente tanto en proyectos personales como profesionales. Existen alternativas de código abierto para casi todo lo que podemos necesitar: blogs, CMS, gestión de proyectos, galerías de imágenes, … Desgraciadamente, algunas veces estos proyectos open source no son demasiado “buenos” y trabajar con ellos puede ser un verdader suplicio.

Quizás hablo desde la desesperación que sufro últimamente por tener que lidiar con el desarrollo de otros, pero me gustaría compartir una serie de aspectos que debería tener un proyecto web open source, sobre todo aquellos que ya tienen unos cuantos años, lógicamente, sin desmerecer el trabajo altruista de nadie.

  • Buena documentación: imprescindible, ya sea para el usuario como para el desarrollador.
  • MVC: bueno, cualquier proyecto debería seguir esta arquitectura, pero en el caso de un proyecto open source en el que cualquiera puede echar mano al código, se convierte en algo absolutamente necesario ya que normalmente se requiere una personalización y si se ha de tocar el core para realizar los cambios necesarios, mal vamos. Además, el MVC te permite quitar las odiosas tablas que te encuentras en muchos proyectos.
  • Plugins: el proyecto deberá permitir que otros añadan funcionalidades a tu código. El éxito de un proyecto open source depende de la comunidad, y es la comunidad la que se suele encargar de los plugins. En versiones iniciales es posible que esta funcionalidad no exista, pero debería ser una futura implementación.
  • Themes: para proyectos de CMS, blogs o con frontend público, siempre viene bien tener una lista de themes donde poder elegir y diferenciar tu aplicación de otras similares. Además, también es un origen de colaboraciones por parte de la comunidad (al igual que los plugins) y existen numerosas webs o empresas que ofrecen themes de pago, lo cual aporta negocio e interés para los usuarios/desarrolladores.
  • I18N: aunque muchos estamos acostumbrados al inglés, es necesario que el proyecto permita la internacionalización para que existan versiones en diferentes idiomas; a todo el mundo le gusta usar las aplicaciones en su propio idioma.
  • Comunidad: el Santo Grial, si tienes comunidad, tendrás éxito (o casi). Creo que esto debe ser lo más complicado de obtener, porque en parte no depende de tí, depende del gusto de los otros desarrolladores, por eso, quizás, los puntos anteriores sean tan importantes.
  • Foro: aunque algunos crean que los foros están obsoletos, no hay nada más utilizado y necesario que un foro para resolver dudas, sobre todo si existe un foro mayoritario y no tienes que buscar en otros 100, y más importante aún, que las respuestas las ofrezcan, entre otros, los desarrolladores del proyecto open source.
  • Gestor de errores: da igual si es Trac, Bugzilla u otro similar. El problema de todo proyecto es la detección, corrección y seguimiento de errores, si se ofrece una herramienta para que la comunidad se involucre en esta fase el proyecto irá mucho mejor.
  • Gestor de versiones: SVN, git o similares, para que la gente se pueda descargar las últimas modificaciones
  • API: al igual que los plugins, permite que otros interactuen con tu aplicación, sobre todo desde otras aplicaciones diferentes, por lo que se añade riqueza al proyecto.
  • Código documentado: aunque exista una documentación del uso de las funciones “públicas”, siempre viene bien tener la documentación de core.
  • Sencillez: por favor, que para crear un plugin, módulo o componente no sea necesario crear 20 archivos y 30 directorios
  • Estándares: si todos vamos a nuestra bola, al final habrá que aprender 100 métodos distintos, siempre es mejor seguir los eśtandares y no volver loco al personal. Por ejemplo OAuth, no te crees tu propio método de autenticación porque si la gente lo necesita usar le causarás un inconveniente, y si no lo necesita usar se echará para atrás y cambiará de opinión porque no le apetecerá usarlo.
  • Interacción con otras aplicaciones: en el punto en el que nos encontramos es absurdo pensar únicamente en nuestra aplicación, ahora es necesario que todo se conecte con todo, no nos olvidemos de los archifamosos Google, Facebook y Twitter

Actualizado desde aquí

  • Administración: existe algunos proyectos que van por ficheros de configuración, lo cual no quiere decir que sea difícil de administrar, pero no todos los usuarios son avanzados y hay que poner las cosas fáciles a la gente.
  • Instalador: como bien dice Chema un instalador sencillo y paso a paso puede ser fundamental para el éxito del proyecto, ya que si la instalación es complicada, probablemente el usuario no avance y descarte usar nuestro proyecto.

No son nuevas verdades, pero aunque parezca mentira en muchos proyectos que he visto algunos puntos brillan por su ausencia y en otros se hace justamente lo contrario

Similar Posts

12 Comments

  1. Te olvidas de tener un buen instalador para facilitar las tareas.

    Es una buena hipotética lista, no es fácil de conseguir desde luego, por que si todos los proyectos open source tuvieran que tener todo esto, muchos de nosotros nos tiraríamos atrás para liberar nada.

    Pero entiendo la necesidad, por ejemplo en Open Classifieds estamos trabajando en ello, pero como digo es difícil, no hay financiación y trabajamos en nuestros tiempos libres…muy despacio vamos 😉

    saludos!

  2. Una matización. “MVC”.
    Lo que describes, poco tiene que ver con aplicar MVC y más con seguir alguna forma de “separación de responsabilidades”. Esto es algo más genérico y no tiene por qué seguir el patrón MVC concreto.
    Puedes seguir MVP (Model-View-Presenter), Presenter First, PAC (Presentation-Abstraction-Control), Naked Objects, etc.

    Creo que sería más conveniente decir algo como “Aplicar una arquitectura ordenada que permita su ampliación y modificación fácilmente”.

  3. Chema, la verdad es que te doy toda la razón en lo de que es difícil, sobre todo cuando lo haces en tu tiempo libre. Mi queja va más enfocada a proyectos que tienen cierta solera e incluso financiación

    Venkman, no te llego a comprender muy bien lo que me comentas. Realmente quiero decir MVC, que los modelos, las vistas y los controladores estén separados, sobre todo las vistas, que no estén mezcladas con el resto de código.

    Saludos a ambos

  4. Lo que quiero decir es que MVC no es la única arquitectura que consigue una separación entre las diferentes partes.

  5. En cuestion de “Estándares” yo creo que a veces es mejor tener un tipo para cada aplicación.

    Por que aunque sea mas engorroso para el usuario, es mejor que el decida como llamarse en al aplicación.

    Por ejemplo si tengo un facebook que mi nombre de usuario es: pollolokoThreZ y despues me deseo autenticar en una aplicación que esten profesionales de programación y CEOS, me gustaria llamarme “Ing. Nombre” y no pollolokoThreZ como esta en Facebook.

    Es solo mi opinion, ademas se pierdo o me roban una contraseña, solo afectara a una cuenta y no a cientos de aplicaciones que puede estar usando con la misma.

    Por lo demas buen articulo.

    Saludos

  6. “Ajaxman, a lo que me refería con estándares es que no venga Facebook y se invente su propio OAuth, por ejemplo”

    jaja inventar su propio oauth fue lo que hizo microsoft con su delegated authentication, no?

  7. TESTS que demuestren que funciona!

    Se imaginan Spring o Hibernate sin testeo unitario?

Comments are closed.