Symfony Framework vs el reto de Viajes y Estudios

Un nuevo proyecto ha nacido. El reto fue lanzado por la empresa sevillana propietaria de la página Viajes y Estudios. En este artículo contaré como estoy ayudando a dicha empresa a mejorar su página web y ayudarles a que tengan un posicionamiento más óptimo.

El escenario

Es de todos bien sabido que en la época de aprendizaje es una muy buena experiencia pasar unas semanas en otro país para practicar el idioma y adquirir ciertas habilidades que no podrías aprender en otro lugar. En esto se basa la premisa de esta empresa, su claim «Colecciona experiencias, no cosas» es una llamada a la acción perfecta para todos aquellos estudiantes que quieren salir de España una temporada con el objetivo de viajar y aprender idiomas.

La primera vez que trabajé para Viajes y Estudios, fue en los meses de verano de 2013. Contactaron conmigo porque veían que la estética de su página web, su look&feel, no se veía todo lo clara como a ellos les gustaría y esto estaba provocando que las cifras de Google Analytics cayeran en picado. Cada vez más usuarios salían rápidamente de su web sin terminar de formalizar una reserva.

Web antigua de Viajes y Estudios
Web antigua de Viajes y Estudios

Para aquel entonces, las tendencias en el diseño web habían cambiado radicalmente y predominaba los diseños impuestos tanto por Google como por Microsoft con su «Metro Design» y la filosofía flat.

Cuando hable con ellos, querían volver a re diseñar la página sin tener que gastar tiempo en la arquitectura, vamos un lavado de cara integral. Al empezar a trabajar, me encontré con muchísimo código spaghetti que me dificultó la tarea del cambio de CSS ya que en el proyecto original no se aplicó ningún tipo de patrón de diseño de software y ni siquiera utilizaban frameworks como el tan aclamado Symfony, al parecer los desarrolladores originales no conocían las ventajas del MVC.

Pero bueno, siguiendo para adelante en la historia, aquel verano, después de leer muchísimo del código original conseguí terminar el encargo. Había cambiado toda la estética en menos de un mes y la había adaptado a lo actual, a la corriente «moderna» del diseño web.

Como podéis ver en la siguiente foto, se aprecia un cambio muy notable en el diseño de la web antigua y de la nueva en la que ahora, predominan las imágenes de gran calidad.

Nueva web de Viajes y Estudios
Nueva web de Viajes y Estudios

Pasaron los meses y con el nuevo estilo aplicado, los promotores de Viajes y Estudios me aseguraron que volvían a captar cuota de mercado. «Nuestra tasa de rebote ha disminuido en más de un 20%» me comentó una vez uno de los socios. Podéis ver que tener una estética cuidada y que sea atractiva para los usuarios es un factor muy importante para que funcione un negocio en Internet.

El reto

El nuevo trabajo que me encargaron fue que programara la página web desde cero, así que ni corto ni perezoso hice un rápido análisis de necesidades y comencé a planificar la estrategia de desarrollo. Como el año pasado leí tanto del código original ya sabia en una medida bastante exacta el funcionamiento de la página y los requisitos de su web app, tanto de la intranet de los alumnos como de la intranet de los administradores.

Así pues el primer paso después de tener el análisis de requisitos era planificar el desarrollo. ¿Seré tan macho alfa de programarlo desde cero con mi código, o me apoyaré en alguna herramienta que tanto ayuda a los desarrolladores? ¿En el caso de tirar de herramientas, utilizaré Yii, Laravel, Symfony, Zend…?

No será por ganas ni por cojones entusiasmo que me podía haber decantado por programarlo todo desde cero, pero creo, que en proyectos profesionales tan grandes como este, sobre todo por toda la lógica de negocio que hay por detrás, lo más sensato es tirar de frameworks y así es como me decidí por Symfony. Actualmente estoy trabajando en Scriptorum y lo estoy montando bajo Symfony2 así que conozco perfectamente los entresijos de este marco de trabajo.

Chan Chan, empieza lo divertido

Montar un proyecto mola, el saber configurar las herramientas en las que te vas a apoyar y que más adelante te van a facilitar el trabajo es importantísimo así como saber elegirlas con criterio claro esta. No os podéis ni imaginar lo útiles que son herramientas como Ant, Phing, Bitbucket, PhpStorm, Composer, Jenkins… en el momento en que empiezas a trabajar con ellas te das cuenta de que a partir de ese momento caerán en todos los proyectos próximos.

