[Caso de éxito] Uso de CakePHP en el Instituto Nacional de Educación Tecnológica

Nota: Esta es la versión en castellano de un artículo que publicado por Román Mussi en The Bakery, sitio de la comunidad de usuarios de CakePHP. Extraído del Blog de Román Mussi

Antecedentes y objetivos del proyecto

A mediados de 2008 en el Instituto Nacional de Educación Tecnológica (INET) comenzamos a evaluar el funcionamiento de los sistemas de gestión usados por la Unidad de Información del organismo. La Unidad de Información tiene a su cargo, entre otras responsabilidades, el mantenimiento de información del Registro Federal de Instituciones de Educación Técnica Profesional previsto por la Ley Nº 26.058. Se trata de un listado de aproximadamente 3.500 instituciones que imparten educación técnica profesional en todo el País. El Registro contiene, además de la información básica de cada institución (características, ubicación, dirección, teléfono, datos del director, etc.), información sobre planes de estudio, títulos y certificados emitidos, matricula de alumnos en cada plan de estudios, etc.

En ese momento la información era gestionada mediante dos aplicaciones complementarias: una aplicación Web desarrollada en Java que se utilizaba para la actualización de información, y una aplicación de escritorio desarrollada en Visual Basic 5 para la consulta de datos (usando un esquema cliente / servidor). Para la gestión de datos se utilizaba Oracle 10g.

Los desarrollos existentes eran limitados por lo que resultaba necesario realizar una serie de modificaciones y actualizaciones para facilitar las tareas del área y mejorar la calidad y cantidad de información disponible. El inconveniente era que los equipos que habían desarrollado las aplicaciones y diseñado la base de datos original ya no se desempeñaban en la institución. Por otro lado, además de heterogéneas desde el punto de vista de los lenguajes utilizados (Java, VB5), las aplicaciones existentes fueron desarrolladas sin la aplicación de patrones de diseño, estándares, o Frameworks; todos elementos que hubieran facilitado su mantenimiento y actualización.

Para resolver los inconvenientes detectados y mejorar la calidad de los sistemas en el corto y mediano plazo se elaboró un plan de trabajo que incluía:

  1. Migración de los sistemas a una nueva plataforma tecnológica (Servidor Linux Ubuntu Server, Servidor Web Apache 2, Motor de base de datos PostgreSQL, Lenguaje de programación PHP, Framework CakePHP)
  2. Rediseño de la base de datos (el modelo de datos existente presentaba muchas limitaciones)
  3. Desarrollo de una nueva aplicación que integrara los desarrollos anteriores, mejorara sus prestaciones, y posibilitara el mantenimiento y la mejora continúa.

Desarrollo

Se comenzó a trabajar en el proyecto a fines de 2008. Entre octubre y diciembre definimos la nueva arquitectura de la aplicación, realizamos el rediseño de la base de datos y elaboramos un breve diseñó de lo que debería ser la nueva aplicación, todas tareas que prepararon el terreno para el desarrollo propiamente dicho que se llevó adelante durante 2009.

En enero de 2009 se incorporaron dos personas al equipo de trabajo: un DBA y encargado de la nueva plataforma tecnológica, y un desarrollador. Es interesante destacar que el programador tenía buenos conocimientos de PHP pero no había utilizado CakePHP por lo que estuvo durante enero y febrero capacitándose en la nueva tecnología. A partir de marzo se comenzó con el desarrollo de la nueva aplicación. El ciclo total de desarrollo insumió 3 meses, de marzo a mayo. En junio la nueva aplicación fue puesta en producción en la intranet de INET reemplazando los desarrollos anteriores.

El desarrollo resultó muy exitoso. En consecuencia las autoridades de la institución decidieron reforzar el equipo de trabajo para continuar con la mejora continua de la nueva aplicación y con el proyecto de ampliar la informatización de sistemas a otras áreas del INET. Es así que en agosto se incorporaron dos nuevos programadores. Como en el caso anterior los nuevos programadores tenían buenos conocimientos de PHP y programación en general pero no de CakePHP por lo que comenzaron estudiando el Framework. Nuevamente en un lapso muy breve y menor al previsto (en poco más de un mes) los nuevos programadores se pudieron incorporar al desarrollo de la aplicación en producción sin inconvenientes. Colaboró con esta rápida integración el papel del desarrollador con más experiencia que funcionó como mentor y líder del resto del equipo.

Para 2010 se prevé ampliar el equipo de desarrollo; continuar con el mantenimiento y mejora de la aplicación desarrollada; y abordar nuevos desarrollos para áreas aún no informatizadas pero que tienen relación natural con el Registro de Instituciones (el algunos casos los nuevos programas se integrarán como módulos al desarrollo actual, en otros casos se tratará de aplicaciones separadas pero que trabajaran con la misma base de datos central).

El papel de CakePHP

CakePHP fue fundamental para el éxito del proyecto. Destacamos lo que consideramos algunas de las ventajas principales de utilizar el Framework.

