Xavier Fornés

Acerca de mí

Xavier Fornés

Soy desarrollador de aplicaciones web y vivo en Mataró (Barcelona).

Desde el año 2005 me dedico profesionalmente al desarrollo de aplicaciones Web. A lo largo de estos años he trabajado en una gran variedad de proyectos en empresa tanto por cuenta ajena como por cuenta propia.

Érase una vez...

1987. La era del MSX y del Amiga 500

Un dia cualquiera de 1988 tomé conciencia de los cacharros que teníamos en casa. Un MSX-1, un par de juegos de cartuchos y un montón de cintas que tardaban horas en cargarse en el ordenador y empezar el juego.

Los años pasaron, esta vez jugando en casa de un amigo con su Amiga 500 a juegos de fútbol, el Shinobi y otros tantos, aquí había nivel, éste iba con disquetes.

1989. Un 8086

Pasaron los años hasta que tocó hacer la comunión, con unos 9 años. Como todo buen niño que no sabe lo que le conviene yo quería una moto. Ya sabéis la típica pregunta de los padres: “¡Qué te haría ilusión!”, pues una moto dije yo.

Por suerte no me hicieron caso y mi padre, en un alarde de sabiduría para nada egoísta dijo:
- ¡Compraremos un PC!

A los 3 meses él se cansó. Y ya que estaba en mi habitación y debía sacarle el polvo, empezé a jugar con él. Recuerdo estar horas, tardes enteras con el MS-DOS 3.2, mi tarjeta CGA de 4 colores y mucha curiosidad por saber cómo iba.

Mi madre, también sabia, pensó que eso de jugar a baloncesto no tendría futuro. Y parece que con mis actuales 165cm de altura tomó una buena decisión, pero volvamos al pasado. Me apuntó a un curso de informática. Y eso hice durantes unos pocos sábados por la mañana, aprender Wordperfect, Lotus123, Flow, y otros tantos que ya no recuerdo. Sí, hubo vida y otros procesadores y hojas de cálculo antes del Word o Excel que todos conocéis.

Hacia el final empezó lo interesante: GWBasic. ¡DIOS! Si hubiera tenido internet entonces, hubiera hecho como la mayoría hoy en día, usarlo para chatear y colgar fotos de la bici tan chula que tengo, pero en mi caso, a falta de Facebook, aprendí a programar. Y permitidme llamarle a eso programar, que para eso era un niño ;). Con gran pena acabó el curso. En mi casa continué trasteando, sacando cosas de las pocas fotocopias que nos habían dado en el curso y aún sin poder acceder a ningún libro, a los 10 años programé mi propia agenda telefónica. Mi primera aplicación funcional, con sus listados de los teléfonos de mis amigos, sus ordenaciones por nombre o apellido, y la inserción, modificación y/o borrado de registros... fue mi gran triumfo.

Terminó el verano, las clases empezaron de nuevo y mi gen developer se durmió.

  • GWBasic
1998. Vocación

Largos años pasaron desde mi agenda telefónica pero en Bachillerato tenía clara mi vocación: Ingeniería Informática.

Hasta mi graduación compaginé las clases y las prácticas con trabajos de soporte informático en Amena, Omron Electronics o HCC Global y otras tantos trabajos en ETTs.

2005. El despertar

Me encuentro con unos pocos créditos para terminar la carrera, llevo ya años trabajando arreglando ordenadores y por fin cambio un trabajo de developer en Inmofactory: una empresa que desarrollaba un ERP de gestión inmobiliaria. Aquí tocaríamos tecnologías ahora tan obsoletas como ASP 3, HTML, Visual Basic y MS-SQL Server 6. Aprendí a hacer listados y reports para nuestros clientes, me ocupé de unas cuantas importaciones de otros softwares a nuestro SaaS (ya en esa época vendíamos SaaS, a que molábamos :P!).

También termino un postgrado en Software Libre en la Fundación Politécnica de Cataluña.

  • Inmofactory
  • ASP
  • VB
  • MSSQL Server
  • HTML
2006. De junior a senior

Llevo un tiempo trabajando, el título bajo el brazo y muchas ganas de salir del cascarón. Me cambio a BeRepublic una empresa en el sector del marketing online.

