Todos los artículos

Reflexiones sobre desarrollo

De un problema concreto a una aplicación mantenible

Una aplicación sostenible surge cuando el público objetivo, el flujo principal, las decisiones sobre los datos, las pruebas y los límites del producto se desarrollan en conjunto, no solo después del prototipo.

Una nota de trabajo conduce, a través de varios bocetos en papel, hasta una interfaz móvil clara.

Muchas ideas para aplicaciones empiezan directamente con una solución: «necesitamos una plataforma» o «este paso debe automatizarse». Esas frases pueden señalar una dirección útil, pero todavía no definen un producto. Entre una idea interesante y una aplicación fácil de mantener hay decisiones sobre personas, situaciones, datos, límites y operación continua.

Por tanto, el trabajo esencial empieza antes de la primera pantalla. ¿Qué problema ocurre realmente, cómo se resuelve hoy y qué resultado observable mostraría que una herramienta digital lo ha mejorado? Una aplicación sostenible combina un propósito claro, un modelo de datos coherente y un ámbito que el equipo pueda seguir atendiendo después del primer lanzamiento.

En pocas palabras

  • Definir un problema concreto, el público y el proceso completo más pequeño.
  • Abordar desde el principio el modelo de datos, la privacidad, las pruebas y la operación.
  • Publicar por etapas solo cuando cada versión ya ofrezca un resultado útil y completo.

Describir el problema en una situación observable

«La gestión de inmuebles es confusa» es demasiado amplio. La frase no revela quién se ve afectado ni qué tipo de confusión importa. «Los propietarios particulares no encuentran de forma fiable la lectura de contador más reciente y su fotografía cuando están fuera de casa» identifica a la persona, la situación, la información y el resultado deseado.

Las buenas definiciones del problema se mantienen al principio independientes de la solución. Quizá baste con organizar mejor un almacenamiento existente, modificar un proceso o crear una pequeña interfaz web. Quien exige inmediatamente una técnica específica suele pasar por alto alternativas más sencillas. El objetivo del análisis inicial no es justificar una aplicación, sino comprender si sería útil y en qué casos.

¿Qué pasos sigue hoy la gente? ¿Qué herramientas utiliza? ¿En qué puntos alterna entre papel, hojas de cálculo, mensajes y fotografías? ¿Cuáles son las excepciones? No basta con preguntar por las funciones deseadas. Las personas describen soluciones a partir de su experiencia anterior; las dificultades observadas explican mejor qué debe hacer el producto.

Definir el público significa no intentar servir a todo el mundo

Un producto para «particulares y empresas de todos los tamaños» probablemente todavía no tenga un público objetivo claro. Los distintos grupos manejan términos, riesgos y procesos diferentes. Una persona sola no necesita gestionar roles. Un equipo no puede trabajar de forma fiable sin roles definidos y datos compartidos.

Una descripción útil del público incluye el contexto de uso, la experiencia, la frecuencia y los límites. ¿La persona trabaja sola o con otras? ¿En un smartphone o en varios puestos? ¿Abrirá la aplicación cada día o solo cuando ocurra un hecho concreto? ¿Debe funcionar sin red? ¿Qué errores serían solo molestos y cuáles tendrían consecuencias graves?

Estas preguntas influyen después en casi todo: navegación, almacenamiento de datos, modelo de seguridad, textos de ayuda y modelo de negocio. Delimitar el público no es solo un ejercicio de marketing; forma parte de la especificación técnica.

Encontrar el proceso completo más pequeño

Un producto inicial debe ser pequeño, pero no estar incompleto. Para documentar un contador, por ejemplo, hay que seleccionar el inmueble, introducir la fecha y el valor, añadir opcionalmente una fotografía, guardar, volver a encontrar el registro y corregirlo. Construir solo un formulario sin historial ni corrección de errores exigiría menos esfuerzo, pero no ofrecería un beneficio completo.

El recorrido completo más pequeño incluye principio, parte intermedia y final, además de las desviaciones importantes. ¿Qué ocurre si falta el permiso de la cámara? ¿Se puede guardar sin fotografía? ¿Cómo se muestra un estado vacío? ¿Qué sucede si el número no es válido o la persona cancela? ¿Se conserva la entrada después de una interrupción?

