Diseño de software

  1. Diseño de software
    1. Diseño y arquitectura de software

      1. Principios de diseño orientado a mantenibilidad
        1. Acoplamiento bajo y cohesión alta
        2. Separación de responsabilidades (SoC)
        3. Encapsulamiento y ocultamiento de información
        4. Principios SOLID
        5. Interfaces estables y contratos claros
        6. Evolución controlada de componentes
        7. Facilidad de pruebas y capacidad de ser testeable
        8. Observabilidad y depurabilidad
      2. Principios como evitar repetición innecesaria y mantener la simplicidad
        1. DRY (Don’t Repeat Yourself)
        2. KISS (Keep It Simple, Stupid)
        3. YAGNI (You Aren’t Gonna Need It)
        4. Minimización de complejidad accidental
        5. Ley de Demeter
        6. Principio de menor sorpresa
        7. Minimización de dependencias implícitas
      3. Patrones de diseño (creacionales, estructurales y de comportamiento)
        1. Patrones creacionales
          1. Factory Method
          2. Abstract Factory
          3. Builder
          4. Prototype
          5. Singleton
          6. Object Pool
          7. Dependency Injection
        2. Patrones estructurales
          1. Adapter
          2. Bridge
          3. Composite
          4. Decorator
          5. Facade
          6. Flyweight
          7. Proxy
          8. DTO (Data Transfer Object)
        3. Patrones de comportamiento
          1. Strategy
          2. Observer / Publish–Subscribe
          3. Command
          4. Chain of Responsibility
          5. State
          6. Template Method
          7. Iterator
          8. Mediator
          9. Memento
          10. Visitor
          11. Specification
          12. Null Object
        4. Patrones concurrentes
          1. Producer–Consumer
          2. Reader–Writer
          3. Reactor
          4. Circuit Breaker
          5. Bulkhead
          6. Retry / Backoff
        5. Patrones arquitectónicos
          1. MVC / MVP / MVVM
          2. CQRS (Command Query Responsibility Segregation)
          3. Event Sourcing
          4. Pipes and Filters
      4. Arquitectura en capas
        1. Capa de presentación
        2. Capa de aplicación / servicio
        3. Capa de dominio / negocio
        4. Capa de infraestructura / persistencia
        5. Separación lógica vs separación física
        6. Dependencias dirigidas hacia adentro
        7. Problemas comunes del modelo de capas tradicional
      5. Arquitectura limpia
        1. Círculos concéntricos y dependencia hacia el dominio
        2. Entidades y casos de uso
        3. Interfaces de entrada y salida
        4. Controladores y presentadores
        5. Gateways / repositorios
        6. Independencia de frameworks
        7. Testabilidad y reemplazo de infraestructura
      6. Arquitectura hexagonal y separación de puertos/adaptadores
        1. Dominio como núcleo independiente
        2. Puertos (interfaces dirigidas hacia el dominio)
        3. Adaptadores primarios (driving)
        4. Adaptadores secundarios (driven)
        5. Sustitución de infraestructura (DB, colas, APIs externas)
        6. Aislamiento de efectos secundarios
        7. Pruebas a nivel de puerto
      7. Diseño guiado por el dominio (Domain-Driven Design)
        1. Lenguaje ubicuo
        2. Contextos delimitados (bounded contexts)
        3. Mapeo de contexto y relaciones entre contextos
        4. Modelo de dominio explícito
        5. Entidades de dominio
        6. Objetos de valor
        7. Servicios de dominio
        8. Agregados y raíces de agregado
        9. Repositorios
        10. Eventos de dominio
        11. Anti-corrupción layer
        12. Refactorización del modelo a partir del conocimiento del negocio
      8. Monolitos modulares y microservicios
        1. Monolito tradicional
        2. Monolito modular
        3. Fronteras de módulo internas
        4. Microservicios
        5. Criterios para extraer un microservicio
        6. Comunicación síncrona vs asíncrona
        7. Despliegue independiente
        8. Consistencia eventual entre servicios
        9. Observabilidad distribuida
        10. Versionado e independencia de ciclo de vida
        11. Enrutamiento y descubrimiento de servicios
        12. Gestión de fallas en cascada
      9. Arquitecturas dirigidas por eventos
        1. Productores y consumidores de eventos
        2. Bus de eventos y colas de mensajería
        3. Event Sourcing
        4. CQRS y eventos como fuente de verdad
        5. Coreografía vs orquestación
        6. Idempotencia en el consumo de eventos
        7. Consistencia eventual
        8. Retries y colas muertas
        9. Garantías de entrega (at-most-once, at-least-once, exactly-once)
      10. Versionado de interfaces y ciclos de vida de APIs
        1. Versionado de endpoints
        2. Versionado semántico
        3. Compatibilidad hacia atrás
        4. Deprecación controlada de contratos
        5. Estabilidad de contratos públicos
        6. Gestión del ciclo de vida de API
        7. Cambios breaking y comunicación interna/externa
        8. Evolución de esquemas y modelos de datos
        9. Control de capacidad y límites de uso (rate limiting)
        10. Políticas de seguridad y autenticación
      11. Documentación técnica orientada a desarrolladores y mantenimiento
        1. Documentación de arquitectura
        2. Diagramas de componentes y dependencias
        3. Especificación de APIs
        4. Contratos de servicios internos
        5. ADRs (Architecture Decision Records)
        6. Guías de despliegue y operación
        7. Manuales de resolución de incidentes
        8. Documentación de límites y garantías (SLO, SLA)
        9. Registro de cambios técnicos
        10. Estándares de estilo y convenciones
        11. Versionado de la documentación
        12. Documentación cercana al código vs documentación externa
      12. Modularización y empaquetado de componentes reutilizables
        1. Diseño de librerías internas
        2. Paquetes reutilizables por equipo/proyecto
        3. Reutilización vs copia localizada
        4. Estabilidad de interfaces internas
        5. Control de dependencias internas
        6. Gestión de versiones de componentes compartidos
        7. Monorepos vs multirepos
        8. Plugins y extensiones
        9. Políticas de rompimiento de compatibilidad interna
        10. Reglas de ownership por módulo
        11. Catálogo interno de servicios y librerías
        12. Distribución binaria vs distribución de código fuente
    2. Algoritmos y estructuras de datos

      1. Complejidad temporal y espacial (notación asintótica)
        1. O grande
        2. Ω y Θ
        3. Mejor caso, peor caso y caso promedio
        4. Complejidad amortizada
        5. Costos de memoria y caché
        6. Complejidad de acceso a memoria
      2. Análisis de eficiencia algorítmica
        1. Conteo de operaciones dominantes
        2. Análisis de bucles anidados
        3. Análisis de recurrencias
        4. Optimización temprana vs microoptimizaciones
        5. Trade-offs tiempo vs espacio
        6. Escalabilidad asintótica
      3. Estructuras lineales (listas, pilas, colas, colas dobles)
        1. Arreglos (arrays) y listas contiguas
        2. Listas enlazadas simples y dobles
        3. Pilas (stacks)
        4. Colas (queues)
        5. Colas dobles (deques)
        6. Listas circulares
        7. Listas bloqueadas / chunked
        8. Buffers circulares
        9. Implementación sobre memoria dinámica
        10. Costos de inserción, borrado y acceso
      4. Árboles, montículos, tries y estructuras jerárquicas
        1. Árboles binarios
        2. Árboles binarios de búsqueda (BST)
        3. Árboles balanceados (AVL, Red-Black)
        4. Árboles B y B+
        5. Árboles segmentados (segment trees)
        6. Fenwick / Binary Indexed Trees
        7. Montículos (heaps)
        8. Priority queues
        9. Heaps binomiales y Fibonacci
        10. Tries
        11. Compresión de tries y radix trees
        12. Árboles cuaternarios y octrees
        13. Árboles de intervalo y de rango
        14. Árboles de decisión
        15. Árboles de sufijos
      5. Grafos
        1. Representación de grafos (matriz de adyacencia, lista de adyacencia)
        2. Grafos dirigidos y no dirigidos
        3. Grafos ponderados
        4. Árboles de expansión mínima
        5. Caminos mínimos
        6. Detección de ciclos
        7. Ordenamiento topológico
        8. Componentes fuertemente conexas
        9. Flujos máximos
        10. Matching y emparejamiento
        11. Grafos bipartitos
        12. Conectividad y puentes
        13. Grafos dinámicos y online
        14. Grafos probabilísticos
      6. Hashing y tablas hash
        1. Funciones hash
        2. Colisiones y métodos de resolución
        3. Direccionamiento abierto
        4. Encadenamiento separado
        5. Rehashing y factor de carga
        6. Hash consistente
        7. Bloom filters
        8. Cuckoo hashing
        9. Tablas hash inmutables
        10. Trade-offs entre hash y árboles balanceados
      7. Algoritmos de ordenamiento y búsqueda
        1. Búsqueda lineal
        2. Búsqueda binaria
        3. Ordenamiento por comparación (quicksort, mergesort, heapsort)
        4. Ordenamiento no comparativo (counting sort, radix sort, bucket sort)
        5. Estabilidad del ordenamiento
        6. Selección del k-ésimo elemento
        7. Ordenamiento externo
        8. Ordenamiento parcial e incremental
        9. Búsqueda aproximada
      8. Recursividad y divide y vencerás
        1. Recurrencias clásicas
        2. Descomposición de problemas
        3. Mergesort / Quicksort como divide y vencerás
        4. Búsqueda binaria recursiva
        5. Poda y recursión con backtracking
        6. Recursión de cola y optimización de cola
        7. Profundidad máxima y stack frames
      9. Programación dinámica y memoización
        1. Subproblemas solapados
        2. Estados y transiciones
        3. Tablas bottom-up
        4. Memoización top-down
        5. Optimización de espacio
        6. Reutilización incremental de resultados
        7. DP con reconstrucción de solución
        8. DP en grafos acíclicos dirigidos
        9. DP probabilística
      10. Algoritmos de concurrencia y sincronización
        1. Secciones críticas
        2. Exclusión mutua
        3. Locks, mutexes y semáforos
        4. Barreras y barreras cíclicas
        5. Paso de mensajes
        6. Algoritmos sin bloqueo (lock-free)
        7. Algoritmos wait-free
        8. Consistencia de memoria
        9. Algoritmos de consenso
        10. Deadlocks y prevención
        11. Scheduling y fairness
        12. Control de contención
      11. Estructuras de datos inmutables o persistentes
        1. Árboles persistentes
        2. Listas persistentes
        3. Hash tries inmutables
        4. Copy-on-write
        5. Versionado estructural
        6. Sharing estructural
        7. Costos de mutación lógica
        8. Estructuras puramente funcionales
      12. Algoritmos probabilísticos y aproximados
        1. Algoritmos Monte Carlo
        2. Algoritmos Las Vegas
        3. Sampling aleatorio
        4. Sketches de datos
        5. Conteo aproximado y cardinalidad estimada
        6. Algoritmos streaming
        7. Aprox. para problemas NP-duros
        8. Randomización para balance de carga
        9. Probabilistic hashing
        10. Tolerancia a error y control de confianza
    3. Procesos de ingeniería de software

      1. Requisitos de software
        1. Requisitos funcionales
        2. Requisitos no funcionales
        3. Atributos de calidad (rendimiento, seguridad, confiabilidad, escalabilidad)
        4. Restricciones técnicas y regulatorias
        5. Requisitos operacionales
        6. Priorización de requisitos
        7. Gestión de expectativas de stakeholders
      2. Análisis, especificación y trazabilidad de requisitos
        1. Historias de usuario
        2. Casos de uso
        3. Escenarios de negocio
        4. Requisitos formales
        5. Modelos de dominio y vocabulario compartido
        6. Matrices de trazabilidad
        7. Control de cambios de requisitos
      3. Diseño de software
        1. Modelado de arquitectura
        2. Diseño de componentes y módulos
        3. Diagramas estructurales y de interacción
        4. Definición de interfaces
        5. Diseño orientado a pruebas
        6. Diseño para observabilidad
        7. Diseño para despliegue y operación
      4. Construcción y estándares de codificación
        1. Estándares de estilo
        2. Convenciones de nombres
        3. Revisión de código (code review)
        4. Guías de ramificación y control de versiones
        5. Integración continua
        6. Automatización de builds
        7. Gestión de dependencias externas
        8. Gestión de secretos y configuración
        9. Prácticas seguras de codificación
        10. Políticas de deuda técnica
      5. Verificación y validación
        1. Pruebas unitarias
        2. Pruebas de integración
        3. Pruebas de contrato
        4. Pruebas end-to-end
        5. Pruebas de regresión
        6. Pruebas de rendimiento y carga
        7. Pruebas de seguridad
        8. Fuzzing
        9. Revisión estática de código y análisis estático
        10. Auditorías técnicas
        11. Aprobación de despliegues
      6. Mantenimiento evolutivo y correctivo
        1. Corrección de defectos
        2. Refactorización continua
        3. Gestión de deuda técnica
        4. Extensión de funcionalidades existentes
        5. Migración tecnológica
        6. Compatibilidad hacia atrás
        7. Gestión de riesgos en cambios
        8. Planificación de fin de vida
      7. Gestión de la configuración
        1. Control de versiones
        2. Estrategias de branching
        3. Versionado semántico
        4. Gestión de releases
        5. Trazabilidad de cambios en producción
        6. Infraestructura como código
        7. Gestión de entornos
        8. Auditoría y cumplimiento
      8. Ingeniería de calidad de software
        1. Aseguramiento de calidad (QA)
        2. Control de calidad
        3. Estrategias de pruebas automatizadas
        4. Cobertura de pruebas
        5. Definición de criterios de aceptación
        6. Definición de DoD (Definition of Done)
        7. Observabilidad como parte de la calidad
        8. Gestión de incidentes y postmortems
        9. Revisión continua de confiabilidad
        10. Gestión de vulnerabilidades
      9. Procesos de desarrollo
        1. Cascada
        2. Prototipado evolutivo
        3. Iterativo incremental
        4. RUP / procesos unificados
        5. Agile / Agile industrial
        6. Scrum
        7. Kanban
        8. Lean software
        9. DevOps
        10. GitOps
        11. Continuous Delivery / Continuous Deployment
        12. Inner source y colaboración abierta interna
      10. Métricas de productividad y calidad del software
        1. Velocidad de entrega
        2. Lead time de cambios
        3. Tiempo medio de recuperación (MTTR)
        4. Frecuencia de despliegues
        5. Tasa de cambios fallidos
        6. DORA metrics
        7. Densidad de defectos
        8. Cobertura de pruebas útil
        9. SLOs y SLIs
        10. Disponibilidad y confiabilidad percibida
        11. Estabilidad vs velocidad de cambio
        12. Costo total de propiedad (TCO)
      11. Herramientas de soporte al ciclo de vida del software
        1. Sistemas de control de versiones
        2. Integración continua y pipelines de CI/CD
        3. Sistemas de seguimiento de issues
        4. Gestión de requisitos y especificaciones
        5. Gestión de arquitectura y documentación
        6. Monitoreo y alertas en producción
        7. Trazabilidad de despliegues
        8. Gestión de incidentes y on-call
        9. Feature flags y despliegues progresivos
        10. Entornos efímeros y pruebas aisladas
        11. Observabilidad (logs, métricas, trazas)
        12. Gestión de secretos y configuración segura
      12. Mejora continua de procesos y madurez operativa
        1. Ciclo de retroalimentación corta
        2. Postmortems sin culpa
        3. Revisión de arquitectura evolutiva
        4. Iteración sobre estándares internos
        5. Automatización sistemática de tareas manuales
        6. Reducción de trabajo no planificado
        7. Gestión activa de deuda técnica
        8. Capacitación continua y transferencia de conocimiento
        9. Escalamiento organizacional de prácticas efectivas
        10. Madurez operacional y confiabilidad como característica del producto
        11. Gobernanza técnica y responsabilidad compartida
        12. Cultura de seguridad incorporada en el proceso
Última modificación October 27, 2025: changes (85a7032)