Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Julio 2022
Página | 2
Agradecimientos
Quería dedicar este pequeño espacio a todas aquellas personas que de alguna manera me
han ayudado a desarrollar este TFG. Gracias a mis tutores David Tomás Diaz y Jose Luis
Vicedo González por marcarme siempre las pautas adecuadas y no dejarme solo en
ningún momento de estos seis meses.
Con este Trabajo de Fin de Grado se acerca el final de mi camino como estudiante del
Grado de Ingeniería Informática, por ello quiero dar las gracias a todos los profesores con
los que me he cruzado, me habéis enseñado todo lo que hoy se, en especial a Domingo
Gallardo López, por compartir su pasión por lo que hace y dejar huella en muchos de
nosotros. Gracias a todo mi grupo de amigos con los que desde el inicio comparto esta
aventura, habéis sido mi mayor apoyo. Para terminar, reconocer a mi familia su confianza
en mí, especialmente a mi madre, la persona que más ha luchado no sólo porque se cumpla
este objetivo sino también por no permitirme otro.
Página | 3
Página | 4
Índice de contenidos
Agradecimientos _____________________________________________________________ 3
Índice de figuras ______________________________________________________________ 7
1. Introducción y justificación del proyecto _________________________________________ 9
2. Objetivos ________________________________________________________________ 14
2.1. Objetivos principales ____________________________________________________ 14
2.2. Objetivos secundarios ___________________________________________________ 15
3. Metodología ______________________________________________________________ 17
3.1. Planificación __________________________________________________________ 17
3.2. Estudio _______________________________________________________________ 19
3.3. Realidad ______________________________________________________________ 21
4. Análisis de requisitos _______________________________________________________ 25
4.1. Requisitos funcionales___________________________________________________ 26
4.2. Requisitos no funcionales ________________________________________________ 28
4.3. Casos de uso __________________________________________________________ 30
5. Estado de la cuestión _______________________________________________________ 33
5.1. Booksy _______________________________________________________________ 34
5.2. Timp _________________________________________________________________ 35
5.3. Uala _________________________________________________________________ 36
6. Herramientas y tecnologías __________________________________________________ 39
6.1. Backend ______________________________________________________________ 39
6.2. Frontend _____________________________________________________________ 41
6.3. Otras tecnologías_______________________________________________________ 42
6.4. Mockups _____________________________________________________________ 43
7. Arquitectura del sistema ____________________________________________________ 47
7.1. Esquema UML _________________________________________________________ 48
7.2. Funcionamiento del sistema ______________________________________________ 55
7.2.1. Modelo ___________________________________________________________ 56
7.2.2. Vista _____________________________________________________________ 58
7.2.3. Controlador _______________________________________________________ 59
7.3. Funcionalidades del sistema ______________________________________________ 61
8. Conclusiones______________________________________________________________ 70
8.1. Leitmotiv. Ventajas y desventajas __________________________________________ 70
Página | 5
8.2. Próximas versiones _____________________________________________________ 71
8.3. Un paso más allá _______________________________________________________ 72
Referencias _________________________________________________________________ 74
Página | 6
Índice de figuras
Figura 1: Dibujo situación cliente ________________________________________________ 10
Figura 2: Dibujo situación empresa ______________________________________________ 11
Figura 3: Tablero Trello _______________________________________________________ 18
Figura 4: Tarjeta Trello ________________________________________________________ 19
Figura 5: Diagrama de Gantt. Tareas _____________________________________________ 23
Figura 6: Diagrama de Gantt ___________________________________________________ 24
Figura 7: Esquema clasificación de requisitos ______________________________________ 29
Figura 8: Caso de uso proceso de reserva _________________________________________ 31
Figura 9: Caso de uso consulta de estadísticas _____________________________________ 32
Figura 10: Web Booksy ________________________________________________________ 34
Figura 11: Web Timp _________________________________________________________ 35
Figura 12: Web Uala __________________________________________________________ 36
Figura 13: Ranking lenguajes de programación más populares de 2021__________________ 39
Figura 14: Frameworks para backend más populares de 2022 _________________________ 40
Figura 15: Mockup página registro ______________________________________________ 43
Figura 16: Mockup página inicio de sesión ________________________________________ 44
Figura 17: Mockup home clientes _______________________________________________ 44
Figura 18: Mockup estadísticas empresas _________________________________________ 45
Figura 19: Arquitectura del sistema ______________________________________________ 47
Figura 20: Esquema UML fase I _________________________________________________ 49
Figura 21: Esquema UML fase II _________________________________________________ 51
Figura 22: Esquema UML fase III ________________________________________________ 52
Figura 23: Explicación modificación servicio I ______________________________________ 54
Figura 24: Explicación modificación servicio II ______________________________________ 54
Figura 25: Patrón MVC ________________________________________________________ 56
Figura 26: Clase Company.java _________________________________________________ 57
Figura 27: Clase CompanyRepository.java _________________________________________ 57
Figura 28: Método para crear una reserva. Clase AppointmentService.java ______________ 58
Figura 29: Fragmento página detallesEmpresa.html _________________________________ 59
Figura 30: Ejemplo método CompanyController.java ________________________________ 60
Figura 31: Interfaz página servicios de empresa ____________________________________ 61
Figura 32: Panel de control. Indicadores mensuales _________________________________ 62
Figura 33: Panel de control. Pie Charts ___________________________________________ 62
Figura 34: Comparativa clientes por rangos de edad ________________________________ 63
Figura 35: Panel de control. Histórico de reservas __________________________________ 63
Figura 36: Panel de control. Histórico de nuevos clientes _____________________________ 64
Figura 37: Panel de control. Rankings ____________________________________________ 65
Figura 38: Agenda empresa ____________________________________________________ 65
Figura 39: Agenda empresa. Modificación reserva __________________________________ 66
Figura 40: Reserva modificada __________________________________________________ 66
Figura 41: Home clientes ______________________________________________________ 67
Figura 42: Home cliente. Búsqueda ______________________________________________ 67
Figura 43: Detalles empresa ____________________________________________________ 68
Página | 7
Figura 44: Crear review _______________________________________________________ 69
Página | 8
1. Introducción y justificación del proyecto
Voy a hacer una simple pregunta, ¿cuántas veces hemos tenido que hacer una reserva para
acudir a un lugar? Sin tener superpoderes, puedo afirmar que cualquier persona lo ha
hecho al menos una vez en su vida. En mi caso particular se trata de al menos una vez al
mes.
Producto de esta necesidad nace nuestra idea: crear una aplicación web para la reserva de
citas que ofrezca las siguientes características.
• Añadir citas de manera manual: en caso de que tenga que añadir él la reserva,
podrá clicar sobre un día de la agenda, introducir el cliente y el servicio.
• Autogestionar la agenda: la agenda se autogestiona para no permitir
solapamientos y mostrar las reservas de los clientes.
• Ofrecer una serie de servicios: se debe establecer qué servicios ofrece el negocio.
Estos servicios serán los que los clientes consuman.
• Obtener estadísticas: apartado para analizar la situación de la empresa. Se verán
los clientes clasificados por tipo, gráficas de ingresos, captación de nuevos
clientes, históricos de reservas…
Página | 9
El lado del negocio será la parte fundamental de este proyecto, especialmente la
manipulación de sus datos, con lo que buscamos aportar ese valor oculto a los
propietarios. Todas estas ideas han sido desarrolladas y se encuentran disponibles en un
repositorio público de GitHub (https://github.com/JoseAlberola/TFG-Voyendo) para su
consulta.
Vivimos en una época en la que todo tiene que suceder ya, y si puede ser, antes incluso.
De hecho, quizá en este periodo de tiempo haya llegado el paquete de Amazon que
compraste ayer como usuario “prime” para que llegue antes. Vivimos acelerados y
estamos inmersos en un proceso de digitalización enorme. Sin embargo, escondidos en
una esquina se encuentran los procesos de reservas.
Ahora que conocemos un poco la idea general, veamos con unos dibujos qué
comportamiento o situación queremos solucionar. Primero nos pondremos en la piel de
un cliente y posteriormente en la de un negocio.
En la figura 1 hemos querido reflejar las diferentes fases por las que pasaría un cliente de
una peluquería. En primer lugar, necesita cortarse el pelo. Ante esa situación, decide
navegar en el sistema buscando lo que necesita hasta que un negocio le llama la atención.
En ese momento decide informarse acerca de su trabajo leyendo algunas de las opiniones
Página | 10
de otros clientes y le acaba gustando. Por último, consulta su agenda, ve todos los huecos
disponibles y hace su reserva.
Este sería un flujo totalmente normal para nuestra plataforma, que pretende exactamente
eso, concentrar todos los negocios que necesiten de reserva en un mismo lugar, y, por
ende, a todos los clientes. De esta manera se consiguen ventajas para los clientes, como
es la rapidez y la flexibilidad, y para los negocios la captación de nuevos clientes de
manera indirecta.
Si nos fijamos en la figura 1 vemos una flecha verde con una interrogación. Esto indica
justo lo que acabamos de comentar, ese proceso de captación de nuevos clientes que
buscamos lograr para los negocios. Tras la búsqueda de un servicio que en un determinado
momento me ha hecho falta, he encontrado un negocio que cumple mis expectativas y
puedo repetir.
Página | 11
y se ha dado cuenta de que pierde mucho tiempo en ese proceso. Decide buscar una
solución y se encuentra con nuestra plataforma, se registra y ve todas las ventajas
disponibles. Entre esos beneficios se encuentra la gestión automática de la agenda; ahora
sólo se encargará de hacer su trabajo. Y lo más importante, cuenta con una sección de
estadísticas avanzadas acerca de su negocio para tener un mayor control y estudiar formas
de mejorar.
La idea de desarrollar una aplicación que resolviera esta problemática ronda por mi
cabeza desde hace aproximadamente un año o dos. En numerosas ocasiones he
preguntado en mi peluquería de confianza si estarían dispuestos a migrar su antigua libreta
a un sistema que les gestionara todo. Su respuesta siempre ha sido positiva. De hecho,
empecé este proyecto el verano pasado, pero lo abandoné antes de obtener ningún
resultado.
Desde entonces, he vivido muchas situaciones que me recordaban el proyecto que tenía
estancado. Hasta ahora, ya que la aplicación web de Voyendo es una realidad.
De nuevo, mi peluquero es ejemplo de estas situaciones. Hace muchos años que acudo a
la misma peluquería. Al principio se usaba el teléfono móvil. Cristian, mi peluquero,
paraba de hacer su trabajo, dejaba la herramienta que estaba usando en la mesa, iba hasta
el teléfono y lo atendía. Desde hace poco más de un año se actualizó comprando un
pinganillo que le permitiera atender llamadas a la vez que trabajaba. Sin embargo, esta
solución no era perfecta ya que aun así debía apuntar a mano la cita y, a veces, la calidad
de la llamada no era buena teniendo que colgar sin haber entendido nada.
Con esto quiero decir que muchas personas son ambiciosas y trabajan por mejorar
continuamente sus negocios. Por esta razón, como desde el principio hemos tenido un
Página | 12
enfoque en las empresas, nuestra aplicación estará orientada principalmente en ellas,
definiendo y explorando nuevas posibilidades y ventajas.
El resto de este documento se estructura como sigue: la Sección 2 presenta los objetivos
perseguidos en este TFG; la Sección 3 muestra la metodología que hemos seguido para
su desarrollo; la Sección 4 plantea los requisitos del sistema; la Sección 5 estudia las
alternativas del mercado; la Sección 6 explica las herramientas utilizadas; las Sección 7
descubre la arquitectura y funcionamiento del sistema; la Sección 8 sintetiza toda la
información.
“La mayoría de las personas gastan más tiempo y energías en hablar de los problemas
que en afrontarlos.”
Comencemos.
Página | 13
2. Objetivos
“Si no sabes dónde vas, acabarás en otra parte.”
Quizá esa frase sea la mejor aproximación de lo que vamos a tratar a continuación.
Siempre, en todo lo que hagamos, debemos ser capaces de responder a las preguntas ¿qué
queremos lograr? y ¿para qué lo estamos haciendo? Estas preguntas sirven para
marcarnos unos objetivos y no alejarnos de ellos.
Habrá momentos en los que nos desviaremos del camino y necesitaremos recordar la idea
principal. Ahí es dónde necesitamos consultar la brújula y ver hacia dónde dirigirnos.
Extrapolando todas estas ideas, vamos a determinar el camino de nuestro proyecto, es
decir, los objetivos que queremos conseguir.
Queremos desarrollar una aplicación web que sea útil a la hora de reservar cita en un
negocio, tanto para los clientes, ya que pueden reservar cuando quieran desde la web,
como para los negocios, que no necesitarán gestionar su agenda.
Cuando decimos con especial énfasis en las empresas nos referimos a que serán éstas el
centro de nuestra aplicación, ofreciéndoles funcionalidades nuevas que no tengan en otras
plataformas y que les aporten un verdadero valor. En la siguiente lista podemos ver los
objetivos que hemos tenido más presentes:
• Aplicación web funcional: lo que marcará la diferencia será que la web haga lo
que tiene que hacer, debe funcionar correctamente y cumplir con todas las
expectativas.
• Diseño atractivo y simple: siempre he sido partidario de diseños simples y
elegantes. Hacen que la aplicación en cuestión sea más usable y de fácil
adaptación, aspecto muy importante para captar todo tipo de clientes.
Página | 14
• Aportar mucho valor a las empresas en la parte de estadísticas: hay que
diferenciarse, y aportar un verdadero valor a las empresas hace que éstas quieran
migrar al sistema, lo que repercutirá en la promoción hacia sus clientes.
• Plataforma útil para clientes y empresas: por supuesto, si no se ofrece utilidad a
ambos usuarios la plataforma no será sostenible en el tiempo.
Errar en estos objetivos conlleva también errar en los principales, y por ende, en el
producto final. Por ejemplo, no aprender a utilizar correctamente la librería de Plotly se
puede traducir en unas gráficas escasas y mediocres, lo cual repercutiría en nuestro
1
https://plotly.com/javascript/
2
https://developers.google.com/maps/documentation/places/web-service?hl=es-419
Página | 15
objetivo de aportar valor a las empresas. De la misma manera con el resto. La API de
Google Maps nos permitirá ofrecer funcionalidades que harán el conjunto más potente y
útil.
Página | 16
3. Metodología
En esta sección vamos a hablar de los pasos que hemos seguido para sacar adelante el
proyecto, del proceso de aprendizaje que hemos experimentado y, en general, de qué
hemos hecho y cómo lo hemos hecho para desarrollar la aplicación web de Voyendo y
cumplir con nuestros objetivos.
Un proyecto con este nivel de importancia y dificultad hace que durante el desarrollo
vivamos situaciones más complejas de lo normal, situaciones de estrés por periodos de
entrega y por querer construir algo que de verdad sea valioso y útil. Cada persona
establece sus marcas de lo que quiere lograr, pero en definitiva, todos queremos sentirnos
orgullosos del trabajo realizado.
Como digo, este es el apartado destinado al aprendizaje, a comentar aquellas cosas que
en algún momento hacíamos mal pero que hemos cambiado, incluso las sensaciones que
nos han llevado a tomar todas las decisiones.
3.1. Planificación
A pesar de ser consciente de cómo ayuda y facilita el trabajo la planificación previa de
éste, los inicios no fueron tan organizados como me hubiera gustado. Intentaba abordar
las tareas sin ningún tipo de orden, según lo que a mi parecer era lo mejor y correcto,
hasta que llegó un punto en el que el tiempo apremiaba.
En ese punto de estrés y necesidad, involuntariamente anotaba en una libreta las pequeñas
tareas que tenía que hacer y no se me podían olvidar. Sin darme cuenta, estuve trabajando
dos semanas con lo que eran unas historias de usuario muy básicas. Eran verdaderamente
simples, pero me ayudaron en gran medida a avanzar rápidamente.
Página | 17
decidí pasar toda la planificación a Trello3, herramienta que había utilizado previamente
en numerosos proyectos pero que me resistía a utilizar por pensar que era una pérdida de
tiempo si sólo trabajaba una persona.
Quiero destacar también las etiquetas de las tarjetas. Estos colores indican la
prioridad/importancia que tiene cada tarea, siendo el verde la prioridad más baja y el rojo
la más alta. En la figura 4 podemos observar el formato de las tarjetas.
3
https://trello.com/es
Página | 18
Figura 4: Tarjeta Trello
En ellas indicamos qué queremos hacer y una serie de detalles que se deben cumplir a la
hora de implementarlas.
3.2. Estudio
Como todos sabemos, el Grado en Ingeniería Informática es un grado que requiere tener
capacidades autodidactas. Podemos encontrar información acerca de todo lo que
queremos hacer, pero debemos saber buscarla, encontrarla e interpretarla. A veces
tendremos que buscar en otros idiomas y otras veces navegar en páginas nada populares.
De eso vamos a hablar ahora, del aprendizaje que hemos vivido en los diferentes aspectos
del proyecto. Sin ir más lejos, la parte de estadísticas para las empresas supuso un gran
reto. Hasta ahora había trabajado con datos, pero nunca antes había tenido que hacerlos
valiosos. No tenía ningún tipo de experiencia haciendo gráficas ni conocía las librerías
que me ayudarían a ello, por lo que tenía que instruirme desde cero.
Al poco tiempo de estar investigando y pedir consejo a mis tutores, descubrí D3.js4, una
librería de análisis de datos muy potente que me podía servir para hacer todo lo que
4
https://d3js.org/
Página | 19
necesitaba. Sin embargo, tras buscar documentación para empezar a trabajar con ella me
di cuenta de que era muy compleja, demasiado engorrosa para lo que yo quería conseguir
y contaba con muy pocos ejemplos de código libre de los que aprender.
Esta fase constó de una semana entera de trabajo muy frustrante ya que no conseguía
ningún avance sustancial. Por esas sensaciones decidí buscar una alternativa. Encontré
algunas como Chart.js5 que a primera vista ya me parecían más simples, pero quería estar
seguro de mi cambio, lo último que necesitaba era equivocarme de elección. Seguí
buscando hasta que encontré Plotly.js, una librería construida a partir de D3.js pero que
solucionaba todos los problemas que no me gustaban y era igual de potente.
La gran ventaja que tenía Plotly.js es que se podía implementar en muchos lenguajes de
programación, y por ende contaba con muchos ejemplos en Internet, videotutoriales para
aprender a usarla y tenía un amplio abanico sobre el que trabajar. No sólo eran los típicos
gráficos, podía llegar a construir gráficos dinámicos muy potentes. Así que decidí seguir
adelante con ella, y en tan sólo tres días tras el cambio, ya había logrado tener las mismas
gráficas anteriores y terminar toda la parte básica para las empresas.
Otro de los aspectos que me gustaría destacar en lo que a aprendizaje se refiere es la parte
del frontend. Y no sólo el diseño y el trabajo con HTML y CSS, que también, ya que he
mejorado mucho mis habilidades, sino la parte de JavaScript. Mis proyectos anteriores
nunca habían tenido tanto código en JavaScript. Sabía manejarme, pero no al nivel que
algunas de las páginas requerían.
Hemos desarrollado funciones para trabajar con formatos de fechas, funciones vinculadas
a eventos para hacer la página más dinámica, funciones encargadas de la manipulación
de todos los datos que recibíamos del lado del servidor para la construcción de las gráficas
anteriormente comentadas y, además, la parte que todavía no hemos nombrado: el
calendario para mostrar el horario de una empresa y hacer las respectivas reservas.
5
https://www.chartjs.org/
Página | 20
Para esta tarea hemos utilizado el plugin de FullCalendar.js6, una librería muy popular
que cuenta con gran variedad de personalización y métodos para trabajar con ella. El
aprendizaje con esta herramienta todavía sigue avanzando, pero hasta ahora estoy muy
contento porque me ha ahorrado mucho tiempo al tener algunas de las ideas que rondaban
por mi mente ya implementadas. Por ejemplo, arrastrar eventos, clicar en ellos o incluso
crear el calendario en función del horario de la empresa. De manera muy similar que con
Plotly.js, este proceso ha sido pura investigación y búsqueda en la documentación
ofrecida por ellos mismos.
3.3. Realidad
En ocasiones no todo sale como uno espera, existen factores que nos obligan a tomar
determinadas decisiones. Ejemplo de esto es el tiempo, la carga de trabajo o la
complejidad que algo puede tener.
Nuestros primeros pasos fueron analizar el mercado para ver qué podíamos aprovechar
para marcar la diferencia, formamos una idea mental sólida sobre qué queríamos hacer y
nos pusimos manos a la obra.
Empezamos a desarrollar los requisitos para tener una imagen más clara del resultado
final. Desde el principio sabíamos las tecnologías que íbamos a utilizar, por lo que una
vez terminamos con los requisitos, construimos el que fue el primer esquema UML de
clases, que como veremos en apartados posteriores, ha ido evolucionando junto con
nuestras ideas y el proyecto. En este punto todavía no teníamos sensaciones de ir
atrasados, fue al mes de estar desarrollando cuando el proyecto sufrió un estancamiento.
6
https://fullcalendar.io/
Página | 21
Después de estar varias semanas en las que los avances eran mínimos, aparecieron las
primeras sensaciones de agobio y se hizo todo lo posible por agilizar el trabajo.
En definitiva, creo que esta estrategia fue la correcta. No hubo ningún obstáculo que nos
impidiera el desarrollo, todo era como escribir un párrafo, donde la palabra siguiente no
tenía sentido sin la anterior.
Para entender un poco las fechas de las que estoy hablando y la duración de todas las
tareas que se han ido haciendo durante el desarrollo, he creado un diagrama de Gantt [4].
Página | 22
Figura 5: Diagrama de Gantt. Tareas
La lista de tareas puede verse en la figura 5. En esta parte se enumeran las tareas, con las
fechas de inicio y su duración. Vemos que el proyecto está previsto que se termine de
desarrollar por completo el día 6 de julio, fruto de esta fecha son las sensaciones que
hemos explicado anteriormente.
Página | 23
Figura 6: Diagrama de Gantt
Página | 24
4. Análisis de requisitos
Llegados a este punto, dentro del proceso en el que nos estamos imaginando cómo
queremos desarrollar el producto final, debemos realizar un análisis de requerimientos,
es decir, definir con la mejor calidad posible las características del sistema software que
satisfagan las necesidades de negocio de clientes y usuarios.
En nuestro caso no vamos a obtener feedback de usuarios, pero sí que debemos recoger
los requisitos del sistema poniéndonos en las dos perspectivas más importantes para el
desarrollo: el negocio y los usuarios finales.
El resultado de esta tarea o actividad no es estático, ya que a lo largo del proyecto pueden
aparecer nuevos requisitos, ampliaciones, incluso eliminaciones o modificaciones de los
existentes. Vamos a llevar a cabo un desarrollo ágil, de manera que nos mantendremos
siempre en el lado de la adopción de los nuevos cambios que hagan del producto uno
mejor.
Para asegurar la calidad de los requisitos, éstos deben cumplir ciertas características:
Página | 25
• Verificabilidad: deben existir pruebas para determinar su existencia en el producto
final.
Dicho todo esto, procedamos a comentar los requisitos del sistema, clasificados según
funcionales o no funcionales.
ID Descripción Prioridad
Página | 26
Requisitos funcionales. Negocios
ID Descripción Prioridad
RF.N.3 Los negocios deben poder ver su horario y ver las reservas. Alta
ID Descripción Prioridad
Página | 27
Los usuarios deben poder establecer la visibilidad de sus
RF.U.5 Media
datos.
RF.U.6 Los usuarios podrán escribir reseñas y valorar los negocios. Baja
Los requisitos no funcionales surgen de las necesidades del usuario, debido a restricciones
en el presupuesto, a las políticas de la organización, a la necesidad de interoperabilidad
con otros sistemas, etc. Los clientes o usuarios establecen requisitos no funcionales como
metas generales, tales como: facilidad de uso, capacidad para recuperarse de los fallos o
la respuesta rápida al usuario. Es por eso que estos requisitos suelen ser difíciles de
verificar y más críticos que los requisitos funcionales.
En nuestro caso, vamos a seguir la misma clasificación que se hace en el libro Ingeniería
del Software [1]. En esta clasificación se establecen 3 categorías principales, de las que
después surgen otras más específicas.
Página | 28
Figura 7: Esquema clasificación de requisitos
ID Descripción Prioridad
Página | 29
El sistema debe de estar disponible siempre, alcanzando una
fiabilidad mínima de un 90% del tiempo de funcionamiento
RNF.P.3 Alta
sin fallos, estando disponible las 24 horas del día todos los
días.
Los tiempos de respuesta deben estar siempre dentro de una
RNF.P.4 Alta
franja razonable de espera.
El sistema debe de ser escalable en función al número de
RNF.P.5 Media
accesos simultáneos.
ID Descripción Prioridad
ID Descripción Prioridad
Los diagramas de casos de uso fueron concebidos por I. Jacobson y describen una
interacción entre un agente externo (al que se llama actor) y el sistema. Estos diagramas
Página | 30
permiten definir los límites del sistema, sus relaciones con el entorno y, además, nos dejan
ver qué hace el sistema, pero no cómo lo hace.
Nosotros nos hemos centrado en dos situaciones que serán muy comunes una vez que el
sistema esté en funcionamiento: la reserva de citas por parte de los usuarios y la consulta
de estadísticas por parte de los negocios. Estos diagramas han quedado así:
1. Proceso de reserva
Lo que se quiere reflejar en la figura 8 es el proceso que un usuario normal debería seguir
a la hora de hacer una reserva.
En primer lugar, tendrá que buscar qué quiere reservar. Después, de toda la lista de
negocios que ofrecen ese servicio, deberá elegir el que más se ajuste a sus necesidades.
Hecho esto, verá información de ese negocio más detallada y en caso de todavía querer
reservar, tendrá que elegir un hueco disponible en el horario y finalmente, completar su
reserva.
2. Consulta de estadísticas
Página | 31
Figura 9: Caso de uso consulta de estadísticas
Del lado de los negocios, hemos plasmado de manera simplificada qué posibilidades
tendrían a la hora de consultar sus estadísticas.
Como vemos en la figura 9, estos tendrían algunas opciones que estarían siempre
habilitadas, que serían aquellas estadísticas que se generan a partir de sus propios datos.
Sin embargo, de manera opcional y habilitando su cesión de datos al sistema, podrían
optar a análisis más completos y que además están vinculados con todos los datos de otros
negocios para poder observar comparaciones y avances en su sector.
Página | 32
5. Estado de la cuestión
En los últimos años hemos vivido un impresionante auge en la tecnología, pero no sólo
en cuanto a avances, sino también en la adopción de esta. Además, la situación provocada
por el Coronavirus ha hecho que este crecimiento sea exponencial.
La mayoría de nosotros, para reservar cita con nuestro peluquero, por ejemplo, tenemos
que llamar al negocio y seguir una conversación que básicamente se resume en algo
similar a lo siguiente:
Esta conversación será en la mayoría de los casos de tan sólo 1 minuto o 2, pero ¿por qué
no automatizar este proceso? De lograr eso, evitaríamos que el peluquero dejara de
trabajar para atender el teléfono y perdiera tiempo con la llamada. De la misma manera,
el cliente podría ver qué huecos tiene disponible el negocio al que desea ir y reservar en
el momento más adecuado para él, y todo esto sin hablar de las cancelaciones. Es en la
resolución de este problema dónde aparece la idea de negocio para hacer reservas online.
Algunas empresas ya han desarrollado aplicaciones que cubren estas necesidades, pero
como es normal, cada una de ellas tiene algún aspecto diferenciador.
Página | 33
5.1. Booksy7
FUNCIONALIDADES DESCRIPCIÓN
Distintos idiomas
Aplicación móvil
7
https://booksy.com/en-es/
Página | 34
Herramientas para mandar mensajes, promociones e
incluso Boosts (mejor posicionamiento en la app)
Seguimiento de rendimiento (estadísticas de tu propio
negocio)
Servicio Pro con funciones más avanzadas como la gestión
de empleados e inventario
5.2. Timp8
FUNCIONALIDADES DESCRIPCIÓN
Aplicación móvil
8
https://www.timp.pro/
Página | 35
Métricas con datos internos del propio negocio (captación de
usuarios, pagos, gasto medio por cliente…)
Exportar datos
Control de empleados
Bonos y mensualidades
5.3. Uala9
9
https://www.uala.es/
Página | 36
FUNCIONALIDADES DESCRIPCIÓN
Sistema de pagos
Gestión de inventario
NEGOCIOS
Venta de productos
Poniendo el foco sobre los negocios, hemos visto que ninguna de las opciones anteriores
ofrece a los negocios la posibilidad de consultar estadísticas generales, es decir, sus
propios datos frente a los datos de los negocios de su mismo sector. Con esto, podríamos
ofrecer a los comercios estadísticas muy interesantes. Por ejemplo:
Página | 37
• Su coste frente al del resto de empresas del sector
• Servicios populares en la zona
• Negocios líderes de la zona
• Cantidad de clientes por tipología (edad, sexo…)
Por lo tanto, nuestro sistema va a estar centrado sobre todo en la parte de los negocios, y
más aún en la muestra de estadísticas útiles y de calidad para ellos.
Página | 38
6. Herramientas y tecnologías
Una parte fundamental a la hora de desarrollar un proyecto software es la elección de las
tecnologías que se van a usar. Estas elecciones son muy importantes y marcarán en gran
medida no sólo el resultado final, sino también el proceso de desarrollo y el
mantenimiento posterior. En esta sección veremos qué herramientas hemos elegido usar
frente a otras y los motivos que nos han llevado a ello.
6.1. Backend
Para la parte del backend de nuestra aplicación web hemos decidido que el lenguaje de
programación que vamos a utilizar sea Java. Se trata de una aplicación web, y en ese
sentido, Java es muy potente y nos aporta muchas facilidades. Sin embargo, no debemos
limitarnos al lenguaje que usaremos. Desde mi punto de vista, actualmente existen
infinidad de herramientas complementarias y que aportan mucho valor añadido al
lenguaje.
Es por ello que, más que elegir un lenguaje de programación, tenemos que elegir un
entorno. Y para mí, la mejor opción es la combinación de Java junto a Spring Boot como
framework. Java es un lenguaje muy robusto, multiplataforma, y muy demandado, algo
que he valorado mucho en mi elección. La figura 13 muestra estadísticas de los lenguajes
de programación más populares de 2021. Se trata de unas estadísticas muy completas que
comparan diversas fuentes, dónde vemos dos índices y dos de las plataformas más usadas
entre los desarrolladores, Stack Overflow y Github. Java está en las primeras posiciones
en todos los rankings.
Página | 39
¿Y por qué utilizar Spring Boot? Spring Boot es rápido, evitando tener que configurar
contenedores y servidores web Apache Tomcat, permitiendo tener la estructura de tu
aplicación y tener todas tus dependencias en un formato legible en un archivo POM para
su gestión Maven, además de la conexión a tu base de datos.
Con Spring Boot es rápido desarrollar y es rápido ejecutar. Las aplicaciones hechas con
esta tecnología están optimizadas para altas cargas de trabajo con un mínimo consumo de
memoria, creando sistemas óptimos para entornos web con miles de peticiones por
segundo. Además, este framework tiene un gran ecosistema y también se encuentra entre
los más usados, concretamente en el top 6 de los frameworks para backend más populares
de 2022, como podemos ver en la figura 14.
Una vez que sabemos que queremos desarrollar el proyecto con Java y Spring Boot,
surgen otras dudas que debemos resolver, como por ejemplo la base de datos y su acceso.
Como hemos dicho anteriormente, Spring Boot ofrece un amplio abanico de opciones en
todo su ecosistema y nosotros hemos optado por Spring Data JPA. Spring Data JPA
facilita la construcción de aplicaciones impulsadas por Spring Boot que utilizan
tecnologías de acceso a datos.
Página | 40
Utilizaremos una base de datos SQL. Durante el desarrollo trabajaremos con la base de
datos de memoria H210 y cuando estemos en producción usaremos MySQL. Este cambio
lo llevaremos a cabo gracias a los perfiles de configuración.
6.2. Frontend
Quizá sea, sin darnos cuenta, uno de los aspectos más determinantes a la hora de que
nuestro producto final triunfe o no. Y no hablamos de que esta cuestión pueda hacer que
el proyecto fracase por cuellos de botella en el trabajo o por una mala decisión de
arquitectura, sino por los usuarios finales.
Muchos estudios realizados al respecto [2] demuestran que la apariencia de una web
determina el comportamiento de los usuarios en ella:
Y existen muchas más afirmaciones. Por esta razón debemos esforzarnos en crear un sitio
web que sea atractivo, fácil de usar y amigable para todo tipo de usuarios.
En nuestro caso, para realizar esta labor hemos decidido combinar el motor de plantillas
Thymeleaf11 junto a la librería de Bootstrap12. Hemos trabajado con ambas herramientas
previamente y pensamos que la curva de aprendizaje de otras opciones presentes como
Angular13 o React14 sería demasiado para el proyecto. Estas herramientas nos permiten
10
https://www.h2database.com/html/quickstart.html
11
https://www.thymeleaf.org/
12
https://getbootstrap.com/
13
https://angular.io/
14
https://es.reactjs.org/
Página | 41
hacer todo lo que tenemos en mente y en el caso de Bootstrap, es una librería muy
reconocida y extendida mundialmente.
15
https://git-scm.com/doc
16
https://www.adobe.com/es/products/xd.html
17
https://www.microsoft.com/es-es/microsoft-365/project/project-management-software
18
https://cloud.google.com/gcp/
19
https://maven.apache.org/
20
https://junit.org/junit5/
21
https://www.jetbrains.com/es-es/idea/
Página | 42
6.4. Mockups
A lo largo de mi vida como estudiante he desarrollado muchos proyectos, tanto en equipo
como individualmente, y una de las cosas que he aprendido es que aquellos trabajos en
los que previamente hacíamos mockups siempre nos permitían avanzar más rápido y
evitaban ambigüedades. Además de que, en este caso, los mockups también han servido
como mecanismo para consensuar el diseño y la funcionalidad con los tutores del trabajo
antes de pasar a la implementación.
Y es que siempre sucedía lo mismo, cuando programábamos sin tener una guía
aproximada del resultado que queríamos conseguir (en cuanto a apariencia se refiere)
perdíamos mucho tiempo intentando crear un buen diseño. Por no hablar de que cuando
el proyecto era en equipo y cada miembro tenía una tarea diferente. Sin estos mockups
era casi imposible crear una web completamente cohesionada. El uso de mockups nos
permite solucionar todos estos problemas.
La figura 15 corresponde con la página de registro. En ella ya podemos ver que los
clientes y los negocios se registran de manera diferente, introduciendo los datos
correspondientes. También nos damos cuenta de que el diseño de la web girará en torno
a colores azules, colores vivos y se mostrará simple y elegante.
Página | 43
Figura 16: Mockup página inicio de sesión
Página | 44
Esta interfaz corresponde al home, a la página principal de los usuarios que se registren
como clientes. Como vemos, tenemos un menú en la parte superior con las principales
acciones:
En la parte inferior al menú tenemos un buscador en el que podremos buscar por categoría
de negocio que necesitamos, por nombre del servicio que buscamos e incluso por
ubicación, siendo todos estos filtros combinables.
Finalmente, vemos un listado con los resultados que cumplen los requisitos del buscador.
Las cartas que muestra este listado siempre serán de negocios, no del propio servicio.
Para finalizar con los diseños, veamos uno de la parte de los negocios.
Página | 45
Este es el panel de control de las empresas. Como vemos, consiste en una serie de gráficas
acerca de los datos que tiene el sistema. En la parte superior tenemos unos números que
pueden resultar muy útiles para analizar el progreso del negocio y en la parte inferior
gráficas que trabajan ya con esos datos.
Esta vista no está completa ya que como sabemos de puntos anteriores, existe la opción
de compartir tus datos al sistema y recibir así análisis comparativos con los datos que
otras empresas también han cedido. En resumen, la parte que vemos sería lo que todas las
empresas podrían ver, pero si hacemos scroll hacia abajo, habilitando previamente la
opción para compartir los datos, veríamos otra serie de gráficas.
Con estos cuatro diseños tenemos suficiente como para marcar las directrices principales
en cuanto a diseño y poder hacer una web que sea coherente en cada una de sus páginas.
Página | 46
7. Arquitectura del sistema
En esta sección hablaremos del funcionamiento del sistema. Vamos a analizar su
arquitectura, detallaremos cada una de sus partes y nos adentraremos posteriormente en
lo que para mí ofrece mayor claridad a la hora de intentar comprender un sistema
software: el diagrama UML de clases.
Para la arquitectura de nuestro sistema hemos decidido seguir el patrón MVC, sobre el
que profundizaremos más adelante, pero, de momento, veamos el diagrama del sistema
al completo para ser más conscientes de este.
Página | 47
puede utilizar esos datos para enviarlos al motor de plantillas a través de la Interfaz Model
de Spring. Nosotros hemos utilizado Thymeleaf como motor de plantillas, este recoge las
variables de la interfaz y las interpreta en la vista HTML. Por último, retornamos al
usuario la página de la URL que había consultado.
La figura 20 muestra el primer modelo de nuestro esquema. A simple vista puede parecer
correcto. De hecho, en los pasos iniciales lo era, hasta que nos dimos cuenta de que
necesitábamos más atributos en determinadas clases o, simplemente, nuevas clases para
extender y completar el sistema.
Página | 48
Figura 20: Esquema UML fase I
Para ser sinceros, este diagrama nos permitió avanzar bastante. Las ideas principales
habían quedado claras y gran parte del código se podía implementar con esa base.
Uno de los conceptos más importantes que tuvimos que aclarar en esta etapa inicial fue
la estructura que queríamos que tuviera uno de los pilares del proyecto: las reservas. Esta
idea consiste en lo siguiente: imaginemos que somos una peluquería. Como peluquería
podemos ofrecer varios servicios (corte de pelo, recorte de barba, tinte…) donde cada uno
tiene unas propiedades diferentes (duración, precio…) Esto queda reflejado en la clase
“Labour”, siendo una composición de “Company”. Toda “Company” tendrá una o más
“Labours” y cada “Labour” pertenecerá a una “Company”.
Por otro lado, la clase “Appointments” trata de albergar aquellas citas que se han
materializado. Es decir, cuando se asigna un servicio de una “Company” a un determinado
“Customer”. Esta reserva por supuesto contará con atributos propios como son la fecha y
el periodo de tiempo.
Página | 49
Gracias a esta arquitectura podemos hacer lo siguiente:
Después de unas semanas trabajando con el esquema UML de la figura 20, llegamos a la
situación en la que una empresa creaba una reserva. En ese momento vimos que nuestro
esquema no contemplaba la opción para que la empresa pudiera crear una reserva para un
cliente que no estuviera registrado en el sistema.
Meditamos múltiples alternativas hasta que finalmente nos decantamos por el diagrama
mostrado en la figura 21.
Página | 50
Figura 21: Esquema UML fase II
La otra opción que pensamos fue establecer la herencia en la clase “Customer”, pero
detectamos un problema en esa solución. Tendríamos que almacenar clientes que no están
en el sistema y no se van a volver a utilizar ya que con cada reserva de invitado la empresa
pondría un nombre diferente. Con la solución planteada logramos avanzar y mantener la
misma idea general que teníamos acerca de las reservas.
Página | 51
Además, en la figura 21 se ha añadido un campo en la clase “Company”. Este campo es
el de “premium” e indica aquellas empresas que han habilitado la opción de cesión de sus
datos.
En este esquema hay dos cambios principales: el nuevo campo “activated” en la clase
“Labour” y la nueva clase “Review”.
Página | 52
A primera vista el campo “activated” que hemos añadido puede parecer insignificante,
pero determina factores muy importantes de nuestra arquitectura. Hasta este momento,
los negocios podían tener el número que quisieran de servicios, pero quisimos limitar este
número y darles únicamente cinco. De esta manera, un negocio sólo podrá tener cinco
servicios con el valor “activated” a “true” y estos cinco servicios serán los únicos que se
pueden reservar. Pero la función de este campo no es sólo esa, sino solucionar los
problemas de borrado y modificación de servicios.
Para aclarar esta idea, en los siguientes dibujos explicamos la misma situación.
Página | 53
Figura 23: Explicación modificación servicio I
Como vemos en la figura 23, contamos únicamente con cinco servicios activados, donde
el servicio 1 tiene vinculadas tres reservas. El servicio 1’ (rojo) representa la modificación
que el negocio ha hecho al servicio 1 (azul).
Página | 54
Así quedaría el sistema tras la operación de modificación. Hemos creado un nuevo
servicio (servicio 1’) que reemplaza la posición del antiguo (servicio 1) sin modificar en
absoluto las reservas hechas. De ahora en adelante no se podrán hacer reservas con el
servicio 1, únicamente con aquellos que estén activados.
Para finalizar con los cambios que ha traído este nuevo diagrama hablaremos de la nueva
clase “Review”, encargada de albergar todas las opiniones que los clientes tengan sobre
los negocios. Esta clase cuenta con el texto del comentario que el cliente haga y su
valoración. Destacar que un cliente sólo puede tener una opinión para un negocio, que
podrá editar y eliminar.
Página | 55
Figura 25: Patrón MVC
7.2.1. Modelo
Contiene una representación de los datos que maneja el sistema, su lógica de negocio, y
sus mecanismos de persistencia.
Nuestra implementación de esta capa está dividida en dos paquetes: model y service. El
paquete model contiene las entidades JPA, que utilizan tecnologías de acceso a datos para
poder determinar el esquema de la base de datos y hacer consultas a ésta. De esta manera
los objetos Java de este paquete estarán vinculados a la base de datos y podrán operar
sobre ella. Por ejemplo, para guardar una nueva empresa:
companyRepository.save(company)
Página | 56
Figura 26: Clase Company.java
La figura 26 muestra una parte de nuestra clase Company, la cual utiliza anotaciones de
Spring Data JPA para declarar que es una entidad, sus respectivas columnas y las
relaciones que tiene con otras entidades, como por ejemplo con Appointment a través de
ese Set.
Página | 57
En la figura 27 podemos observar la clase “repositorio” de la entidad Company. Esta clase
es la encargada de establecer el vínculo con la base de datos y es la que hace todas las
llamadas. Desde ella invocamos a las funciones para hacer consultas, actualizar, eliminar
o crear.
El paquete service contiene toda la lógica de negocio vinculada a cada clase. Un ejemplo
de esto sería comprobar que no haya solapamientos al crear una nueva reserva.
7.2.2. Vista
Compone la información que se envía al cliente y los mecanismos de interacción con éste.
Página | 58
• Recibe datos del modelo y los muestra al usuario.
Esta parte consta de nuestras plantillas HTML que trabajan con el motor de Thymeleaf.
El controlador recibe los datos del modelo y se encarga de enviarlos a las plantillas para
que éstas se lo muestren al cliente.
Esta comunicación la hemos hecho principalmente con la interfaz Model del framework
de Spring. A través de ella mandamos las variables a las plantillas y después trabajamos
con ellas con Thymeleaf, que nos permite escribir código HTML dinámico en función a
estas variables.
7.2.3. Controlador
Actúa como intermediario entre el Modelo y la Vista, gestionando el flujo de información
entre ellos y las transformaciones para adaptar los datos a las necesidades de cada uno.
Página | 59
• Contiene reglas de gestión de eventos. Estas acciones pueden suponer peticiones
al modelo, a las vistas o a ambos.
Recibe todo tipo de interacciones que haga el usuario: la carga del contenido de las
páginas, la solicitud de datos a través por ejemplo de un buscador o el envío de
información mediante un formulario. Todas estas acciones desencadenan una petición
que gestiona el controlador y se encarga de realizar las respectivas llamadas tanto al
modelo como a la vista.
Simplemente comprobamos que el negocio esté logueado y que exista, hecho esto
procedemos a enviar las variables a la plantilla para que ésta pueda trabajar con ellas.
Página | 60
Figura 31: Interfaz página servicios de empresa
En la figura 31 vemos los valores de cada uno de los servicios, la empresa que está
logueada y, si pulsamos en editar, se abre un modal con los datos del servicio en cuestión
cargados.
Dicho esto, comenzaremos del lado de las empresas, sobre todo con su panel de control,
el cual cuenta con las siguientes características:
Página | 61
1. Indicadores mes actual comparado con el anterior
En la figura 32 vemos la parte superior del panel de control, donde tenemos cuatro
indicadores que reflejan una comparación del mes actual con respecto al anterior. Estos
indicadores sirven para conocer de un vistazo muy rápido la situación del negocio.
Contamos con cuatro tipos: reservas totales; ingresos totales; clientes totales; nuevos
clientes.
2. Gráficos circulares
En la parte inferior de la figura 33 vemos tres gráficos circulares, en los que comparamos
con respecto al total de la empresa todas las variables que vemos: los clientes por género;
los clientes por rangos de edad; el número de citas por cada servicio. Además, estas
gráficas nos permiten hacer las comparaciones que necesitemos, de manera que, si
Página | 62
queremos comparar únicamente dos rangos de edad, podremos hacerlo. La figura 34
muestra el resultado.
Página | 63
En la figura 35 vemos el histórico de reservas de la empresa. Cada línea representa uno
de sus servicios, y en cada mes vemos un pico que indica la cantidad de reservas en ese
mes. Este gráfico permite movernos en el tiempo y establecer los periodos de tiempo que
queramos para obtener una perspectiva global. De la misma manera podemos seleccionar
sólo algunos de los servicios y compararlos entre ellos. Esta gráfica puede ser muy útil
para detectar los meses con menos reservas, entender el porqué, e intentar solucionarlo o
quizá, en base a eso, tomar los días libres en esas fechas.
El gráfico que vemos en la figura 36 es una línea acumulativa que indica los nuevos
clientes que hemos captado en cada mes. De manera que podemos saber si estamos
realizando una buena actividad de captación o nos encontramos estancados y necesitamos
algún tipo de promoción. Si buscamos hacer crecer nuestro negocio esta gráfica puede ser
muy conveniente, ya que refleja nuestro avance en cuanto a nuevos clientes.
Página | 64
Figura 37: Panel de control. Rankings
Página | 65
En la figura 38 se muestra la agenda de un negocio. Vemos todas las reservas del mes de
mayo y las funciones que ofrece el propio calendario para mostrar otras vistas (mensual,
semanal, diaria o modo agenda). Desde esta vista tenemos una perspectiva global de todas
las reservas y, además, es desde dónde podemos crear nuevas reservas, modificar y
cancelar. Veamos un ejemplo de modificación.
La figura 39 muestra la interfaz cuando hemos clicado sobre una de las reservas del
calendario. Podemos ver los valores de esta reserva y haríamos el cambio necesario.
Página | 66
Ahora vamos a pasar al lado de los clientes para ver algunas de sus funcionalidades:
1. Búsqueda de empresas
La figura 41 muestra el home de los clientes. Se trata de un buscador con cuatro campos
opcionales, podemos buscar según lo que queramos. Al entrar se mostrarán todas las
empresas disponibles con una paginación en la parte inferior. Podemos, por ejemplo,
buscar todas las peluquerías que estén cerca de Aspe y tengan hueco para el día
15/07/2022.
Página | 67
Como vemos, la figura 42 muestra los resultados del ejemplo, en este caso sólo existen
tres empresas que cumplan los requisitos: ser una peluquería; estar a menos de 30
kilómetros de Aspe; tener un hueco el día 15/07/2022.
Al clicar sobre una de las empresas, veríamos su página. La figura 43 muestra la página
de la barbería Rapiño, donde vemos sus valoraciones (una vista general y en la parte
inferior todas ellas con paginación), su información con todos los servicios que ofrece y
desde aquí, podemos crear una review o hacer nuestra reserva.
3. Opinar
Página | 68
Figura 44: Crear review
En la figura 44 vemos el pop-up para crear una review. Como sabemos, sólo podemos
hacer una review a cada empresa, por lo que sólo podríamos editarla o eliminarla.
4. Reservar
El proceso para reservar es muy similar al que hacen las empresas, tal y como se muestra
en las figuras 38 y 39, seleccionan un día e introducen los datos.
Página | 69
8. Conclusiones
Tras mucho trabajo podemos decir que ya estamos llegando al final. En esta última
sección resumiremos todo el contenido del documento, resaltaremos las ideas principales
y al final, antes de acabar, me gustaría comentar mis últimos pensamientos. Hablaré sobre
qué mejoras podríamos hacer a la aplicación, diferentes usos que hasta ahora no hemos
nombrado y funcionalidades que por desgracia han quedado en el tintero.
Esta idea es la principal virtud del sistema y la que lo hace resaltar sobre las alternativas
existentes. La aplicación es muy sencilla de utilizar e intuitiva, guiada por el objetivo de
hacer reservas, los clientes en tan sólo 5 clicks pueden llegar a reservar y los negocios
cuentan con una interfaz basada en una agenda muy avanzada y un panel de control para
las estadísticas muy completo y útil.
Como desventajas del sistema tenemos el reducido número de funciones que tienen los
clientes. Sólo pueden ver sus reservas, buscar servicios, consultar empresas y reservar.
Siento que falta algo para fidelizar a los clientes y conseguir que esta aplicación se
convierta en una herramienta de su día a día. Quizá un sistema de puntos con los que
conseguir descuentos, funciones para programar reservas, notificaciones cuando se
acerque la fecha de la reserva o haya una cancelación…
Página | 70
En definitiva, se trata de potenciar esta parte, ya que ha podido quedar un tanto escasa.
Por otro lado, está el perfil de administrador, idea que no surgió hasta momentos
avanzados del desarrollo, en los que ya no quedaba tiempo suficiente para desarrollar.
Este perfil hubiera sido realmente útil y, para ser sinceros, sí que puede llegar a afectar la
experiencia con la aplicación. Podría ser el encargado de bloquear usuarios, crear nuevas
categorías de negocios e incluso eliminar reviews. En definitiva, gestionar el sistema.
Considero que debería ser lo primero a expandir por el valor que trae consigo.
En esta sección estamos hablando de cosas que se podrían mejorar con respecto a lo que
hemos hecho o teníamos pensado hacer. La tercera y última cosa que quiero resaltar es la
apariencia de la web. No he quedado realmente feliz con el resultado en cuanto a
apariencia se refiere. Para nada es fea ni estoy descontento, tan sólo es el no haber sido
capaz de proyectar la asombrosa imagen mental que tenía. Me he dado cuenta de mis
limitaciones con HTML, CSS y Bootstrap. He perdido mucho tiempo tan sólo para alinear
elementos y he sido incapaz de hacer determinadas cosas.
Página | 71
8.3. Un paso más allá
Quizá ese sea el paso que determine el grado de éxito, y yo desde luego que estoy
dispuesto a darlo. Como siempre, valoramos las cosas y vemos el verdadero potencial de
algo cuando estamos inmersos en ello, cuando ya hemos recorrido una parte del camino.
Ciertamente, cada uno de nosotros vive su vida de una manera diferente, y por ello yo
sólo puedo explicar mi punto de vista. Desde mi perspectiva, puedo decir que a lo largo
de mi vida he hecho numerosas reservas, y me quedan todavía más. Hemos hecho mucho
hincapié en las peluquerías porque son el ejemplo más cotidiano, pero podemos ir más
allá. Este sistema podría ser perfectamente un estándar en el mundo de las reservas. Un
sistema donde se pudiera reservar pista de pádel en un polideportivo, mesa en un
restaurante, butaca en un cine, cita en un estudio de tatuaje, despachos de abogados,
consultas de psicólogos, comisarías, ayuntamientos…
Puede ser tan potente como queramos y, tomando una idea muy general, se puede llegar
a construir un sistema que satisfaga las expectativas en todas esas situaciones.
Comparemos el ejemplo del cine con el de las peluquerías, que ya somos expertos. Un
cine puede tener varias salas. Esto sería lo mismo que una peluquería en la que trabaja
más de un peluquero. Además, cada sala tiene un número determinado de butacas, opción
que se puede adaptar estableciendo un número de personas por servicio. En la peluquería
será uno, pero en el cine será el número de butacas. El cine ofrece películas, mientras que
la peluquería ofrece cortes de pelo. Un polideportivo tiene muchas pistas, sólo puede
reservar la pista una persona, sus servicios serán los deportes de cada pista. Una comisaría
tiene muchos departamentos, pueden reservar a la vez tantas personas como trabajadores
de ese departamento haya y sus servicios serán los diferentes procesos.
Página | 72
Todo se puede vincular, y, tras todos estos meses trabajando en este proyecto, he llegado
a la conclusión de que se puede construir una aplicación estándar que reúna lo principal
de cada nicho.
Esta es una pequeña síntesis de este paso tan importante del que hablamos:
Con esto me gustaría llamar a la reflexión individual de cada uno, para que penséis en
aquellas reservas que este sistema podría haber facilitado y en la importancia de tener una
plataforma que agrupe en un mismo lugar una gran cantidad de negocios y servicios que
la sociedad consume.
Para finalizar, he de decir que me siento muy orgulloso del trabajo realizado, agradecido
de los obstáculos que sobrepasé por enseñarme los trucos para hacerlo de nuevo y feliz
por ver todo lo que he aprendido a lo largo de este tiempo.
Espero haber explicado correctamente cada uno de los temas tratados, espero haber
logrado mostrar todos mis pensamientos durante el proceso, que os haya parecido
interesante el proyecto y, lo más valioso para mí, que os haya gustado.
Un placer.
Página | 73
Referencias
[1]. Sommerville, Ian, 2011. Ingeniería de software. Pearson educación, Novena edición.
Capítulo 4: Ingeniería de requerimientos.
https://sistemamid.com/panel/uploads/biblioteca/2018-06-11_03-37-12144643.pdf
[2]. Jonas Sunico. 30 Astonishing Website Design Industry Statistics for 2022.
https://websitebuilder.org/blog/website-design-industry-statistics/
Página | 74