Solo cuando este recorrido principal está claro se pueden separar de forma útil las funciones necesarias y las opcionales. Necesario es aquello que permite el resultado o evita un error inaceptable. Opcional es lo que amplía la comodidad, las variantes o los públicos futuros. Esta distinción debe revisarse con frecuencia porque una opción aparentemente pequeña puede generar datos y estados nuevos.

Usar prototipos para hacer visibles las decisiones

Un prototipo es especialmente valioso cuando saca a la luz preguntas. ¿Las personas entienden los términos? ¿Encuentran el siguiente paso? ¿Les falta información antes de decidir? ¿El proceso encaja con la situación en la que realmente se usará el smartphone?

El prototipo no tiene que ser perfecto desde el punto de vista visual. Un diseño sencillo por el que se pueda navegar, con contenido realista, suele mostrar más que una presentación pulida llena de marcadores de posición. Los nombres reales, los textos largos, las imágenes que faltan y los registros múltiples revelan si la maquetación y la arquitectura de la información resisten.

Los prototipos también deben incluir estados críticos: ausencia de datos, errores de carga o guardado, permiso denegado, funcionamiento sin conexión, letra muy grande y acciones irreversibles. Quien muestra solo el recorrido ideal está probando una historia, no un producto.

En sus Human Interface Guidelines, Apple destaca la jerarquía, la coherencia y la adaptación a pantallas distintas. Estos principios no pueden añadirse como decoración al final. Ya influyen en la estructura del prototipo: ¿qué es contenido, qué es una acción, qué información permanece en primer plano y qué interacción resulta familiar en la plataforma?

El modelo de datos es una decisión de producto a largo plazo

Las interfaces pueden cambiar mucho. La importancia de los datos almacenados suele mantenerse durante años. Por eso conviene aclarar pronto qué entidades existen en el producto y cómo se relacionan. ¿Una «habitación» pertenece siempre a una unidad? ¿Puede asignarse un documento a varios procesos? ¿Qué ocurre con las tareas al archivar un objeto? ¿Los importes y las mediciones se almacenan con la precisión adecuada?

Un modelo coherente evita que la misma información resulte contradictoria en distintos lugares. Android Developers recomienda, entre otras cosas, una fuente de datos clara y límites de responsabilidad bien definidos en la arquitectura de aplicaciones. Estos principios técnicos apoyan una propiedad del dominio: cuando cambia una información, debe quedar claro qué representación pasa a ser la referencia.

Las migraciones también forman parte de esta decisión. En cuanto existen datos reales, una versión nueva no puede cambiar de nombre o eliminar campos a voluntad. El producto necesita reglas para trasladar estados antiguos a una estructura nueva. Un buen primer diseño no intenta predecir todas las evoluciones futuras, pero separa los términos estables del dominio de la lógica temporal de la interfaz.

La protección de datos empieza preguntando qué datos hacen falta

La protección de datos se vuelve costosa si solo se evalúa después de implementar. Para entonces, los permisos, los servicios externos y los modelos de datos ya están conectados. Examinarla pronto puede simplificar el ámbito.

¿La aplicación necesita una cuenta? ¿Hay que importar un contacto completo o basta con registrar manualmente a una persona? ¿El acceso a la ubicación hace falta siempre, solo para una acción o nunca? ¿Debe salir un documento del dispositivo? Cada dato que no se recopila reduce la superficie de exposición, los casos de error, el trabajo de seguridad y los procesos posteriores de eliminación.

Android recomienda minimizar las solicitudes de permisos y diseñar, cuando sea posible, funciones que no requieran accesos innecesarios. Si un permiso es imprescindible, debe pedirse en el contexto de la acción concreta. Una negativa no debería inutilizar automáticamente toda la aplicación cuando exista una alternativa razonable.

La protección de datos abarca todo el ciclo de vida: guardar, mostrar, compartir, exportar, crear copias de seguridad y eliminar. El almacenamiento local necesita una estrategia de respaldo. Los datos en la nube exigen protección de la cuenta, reglas de acceso y un proceso comprensible de eliminación. En el caso de proveedores externos debe quedar claro qué información reciben y por qué.

La mantenibilidad nace de límites y responsabilidades claros

Una base de código mantenible tiene módulos con tareas claras. La interfaz coordina interacciones, la lógica del dominio aplica reglas y la capa de datos gestiona las fuentes y la persistencia. Cuando el acceso a la red, la presentación y las reglas de negocio se mezclan en los mismos componentes, los cambios y las pruebas resultan más difíciles.

