- Diseño de software- Diseño y arquitectura de software - Principios de diseño orientado a mantenibilidad- Acoplamiento bajo y cohesión alta
- Separación de responsabilidades (SoC)
- Encapsulamiento y ocultamiento de información
- Principios SOLID
- Interfaces estables y contratos claros
- Evolución controlada de componentes
- Facilidad de pruebas y capacidad de ser testeable
- Observabilidad y depurabilidad
 
- Principios como evitar repetición innecesaria y mantener la simplicidad- DRY (Don’t Repeat Yourself)
- KISS (Keep It Simple, Stupid)
- YAGNI (You Aren’t Gonna Need It)
- Minimización de complejidad accidental
- Ley de Demeter
- Principio de menor sorpresa
- Minimización de dependencias implícitas
 
- Patrones de diseño (creacionales, estructurales y de comportamiento)- Patrones creacionales- Factory Method
- Abstract Factory
- Builder
- Prototype
- Singleton
- Object Pool
- Dependency Injection
 
- Patrones estructurales- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
- DTO (Data Transfer Object)
 
- Patrones de comportamiento- Strategy
- Observer / Publish–Subscribe
- Command
- Chain of Responsibility
- State
- Template Method
- Iterator
- Mediator
- Memento
- Visitor
- Specification
- Null Object
 
- Patrones concurrentes- Producer–Consumer
- Reader–Writer
- Reactor
- Circuit Breaker
- Bulkhead
- Retry / Backoff
 
- Patrones arquitectónicos- MVC / MVP / MVVM
- CQRS (Command Query Responsibility Segregation)
- Event Sourcing
- Pipes and Filters
 
 
- Patrones creacionales
- Arquitectura en capas- Capa de presentación
- Capa de aplicación / servicio
- Capa de dominio / negocio
- Capa de infraestructura / persistencia
- Separación lógica vs separación física
- Dependencias dirigidas hacia adentro
- Problemas comunes del modelo de capas tradicional
 
- Arquitectura limpia- Círculos concéntricos y dependencia hacia el dominio
- Entidades y casos de uso
- Interfaces de entrada y salida
- Controladores y presentadores
- Gateways / repositorios
- Independencia de frameworks
- Testabilidad y reemplazo de infraestructura
 
- Arquitectura hexagonal y separación de puertos/adaptadores- Dominio como núcleo independiente
- Puertos (interfaces dirigidas hacia el dominio)
- Adaptadores primarios (driving)
- Adaptadores secundarios (driven)
- Sustitución de infraestructura (DB, colas, APIs externas)
- Aislamiento de efectos secundarios
- Pruebas a nivel de puerto
 
- Diseño guiado por el dominio (Domain-Driven Design)- Lenguaje ubicuo
- Contextos delimitados (bounded contexts)
- Mapeo de contexto y relaciones entre contextos
- Modelo de dominio explícito
- Entidades de dominio
- Objetos de valor
- Servicios de dominio
- Agregados y raíces de agregado
- Repositorios
- Eventos de dominio
- Anti-corrupción layer
- Refactorización del modelo a partir del conocimiento del negocio
 
- Monolitos modulares y microservicios- Monolito tradicional
- Monolito modular
- Fronteras de módulo internas
- Microservicios
- Criterios para extraer un microservicio
- Comunicación síncrona vs asíncrona
- Despliegue independiente
- Consistencia eventual entre servicios
- Observabilidad distribuida
- Versionado e independencia de ciclo de vida
- Enrutamiento y descubrimiento de servicios
- Gestión de fallas en cascada
 
- Arquitecturas dirigidas por eventos- Productores y consumidores de eventos
- Bus de eventos y colas de mensajería
- Event Sourcing
- CQRS y eventos como fuente de verdad
- Coreografía vs orquestación
- Idempotencia en el consumo de eventos
- Consistencia eventual
- Retries y colas muertas
- Garantías de entrega (at-most-once, at-least-once, exactly-once)
 
- Versionado de interfaces y ciclos de vida de APIs- Versionado de endpoints
- Versionado semántico
- Compatibilidad hacia atrás
- Deprecación controlada de contratos
- Estabilidad de contratos públicos
- Gestión del ciclo de vida de API
- Cambios breaking y comunicación interna/externa
- Evolución de esquemas y modelos de datos
- Control de capacidad y límites de uso (rate limiting)
- Políticas de seguridad y autenticación
 
- Documentación técnica orientada a desarrolladores y mantenimiento- Documentación de arquitectura
- Diagramas de componentes y dependencias
- Especificación de APIs
- Contratos de servicios internos
- ADRs (Architecture Decision Records)
- Guías de despliegue y operación
- Manuales de resolución de incidentes
- Documentación de límites y garantías (SLO, SLA)
- Registro de cambios técnicos
- Estándares de estilo y convenciones
- Versionado de la documentación
- Documentación cercana al código vs documentación externa
 
