Planificación de ECommerce para PC Factory
1. Información General
Una tienda de partes de computación y productos tecnológicos. Tiene varias sucursales por todo Chile. Se debe diseñar un sistema que permita a sus vendedores realizar las ventas en cada tienda. Además de solicitar productos a otras tiendas cuando el producto no este disponible.
-
Nivel de presupuesto: Medio
-
Estimación de transacciones al día: 10,000
-
Estimación de transacciones al día (Máximo): 100,000 = Justificación de las tecnologías utilizadas
2. Selección de servidor
2.1. EC2 de AWS
Utilizaremos EC2 (Elastic Compute Cloud) de AWS (Amazon Web Services) como proveedor de servicios en la nube para alojar la aplicación PCFactory
2.2. Justificación
-
Flexibilidad: EC2 ofrece una amplia variedad de tipos de instancias con diferentes configuraciones de CPU, memoria y almacenamiento, lo que nos permite ajustar los recursos a las necesidades específicas de nuestra aplicación en cualquier momento.
-
Escalabilidad: EC2 nos permite escalar verticalmente (aumentar o disminuir la capacidad de una instancia) y horizontalmente (agregar o quitar instancias) de manera rápida y sencilla, lo que garantiza que nuestra aplicación pueda manejar un gran volumen de tráfico.
-
Seguridad: EC2 proporciona una amplia gama de herramientas y servicios de seguridad, como firewalls, cifrado de datos y monitoreo de la red, que nos permiten proteger nuestra aplicación y los datos de los usuarios.
-
Disponibilidad: EC2 garantiza una alta disponibilidad de nuestra aplicación mediante la distribución de instancias en múltiples zonas de disponibilidad y la configuración de balanceadores de carga para distribuir el tráfico de manera equitativa.
-
Madurez: EC2 es uno de los servicios de computación en la nube más antiguos y populares del mercado, lo que garantiza su estabilidad, confiabilidad y soporte continuo por parte de AWS.
2.3. Consideraciones adicionales
-
Tipos de instancias: Utilizaremos instancias de tipo t3.medium para el servidor de aplicaciones y rds.db.t3.medium para la base de datos, ya que ofrecen un equilibrio óptimo entre rendimiento, costo y recursos.
-
Autoescalado: Implementaremos autoescalado para ajustar automáticamente la capacidad de las instancias en función de la demanda de tráfico, lo que nos permitirá optimizar los costos y garantizar la disponibilidad de la aplicación en todo momento.
-
Respaldo de datos: Configuraremos copias de seguridad automáticas de la base de datos en S3 (Simple Storage Service) para garantizar la integridad y disponibilidad de los datos en caso de fallos o pérdidas.
3. Selección y diseño de base de datos
3.1. PostgresSQL
Utilizaremos PostgreSQL como sistema de gestión de bases de datos relacional (RDBMS) para almacenar la información de productos, ventas, clientes y otras entidades relevantes para el negocio de PCFactory.
3.2. Justificación
-
Rendimiento: PostgreSQL es un RDBMS maduro que permite modelar de manera eficiente las relaciones entre las entidades de negocio, como productos, clientes y pedidos.
-
Transaccionalidad: Ofrece un alto nivel de consistencia y seguridad gracias a sus características transaccionales, lo que es de suma importancia para un sistema de ventas donde la integridad de los datos es crítica.
-
Escalabilidad: PostgreSQL es altamente escalable y puede manejar grandes volúmenes de datos y transacciones concurrentes, lo que garantiza que nuestra aplicación pueda crecer y adaptarse a las necesidades del negocio.
-
Comunidad: Cuenta con una gran comunidad de usuarios, lo que facilita encontrar soluciones a problemas y obtener soporte.
3.3. Diseño de la base de datos:
-
Entidades: Definiremos las siguientes entidades principales:
-
Productos: Información detallada de los productos disponibles en la tienda.
-
Clientes: Datos de los clientes que realizan compras en la tienda.
-
Ventas: Registro de las transacciones de venta realizadas por los vendedores.
-
Sucursales: Información de las sucursales de PCFactory en todo Chile.
-
Inventario: Registro de los productos disponibles en cada sucursal.
-
Usuarios: Datos de los usuarios que tienen acceso al sistema de ventas.
-
-
Relaciones: Estableceremos las siguientes relaciones entre las entidades:
-
Productos <→ Inventario: Relación uno a muchos para asociar los productos disponibles en cada sucursal.
-
Clientes <→ Ventas: Relación uno a muchos para asociar las ventas realizadas por cada cliente.
-
Usuarios <→ Sucursales: Relación muchos
-
-
Normalización: Aplicaremos las reglas de normalización para evitar redundancia y garantizar la integridad de los datos.
3.4. Diagrama de base de datos (DBML)
4. Diseño de endpoint REST
4.1. API RESTful
Adoptaremos un enfoque RESTful para diseñar los endpoints de la API, utilizando HTTP methods y URLs significativas para representar las operaciones CRUD (Create, Read, Update, Delete) sobre los recursos de nuestra aplicación.
4.2. Justificación
-
Simplicidad: REST es un estilo de arquitectura simple y fácil de entender, que utiliza los métodos HTTP estándar (GET, POST, PUT, DELETE) para realizar operaciones sobre los recursos de la aplicación.
-
Estandar de la industria: REST es un estándar de la industria ampliamente utilizado en el desarrollo de APIs, lo que facilita la integración con otras aplicaciones y servicios.
-
Escalabilidad: REST es altamente escalable y permite la creación de APIs flexibles y modulares, que pueden adaptarse a los cambios en los requisitos del negocio.
-
Compatibilidad: REST es compatible con la mayoría de los lenguajes de programación y frameworks, lo que nos permite implementar la API en cualquier tecnología que elijamos.
4.3. Diseño de endpoints
-
Recursos: Identifiacremos los recursos principales de la aplicación, como productos, clientes, ventas, sucursales, inventario y usuarios.
-
Métodos HTTP: Utilizaremos los siguientes métodos HTTP para realizar operaciones CRUD sobre los recursos:
-
GET: Obtener información de un recurso o una colección de recursos.
-
POST: Crear un nuevo recurso.
-
PUT: Actualizar un recurso existente.
-
DELETE: Eliminar un recurso existente.
-
-
Formato de datos: Utilizaremos JSON como formato de intercambio de datos para las peticiones y respuestas de la API, ya que es ligero, legible y ampliamente compatible.
4.4. Consideraciones adicionales
-
Versionamiento: Implementaremos versionamiento en la API para garantizar la compatibilidad con versiones anteriores y futuras de la aplicación.
-
Autenticación y autorización: Utilizaremos mecanismos de autenticación y autorización, como tokens JWT (JSON Web Tokens) y roles de usuario, para proteger los endpoints y restringir el acceso a los recursos.
-
Paginación y filtros: Implementaremos paginación y filtros en los endpoints para manejar grandes volúmenes de datos y mejorar el rendimiento de la API.
-
Logs y monitoreo: Configuraremos logs y monitoreo en la API para rastrear las peticiones, identificar errores y mejorar la seguridad y el rendimiento de la aplicación.
4.5. Ejemplos de endpoints
-
Obtener todos los productos:
-
GET /api/productos (Obtener todos los productos disponibles)
-
GET /api/productos/{id} (Obtener un producto específico)
-
POST /api/productos (Crear un nuevo producto)
-
PUT /api/productos/{id} (Actualizar un producto existente)
-
DELETE /api/productos/{id} (Eliminar un producto existente)
-
4.6. Diagrama de endpoints
Arquitectura de la aplicación de PCFactory
5. Arquitectura de la aplicación
5.1. Frontend
React o Vue.js: Se utilizará un framework de frontend moderno para el desarrollo de la aplicación web. Se utilizará React o Vue.js, ya que son los frameworks más populares y con mayor soporte en la actualidad.
5.2. Backend
Node.js con Express: Se utilizará Node.js como entorno de ejecución para el backend de la aplicación. Se utilizará Express como framework web para el desarrollo de la API RESTful.
5.3. Base de datos
PostgreSQL: Se utilizará PostgreSQL para gestionar la información de productos, clientes,pedidos e inventario.
5.4. Infraestructura
EC2 de AWS: Se utilizará Amazon EC2 para alojar la aplicación web y la base de datos en la nube. EC2 proporciona una infraestructura escalable y segura para ejecutar aplicaciones web de alta disponibilidad.
5.5. Diagrama de arquitectura
5.5.1. Diagrama de Contexto
5.6. Diagrama de Contenedores
5.7. Diagrama de Componentes
5.8. Diagrama de Código
Personas
6. Persona Positiva: Cliente Leal
-
Nombre: Fernando
-
Edad: 30 años
-
Ocupación: Diseñador gráfico
-
Motivación:
-
Busca un computador para trabajar en su casa
-
Aprovechar descuentos y promociones
-
Obtener asesoramiento en la compra
-
-
Comportamiento:
-
Busca información en la web
-
Compara precios y características
-
Realiza la compra en línea
-
Se comunica con el vendedor para aclarar dudas
-
-
Necesidades:
-
Información clara y detallada de los productos
-
Facilidad para comparar precios y características
-
Asesoramiento personalizado
-
Proceso de compra sencillo y seguro
-
7. Persona Negativa: Cliente Desconfiado
-
Nombre: Carla
-
Edad: 45 años
-
Ocupación: Profesora
-
Motivación:
-
Desconfianza en las compras en línea
-
Miedo a ser estafada
-
Preferencia por la compra presencial
-
-
Comportamiento:
-
Visita la tienda física para ver los productos
-
Consulta precios en línea
-
Realiza la compra en la tienda física
-
Evita proporcionar información personal en línea
-
-
Necesidades:
-
Ver y probar los productos antes de comprar
-
Sentirse segura y protegida en la compra
-
Evitar proporcionar información personal en línea
-
Atención personalizada en la tienda física
-
8. User Journey
Estimaciones de profesionales
9. Profesionales necesarios
-
Desarrollador Frontend (React o Vue.js) - 1 o 2 profesionales
-
Responsabilidades: Implementar el frontend utilizando React o Vue.js, asegurando que el sistema sea responsive y fácil de usar tanto para los vendedores como para el cliente en la web. Además estar a la vanguardia de las tecnologías y tendencias en el desarrollo frontend.
-
Habilidades: Conocimientos avanzados en React o Vue.js, HTML, CSS, JavaScript, Responsive Design, manejo de APIs RESTful, Git.
-
-
Desarrollador Backend (Node.js con Express) - 2 o 3 profesionales
-
Responsabilidades: Implementar el backend utilizando Node.js con Express, diseñar y desarrollar la API RESTful, gestionar la base de datos PostgreSQL, asegurar la escalabilidad y seguridad de la aplicación.
-
Habilidades: Conocimientos avanzados en Node.js, Express, JavaScript, RESTful APIs, PostgreSQL, Git, Docker, AWS.
-
-
Administrador de Base de Datos - 1 profesional
-
Responsabilidades: Diseñar y gestionar la base de datos PostgreSQL, asegurar la integridad y disponibilidad de los datos, optimizar las consultas y el rendimiento de la base de datos.
-
Habilidades: Conocimientos avanzados en PostgreSQL, SQL, modelado de datos, optimización de consultas, seguridad de bases de datos y entornos en la nube.
-
-
DevOps Engineer - 1 profesional
-
Responsabilidades: Automatizar el despliegue y la gestión de la infraestructura en AWS EC2, implementar pipelines de CI/CD, asegurar la disponibilidad y escalabilidad de la aplicación.
-
Habilidades: Conocimientos avanzados en AWS, Docker, CI/CD, scripting, monitoreo y gestión de infraestructura.
-
-
Diseñador UX/UI - 1 profesional
-
Responsabilidades: Diseñar la interfaz de usuario y la experiencia de usuario de la aplicación web, asegurando que sea intuitiva, atractiva y fácil de usar para los vendedores y clientes.
-
Habilidades: Conocimientos avanzados en diseño UX/UI, herramientas de diseño (Sketch, Figma, Adobe XD), prototipado, usabilidad, accesibilidad.
-
-
Project Manager - 1 profesional
-
Responsabilidades: Gestionar el equipo de desarrollo, coordinar las tareas y plazos, comunicarse con el cliente, asegurar la calidad y el cumplimiento de los requisitos del proyecto.
-
Habilidades: Experiencia en gestión de proyectos, metodologías ágiles (Scrum, Kanban), comunicación efectiva, resolución de conflictos, liderazgo.
-
-
QA Engineer - 1 profesional
-
Responsabilidades: Diseñar y ejecutar pruebas de software, identificar y reportar errores, asegurar la calidad y fiabilidad de la aplicación.
-
Habilidades: Conocimientos en pruebas de software, metodologías de pruebas, herramientas de automatización (Selenium, Cypress), reporte de bugs, seguimiento de incidencias.
-
-
Especialista en Seguridad - 1 profesional
-
Responsabilidades: Identificar vulnerabilidades de seguridad, implementar medidas de protección, asegurar la integridad y confidencialidad de los datos, cumplir con estándares de seguridad.
-
Habilidades: Conocimientos en ciberseguridad, auditorías de seguridad, protección de datos, criptografía, cumplimiento normativo, gestión de incidentes de seguridad. = Estimación de costos para entornos
-
10. Entorno bajo (10,000 transacciones al día)
El entorno bajo es un entorno de desarrollo y pruebas. Se estima que se realizarán 10,000 transacciones al día.
-
AWS EC2: Instancias pequeñas con balanceo de carga básico.
-
Costos aproximados: $800 a $1,500 USD/mes.
-
Servicios adicionales:
-
Base de datos PostgreSQL: $100 a $200 USD/mes.
-
Monitorización y alertas: $50 USD/mes.
-
-
Costo total aproximado al mes: $1,050 a $1,750 USD/mes.
11. Entorno medio (50,000 transacciones al día)
El entorno medio es un entorno de pre-producción y pruebas de carga. Se estima que se realizarán 50,000 transacciones al día.
-
AWS EC2: Instancias medianas con escalabilidad automática.
-
Costos aproximados: $2,500 a $4,000 USD/mes.
-
Servicios adicionales:
-
Base de datos PostgreSQL con replicación: $500 USD/mes.
-
Monitorización y alertas avanzadas: $200 USD/mes.
-
-
Costo total aproximado al mes: $3,200 a $4,700 USD/mes.
12. Entorno alto (100,000 transacciones al día)
El entorno alto es un entorno de producción y alta disponibilidad. Se estima que se realizarán 100,000 transacciones al día.
-
AWS EC2: Instancias grandes con balanceo de carga avanzado y autoescalado.
-
Costos aproximados: $5,000 a $8,000 USD/mes.
-
Servicios adicionales:
-
Base de datos PostgreSQL con replicación y respaldo: $1,000 USD/mes.
-
Monitorización crítica (Prometheus, Grafana): $500 USD/mes.
-
Servicios de seguridad avanzada (VPN, Firewall): $300 USD/mes.
-
-
Costo total aproximado al mes: $6,800 a $9,800 USD/mes.
Estimación de plazos para desarrollo
| Fase | Duración Estimada |
|---|---|
Recolección de Requerimientos |
2 semanas |
Diseño del Sistema (UI/UX, Arquitectura) |
3 semanas |
Desarrollo del Backend (Node.js, Express, PostgreSQL) |
6-8 semanas |
Desarrollo del Frontend (React o Vue.js) |
5-6 semanas |
Integración del Sistema (Frontend + Backend) |
2 semanas |
Pruebas Funcionales y No Funcionales |
3 semanas |
Despliegue en AWS y Ajustes Finales |
2 semanas |
Total Aproximado |
20-24 semanas (~5-6 meses) |
13. Resumen
Profesionales: Un equipo de 9-10 personas incluyendo Frontend, Backend, DBA, DevOps, UX/UI, QA, Project Manager y Seguridad. Plazo de Implementación: Aproximadamente 5-6 meses. Costos Estimados para Infraestructura: - Entorno Bajo: $1,050 a $1,750 USD/mes. - Entorno Normal: $3,200 a $4,700 USD/mes. - Entorno Crítico: $6,800 a $9,800 USD/mes.
Alcance del sistema
14. ¿Qué es el sistema?
El sistema es una plataforma de e-commerce para una cadena de tiendas de partes de computación y productos tecnológicos con varias sucursales en Chile. Permite a los clientes comprar productos en línea, mientras que los vendedores pueden gestionar ventas en tienda y solicitar productos entre las sucursales si no están disponibles localmente. Incluye un frontend desarrollado con React o Vue.js, un backend con Node.js y Express, y una base de datos PostgreSQL para gestionar productos, clientes, pedidos e inventarios. La infraestructura está alojada en AWS EC2, lo que permite escalar para manejar hasta 100,000 transacciones diarias.
15. ¿Qué no es el sistema?
-
Una plataforma exclusiva para vendedores. Está diseñada para ser usada tanto por clientes finales como por los empleados en las tiendas.
-
Una solución de e-commerce genérica. Está específicamente adaptada a una cadena de tiendas de partes de computación y productos tecnológicos, con funcionalidades particulares como la solicitud de productos entre tiendas.
-
Un sistema de gestión empresarial completo (ERP). Aunque maneja inventarios y ventas, no incluye módulos avanzados como la contabilidad o la gestión de recursos humanos.
16. ¿Qué hace el sistema?
-
Permite a los clientes comprar productos en línea de manera rápida y segura.
-
Ofrece a los clientes un catálogo de productos con opciones para comparar precios y características.
-
Permite a los vendedores realizar ventas tanto en la tienda física como en línea.
-
Facilita la solicitud de productos entre sucursales si no están disponibles en la tienda local.
-
Gestiona inventarios en tiempo real, asegurando que los productos estén correctamente actualizados.
-
Utiliza una arquitectura escalable en la nube, permitiendo manejar grandes volúmenes de transacciones diarias.
-
Proporciona un sistema de seguimiento de pedidos y actualización del estado de los envíos para los clientes.
17. ¿Qué no hace el sistema?
-
Sustituye a un ERP completo. No gestiona aspectos contables, fiscales o recursos humanos de la empresa.
-
No es una solución exclusivamente física. Aunque permite ventas en tiendas, está diseñado para la venta en línea y el manejo híbrido de ambos entornos.
-
No gestiona proveedores externos. Está centrado en la venta de productos ya disponibles en las tiendas, sin integrar la cadena de suministro completa.
-
No incluye funcionalidades avanzadas de marketing digital o CRM para el seguimiento exhaustivo de la relación con el cliente más allá de la venta.