La separación técnica por sí sola no basta. El producto también necesita límites de responsabilidad. ¿Quién decide los términos? ¿Qué parte del producto es la referencia para un conjunto de datos? ¿Qué garantías ofrece cuando falla un servicio externo? ¿Existe una vía manual? ¿Qué no se admite expresamente?

Cada dependencia debe tener un propósito reconocible. Una biblioteca puede acelerar el desarrollo, pero exige actualizaciones y vigilancia de seguridad. Un servicio en la nube puede asumir trabajo complejo, pero crea costes y un punto de fallo. Un sistema propio ofrece control, pero necesita cuidados permanentes. La mantenibilidad implica elegir conscientemente estas obligaciones.

La documentación refuerza esta claridad cuando explica las decisiones. Una lista extensa de cada archivo envejece deprisa. Son más útiles las descripciones breves de los límites del sistema, los flujos de datos, las reglas de migración y los motivos de las decisiones menos obvias. Los nuevos miembros del equipo —o la misma persona en el futuro— deben entender por qué cada parte se construyó de esa manera.

Las pruebas siguen los riesgos y los recorridos reales

Un gran número de pruebas automatizadas no demuestra por sí solo la calidad del producto. Lo decisivo es que cubran los riesgos relevantes. Las pruebas unitarias sirven para las reglas y los cálculos del dominio. Las pruebas de integración comprueban la interacción entre la base de datos, los servicios y las migraciones. Las pruebas de extremo a extremo pueden proteger los recorridos principales. La comprobación manual sigue siendo importante para el lenguaje, la jerarquía visual, la orientación del foco y las situaciones difíciles de automatizar por completo.

Las pruebas deben usar datos realistas: nombres largos, listas vacías, registros antiguos, valores decimales poco habituales, varios adjuntos y conexiones interrumpidas. Los distintos tamaños de pantalla y el texto ampliado muestran si la disposición se adapta de verdad. Los lectores de pantalla y los teclados hacen visibles debilidades semánticas que una captura no revela.

W3C WAI recomienda evaluar la accesibilidad pronto y con regularidad e incluir adecuadamente a personas con discapacidad. Es un buen principio general de calidad: no revisar solo la versión final con una lista, sino incorporar las observaciones cuando aún pueden cambiarse las decisiones.

Las acciones de mayor riesgo requieren comprobaciones específicas. Eliminar, restaurar, el estado de una compra, exportar y solicitar permisos merecen más profundidad que un ajuste meramente decorativo. Priorizar según impacto y probabilidad es más útil que exigir la misma cantidad de pruebas en todo el producto.

Publicar por etapas no significa lanzar un producto sin terminar

Una primera versión no necesita contener todos los planes a largo plazo. Sin embargo, los recorridos principales que promete deben ser completos, comprensibles y resistentes. «Paso a paso» describe el crecimiento del ámbito; no excusa la falta de tratamiento de errores ni una responsabilidad poco clara sobre los datos.

Antes del lanzamiento, el producto necesita criterios verificables: dispositivos y versiones compatibles, procesos principales probados, límites comprensibles, textos correctos en la tienda y textos jurídicos, soporte accesible, comportamiento de respaldo o eliminación y un plan para errores críticos. Un grupo de prueba controlado puede mostrar el uso real antes de asumir un compromiso más amplio.

Después de publicar, los comentarios no se convierten automáticamente en elementos de la hoja de ruta. Aportan pruebas sobre situaciones reales. Varias peticiones de la misma función pueden mostrar un patrón o señalar un proceso existente que nadie encuentra. El equipo debe comprender el problema, la frecuencia, el público y el riesgo antes de elegir una solución.

Una versión posterior puede añadir nuevas capacidades. No debe ocultar el núcleo y debe respetar los datos existentes. La migración, la compatibilidad con versiones anteriores y las explicaciones actualizadas forman parte de la función; no son tareas de limpieza para más tarde.

Mantener el resultado concreto como hilo conductor

Desde la primera observación hasta la operación diaria, una pregunta mantiene el rumbo: ¿esta decisión mejora el resultado concreto para el público previsto? Un prototipo elegante, una arquitectura moderna o una lista larga de funciones aportan poco si optimizan el problema equivocado.

Una aplicación mantenible reúne un problema real, un público delimitado, procesos principales completos, un modelo de datos coherente, recorridos de datos comprensibles y responsabilidades verificables. Esa base permite que el producto siga evolucionando de forma coherente en versiones posteriores.

Fuentes y más información