Esta es una pregunta muy común al comenzar un nuevo proyecto web: ¿Debo elegir un CMS (Sistema de gestión de contenido)? ¿O debería implementar una aplicación web personalizada? Y esta es una pregunta justa para una persona técnica o no técnica porque cada opción tiene ventajas y desventajas según el contexto. Es importante tomar esta decisión en serio y evitar asumir que una tecnología es la opción correcta sin pensar más allá de lo obvio.
Supuestos comunes errados…
Frecuentemente escuchamos cosas como «Quiero crear un sitio web para pedir taxis en WordPress porque escuché que es más fácil que otras tecnologías» o «Quiero crear una página de inicio de marketing en Drupal» o «Quiero crear un sitio web de blog con una aplicación personalizada en Django«. Podríamos continuar todo el día con ejemplos como ese. En muchos casos, la elección de la tecnología incorrecta puede ser la razón del fracaso de un proyecto, por lo que si usted es propietario de un producto, debe tomar el consejo de un experto en la materia y tomar este artículo como referencia.
Si no encontró nada malo en los ejemplos anteriores, debe continuar leyendo para comprender por qué son malas elecciones. Vamos a enumerar algunos de los factores más comunes que debemos considerar para su caso especial.
Lo primero que necesita es identificar el tipo de software que va a construir. Llamo a un sitio web, una aplicación web cuyo único propósito es servir contenido estático a los usuarios finales que normalmente llamamos «lectores», la única interacción de los usuarios es de una sola manera: la lectura. Por otro lado, una aplicación web le permite hacer más que leer. Permite a los usuarios interactuar con una aplicación de ambas maneras. Significa que requiere información de los usuarios y proporciona una respuesta que podría estar relacionada con el procesamiento u obtención de información de servicios externos o una base de datos.
Identificar el tipo de aplicación web es importante para las consideraciones anteriores. En este punto, podemos decir que si está desarrollando una aplicación, probablemente sea mejor optar por un desarrollo personalizado, ya que tendrá más flexibilidad, pero es solo el comienzo, hay otros factores a considerar.
Antes de pensar en tecnologías específicas, debe resolver si necesita un CMS o no. Los sistemas de gestión de contenido son piezas de software que permiten al usuario editar el contenido de un sitio web sin requisitos técnicos. Desde la perspectiva del desarrollador, proporciona un marco con un núcleo preconfigurado que se puede ampliar con temas y complementos.
Como puede ver, un CMS tiene beneficios para los propietarios y desarrolladores de productos. Parece que facilita el trabajo, y es cierto, normalmente puede crear un sitio web inicial muy rápido, mientras que la edición de contenido es muy fácil, pero tiene un precio. Entonces, ¿cuáles son los factores que debe considerar para decidir si opta por un CMS o no?
Si rara vez necesita actualizar el contenido y solo tiene 1 o 2 páginas para mantener, es mejor crear un sitio web HTML estático. Este es el caso de las páginas de destino o sitios web que presentan información en no más de 3 páginas. Pero si está cambiando el contenido todo el tiempo, requiere varias páginas, entonces debería considerar tener un CMS en primer lugar.
Los sistemas de gestión de contenido se crean para agregar y actualizar contenido, ¿no?, por lo que si está creando un blog, una revista o si publica contenido con frecuencia, necesita un CMS sin duda. Pero, ¿y si crece demasiado? Solo en ese caso, tal vez deba comenzar a pensar en una solución híbrida donde pueda aprovechar los beneficios del CMS en el lado de la administración y presentar al usuario el sitio web servido por otra cosa. Veremos más detalles en la sección Escalabilidad.
Por otro lado, si solo desea que un sitio web publique contenido y vaya con un desarrollo personalizado, normalmente es una mala idea. Sé que el ejemplo típico cuando aprendes sobre un Framework es sobre crear un blog. Para su información, ese es solo un ejemplo con fines educativos. Normalmente no ves un blog creado con Django, Ruby on Rails, Symfony o similar. Podría haber algunas bibliotecas muy buenas que extiendan un desarrollo personalizado en un framework a un CMS, y eso es válido para casos muy especiales en los que desea lo mejor de ambos mundos: tenga un desarrollo personalizado que también requiera un componente de administración de contenido.
Normalmente, el tiempo de comercialización se reduce utilizando un CMS porque puede comenzar creando rápidamente un sitio web y utilizando un tema existente. Eso es cierto si no necesita un diseño específico. Si necesita un diseño muy específico, tener un CMS podría aumentar el tiempo para finalizar la implementación, pero a veces vale la pena.
Cuando tiene que implementar un diseño personalizado para un sitio web, normalmente tiene 2 opciones: desarrollar un tema personalizado u obtener la ayuda de un creador de páginas que le permite implementar el diseño utilizando la interfaz CMS. La ventaja de implementar el diseño personalizado en un CMS es que puede implementarlo una vez, y luego cualquier página nueva creada reutilizará el mismo estilo. Pero tenga en cuenta que algo que podría tomar un par de horas simplemente haciendo HTML/CSS podría llevar días al usar un CMS.
En términos de creadores de páginas, WordPress tiene muy buenas opciones como Beaver Builder que proporciona un tema en blanco con múltiples opciones de configuración o también puede integrarse a un tema existente.
Para implementar un tema personalizado, deberá comprender la API del CMS y su código para poder interactuar con el núcleo para mostrar la información de la base de datos como lo espera. WordPress es el CMS más utilizado en el planeta, pero si desea usar algo más robusto, puede usar Drupal que también tiene algunas herramientas poderosas desde el núcleo, como vistas y bloques.
Los CMS vienen con una interfaz de administración lista para usar. Permite a múltiples usuarios iniciar sesión en el sistema y editar contenido al mismo tiempo que mantienen el control de las versiones. Implementar algo así en un software personalizado puede ser muy complejo, por lo que si necesita algo como esto es porque necesita un sistema de gestión de contenido.
WordPress tiene las funcionalidades normales para un flujo de publicación y roles de usuario, pero si desea algo más sofisticado en términos de roles y un flujo de trabajo de publicaciones especiales en el que desea incluir la aprobación de diferentes personas, probablemente debería usar Drupal.
¿Qué pasa con permitir que los usuarios externos se registren e inicien sesión en el sitio web? ¿o permitir que los usuarios interactúen con la base de datos? ¿o restringir el contenido según criterios definidos para el usuario? Puede encontrar complementos para todo en un CMS, pero para características como las anteriores es mejor desarrollarlos en una aplicación personalizada. Explicaré la razón en el siguiente párrafo.
Cuando use un CMS, tendrá la tentación de resolver todo con un complemento, pero cuando resuelva con un complemento lo que falta con otro, comenzará a crear una dependencia que no siempre está bien sincronizada. Y sin darse cuenta, estará pirateando complementos o creando fragmentos de pegamento para que todo funcione correctamente. En un desarrollo personalizado, usted posee el código y puede ampliar las funcionalidades sin dependencias extrañas.
Esta es una herramienta muy útil de un CMS, puede obtener una vista previa del contenido y mantenerlo en borrador antes de publicarlo e incluso programar el contenido para que se publique en una fecha futura. En comparación con una aplicación personalizada donde debe codificar HTML, solo puede obtener una vista previa al tener una copia del código y probarlo en su computadora o publicarlo en línea.
Dependiendo del grado de interacción que requiere un sitio web, debe descartar un CMS. Todavía puede desarrollar cualquier aplicación personalizada utilizando cualquier CMS, pero puede ser demasiado pesado para tareas simples.
Si, por ejemplo, necesita desarrollar un sitio web que consultará una gran base de datos y el usuario requiere la información al instante y esa información se actualiza con frecuencia, tendrá dificultades para usar un CMS. En su lugar, podría implementar una aplicación personalizada encargada de almacenar toda la información en una base de datos especializada y proporcionar una interfaz para consumir los datos en un servicio web que pueda utilizar una aplicación móvil, por ejemplo. Definitivamente, un CMS no es la tecnología adecuada para exponer un servicio web altamente interactivo.
Un CMS está muy vinculado a un núcleo con funcionalidades preconstruidas con las que siempre tiene que vivir. Es bueno comenzar, pero cuando comienza a escalar su sitio web y quiere implementar algo más complejo, o requiere un mejor rendimiento, siempre tendrá que vivir con eso, y hará que sea más complejo aumentar el rendimiento de la página o hacer que el sitio esté disponible para millones de usuarios.
Para escalar necesitará mezclar su arquitectura con otras capas como servidores de caché, equilibradores de carga, entre otros.
En la sección de contenido, discutimos la posibilidad de soluciones híbridas. Este es el caso de mashable.com:
“El backend y la interfaz de Mashable están desacoplados. El CMS de back-end que utiliza nuestro personal de redacción sigue siendo WordPress (aunque extremadamente personalizado). El contenido de CMS es consumido y publicado por una interfaz personalizada de Ruby on Rails.”
Chris Heald, Arquitecto en jefe @ Mashable
Un CMS como WordPress es extremadamente útil para la edición de contenido y la publicación de artículos. Si es bueno, ¿por qué debería dejar de usarlo? Si el front-end no funciona para usted, aún puede usar el backend de WordPress y crear una aplicación más óptima para servir el contenido a sus usuarios. Por ejemplo, puede administrar el contenido con WordPress y servir el contenido con Django. Para lograrlo, puede usar una biblioteca como Django WordPress API. El precio de eso es que pierde completamente la posibilidad de la edición de páginas de WordPress, pero si solo usa WordPress para publicar artículos, debería estar bien.
Hemos explicado algunas consideraciones al decidir si debe optar por un desarrollo personalizado o un CMS. Siempre puede crear un CMS personalizado o una aplicación compleja dentro de un CMS. Lo importante es que analice los factores mencionados anteriormente y, según sus objetivos y presupuesto, decida cuál es la arquitectura más conveniente para el sitio web. Las bajas barreras y funcionalidades que proporciona un CMS brindan muchas ventajas a las nuevas empresas, pequeñas empresas o empresas y organizaciones donde el sitio web no es responsable de la operación. Si está creando un sitio web interactivo, donde espera un alto volumen de transacciones y la operación depende de ese sitio web, o si sus requisitos son demasiado personalizados, debería considerar desarrollar una aplicación personalizada.
La decisión final requiere conocimientos técnicos y experiencia, y si es posible, debe obtener la información de un consultor de software experimentado.
Ahora trate de responder por qué los ejemplos al principio del artículo son malas ideas, y si aún no lo entiende, puede preguntar en un comentario.