Existe una concepción general entre muchos usuarios y clientes comerciales de que cuando parece completa, está casi completa. Como probablemente sepa, esto está lejos de la verdad. Uno puede hacer que se vea bien, pero sin backend y algunos usuarios piensan que hacer que se vea bien es el 80% del trabajo, no el 20% ( o el otro 80% ).
Innumerables desarrolladores pueden contar historias de horror sobre esto: obtener una maqueta de las páginas en Microsoft Word utilizando capturas de pantalla de alguna otra herramienta, y el cliente dice "¿casi lo has hecho?"
Debe ajustar el ritmo para que todas las partes estén listas cuando esté hecho. Intentar hacer todo el backend primero y luego todo el front end hará que el usuario final piense que no está haciendo nada y le pregunte por qué le pagan cuando no hay nada que mostrar. Por otro lado, el front end primero y encontrará al usuario final haciendo cambios insignificantes y consumiendo todo nuestro tiempo.
El peor de los casos con un 'uno primero y el otro' es cuando llegas a la otra parte, descubres que no encaja en absoluto con el diseño.
Por lo tanto, construye ambos. Muestre el progreso en el front-end, haga que el back-end funcione con lo que está construyendo. En muchos casos, es una buena idea entregar compilaciones incrementales y asegurarse de que está haciendo lo que el cliente quiere (esto entra en Ágil). Pasar demasiado tiempo sin 'avances visibles' puede dañar la relación con el cliente (esto es para ambos casos de 'todo parece hecho temprano' y 'nada se hace hasta el final' - es difícil para el cliente ver que se está escribiendo el marco o las pruebas unitarias o la desinfección de datos como progreso).
Joel escribió sobre esto en The Iceberg Secret, Revealed :
Corolario importante dos. Si le muestra a un no programador una pantalla que tiene una interfaz de usuario que es 100% hermosa, pensarán que el programa está casi listo.
Las personas que no son programadores solo están mirando la pantalla y viendo algunos píxeles. Y si parece que los píxeles forman un programa que hace algo, piensan "oh, Dios, ¿cuánto más difícil podría ser hacer que realmente funcione?"
El gran riesgo aquí es que si se burla primero de la interfaz de usuario, presumiblemente para poder mantener algunas conversaciones con el cliente, entonces todo el mundo pensará que ya casi ha terminado. Y luego, cuando pasas el próximo año trabajando "encubierto", por así decirlo, nadie verá realmente lo que estás haciendo y pensarán que no es nada.
Esto se reitera nuevamente en la publicación del blog No haga que la demostración se vea Listo, que tiene este útil gráfico:
Tenga en cuenta que las dos opciones generalmente reflejan el "hacer la interfaz de usuario" (y luego la expectativa es que terminará pronto) y "hacer el backend" (y luego el cliente está preocupado de que no cumpla con la fecha límite).
Cómo se ve "hecho" algo debe coincidir con cómo se "hace" algo.
Cada desarrollador de software ha experimentado esto muchas veces en su carrera. Pero las herramientas de publicación de escritorio generan el mismo dolor de cabeza para los escritores de tecnología: si le muestra a alguien un borrador que está perfectamente redactado y formateado, lo ven como más hecho de lo que desea. Necesitamos una coincidencia entre dónde estamos y dónde otros perciben que estamos.
Este artículo también presenta un punto importante sobre el tipo de comentarios que recibe con diferentes niveles de cocción de la interfaz de usuario. Si tiene algo que parece completo, es más probable que reciba comentarios acerca de "¿podría cambiar la fuente" que "este diseño no funciona? Hay demasiadas pestañas".
Para aquellos que luchan con esto en el mundo de Java Swing, hay un aspecto llamado Napkin que hace que la interfaz de usuario no se vea completa (incluso si lo es).
La clave aquí es hacerlo para que no parezca hecho. Hacer que la interfaz de usuario se vea completa es una señal para muchos usuarios comerciales de que la aplicación está completa (incluso si son solo unas pocas páginas estáticas sin ninguna lógica detrás o algo integrado en un generador de interfaces).
Lecturas adicionales (y enlaces del artículo):
Depende: necesita un ciclo de retroalimentación ajustado alrededor de su pieza más importante de funcionalidad
Si el núcleo de lo que haces, la parte arriesgada y aterradora, es algún motor interno, entonces haz que la parte central funcione, por ejemplo, en la consola o mediante pruebas unitarias. Por ejemplo, un analizador de protocolos no necesita una interfaz de usuario para saber si funciona correctamente.
Si su aspecto interesante implica cualquier tipo de interactividad (la interactividad necesita estar constantemente solucionando problemas, desechando y redescubriendo), entonces un enfoque de primera interfaz de usuario es crucial. Por ejemplo, quiero crear una aplicación que permita a las personas interactuar con una visualización de datos. Lo más importante que necesito averiguar es si la visualización es significativa, por lo que es probable que descarte media docena de enfoques antes de decidirme por uno. Haré todo esto antes de escribir una prueba de unidad única.
Hay un área gris borrosa en el medio donde puede decidir la mejor combinación sobre cómo interactuar mejor y validar su código (¿pruebas automatizadas? ¿IU para experimentación?). Personalmente he hecho ambos extremos y todo lo demás, y decidir el lugar correcto para estar en ese espectro es una de las cosas más difíciles que tengo que decidir y es 100% dependiente del tipo de cosas que estoy construyendo.
fuente
En un entorno ágil, es posible que escuche discusiones sobre "esqueletos para caminar" o "cortes verticales delgados". La idea es que, dado que el software de trabajo es lo que es importante para el usuario, usted construye el software de manera pieza por pieza.
En la aplicación de ejemplo que mencionó, comenzaría con la ventana y tal vez una pestaña, y haría que todo funcionara de frente de alguna manera. Luego, con el tiempo, agregaría funcionalidad y, por lo tanto, pestañas caso por caso, haciendo que cada característica funcione a medida que la construye. Esto es parte de lo que las demostraciones frecuentes de los clientes le brindan: la oportunidad de mostrar algo nuevo que funciona y obtener comentarios al respecto al instante.
En resumen, sí, el trabajo de la interfaz de usuario es absolutamente parte de una unidad de trabajo funcional, si tiene una interfaz de usuario.
Comience con algo pequeño que funcione e itere su funcionalidad para entregar una pieza completa de software.
fuente
Recomendaría hacer una combinación de funcionalidad e interfaz de usuario (y obtener comentarios o experiencia de prueba lo antes posible).
Por cierto, ¿no es la forma en que se desarrolla el software GUI más grande? Mire, por ejemplo, el navegador Firefox : de una versión a la siguiente, tanto la funcionalidad como la interfaz de usuario han evolucionado.
fuente
En las aplicaciones grandes (basadas en PHP) en las que trabajo, trato de poner primero las clases y los métodos, que devuelven valores ficticios . Esto es para establecer un pseudocontrato que los otros desarrolladores pueden usar para implementar la interfaz de usuario.
Una ventaja secundaria de este método es que podemos perfeccionar el contrato / interfaz a medida que cambian los requisitos de la interfaz de usuario (y siempre cambian), incluso antes de que se escriba y entregue todo el código.
fuente
Lo que tiendo a hacer es comenzar con una interfaz de usuario horrible : algo que simplemente voltea los datos variables en la pantalla. Sin fuentes, sin alineación, nada realmente gráfico durante mucho tiempo. Simplemente "Bienvenido usuario x" y botones llamados "cargar imagen", etc. Lo bueno de esto es que descubrirá si algo en el back-end está roto.
A medida que avanza el desarrollo, es posible que necesite más cosas o menos. Pero en algún momento, usted decidirá que el backend está casi terminado. Ahora tiene una interfaz de usuario que contiene todos los archivos adjuntos necesarios, y puede pasar mucho tiempo haciendo todas las cosas gráficas.
Sin embargo, ten cuidado, no es infalible. Necesita un poco de previsión para ver surgir ciertos problemas. Por ejemplo, es posible que necesite investigar los componentes de la interfaz de usuario para mostrar los datos de manera sensata.
fuente
Si utiliza un buen sistema de seguimiento de hitos y problemas, puede evitar algunos de estos problemas porque, de un vistazo, la gerencia puede ver cuán productivo está siendo. Podrán ver que has completado el 80% del backend y que la interfaz de usuario es el próximo hito; podrán ver que tiene un conjunto de tareas de interfaz de usuario y backend para finalizar para un hito de función específico. Pero todo comienza con los requisitos del proyecto, y la respuesta de Doug T plantea algunos puntos positivos sobre ese aspecto del diseño de un sistema.
fuente
Piense en el punto de vista de sus usuarios / clientes. Un sistema de software es una colección de características que le da a estos usuarios / clientes algo de valor. Por supuesto, cada una de estas características tiene una interfaz de usuario, un backend y algunas otras cosas.
Cree su sistema siempre característica por característica, e intente dividir en características muy pequeñas. De esta manera, siempre estará cerca de tener algo más que ofrecer a sus clientes, recuerde que el desarrollo de software no se trata de construir la versión 1.0, sino de ir a la versión 1.0.1 a la 1.0.2 y así sucesivamente ...
fuente
Depende. ¿Qué tan bien definidos están sus requisitos? ¿Cuánto del sistema está enfrentando la interfaz de usuario?
Según mi experiencia, la mayoría de los clientes no saben lo que quieren hasta que ven algo frente a ellos. Por lo tanto, normalmente proporciono algunos marcos de alambre de aspectos clave de la interfaz de usuario o entrego la mayoría de la interfaz de usuario (no funciona). Esto permite que el cliente cambie de opinión sobre las características / funciones sin demasiado impacto ya que el diseño de la base de datos y la estructura del código todavía están en fase de diseño; es fácil modificar el diseño. Es un orden de magnitud más fácil / rápido cambiar el diseño antes en el proyecto que luego.
Los estados ágiles también deben trabajar primero en los elementos más difíciles y los más importantes. Fallar rápido . Entonces, una vez que el cliente ha visto la interfaz de usuario, me concentro en construir componentes pequeños que sean completamente funcionales, hablar lo más importante y lo más difícil de implementar primero para que sepa lo antes posible si va a encontrar algún obstáculo.
Luego, tiene sus sprints y se comunica constantemente con el cliente, desarrollando tanto la IU como los aspectos funcionales en algún momento.
fuente