- Modularización y empaquetado de componentes reutilizables- Diseño de librerías internas
- Paquetes reutilizables por equipo/proyecto
- Reutilización vs copia localizada
- Estabilidad de interfaces internas
- Control de dependencias internas
- Gestión de versiones de componentes compartidos
- Monorepos vs multirepos
- Plugins y extensiones
- Políticas de rompimiento de compatibilidad interna
- Reglas de ownership por módulo
- Catálogo interno de servicios y librerías
- Distribución binaria vs distribución de código fuente
 
 
- Principios de diseño orientado a mantenibilidad
- Algoritmos y estructuras de datos - Complejidad temporal y espacial (notación asintótica)- O grande
- Ω y Θ
- Mejor caso, peor caso y caso promedio
- Complejidad amortizada
- Costos de memoria y caché
- Complejidad de acceso a memoria
 
- Análisis de eficiencia algorítmica- Conteo de operaciones dominantes
- Análisis de bucles anidados
- Análisis de recurrencias
- Optimización temprana vs microoptimizaciones
- Trade-offs tiempo vs espacio
- Escalabilidad asintótica
 
- Estructuras lineales (listas, pilas, colas, colas dobles)- Arreglos (arrays) y listas contiguas
- Listas enlazadas simples y dobles
- Pilas (stacks)
- Colas (queues)
- Colas dobles (deques)
- Listas circulares
- Listas bloqueadas / chunked
- Buffers circulares
- Implementación sobre memoria dinámica
- Costos de inserción, borrado y acceso
 
- Árboles, montículos, tries y estructuras jerárquicas- Árboles binarios
- Árboles binarios de búsqueda (BST)
- Árboles balanceados (AVL, Red-Black)
- Árboles B y B+
- Árboles segmentados (segment trees)
- Fenwick / Binary Indexed Trees
- Montículos (heaps)
- Priority queues
- Heaps binomiales y Fibonacci
- Tries
- Compresión de tries y radix trees
- Árboles cuaternarios y octrees
- Árboles de intervalo y de rango
- Árboles de decisión
- Árboles de sufijos
 
- Grafos- Representación de grafos (matriz de adyacencia, lista de adyacencia)
- Grafos dirigidos y no dirigidos
- Grafos ponderados
- Árboles de expansión mínima
- Caminos mínimos
- Detección de ciclos
- Ordenamiento topológico
- Componentes fuertemente conexas
- Flujos máximos
- Matching y emparejamiento
- Grafos bipartitos
- Conectividad y puentes
- Grafos dinámicos y online
- Grafos probabilísticos
 
- Hashing y tablas hash- Funciones hash
- Colisiones y métodos de resolución
- Direccionamiento abierto
- Encadenamiento separado
- Rehashing y factor de carga
- Hash consistente
- Bloom filters
- Cuckoo hashing
- Tablas hash inmutables
- Trade-offs entre hash y árboles balanceados
 
- Algoritmos de ordenamiento y búsqueda- Búsqueda lineal
- Búsqueda binaria
- Ordenamiento por comparación (quicksort, mergesort, heapsort)
- Ordenamiento no comparativo (counting sort, radix sort, bucket sort)
- Estabilidad del ordenamiento
- Selección del k-ésimo elemento
- Ordenamiento externo
- Ordenamiento parcial e incremental
- Búsqueda aproximada
 
- Recursividad y divide y vencerás- Recurrencias clásicas
- Descomposición de problemas
- Mergesort / Quicksort como divide y vencerás
- Búsqueda binaria recursiva
- Poda y recursión con backtracking
- Recursión de cola y optimización de cola
- Profundidad máxima y stack frames
 
- Programación dinámica y memoización- Subproblemas solapados
- Estados y transiciones
- Tablas bottom-up
- Memoización top-down
- Optimización de espacio
- Reutilización incremental de resultados
- DP con reconstrucción de solución
- DP en grafos acíclicos dirigidos
- DP probabilística
 
- Algoritmos de concurrencia y sincronización- Secciones críticas
- Exclusión mutua
- Locks, mutexes y semáforos
- Barreras y barreras cíclicas
- Paso de mensajes
- Algoritmos sin bloqueo (lock-free)
- Algoritmos wait-free
- Consistencia de memoria
- Algoritmos de consenso
- Deadlocks y prevención
- Scheduling y fairness
- Control de contención
 
- Estructuras de datos inmutables o persistentes- Árboles persistentes
- Listas persistentes
- Hash tries inmutables
- Copy-on-write
- Versionado estructural
- Sharing estructural
- Costos de mutación lógica
- Estructuras puramente funcionales
 
