Diseño de Software: Perspectivas de UX/UI e Ingeniería
Clase 5 de 14 • Curso de Introducción a los Patrones de Diseño de Software
Contenido del curso
Clase 5 de 14 • Curso de Introducción a los Patrones de Diseño de Software
Contenido del curso
Isabela Osorio Martinez
Carlos Andres Bohorquez Duran
Chanel Mariannis Paredes Sánchez
Daniel Basulto
Josshua Fletes
Miguel Angel Reyes Moreno
Stanley Melgar
Selvin Medina
Pablo Torres Pérez
Jhoan Camacho
Kevin Daniel Guzman Delgadillo
Leyla Carmona
Omar Aguayo
Elda Margarita Urtecho Aguilar
Marco Antonio Alducin Garcia
Esaú Maximino
Jhonly Junior Garcia Pitoy
Daniel Basulto
Sergio Brandon De Lucio Chavero
Saul Hernando Echeverri Duque
Sergio Brandon De Lucio Chavero
Jorge Arias Argüelles
Josian Francisco Cáceres Suazo
Tipos de diseño
Al momento de construir aplicaciones hay dos tipos de perspectivas de diseño:
La perspectiva del equipo de UX/UI (Diseño de interfaz y experiencia del usuario, requerimientos, colores, botones, etc.)
La perspectiva del equipo de Ingeniería (Arquitectura, cantidad de personas en el equipo, esfuerzo en iteraciones, metodología, tiempos, etc.)
Características de un buen diseño Desde la perspectiva del equipo de ingeniería.
La modularidad (Pedazos de software que funcionan como código cuyas responsabilidades están bien delimitadas).
Tolerancia a fallo (Capacidades para solucionar problemas que se puedan presentar en el funcionamiento de la aplicación).
Robustez (Funcionamiento de la aplicación ante situaciones de estrés como memoria insuficiente, bases de datos llenas, peticiones altas, etc.)
Seguridad (Políticas de seguridad, credenciales, accesos, etc.)
Usabilidad(La interfaz cumple su labor? Abarca todos los casos de Uso?)
Reusabilidad (Reusar piezas de software y crecimiento del mismo)
Extensibilidad (Capacidad de integrar nuevos cambios sin tener que modificar lo ya existente)
No se si lo abarque alguno de los elemetos mencionados, pero agregaria que debe ser facil de entender si entra un nuevo integrante al equipo.
Sería algo como Legibilidad o una buena documentación?
Una buena documentacion, pero tambien la legibilidad en el codigo, los code reviews nos ayudan a aprender sobre el negocio.
Elementos del Diseño de Software 🎨
Elementos del buen diseño de Software:
Algo que me gusta hacer mucho en entornos de Node js es hacer 'export const', en vez de 'export default'. Esto es para que cuando vayan a utilizar un pedazo de código de JS o TS, lo importen de la manera en que nombré a la función, en vez de darle un nombre cualquiera.
Con eso generas consistencia a través de todos los usos de la función ~
La tolerancia a fallos es lo que el usuario percibirá de la aplicación, tenemos que mandar respuestas adecuadas para cada tipo de error, y asi como los usuarios se dan cuenta de lo que falla, nosotros deberíamos de saber si una base de datos esta caída etc, algo como un monitoring
Totalmente de acuerdo, yo en Python usualmente uso el logging. Es muy útil cuando ocurren casos especiales que no se tenían contemplados a la hora del desarrollo. Ejemplo: El usuario hizo un uso raro de la aplicación que provocó un fallo en la respuesta o finalizó antes de tiempo algo. Todo eso se puede guardar en un log y se puede verificar y corregir más fácil.
Que interesante informacion, actualmente estoy apostando por desarrollar una aplicacion y este curso me ha ayudado a esclarecer muchas dudas que tenia.
Podría ser una característica del buen diseño, la escalabilidad
Fase de diseño de Software:
Existen 2 tipos de diseño:
Caracteristicas de un buen diseño
Dónde encaja aquí scrum?
Me gustaría saber más sobre por qué lo preguntas. Porque no sé si estoy interpretando bien de dónde nace tu duda 😅 Pero aquí mis opiniones: _
Respecto a la fase de diseño bien puede decidirse bajo scrum un tiempo definido para diseñar así como para implementar, probar, etc y que de esta manera forme parte de cada sprint o bien dedicar un sprint completo a la parte de diseño previo al sprint de implementación. _ También podría ser que se use scrum para sólo la fase de diseño, eso querría decir que todos los sprints el goal estará relacionado a tener avances sólo en el diseño. _ Si lo preguntas desde el punto de vista de el día a día de lo que hace un desarrollador trabajando con scrum, pues al momento de que tú te comprometes a cumplir una tarea en tu implementación debes considerar los elementos como modularidad, tolerancia a fallos, etc porque al final eso le agrega mucho valor. Siendo scrum iterativo e incremental puede que lo que hagas en un sprint sirva para otro o aumenten los requerimientos. Un ejemplo se me ocurre que en un sprint se consideró el tráfico de usuarios de 10K al día y lo implementaste exacto para cumplir con los tiempos del sprint sin considerar la posibilidad de que pudiera llegar a 15k o más.
Yo creo que hasta si los conocía y son aplicables en cualquier proyecto de la vida diaria, no nada mas en los de software; sin embargo, yo si me imaginaba que así eran estas cuestiones y que así siempre han sido. yo no le agregaría nada mas.
La característica que se refiere a la capacidad de integrar nuevos features sin realizar cambios sustanciales en el código o en la arquitectura existente es la extensibilidad. Un diseño de software extensible permite agregar funcionalidades sin necesidad de modificar el sistema existente, facilitando la adaptación a nuevos requerimientos y mejorando la mantenibilidad del software. La extensibilidad es crucial para mantener la calidad y eficiencia en el desarrollo a largo plazo.
Seamos sinceros con lo siguiente : Entre los criterios UX/UI VS Desarrollo ¿ cúal de estos tiene la última palabra?. Abro debate !!
Diría que tambien tenemos que incluir a los encargados de producto, que urge y que no.
Basado en ello podríamos hablar sobre lo que se puede y no se puede hacer segun las posibilidades, quien cede y quien no.
En general pienso que dependerá de las condiciones del tablero jaja
Un poco de ambos, aunque al final se tiene que trabajar sobre iteraciones y basados en datos que provienen de los usuarios que al final del dia son los que usan la aplicacion.
Por mencionar, puedo comentar algunos:
Me parece que el SRP esta incluido en la modularidad mencionada en el video, pero de forma mas general.
Ciclo de vida del desarrollo de software: Enfocarse en la fase de diseño.
Perspectivas de diseño:
Características de un buen diseño:
Es una respuesta que es difícil obtener, no obstante, al momento de desarrollar se cuentan con dos (2) perspectivas:
Equipo UI
Aquí es a donde se toma en cuenta la parte de la experiencia del usuario, como va a interactuar el usuario con la aplicación, como se va a traducir un diseño a una interfaz, porque se utilizarán ciertos colores, como se le indicará al usuario que determinado objeto es un link, etc.
Equipo de Ingeniería
Arquitectura, conformación del equipo, cantidad de personas que se van a necesitar, iteraciones del proyecto, metodología que será usada, tiempos de entrega del producto.