Identificación
Describir la situación observable, a quién afecta y qué consecuencia provoca. Ejemplo: “las solicitudes llegan por mensajes dispersos y se pierden”, no “necesitamos React”.
Una clase teórico-práctica para convertir una necesidad real en una propuesta técnica comprensible, viable y comprobable antes de pedirle código a una persona o a una inteligencia artificial.
Programar es una etapa del proceso, no el punto de partida. Una solución útil comienza entendiendo el problema y termina —siempre provisionalmente— cuando puede operar, medirse y evolucionar.
La flecha de regreso representa aprendizaje: usuarios, errores y métricas producen una nueva iteración.
Describir la situación observable, a quién afecta y qué consecuencia provoca. Ejemplo: “las solicitudes llegan por mensajes dispersos y se pierden”, no “necesitamos React”.
Entrevistas, observación, documentos y datos permiten descubrir necesidades, reglas, excepciones y vocabulario del dominio.
Define qué resolverá esta versión y qué queda fuera. AulaDesk v1 registra, asigna y consulta solicitudes; no incluye app móvil nativa ni pagos.
Organiza responsabilidades y comunicaciones: interfaz web, backend, base de datos, correo y alojamiento.
Compara experiencia del equipo, costo, soporte, restricciones y operación. La elección responde al contexto, no a una moda.
Descompone entregables en tareas pequeñas, dependencias, responsables, estimaciones y riesgos. Primero se construye el camino crítico.
Se implementan partes verificables y se conectan temprano. Integrar al final aumenta sorpresas y retrabajo.
Las pruebas comparan el resultado con criterios de aceptación; depurar significa localizar y corregir la causa de una falla.
Se entrega una versión a un entorno, con configuración, datos, dominio, seguridad y plan de reversión.
Monitorear, respaldar, corregir, actualizar y mejorar. El software útil cambia porque su contexto también cambia.
Convierte “queremos un sistema moderno” en una descripción de problema que incluya usuario, situación y consecuencia. Después identifica qué dato necesitarías para comprobar que mejoró.
↑ Volver al inicioEstas piezas pueden coexistir, pero tienen propósitos y formas de interacción distintas.
Qué es: páginas navegables orientadas principalmente a consultar contenido.
Ejemplo: portal informativo de una universidad.
Qué es: software usado desde el navegador para realizar tareas y manejar datos.
Ejemplo: AulaDesk, correo web o banca en línea.
Qué es: software instalado en iOS o Android, con acceso controlado a funciones del dispositivo.
Ejemplo: app de reparto con cámara y GPS.
Qué es: contrato para que dos sistemas intercambien datos u operaciones.
Ejemplo: GET /api/solicitudes/42 devuelve JSON.
La interfaz que recibe acciones y presenta resultados. Un navegador es un cliente.
Aplica reglas, autoriza acciones, consulta datos y construye respuestas. “Servidor” puede referirse al programa o a la máquina.
Organiza y conserva información para consultarla y modificarla de forma controlada.
Mensaje del cliente: método, URL, encabezados y, a veces, cuerpo. Ejemplo: enviar una solicitud.
Datos estructurados que el backend devuelve; no es una pantalla. El frontend decide cómo mostrarlos.
Infraestructura donde el software y sus archivos están disponibles para usuarios autorizados.
HTTP/1.1 200 OK
Content-Type: application/json
{"solicitudes":[{"id":42,"asunto":"Proyector","estado":"asignada"}]}
AulaDesk es el caso provisional: una institución necesita registrar solicitudes, asignarlas, dar seguimiento y notificar cambios.
| Elemento | Pregunta que responde | Ejemplo en AulaDesk |
|---|---|---|
| Requisito funcional | ¿Qué debe poder hacer el sistema? | Una persona solicitante puede consultar el estado de sus propias solicitudes. |
| Requisito no funcional | ¿Con qué cualidad o límite debe hacerlo? | La vista principal debe cargar en menos de 2 s con 100 usuarios concurrentes, bajo el entorno acordado. |
| Actor y rol | ¿Quién interactúa y qué responsabilidad tiene? | Solicitante crea; responsable atiende; coordinador asigna y supervisa. |
| Caso de uso | ¿Qué objetivo logra un actor? | “Asignar solicitud”: el coordinador elige responsable, fecha y prioridad. |
| Alcance y límite | ¿Qué entra ahora y qué no? | Incluye correo al cambiar estado; excluye SMS y aplicación móvil en v1. |
| MVP | ¿Cuál es la versión mínima que entrega valor y aprendizaje? | Acceso, registro, asignación, estados, comentarios e historial básico. |
| Prioridad | ¿Qué va primero? | Must: seguridad de acceso. Should: filtros. Could: tablero de métricas. |
| Riesgo | ¿Qué incertidumbre puede dañar el proyecto? | No existe catálogo acordado de áreas responsables. |
| Restricción | ¿Qué condición no podemos ignorar? | Presupuesto mensual limitado y servidor PHP ya contratado. |
| Criterio de aceptación | ¿Cómo sabremos que está terminado? | Dada una solicitud nueva, cuando el coordinador la asigna, el responsable la ve y queda registro de fecha y autor. |
Como coordinador, quiero asignar una solicitud a un responsable para que exista una persona claramente encargada.
Primero distinguimos categorías. Un lenguaje expresa instrucciones; un framework organiza una aplicación e impone convenciones; una biblioteca aporta piezas que el programa llama; un entorno de ejecución ejecuta código.
| Tecnología | Qué es / para qué sirve | Cuándo conviene | Cuándo no conviene | Ejemplo |
|---|---|---|---|---|
| HTML | Lenguaje de marcado: estructura y significado del contenido. | En toda interfaz web accesible. | No resuelve lógica de servidor ni persistencia. | Formulario de solicitud. |
| CSS | Lenguaje de estilos: presentación, layout y adaptación a pantallas. | En toda experiencia web visual. | No valida permisos ni guarda datos. | Tablero responsivo. |
| JavaScript | Lenguaje del navegador y también del servidor. | Interacción dinámica, fetch, validación de ayuda. | No debe ser la única barrera de seguridad. | Actualizar estados sin recargar. |
| PHP | Lenguaje de servidor muy extendido en la web. | Hosting disponible, equipo conoce PHP, aplicaciones CRUD y APIs. | Si la organización solo opera otra plataforma y no mantendrá PHP. | Portal institucional y AulaDesk. |
| Node.js | Entorno de ejecución de JavaScript fuera del navegador. | Equipo unificado en JS, APIs y tiempo real con ecosistema npm. | Si agrega una segunda plataforma sin beneficio operativo. | API de colaboración en tiempo real. |
| Python | Lenguaje general, legible y fuerte en datos, automatización e IA. | Procesamiento, ML, scripts y APIs con experiencia Python. | Cuando el hosting o el equipo no puede operarlo. | Clasificar solicitudes por tema. |
| C# / .NET | Lenguaje y plataforma para web, servicios, escritorio y nube. | Entornos empresariales, Azure, tipado fuerte y ecosistema Microsoft. | Proyectos mínimos en hosting PHP sin soporte .NET. | Sistema corporativo integrado con Microsoft Entra. |
| Laravel | Framework PHP con rutas, ORM, validación, colas y convenciones. | Aplicación PHP mediana/grande que aprovecha su estructura. | Una página estática o ejercicio pequeño donde añade peso innecesario. | Plataforma de solicitudes modular. |
| React | Biblioteca JavaScript para construir interfaces por componentes. | Interfaz con estado complejo, equipo preparado y API clara. | Sitio de contenido simple o cuando duplicará complejidad. | Tablero interactivo con múltiples paneles. |
| Vue | Framework progresivo de interfaces, basado en componentes. | Adopción gradual o SPA con curva accesible. | Cuando HTML del servidor ya resuelve bien la experiencia. | Panel de seguimiento interactivo. |
Contenido estable, formulario externo, edición ocasional. Elección razonable: HTML, CSS y poco JS. Un framework SPA sería costo sin valor claro.
Equipo aprende PHP, hosting PHP/MySQL ya existe. Candidata: PHP + HTML del servidor + JS puntual + MySQL/MariaDB. Laravel se evalúa cuando alcance y dominio lo justifiquen.
Clasificación y procesamiento intensivo de texto. Candidata: servicio Python especializado, integrado mediante API; no obliga a reescribir todo AulaDesk.
Persistencia significa que los datos sobreviven al cierre del programa. El modelo elegido debe representar el dominio y sus consultas importantes, no solo guardar “cosas”.
Organiza datos en tablas con columnas, filas, llaves y relaciones. Favorece reglas de integridad, consultas declarativas y transacciones.
AulaDesk: usuarios, solicitudes, estados y asignaciones tienen relaciones claras.
Agrupa modelos distintos a tablas relacionales, por ejemplo documentos o clave-valor. Puede dar flexibilidad o velocidad para patrones específicos.
No significa: “sin estructura”, “más rápido siempre” ni “sin diseño”.
| Motor | Modelo y fortalezas | Conviene cuando… | Precaución / ejemplo |
|---|---|---|---|
| MySQL / MariaDB | Relacional, extendido, buen soporte en hosting y PHP. Son proyectos distintos aunque compatibles en mucho. | CRUD, portales y aplicaciones transaccionales habituales. | Excelente candidata para AulaDesk si ya está disponible. |
| PostgreSQL | Relacional robusto, SQL avanzado, extensibilidad y tipos ricos. | Consultas complejas, integridad exigente o capacidades geoespaciales/JSON avanzadas. | Requiere que equipo y plataforma sepan operarlo. |
| SQLite | Relacional embebido en un archivo, sin servidor separado. | Prototipos, apps locales, pruebas o baja concurrencia. | No es la opción normal para una plataforma web multiusuario en crecimiento. |
| MongoDB | Documentos JSON-like, esquema flexible y anidación. | Datos naturalmente documentales y patrones de acceso bien entendidos. | Las relaciones fuertes de AulaDesk no desaparecen por usar documentos. |
| Redis | Almacén clave-valor en memoria, muy rápido; soporta expiración y estructuras. | Caché, sesiones, contadores, colas o datos efímeros. | Suele complementar una base relacional; no sustituye en general los datos principales y su historial. |
Modelo de datos, relaciones, transacciones, consultas, volumen, concurrencia, consistencia, respaldo, habilidades, alojamiento, costo, herramientas y migración futura. La pregunta correcta no es “¿cuál es mejor?”, sino “¿qué riesgo reduce y qué costo introduce en este contexto?”.
Una herramienta se incorpora cuando resuelve una necesidad del flujo. Instalar todo desde el primer día no mejora automáticamente el proyecto.
| Herramienta | Qué es / para qué sirve | Cuándo es necesaria o útil |
|---|---|---|
| VS Code | Editor con navegación, terminal, extensiones y depuración. | Editar el proyecto; elegir extensiones mínimas y confiables. |
| Git | Control de versiones distribuido: registra cambios y facilita colaboración. | Desde la primera documentación; no reemplaza los respaldos externos. |
| DBeaver | Cliente gráfico para explorar y consultar bases de datos. | Administrar y aprender SQL; no es la base de datos. |
| PHP / MAMP | PHP ejecuta backend; MAMP empaqueta servidor web, PHP y base local. | Probar una aplicación PHP sin publicarla. |
| Composer | Gestor de dependencias PHP y autoload. | Cuando el proyecto usa paquetes PHP; requiere fijar y revisar versiones. |
| Node.js / npm | Runtime JavaScript y gestor de paquetes. | Backend Node o herramientas frontend; no son requisito para HTML/CSS puro. |
| Docker | Empaqueta procesos y dependencias en entornos repetibles. | Cuando diferencias entre equipos/servidores justifican la complejidad. |
| DevTools | Herramientas del navegador para DOM, CSS, red, consola, rendimiento y móvil. | Siempre que se construye o depura una web. |
| Codex | Agente de desarrollo asistido por IA que puede analizar, editar y verificar dentro del alcance autorizado. | Para acelerar tareas con requisitos claros y revisión humana. |
Plantilla inmutable con sistema, runtime, dependencias y configuración base.
Proceso aislado creado desde una imagen. Puede iniciarse, detenerse y reemplazarse.
Espacio separado del ciclo de vida del contenedor. Evita perder la base al reemplazarlo.
Máquina del desarrollador. Datos ficticios, cambios rápidos, errores visibles.
Se parece a producción y permite validar integración sin afectar usuarios reales.
Servicio real: máxima cautela, secretos protegidos, monitoreo, respaldo y cambios controlados.
La infraestructura sostiene la aplicación. Debe ser suficiente, recuperable y operable por el equipo, no simplemente “la más grande”.
| Opción | Qué ofrece | Conviene | No conviene |
|---|---|---|---|
| Hosting compartido | Recursos compartidos y panel administrado, bajo costo. | PHP/MySQL pequeño, tráfico moderado y presupuesto limitado. | Procesos especiales, control fino o escalamiento exigente. |
| VPS | Máquina virtual con mayor control. | Configuración propia y equipo capaz de administrar seguridad/actualizaciones. | Si nadie puede operarla de forma responsable. |
| Dedicado | Servidor físico para una organización. | Cargas o requisitos muy específicos. | MVP con demanda incierta y poco personal operativo. |
| Nube pública | Recursos bajo demanda y servicios administrados. | Variabilidad, integración y necesidad de automatización. | Sin gobierno de costos, habilidades o una necesidad concreta. |
| AWS / Google Cloud / Azure | Proveedores amplios de cómputo, datos, redes e IA. | Cuando sus servicios y ecosistema encajan con organización/equipo. | Elegirlos solo por prestigio puede elevar costo y complejidad. |
| Plataforma administrada | Despliega aplicaciones ocultando parte de la operación. | Equipos pequeños que priorizan entrega y aceptan sus límites. | Requisitos de infraestructura muy personalizados. |
auladesk.institucion.mx.Navegador
↓ HTTPS
Hosting PHP
├─ Aplicación
└─ MySQL administrado
↳ respaldo diarioMenos piezas, menor costo operativo, fácil de comprender. Debe medir uso y límites.
DNS + CDN + balanceador
↓
varias instancias de app
↓ ↓
base gestionada cola/workers
réplica/backup archivos objetoMejora capacidad o resiliencia, pero exige observabilidad, automatización y más presupuesto.
Costos fijos: dominio, plan base, soporte. Variables: cómputo por uso, transferencia, almacenamiento, mensajes, usuarios o llamadas a APIs. El costo total también incluye horas de administración.
↑ Volver al inicio“Notificar” no es una sola función: cambia el canal, la autorización, el costo, la entrega y la experiencia.
| Canal | Infraestructura y permisos | Costo / complejidad | Uso apropiado |
|---|---|---|---|
| Interna | Tabla de notificaciones y UI; usuario autenticado. | Bajo–medio; no avisa si no entra. | Bandeja e historial dentro de AulaDesk. |
| Correo | Proveedor SMTP/API, dominio configurado, plantillas y rebotes. | Bajo al inicio; entrega no instantánea garantizada. | Cambios importantes y resumen. |
| Push web | Service worker, claves y permiso explícito del navegador. | Medio; soporte y permisos variables. | Usuarios frecuentes aun con pestaña cerrada. |
| Push móvil | App instalada, token y servicios Apple/Google. | Medio–alto; depende de app móvil. | Eventos oportunos para personal móvil. |
| SMS | Proveedor, números válidos, consentimiento y normativa. | Costo por mensaje; alcance alto. | Alertas críticas, breves y justificadas. |
| WebSocket | Conexión bidireccional persistente y servidor preparado. | Mayor operación. | Chat o edición colaborativa en tiempo real. |
| SSE | Canal persistente servidor→navegador sobre HTTP. | Menor que bidireccional cuando solo se envían eventos. | Progreso y actualizaciones en vivo. |
Almacenamiento local u objeto; validar tipo/tamaño, controlar acceso, analizar malware y definir retención.
Pasarela especializada, webhooks, conciliación y obligaciones legales. Nunca guardar datos sensibles sin necesidad.
Contrato, autenticación, límites, disponibilidad, costo y manejo de errores ajenos.
Modelo/proveedor, instrucciones, contexto, privacidad, evaluación, latencia y costo por uso. Siempre considerar errores plausibles.
Bidireccionales: cliente y servidor envían eventos; útiles cuando ambos lados hablan con frecuencia.
Unidireccional servidor→cliente; más simple para notificaciones o progreso continuo en navegador.
Criterios: urgencia, audiencia, permiso, confirmación requerida, sensibilidad, frecuencia, conectividad, costo por evento, accesibilidad y capacidad de soporte.
↑ Volver al inicioCodex puede acelerar el trabajo, pero no transforma una intención ambigua en una decisión correcta por arte de magia. La calidad del resultado depende del contexto, las restricciones y la verificación.
“Créame un sistema de inventarios completo.”
Faltan problema, usuarios, alcance, reglas, tecnología, seguridad, datos, criterio de éxito y entregables. “Completo” no es verificable.
Actúa como analista técnico. NO escribas código todavía.
Problema: una institución pierde solicitudes recibidas por mensajes dispersos.
Usuarios: solicitante, responsable y coordinador.
Requisitos iniciales: registrar, asignar, comentar, cambiar estado y consultar historial.
Restricciones: equipo principiante en PHP; hosting PHP 8.1 y MySQL existente;
presupuesto bajo; interfaz web responsiva; no app móvil en el MVP.
Tecnologías candidatas: PHP sin framework o Laravel; MySQL/MariaDB;
HTML del servidor con JavaScript puntual.
Criterios de aceptación: propón escenarios Given/When/Then para cada flujo crítico.
Pruebas: incluye permisos, validación, errores, integración y recorrido de usuario.
Entregables de esta fase: preguntas abiertas, alcance/MVP, 2 alternativas de
arquitectura con ventajas y riesgos, recomendación justificada, modelo conceptual,
plan por etapas y estimación con supuestos.
Primero: detecta ambigüedades y riesgos. Haz preguntas o declara supuestos.
Después presenta propuestas. Espera aprobación antes de generar código.
Producto: una propuesta técnica de 2–4 páginas o 5 diapositivas. Esta práctica consiste exclusivamente en diseñar y justificar la solución antes de programar. No se crea un CRUD, no se instala software y no se inicia un repositorio.
Se puede utilizar inteligencia artificial para investigar conceptos y comparar alternativas, pero cada elección debe explicarse con criterio propio, evidencia y supuestos visibles.
¿Qué ocurre hoy, a quién afecta y cómo se medirá una mejora?
¿Quién usa, administra, recibe información o se ve afectado? ¿Qué puede y no puede hacer cada actor?
Define requisitos funcionales y no funcionales verificables.
¿Cuál es el flujo mínimo de principio a fin y qué queda fuera?
Identifica alternativas viables según el contexto, el equipo y las restricciones.
Compara opciones para ambas capas y explica sus ventajas, límites y compatibilidad.
Elige y justifica el modelo o motor según relaciones, consultas, integridad y operación.
¿Qué evento, receptor, canal y urgencia tiene cada aviso?
¿Qué servicios externos serían necesarios y qué costo, dependencia o riesgo agregan?
¿Dónde se ejecutaría el MVP, cómo se protegería y cómo se respaldaría?
¿Qué herramientas serían útiles durante el desarrollo y qué función cumpliría cada una?
Enumera límites y riesgos principales, su mitigación y los costos fijos, variables o desconocidos.
¿Cómo se comprobaría que la solución funciona y satisface sus criterios de aceptación?
Representa componentes, responsabilidades, datos, integraciones y comunicaciones.
Redacta el contexto, alcance, restricciones, criterios y preguntas que Codex debe considerar antes de generar código.
Durante el cuatrimestre se construirá gradualmente una aplicación web funcional con apoyo de IA. AulaDesk es una propuesta provisional que puede adaptarse cuando se defina el proyecto definitivo.
El siguiente árbol sirve como mapa del contenido que conviene documentar; no es una instrucción para crear carpetas o archivos en esta práctica.
auladesk/
├── README.md
└── docs/
├── 01-problema-y-objetivos.md
├── 02-requerimientos.md
├── 03-arquitectura.md
├── 04-decisiones-tecnicas.md
└── 05-plan-de-pruebas.md
Propósito, estado, alcance, equipo y cómo navegar la documentación.
Contexto, usuarios, objetivos, alcance, historias, prioridades y aceptación.
Diagrama, componentes, alternativas, elección, razones y consecuencias.
Limitaciones, probabilidad, impacto, mitigaciones, costos y supuestos que deben validarse.
Qué riesgos se prueban, nivel de prueba, datos y criterios de salida.
Organización de componentes, responsabilidades, datos y comunicaciones.
Contrato de interacción entre sistemas.
Versión mínima que entrega valor y permite aprender.
Necesidad o condición documentada y verificable.
Condición observable para considerar satisfecha una función.
Estructura reutilizable que guía cómo construir una aplicación.
Entorno que ejecuta código, como Node.js o PHP.
Conservación de datos más allá de una ejecución.
Proceso de entregar una versión a un entorno.
Sistema que dirige nombres de dominio a servicios.
Capacidad de responder al crecimiento de carga.
Costo futuro creado por decisiones rápidas o incompletas.
| Criterio | Excelente | En desarrollo | Peso |
|---|---|---|---|
| Problema, usuarios y alcance | Concretos, coherentes y medibles. | Solución vaga o límites ausentes. | 20% |
| Requisitos y aceptación | Priorizados, verificables y con excepciones. | Lista de deseos sin comprobación. | 20% |
| Arquitectura y tecnologías | Alternativas comparadas y elección justificada. | Elección por moda o sin relación con restricciones. | 25% |
| Datos, seguridad y pruebas | Relaciones, roles, riesgos y estrategia clara. | Solo camino feliz, sin permisos ni pruebas. | 20% |
| Costos, riesgos y comunicación | Supuestos visibles, propuesta clara y viable. | Costos/operación ignorados. | 15% |
Salida de clase: escribe una decisión técnica que ahora tomarías de manera diferente y la pregunta que harías antes de aceptarla.
↑ Volver al inicio