Tal vez, lo más «difícil» que me haya podido encontrar  haya sido el configurar correctamente un servidor Jenkins aunque no resulta tan complicado si sigues una buena guía y aplicas la lógica. Dejo para otro post las bondades de la Integración Continua así como de la instalación de Jenkins bajo Linux.

Bueno pues lo dicho, para este proyecto, estoy utilizando como marco de trabajo Symfony, como IDE PhpStorm y como gestor de código me he creado un repositorio privado en Bitbucket. ¿Quien me gestiona las dependencias? Composer, como no. Realizo las pruebas unitarias y funcionales bajo PHPUnit y despliego en local con Phing como ya he explicado en este otro artículo, aunque se podría utilizar para realizar cualquier cosa que se te ocurra. También tengo que señalar que para el frontend estoy utilizando Bootstrap ya que su gestión del «Responsive Design» me parece muy buena sobretodo porque me pasa como a muchos otros desarrolladores, odiamos las media queries.

Por ultimo, para más adelante instalaré Grunt.js y Selenium para correr aquellos test a los que no llega PHPUnit, se que estoy incumpliendo las directrices del TDD y del agilismo pero es lo que hay.

¿Porque Symfony si y PHP no?

Principalmente por el concepto de POO y de MVC. Claro que con «Flat PHP» puedes implementarlo, pero tardarías más en desarrollar lo que viene siendo el core del proyecto, además al utilizar esta herramienta te aseguras de que existe una cierta de calidad del código, no digo que seas un chapuzas ni que programes mal, yo cometo miles de fallos, pero para aspectos claves o críticos del proyecto siempre estará mejor lo que han programado un equipo de expertos y utilizan muchísimos desarrolladores a lo que puedas implementar tu solo, ¿no fiera?. Al fin y al cabo tenemos que ser conscientes que la comunidad esta para hacernos mas fácil el trabajo y que no consiste en un «yo contra el mundo».

Por segundo, como he dicho arriba con el aspecto MVC, las vistas. El sistema de plantillas que trae por defecto Symfony es Twig, me gusta mucho porque te permite tener un HTML muchísimo mas limpio. También puedes elegir otros sistemas de plantillas, puedes utilizar el hipster Handlebars.js, pero no sé, yo me siento cómodo con Twig.

La gestión de las url amigables y los redireccionamientos es la tarcera razón por la que creo que deberías utilizar no ya Symfony, sino cualquier otro framework como podría ser Zend.

Por ultimo, aunque no por ello la razón final, el sistema que tiene Symfony para manejar código reutilizado y adaptarlo a nuevos proyectos me parece brutal, es realmente sencillo instalar nuevos plugins, o como realmente se llaman bundles, además existe una comunidad muy activa que no paran de desarrollar nuevos bundles que te aliviaran todo tipo de tareas.

Creo que como conclusión final, si decides tirar de «Flat PHP», habría que plantearse cuanto tiempo se tardaría en programar únicamente estas cuatro características que he contado y ver que ventajas te aportan reinventar la rueda. Así que no lo dudes, no tengas miedo que los frameworks no muerden.

¿Y ahora…?

Para ir terminando el post, tengo que aclarar que esta entrada esta totalmente influida por esta otra y decir que en cuanto esté terminado el proyecto para Viajes y Estudios actualizaré la página correspondiente. También diré que seguiré trabajando en el desarrollo de Viajes y Estudios, seguiré trabajando en el desarrollo de Scriptorum, seguiré trabajando en otros proyectos que tengo por ahí y que por ahora no puedo contar nada y seguiré escribiendo artículos sobre todas estas herramientas. También es mi intención empezar una serie de post de tipo manual/tutorial en la que contar como montar un proyecto Symfony desde cero tal y como estoy haciendo actualmente e ir explicando todas las cositas que tiene el framework, que tiene lo suyo aunque ya sabéis que cuando un decide darse de alta como autónomo, los días deberian sentir lastima por uno y tendría que alargarse a 48 horas como mínimo, porque señores, no me da.

También hay que incluir en mi lista de tareas el aprender y mejorar las practicas sobre SEO, que ahora mismo se aplica el dicho del «Juan Palomo» y seguir aprendiendo sobre Symfony (lo sé me he enamorado) y pediros que si tenéis recomendaciones, manuales o tutoriales sobre optimización en buscadores me los dejéis en los comentarios que para algo están y que le deis a los botoncicos sociales 🙂

¡Hasta que nos volvamos a oler!