Provee mucha funcionalidad útil lista para usar. Cake evita que tengamos que “inventar la rueda” cada vez. Para los problemas comunes que debemos resolver cuando encaramos un desarrollo de mediana complejidad Cake ya tiene una solución disponible. En nuestro caso las cosas más útiles fueron: autenticación (auth), manejo de sesiones, sanitización automática de datos, validación de datos a nivel del modelo. También nos resultaron muy útiles los distintos Helpers: HTML, formularios, paginación, AJAX, Javascript, etc. Y en realidad este es un listado parcial e incompleto de las utilidades disponibles. Además, si en el core no encontramos una solución siempre se pueden revisar los plugins.

Promueve el uso de estándares y patrones de diseño. El uso de Cake facilita mucho la comunicación entre programadores al establecer convenciones de programación y utilizar patrones como MVC que organizan los componentes de una aplicación. Esto resulta invalorable en el mediano plazo. Cuando no se utilizan estándares ó patrones cada programador codifica como y donde le parece correcto, lo que a mediano plazo produce muchos problemas para el mantenimiento. Ya sabemos, cada programador codifica diferente. Con Cake sabemos de inmediato y con mucha aproximación donde debemos tocar el código para modificar algo de una determinada vista o funcionalidad.

Tiene una activa comunidad. Cake tiene una gran comunidad y eso resulta valioso cuando el equipo se enfrenta a un problema difícil de resolver. Tanto las listas de distribución como la documentación en línea y “the bakery” nos han sido de gran utilidad. En este punto Cake tiene una ventaja comparativa respecto de otros frameworks de desarrollo con comunidades más cerradas o menos activas.

Como efectos de uso de Cake podemos mencionar:

Mejora la productividad. Resultó en cierta medida sorprendente la productividad del equipo de desarrollo. Si bien el desarrollo es de mediana complejidad la rapidez con que se lo pudo poner en producción es llamativa en comparación con otros proyectos de similar envergadura que hemos podido observar en nuestra experiencia previa. La facilidad con que Cake permite implementar funcionalidad de base (común a cualquier aplicación) colabora mucho en esta alta productividad.

Simplifica la incorporación de nuevos programadores. La experiencia nos ha mostrado que la incorporación de nuevos programadores se ve facilitada por el uso de Cake. El período de aprendizaje del Framework ha sido de entre uno y dos meses. Luego de este período los nuevos miembros se han logrado incorporar al equipo de desarrollo sin inconvenientes. Las convenciones, los estándares y el uso de patrones de diseño facilitan mucho la comunicación en el equipo y provee de un lenguaje técnico común y significativo. Esta característica facilita la incorporación de nuevos programadores por crecimiento del proyecto, y también permite mitigar en parte los efectos de la rotación de personal, algo que resulta muy habitual en la actualidad en este segmento del mercado de trabajo. Es casi imposible hoy por hoy evitar la perdida de algún recurso humano capacitado porque la competencia es muy fuerte. En este contexto el uso de Cake permitiría reemplazar el recurso perdido sin un impacto tan significativo como en otros escenarios.

Resulta atractivo para los programadores. En nuestro caso los programadores que se incorporaron al equipo no tenían experiencia anterior con Cake. Luego de un breve período de capacitación todos se sienten cómodos y adoptaron el Framework con interés, y varios lo comenzaron a utilizar para sus proyectos personales.

Hasta aquí entonces las ventajas que encontramos en el uso de Cake. Ciertamente muchas de esas ventajas se pueden obtener utilizando otros frameworks y hay muchos actualmente disponibles que son seguramente tan buenos como Cake. Pero en estas notas no estamos interesados en hacer una comparativa de frameworks, aquí lo que queremos es contar nuestra experiencia como un equipo de desarrollo que está “en las trincheras”, haciendo aplicaciones que son utilizadas y evaluadas cotidianamente por personal del INET. En este contexto podemos decir que CakePHP nos ha sido muy útil y ha satisfecho perfectamente las expectativas. Esperamos que nuestra experiencia sirva a otros programadores que están evaluando el uso de Cake.

Gestión del proyecto

Unas últimas palabras para poner en perspectiva la experiencia referida. CakePHP es parte importante de la solución pero no deja de ser una herramienta que cobra sentido en un contexto más amplio. También ha sido fundamental para el éxito del proyecto el uso de metodologías ágiles para la gestión. Hemos usado para ello una combinación de técnicas tomando ideas de XP y Scrum, adaptándolas a las peculiares características institucionales y los recursos del INET. El detalle de estas metodologías y sus adaptaciones exceden el contenido de estas notas pero no queríamos dejar de mencionarlo para que no quede una imagen muy simplista de un proceso tan complejo como es el desarrollo de una aplicación corporativa.

Equipo

  • Alejandro Vilar
  • Hernán Valle
  • Leandro Walker
  • Luciano Aguerre