He diseñado la mejor aplicación del mundo

13329570024_d7945dbaca_k.jpg

Imagen de Michael Elliott

Estoy muuuuy ilusionado con un nuevo proyecto personal que me ha salido. Mi tío, que tiene una pequeña tienda de electrodoméstico, quiere que le modernice los sistemas informáticos que usan desde que abrió hace ya 15 años.

Necesita una aplicación financiera con la que poder gestionar todo lo que ocurre en su pequeña tienda de Hortaleza, esto es, gestionar pedidos, facturas, recibos, empleados y demás…Vamos, el kit completo típico.

Tenía pensado comprarse una pequeña suite de aplicaciones para PYMES que permiten todo esto, pero el precio de 300 €, me parece desproporcionado, así que he decidido hacerlo yo. Mi tío es una persona muy noble y me ha dicho que me pagará por todo el tiempo que me lleve el proyecto.

LLevo unos días pensando en cómo lo quiero hacer y he diseñado todo un stack completo. Como creo que me ha quedado muy guay, quería compartirlo con vosotros. ¿Os apetece ayudarme con feedback? Pues adelante y seguid leyendo:

La idea del post es dedicar unos párrafos a cada una de las decisiones que he tomado. Empezaré desde la capa más visual, hasta la capa más oscura y profunda del back. También os explicaré cómo intentaré gestionarlo y mi forma de trabajar. Veamos:

Mi aplicación quiero que tenga un aire muy elegante y bonito. Me interesa que sea visualmente agradable y que sea lo más reconocible para los usuarios. Por tanto, creo que es una buena idea que use una guía de estilo de Material Design. Creo que casi nadie lo está usando y que me permitirá diferenciarme, es tan fácil como poner una paleta de colores acordes a la marca de la empresa de mi tío.

He estado buscando por internet y he visto que existen templates sobre Material chulísimas y que dedicarle tiempo a esta parte del proyecto, no merece la pena. Aunque maqueto bastante bien, con un framework como Materialize, tengo suficiente. Es Material Design, tiene todos los componentes y le puedo cambiar los colorines. Perfecto! Encima es Responsive, más no puedo pedir.

Para la parte JavaScript, he estado viendo alternativas: Angular me parece demasiado sencillo y React demasiado complicado. He visto que VueJS promete, pero veo que empieza a tener demasiada comunidad, así que seguí buscando.

Estaba un poco desesperado con todas las opciones que hay y que ninguna me gustase me empezaba a frustrar, así que estaba pensando en crear mi propia librería JavaScript para gestionar los templates y los router. Todo muy rollo componentes, como los Web components, pero sin seguir el estándar. Todo lo que me ahorraba en tiempos con el CSS y el HTML, lo podía meter aqui.

Al final, he tenido suerte y todas las ideas que yo tenía, las implementa un framework que se llama DuraCelJS, así que me decanto por él. Además, he encontrado un proyecto en GitHub con un template y he visto que depende de más de 50 módulos de NPM… creo que cuantas más, mejor.

La parte del backend va a ser una API. He pensado que quizá el negocio de mi tío crezca en los próximos años, así que lo voy a escalar por medio de microservicios. He contado que tendré como mucho 5 o 6 microservicios. Bueno… alguno será un poco más grande de lo esperado, pero se me complica demasiado si creo más.

En dos de ellos compartiré la base de datos porque me facilita la sincronización. Quizá en el futuro, piense en insertar en algo como pueda ser comunicación por mensajes y eventos, pero ahora mismo solo hay una comunicación entre microservicios, no me merece la pena.

Le voy a poner un NGINX como proxy inverso y oAuth. Puede que en el futuro mi API la usen terceros. El código lo desarrollaré con NodeJS, necesito versatilidad, que todo sea rápido, que vuele. Si veo que con el tiempo me cuesta mantenerlo, le empiezo a meter test unitarios, los tipos a mi no me suelen hacer falta.

La base de datos que se usar es MongoDB, no conozco más, así que es la mejor opción. Me he dado cuenta que tendré problemas con ciertas transacciones al ser una aplicación financiera, pero lo simularé con un módulo que haré. Usaré mongoose para guardar la información estructurada. Estos esquemas me ayudarán a normalizar todo y a cometer menos errores en el guardado de datos.

Voy a crear un sistema de logs que me avise cuando haya problemas. Pondré Kibana, LogStash y ElasticSearch y quizá pueda meter TensorFlow, así por fín podría entenderlo. He visto que los empleados de mi tío son un poco pillos, así registraré todo en un blockchain para que nos quede una traza de todo.

Me he dado cuenta que mi tío necesita un módulo de envío de correos, eso se lo pienso delegar al servicio de Amazon.Si, creo que mi tío necesita algo en la nube. Si nadie va a mantener el sistema, necesita una infraestructura en alta disponibilidad… qué mejor que Amazon para eso. Por ahora, tiraré con la cuenta gratuíta de un año. Todo ‘Dockerizado’ y con Kubernetes, por supuesto.

Para desarrollar, lo subiré a GitHub, he comprado una cuenta privada. Voy a usar GitFlow como gestión del código. Por ahora no voy a usar Jenkins ni nada parecido. Creo que es pronto para ver si necesito medir la calidad del código y que meter eso en una fase tan inicial solo va a entorpecer.

Usaré Scrum como metodología, quitaré la daily, la retro y el sprint planning por obvio. Si algún amigo me ayuda, veremos si seguimos con esta forma de trabajo 0 tengo que meter un Jira o Trello. Enseñaré a mi tío a usar GitHub y le diré como crear una isue, creo que así será más fácil para ambos.

Bueno…no sé ¿qué os parece?, yo estoy emocionadísimo por todo lo que voy a aprender. Espero que mi tío esté contento. Mañana me junto a tomar un café con él para que me cuente más o menos lo que necesita, eso sí, antes de que yo le enseñe la arquitectura. Le voy a impresionar.

Estoy pensando en cuánto tiempo me llevará… quizá se me vaya un poco del presupuesto, pero bueno, mi tío lo entenderá, es lo que tiene diseñar la mejor aplicación del mundo 😉

Nos leemos 🙂

 

Anuncios

6 comments

  1. ddgcarbayo · marzo 2

    Hazte todo serverless con lambda y cognito! Cloudsearch y dynamodb! Así practicas bien con AWS.

    Le gusta a 1 persona

  2. Txotxo · marzo 4

    Estas de coña no?

    Me gusta

  3. manu onda · abril 9

    Muy bueno !! 🙂 Como usas el blockchain y tensorflow.. Me parece muy interesante ademas de usar elasticsearch..Saludos

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s