Parte 2 de 5: de proyecto hobby a extensión con calidad enterprise
Tras mi momento de claridad al resolver la frustración diaria por el tamaño de archivos, tomé una decisión clave: construir rápido y sucio o construir bien. Elegí construir como si importara.
Resumen rápido: la arquitectura adecuada marca la diferencia entre un hack de fin de semana y software profesional. Con un patrón Manager Service, TypeScript en modo estricto y una gestión de recursos responsable, un simple visor de tamaño de archivo se convirtió en una extensión de VS Code de nivel empresarial.
Decisiones técnicas clave: separación real de responsabilidades con Manager Service, modo estricto de TypeScript con tipos Result para un manejo de errores sólido, actualizaciones con debounce y gestión de recursos para impacto cero en rendimiento, configuración viva que reacciona sin reinicios.
Enfoques que fallaron: intentar meter todo en extension.ts generó un caos inmantenible al añadir apenas tres funciones. Pasar a una clase única sin separar UI, lógica y acceso a archivos resultó frágil y rompible con cada cambio.
Por qué la arquitectura importa incluso en una extensión simple: sin cimientos sólidos, lo simple se vuelve inestable. Quería algo mantenible, testeable, escalable y profesional.
El avance: patrón Manager Service con una estructura clara de carpetas mentalmente simple de entender. Managers orquestan el ciclo de vida y los eventos, Services ejecutan operaciones de configuración y archivos, Utils ayudan con formato y logging, Types definen contratos. Resultado: responsabilidad única por clase, límites nítidos, pruebas aisladas, facilidad para crecer sin regresiones y escalabilidad natural.
El corazón: ExtensionManager coordina todo. Carga configuración, inicializa la UI, registra comandos, eventos y escucha cambios de configuración, y dispara el primer render. Impacto real: añadir un comando como Mostrar detalles llevó minutos, no horas, porque la arquitectura dictaba dónde iba cada pieza. Registro de comandos en ExtensionManager, lógica de UI en StatusBarManager, operaciones de archivo en FileService, sin tocar código existente.
Capa de UI: StatusBarManager se ocupa de toda la experiencia en la barra de estado. Cuando cambió la API de la status bar en VS Code 1.94, actualicé unas líneas en este manager y nada más. Esto habilitó temas, posiciones configurables, futura animación y recreación segura de la barra al cambiar su ubicación, sin tocar la lógica de negocio.
Capa de datos con servicios que sirven de verdad. ConfigurationService simplifica la lectura de settings y permite actualizaciones en tiempo real: al cambiar cualquier ajuste, el sistema reacciona al instante sin reiniciar. La experiencia para la persona usuaria es inmediata al modificar formato, posición o intervalos.
FileService hace el trabajo pesado y evolucionó hacia el patrón Result para el manejo de errores. En lugar de try catch esparcidos y poco claros, cada operación devuelve éxito o error explícito. Beneficios: nada falla en silencio, el flujo es predecible y el debugging es directo.
Utilidades pequeñas pero poderosas. SizeFormatter convierte bytes en valores legibles con precisión contextual. Tras varias iteraciones, la regla efectiva fue precisión cero para bytes y dos decimales para KB en adelante. Psicología de uso: archivos pequeños requieren precisión, archivos grandes requieren legibilidad.
Logger con registro estructurado. Pasar de logs genéricos a mensajes con timestamp, nivel y contexto transformó el soporte. Los reportes pasaron de está roto a aquí está el error exacto con su contexto, reduciendo el tiempo de diagnóstico de horas a minutos.
TypeScript como base de confianza. Todos los contratos tipeados, interfaces explícitas y modo estricto. Tipos Result para errores, sin any, sin accesos inseguros, sin retornos implícitos y todos los casos de error contemplados. Si compila, funciona.
Flujo de desarrollo profesional. Build único con Webpack y TypeScript para entregar un solo bundle ligero y rápido. Calidad consistente con ESLint y Prettier en cada commit, evitando discusiones de estilo y manteniendo la base limpia.
Rendimiento: cada milisegundo cuenta. Las actualizaciones están desacopladas con debounce para no saturar el sistema de archivos mientras se escribe. Protección para archivos grandes con un límite configurable por defecto en 1 GB que evita bloqueos al tratar ficheros masivos.
Lecciones aprendidas. Funcionó de maravilla el patrón Manager Service, TypeScript en modo estricto, Result como contrato de error y la separación estricta de UI, lógica y datos. Qué mejoraría: interfaces más granuladas, inyección de dependencias para testeo aún más fácil y un enfoque más orientado a eventos para reducir acoplamientos.
El lado humano: diseñé pensando en mi yo futuro. Quise que en seis meses todo siguiera siendo claro y extensible sin romper nada. Tras varias versiones, la respuesta es sí.
Qué sigue. En la Parte 3 profundizaré en las funciones que hacen especial a File Insights, desde el formato inteligente hasta las actualizaciones en tiempo real y su integración con el palette de comandos. La Parte 4 cubrirá retos técnicos y optimizaciones de rendimiento. La Parte 5 cerrará con estrategias de pruebas, más performance y la hoja de ruta.
Acerca de Q2BSTUDIO. Somos una empresa de desarrollo de software que diseña aplicaciones a medida y software a medida con foco en mantenibilidad, escalabilidad y rendimiento. Integramos inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi en soluciones reales que generan valor. Si buscas un equipo para llevar tu arquitectura a producción, descubre cómo abordamos proyectos de aplicaciones a medida y explora nuestras capacidades de inteligencia artificial aplicadas a productos listos para escalar.
Si File Insights ha mejorado tu flujo de trabajo, considera dejar una estrella al repositorio. Arquitectura y calidad importan hoy y mañana.