Descubro PHP y Mysql. Pasan los meses y voy tomando responsabilidades en el área de desarrollo tecnológico, empiezo a gestionar personas y hasta trabajamos con equipos externos (outsorcing en Argentina). Tomo funciones de gestión de proyectos (propuesta tencológica, planificación y seguimiento), análisis e implementación de proyectos medianos (de más de 3 meses de desarrollo). Implanto el uso de frameworks para el desarrollo de las aplicaciones, symfony para proyectos más grandes y CakePHP para microsites o proyectos más pequeños. Desarrollamos aplicaciones llave en mano para su integración en sistemas ERP o CRM de nuestros clientes, y una herramienta de emailing massivo para las campañas de email marketing de nuestros clientes, con volúmenes de más de 40.000 emails por envío.

  • BeRepublic
  • ASP
  • VB
  • PHP
  • MySQL
  • symfony1.4
  • CakePHP
  • HTML
  • CSS
  • Javascript
  • jQuery
  • Arquitectura
  • Gestión de proyectos
2009. Señor Director

Necesito un cambio. El trato día a día con emprendedores como son los socios de BeRepublic, despiertan mi afán por empezar algo y sentir un proyecto como mío. Un domingo por la noche veo por casualidad una oferta de Director de tecnología para una nueva startup: Factual. Me apunto y me contratan :).

Sólo empezar hago maravillas con el presupuesto asignado inicialmente de tecnología para dar soporte a una plantilla de más de 30 personas, y consigo rebajar los costes con proveedores más de un 30 por ciento, vamos que ahorro más de 20.000€ a un presupuesto ya de por sí ajustado. Ya con la parte de sistemas resuelta, me centro en la parte de negocio y desarrollo: requerimientos, análisis funcionales, externalización de parte del desarrollo.

El proyecto no termina de arrancar, pierde fuelle y la plantilla se reduce. No llega al año desde que empezó la aventura y el proyecto muere.

  • Factual
  • PHP
  • MySQL
  • HTML
  • CSS
  • Javascript
  • jQuery
  • Arquitectura
  • Gestión de proyectos
  • Gestión de sistemas
2010. Todo un Ironman

Me tomo un año sabático y, como venía haciendo deporte de forma usual, hago un Ironman.

Durante el año intento arrancar varios proyectos personales (side projects le llaman) sin éxito. A finales de año va tomando forma mi siguiente proyecto.

Entretanto conozco a mi actual mujer y me enamoro de ella.

  • Happiness
  • In love
2011. Emprendiendo

Fundo Prunátic Consultoría Web, un proyecto profesional con la ambición de cubrir las carencias de las empresas en cuanto a su inexistente departamento de tecnología.

Con la máxima de “Queremos ser socios de tus negocios digitales” doy solución a las empresas para sus negocios en lo digital. Analizo, asesoro y desarrollo las necesidades de mis clientes.

  • Prunátic
  • PHP
  • MySQL
  • HTML
  • CSS
  • Javascript
  • jQuery
  • Symfony2
  • Silex
  • Twig
  • Doctrine
2012. Trabajo en equipo

La complejidad de los proyectos que desarrollo en Prunátic no es suficiente y deseo volver a trabajar en equipo con gente más experta que yo para continuar aprendiendo, a finales del 2012 decido buscar un trabajo por cuenta ajena.

Descubro que en el extranjero, al contrario que en España donde si a los 30 todavía programas eres un fracasado, existe una cultura donde ser Developer está muy reconocido. Reencaro mi carrera profesional hacia el desarrollo dejando al margen un perfil más de gestión, todavía tengo mucho por aprender.

Me incorporo a Localnomad, en un equipo pequeño en número pero grande en cuanto a sus miembros. Aquí vuelvo a tocar código de verdad, en un proyecto de embergadura, con unos requerimientos de disponibilidad y escalabilidad altos.

  • Localnomad
  • PHP
  • MySQL
  • Symfony2
  • Twig
  • HTML
  • CSS
  • Javascript
  • jQuery
  • Doctrine
  • Redis
2013. Escribir un libro, plantar un árbol, tener un hijo...

Escribir un libro, plantar un árbol, tener un hijo... escribí un blog, tengo un arbol mandarino en mi terraza y en marzo nació mi pequeña Marina. Aunque esto se me queda corto y me motivaría formar parte de un nuevo proyecto con un equipo que incentivara el uso de las buenas prácticas de desarrollo. Si tienes un equipo así y quieres que forme parte dame un toque y hablamos ;)

