No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Diseño de Software: Perspectivas de UX/UI e Ingeniería

5/14
Recursos

¿Qué aspectos definen un buen diseño de software?

El diseño de software es un pilar fundamental al momento de desarrollar aplicaciones exitosas y eficaces. En el desarrollo de software, encontramos dos enfoques predominantes: el diseño centrado en la experiencia del usuario (UX/UI) y el diseño técnico del equipo de ingeniería. Cada uno de estos enfoques tiene su importancia y contribuye de manera significativa al producto final.

¿Cómo influye el equipo de UX/UI en el diseño?

El diseño realizado por el equipo de UX/UI se centra en cómo interactuará el usuario con la aplicación. Se enfoca en traducir requerimientos en elementos visuales y de usabilidad. Este diseño abarca decisiones como:

  • Interfaz: Definición de la apariencia y estructura de la aplicación.
  • Flujo de interacción: Determina la secuencia lógica y funcional para el usuario.
  • Elementos visuales: Selección y organización de colores, botones, enlaces, etc.

El objetivo principal es crear una experiencia intuitiva que permita al usuario comprender y utilizar la aplicación de manera efectiva.

¿Cuál es la responsabilidad del equipo de ingeniería en el diseño?

Por otro lado, el equipo de ingeniería es responsable del diseño técnico de la aplicación. Este diseño se enfoca en aspectos como la arquitectura del software, stack tecnológico, y la organización del equipo de desarrollo. Sus decisiones impactan en cómo el software será construido y mantenido. Las consideraciones incluyen:

  • Arquitectura: Estructura completa del sistema y cómo sus componentes interactúan.
  • Stack tecnológico: Herramientas y tecnologías específicas a utilizar.
  • Metodología de desarrollo: Estrategia de trabajo para asegurar la eficiencia y calidad del producto final.

Aquí, la solidez técnica y la capacidad de adaptarse al crecimiento y cambios en el software son cruciales.

¿Cuáles son las características de un buen diseño de software?

Un excelente diseño de software debe cumplir con ciertas características que permitan su funcionalidad y éxito a largo plazo:

  1. Modularidad: Los componentes del software deben cumplir con funciones específicas y bien definidas, permitiendo así una fácil gestión y mantenimiento.

  2. Tolerancia a fallos: El software debe ser capaz de continuar operando ante eventualidades o fallos, mostrando mensajes claros al usuario y manejando datos de respaldo cuando sea necesario.

  3. Robustez: Evaluar cómo el software responde ante situaciones extremas, como alta carga de usuarios, falta de memoria o saturación en la base de datos.

  4. Seguridad: Implementar políticas rigurosas para proteger los datos y accesos del usuario, un aspecto esencial en el desarrollo actual.

  5. Usabilidad: Asegurar que la interfaz y el flujo de trabajo sean claros y simples para el usuario, facilitando la interacción.

  6. Reusabilidad: Potenciar que los componentes desarrollados puedan reutilizarse en otros proyectos, optimizando tiempo y recursos.

  7. Extensibilidad: Posibilitar la integración de nuevas funcionalidades sin tener que realizar grandes modificaciones a la estructura existente.

Estas características aseguran la creación de software adaptable, seguro, y eficaz, que satisface tanto las necesidades del usuario como las del equipo de desarrollo.

La fase de diseño es fundamental, y estas perspectivas y características se combinan para formar productos de software de alta calidad. Motivo por el cual entenderlas y aplicarlas correctamente resultará en una mejora continua y evolución en nuestra práctica como desarrolladores. ¡Sigue adelante y comparte tus ideas sobre estos temas!

Aportes 12

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

Elementos del Diseño de Software 🎨

  • UI y UX: Diseño de la interfaz, experiencia del usuario, traducir indicaciones a elementos visibles
  • Equipo de Ing: Arquitectura, Stack, Team, Tiempo, Metodologías, etc…


Elementos del buen diseño de Software:

  1. Modularidad
  2. Tolerancia a fallos
  3. Robustez
  4. Seguridad
  5. Usabilidad
  6. Reusabilidad
  7. Extensibilidad (que si se añade más código, no afecte al código previo)

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.

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

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
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.
Por mencionar, puedo comentar algunos: * SRP(Prncipio de Responsabilidad Unica). * Escalabilidad, y * Documentación.
Fase de diseño de Software: Existen 2 tipos de diseño: * La del equipo de UX/UI * La del equipo de Ingeniería Caracteristicas de un buen diseño 1. Modularidad: Todo código escrito debe ser para una sola cosa, pequeño. 2. Tolerancia a fallos: ¿Tiene el usuario conocimiento del porque pasa x error? ¿Sabemos la razón del fallo? 3. Robustez: Situaciones criticas tipo exceso de solicitudes 4. Seguridad: Politicas de seguridad. 5. Usabilidad: ¿Los datos y diseño están bien colocados y diseñados? 6. Reusabilidad: ¿El software puede ser reutilizado en otro punto? 7. Extensibilidad: Capacidad de extender el software SIN modificar mucho el código ya escrito
- **Ciclo de vida del desarrollo de software**: Enfocarse en la fase de diseño. - **Perspectivas de diseño**: - **UX/UI**: Interacción del usuario, diseño de interfaz, colores y elementos visuales. - **Ingeniería**: Arquitectura, elección de stack, conformación del equipo, metodologías, tiempos de entrega. - **Características de un buen diseño**: - **Modularidad**: Software que realiza una sola función. - **Tolerancia a fallos**: Feedback al usuario y replicación de servicios. - **Robustez**: Funcionamiento bajo estrés. - **Seguridad**: Políticas de seguridad adecuadas. - **Usabilidad**: Interfaz clara y concisa. - **Reusabilidad**: Componentes reutilizables. - **Extensibilidad**: Adaptación a cambios sin modificar lo existente.
![]()**¿Cuáles son los tipos de diseño?**![]() Es una respuesta que es difícil obtener, no obstante, al momento de desarrollar se cuentan con dos (2) perspectivas: 1. Equipo UI 2. Equipo de Ingeniería. **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.  1. **Modularidad:** Todo fragmento de software debe encargarse de hacer exactamente “una sola cosa”, al momento de ejecutar los algoritmos debe ser totalmente puntual cuya responsabilidades deben estar bien definidas y delimitadas. 2. **Tolerancia a fallos:** Consiste en darle feedback al usuario cuando algo malo pasa en la aplicación, ¿se muestra alguna notificación?, se sabe el porqué no funciona la base de datos, la tolerancia a fallos de la capacidad de solventar cualquier percance en el funcionamiento de la aplicación, ejem: dejó de funcionar la BD, si no hay problema cuenta con una réplica, dejó de funcionar un servicio, no hay problema también se cuenta con una réplica.  3. **Robustez:** Cómo funciona la aplicación ante momentos de estrés, que pasa cuando la memoria no es suficiente en los servidores, que pasa cuando la base de datos no tiene espacio, etc. El software está listo para ello.  4. **Seguridad:** Nadie quiere ser víctima de un hackeo, esto es producto de las malas políticas de seguridad, no obstante, ¿está listo tu diseño para salir al exterior?, credenciales, accesos. etc 5. **Usabilidad:** Es quizá el elemento que está más relacionado al equipo de UX, la interfaz es ¿buena?, ¿sencilla?, ¿cumple con su función?, ¿está sobre todos los casos de uso de la aplicación?  6. **Reusabilidad:** ¿Las piezas de software pueden ser utilizadas en otros espacios?, ¿se considera que el software crecerá?  7. **Extensibilidad:** Es la capacidad del software de integrar nuevos cambios sin necesidad de modificar el software ya existente.