- Algoritmos probabilísticos y aproximados- Algoritmos Monte Carlo
- Algoritmos Las Vegas
- Sampling aleatorio
- Sketches de datos
- Conteo aproximado y cardinalidad estimada
- Algoritmos streaming
- Aprox. para problemas NP-duros
- Randomización para balance de carga
- Probabilistic hashing
- Tolerancia a error y control de confianza
 
 
- Complejidad temporal y espacial (notación asintótica)
- Procesos de ingeniería de software - Requisitos de software- Requisitos funcionales
- Requisitos no funcionales
- Atributos de calidad (rendimiento, seguridad, confiabilidad, escalabilidad)
- Restricciones técnicas y regulatorias
- Requisitos operacionales
- Priorización de requisitos
- Gestión de expectativas de stakeholders
 
- Análisis, especificación y trazabilidad de requisitos- Historias de usuario
- Casos de uso
- Escenarios de negocio
- Requisitos formales
- Modelos de dominio y vocabulario compartido
- Matrices de trazabilidad
- Control de cambios de requisitos
 
- Diseño de software- Modelado de arquitectura
- Diseño de componentes y módulos
- Diagramas estructurales y de interacción
- Definición de interfaces
- Diseño orientado a pruebas
- Diseño para observabilidad
- Diseño para despliegue y operación
 
- Construcción y estándares de codificación- Estándares de estilo
- Convenciones de nombres
- Revisión de código (code review)
- Guías de ramificación y control de versiones
- Integración continua
- Automatización de builds
- Gestión de dependencias externas
- Gestión de secretos y configuración
- Prácticas seguras de codificación
- Políticas de deuda técnica
 
- Verificación y validación- Pruebas unitarias
- Pruebas de integración
- Pruebas de contrato
- Pruebas end-to-end
- Pruebas de regresión
- Pruebas de rendimiento y carga
- Pruebas de seguridad
- Fuzzing
- Revisión estática de código y análisis estático
- Auditorías técnicas
- Aprobación de despliegues
 
- Mantenimiento evolutivo y correctivo- Corrección de defectos
- Refactorización continua
- Gestión de deuda técnica
- Extensión de funcionalidades existentes
- Migración tecnológica
- Compatibilidad hacia atrás
- Gestión de riesgos en cambios
- Planificación de fin de vida
 
- Gestión de la configuración- Control de versiones
- Estrategias de branching
- Versionado semántico
- Gestión de releases
- Trazabilidad de cambios en producción
- Infraestructura como código
- Gestión de entornos
- Auditoría y cumplimiento
 
- Ingeniería de calidad de software- Aseguramiento de calidad (QA)
- Control de calidad
- Estrategias de pruebas automatizadas
- Cobertura de pruebas
- Definición de criterios de aceptación
- Definición de DoD (Definition of Done)
- Observabilidad como parte de la calidad
- Gestión de incidentes y postmortems
- Revisión continua de confiabilidad
- Gestión de vulnerabilidades
 
- Procesos de desarrollo- Cascada
- Prototipado evolutivo
- Iterativo incremental
- RUP / procesos unificados
- Agile / Agile industrial
- Scrum
- Kanban
- Lean software
- DevOps
- GitOps
- Continuous Delivery / Continuous Deployment
- Inner source y colaboración abierta interna
 
- Métricas de productividad y calidad del software- Velocidad de entrega
- Lead time de cambios
- Tiempo medio de recuperación (MTTR)
- Frecuencia de despliegues
- Tasa de cambios fallidos
- DORA metrics
- Densidad de defectos
- Cobertura de pruebas útil
- SLOs y SLIs
- Disponibilidad y confiabilidad percibida
- Estabilidad vs velocidad de cambio
- Costo total de propiedad (TCO)
 
- Herramientas de soporte al ciclo de vida del software- Sistemas de control de versiones
- Integración continua y pipelines de CI/CD
- Sistemas de seguimiento de issues
- Gestión de requisitos y especificaciones
- Gestión de arquitectura y documentación
- Monitoreo y alertas en producción
- Trazabilidad de despliegues
- Gestión de incidentes y on-call
- Feature flags y despliegues progresivos
- Entornos efímeros y pruebas aisladas
- Observabilidad (logs, métricas, trazas)
- Gestión de secretos y configuración segura
 
- Mejora continua de procesos y madurez operativa- Ciclo de retroalimentación corta
- Postmortems sin culpa
- Revisión de arquitectura evolutiva
- Iteración sobre estándares internos
- Automatización sistemática de tareas manuales
- Reducción de trabajo no planificado
- Gestión activa de deuda técnica
- Capacitación continua y transferencia de conocimiento
- Escalamiento organizacional de prácticas efectivas
- Madurez operacional y confiabilidad como característica del producto
- Gobernanza técnica y responsabilidad compartida
- Cultura de seguridad incorporada en el proceso
 
 
- Requisitos de software
 
Versión imprimible multipagina. Haga click aquí para imprimir.