Este año también descubrí los MOOCS, Aplicaciones Saas con Ruby on Rails, Gamification y MongoDB for developers y DBAs. Y cuando tengo tiempo, trabajo en proyectos personales aplicando parte de estas buenas maneras entre ellas TDD y BDD que son de mucho interés.

  • PHP
  • MySQL
  • Symfony2
  • TDD
  • BDD
  • Twig
  • HTML
  • Javascript
  • jQuery
  • Doctrine
  • Redis
  • MongoDB
2013. Challenge accepted

Tras poner en producción el desarrollo del último año en Localnomad, busco un proyecto en el que BDD y TDD fueran más que palabras de tres letras. Busco un salto cualitativo como desarrollador.

myTaste es el lugar. Con un legacy code en Code Igniter y la necesidad de evolucionar la plataforma hacia algo más robusto y bien hecho, requieren un rediseño del código por completo.

En menos de un mes revoluciono el gallinero: incorporo Behavior-Driven Development a los sprints, seguir Test-Driven Development para el desarrollo de nuevo código y uso de Unit Tests para la refactorización del legacy code. Tras algunas pruebas de concepto defino una arquitectura en capas a la que evolucionar. El objectivo primario es desacoplarse de un framework que ha llegado a su fin.

A los dos meses, incorporo los conceptos de Domain Driven Design para diseñar la capa de negocio (core domain), aplicación e infraestructura.

Varias aplicaciones reusan el mismo código y es necesario desacoplarlas, tomamos rumbo hacia una arquitectura basada en microservicios con Silex como detalle de implementación. Monto un entorno con Vagrant para facilitar el desarrollo de estos microservicios.

  • myTaste
  • DDD
  • TDD
  • BDD
  • Behat
  • PHP
  • MySQL
  • Doctrine
  • Redis
  • Symfony2
  • Silex
  • Design Patterns
  • SOLID Principles
  • Sphinx
  • Microservices
  • Vagrant
2014. First time as speaker

deSymfony day el 31 de Mayo del 2014, presento una ponencia acerca de arquitectura basada en microservicios y me la aceptan.

Estreno mi perfil de speaker

  • speaker
  • Microservices
  • Symfony2
  • Silex
  • Microservices
  • Vagrant
2014-2015. Consolidation of [B|D|T]DD

Nos metemos de lleno en el desarrollo de la aplicación backend para las aplicaciones nativas de myTaste para Android e iOS.

Aprovechamos la oportunidad para centrarnos en hacer las cosas bien.

Usamos BDD para extraer el core domain y sacar el Ubiquitous language, usamos DDD para que el lenguaje se refleje en el código. Solucionamos los detalles de infrasestructura aplicando arquitectura hexagonal.

Formación interna: "BDD by example"

  • myTaste
  • DDD
  • TDD
  • BDD
  • Behat
  • Symfony2
  • Silex
  • Design Patterns
  • SOLID Principles
  • Hexagonal Architecture
  • Microservices
  • Vagrant
2015-Present. I'm a microservices engineer!!!

Welcome to Schibsted Spain!

Cambiamos de tercio: empresa, lenguaje, stack, producto... no queda nada excepto las bases.

Aparcamos PHP y nos metemos de lleno con Java y microservicios a tope! Microservicios para dar agilidad a los equipos: mucho legacy y necesitamos ser más ágiles para reaccionar a los cambios del mercado.

Continuamos creyendo en el dominio: DDD, BDD y TDD for the work! Event storming workshops para entenderlo.

Trabajamos en productos con mucho potencial: un competidor para Shopify! Ahí queda eso, aunque la empresa no tiene mucho interés en evolucionarlo y a otra cosa mariposa! sniff sniff

Mucha formación interna al equipo, como lead me hago pesado en unos buenos cimientos hard skills, también trabajamos mucho en el producto: centrarnos en el valor que damos al usuario. También me pongo pesado en interiorizar la cultura agile.

You do not do agile, you are or you are not!

  • Schibsted Spain
  • DDD
  • TDD
  • BDD
  • cucumber
  • java 8
  • Spring Boot
  • Spring Boot Cloud
  • Design Patterns
  • SOLID Principles
  • Hexagonal Architecture
  • Event Storming
  • Microservices
  • AWS
  • Agile
  • Docker
  • Kafka
  • Postgresql