miércoles, 28 de octubre de 2015

Javier Martínez: Full Stack Developer



Javier Martínez Domínguez

Finalizó sus estudios de Ingeniería Técnica de Informática en Sistemas en 2014 mientras trabajaba desarrollando para la startup StartThink. Su lista de conocimientos comprende muchas tecnologías: "Phonegap, ionic Framework, Vagrant, Jenkins, Capistrano, Phabricator, Amazon AWS..."
"Backend, administración de sistemas y Frontend... en menos de un año, me ofrecieron encargarme de todo y como consecuencia ocupar el puesto de CTO
LinkedIn
Muchas gracias Javier por estar aquí para charlar sobre tu experiencia, empieza comentándonos tu Proyecto de Fin de Carrera (PFC).

Hola Juan Antonio, en mi PFC desarrollé una aplicación multiplataforma inicialmente enfocada a iOS: Appuesta para conocer el resultado de las quinielas en tiempo real. La experiencia me sirvió para conocer Phonegap y sorprenderme gratamente de su rendimiento, así como para planificar e implementar un proyecto desde cero. Desde la arquitectura de los servidores, diseñada y pensada para escalar en cuanto el proyecto lo requisiese, como a la integración continua o la autenticación basada en OAuth 2.

Como hasta Junio de 2014 no pude presentarlo por no haber estado matriculado del PFC el año anterior, la semana antes de exponerlo la dediqué a reescribir la parte de la app móvil usando un framework que por aquel entonces era prácticamente desconocido y que hoy día no acapara mas que alabanzas: ionic framework. Una vez lo presenté, lo publiqué en la App Store y en menos de 5 meses se registraron más de 100 usuarios, a pesar de no haber aún publicado la versión para Android.

Hace unos días la actualicé la versión 2.0 con nuevas funcionalidades como la posibilidad de ver los goles o resumes de cada partido al poco tiempo de finalizar el mismo. Además la posibilidad de la creación y gestión de peñas y estadísticas sobre la evolución de las quinielas de cada usuario a lo largo de la temporada.

Muy interesante, ¡suerte con ella! Resúmenos tu trayectoria profesional.

Mi carrera profesional se limita a una sola empresa: una pequeña startup StartThink con dos proyectos principales.

El primero de ellos y gracias al cual me incorporé a la empresa es Marketyou, una aplicación web destinada a la visibilidad laboral y a la posibilidad de exponer tu curriculum de una forma más atractiva, visual y dinámica que el clásico curriculum vitae. Actualmente, también tenemos un acuerdo con Anuntis (Infojobs Brasil) en el que ofrecemos una API con la que pueden acceder a nuestro test. Éste está respaldado por la conocida Saville Consulting (Peter Saville) y consiste en una serie de preguntas acerca del candidato, al que no le supone más de 15 minutos. Una vez completado, se obtienen las competencias y fortalezas de dicho candidato. 

El otro proyecto, RankRunner, surgió hace apenas dos años. Éste consiste en un ranking mundial de corredores o runners, aprovechando el auge del running en la actualidad. Además de tener una app móvil propia para hacer el seguimiento de todo tipo de entrenamientos o carreras, hemos implementado conectores para las redes sociales más importantes que existen hoy día: Nike+, Runtastic, RunKeeper, Endomondo...  Gracias a ello, permitimos a los runners poder importar sus entrenamientos de dichas redes y gracias a nuestro algoritmo se clasifican en el ranking, en cual pueden competir o compararse con runners de todas las nacionalidades.

Ahora mismo tenemos más de 11.000 usuarios en RankRunner y 13.000 en Marketyou.

¿Qué es lo que más valoró esta empresa al contratarte y mantenerte en su equipo? 

Cuando me uní a esta startup, realmente no pudieron valorar mucho mi experiencia o curriculum ya que, profesionalmente hablando, era prácticamente inexistente. Me incorporé aprovechando que tenía que cursar los créditos de libre configuración correspondientes a las prácticas de la carrera. Tenía un amigo que trabajaba en la empresa y fue quien me avaló.

Antes de que cumplieran los 3 meses de prácticas, empezaron a sugerirme la posibilidad de hacerme un contrato por 6 meses. Acabé las prácticas y me contrataron para echar una mano en la parte del backend a mi compañero además de administrar los servidores, que hasta entonces recurrían a un freelance periódicamente. Poco antes de concluir el contrato, el compañero que se encargaba de la parte del frontend dejó la empresa y tuvimos que repartirnos su trabajo entre mi compañero y yo, con lo que además de ser el administrador de sistemas y uno de los dos desarrolladores del backend, tenía que hacerme cargo de esa parte del desarrollo.

Pasaron los 6 meses y me ofrecieron quedarme como indefinido. En menos de un año, mi otro compañero (backend) también dejó la empresa y me ofrecieron encargarme de todo y como consecuencia ocupar el puesto de CTO que hasta entonces él ocupaba.

Tu listado de conocimientos es muy amplio, coméntanos algo más de ellos y tus recomendaciones.


  • Vagrant virtualization for developing environments

Cualquier desarrollador que se precie necesita conocer Vagrant. No es necesario que tenga conocimientos en profundidad sobre cómo funciona, pero sí necesita conocer unos básicos para trabajar con él. Vagrant es una de las herramientas que más adeptos está consiguiendo últimamente en la recreación de entornos para el desarrollo. Permite crear una máquina con todos los requerimientos necesarios para programar un determinado proyecto en cuestión de pocos minutos. Simplemente con vagrant up y gracias al provisioning, que previamente alguien se ha encargado de configurar, podemos recrear por ejemplo el entorno de producción de nuestro proyecto. Es decir, misma versión de PHP, nginx, MySQL, task runners, etc. Con esto nos aseguraremos, o al menos será más probable, de que no tengamos errores a la hora de enviar a producción algo que hemos programado a causa de diferentes versiones, configuraciones de servidores, etc. Lo mejor de todo es que es independientemente de la plataforma y una misma box de Vagrant puede ser usada en Linux, Windows, OSX…


Lejos queda ya, o debería quedar :), la técnica de subir los cambios que vamos realizando en nuestro proyecto desde un entorno local, nuestra máquina, a producción, un servidor web por ejemplo, via FTP. Al igual que utilizamos repositorios (Git, por ejemplo) para llevar un control de los cambios que vamos realizando, necesitamos herramientas como puede ser Capistrano que se encarguen de subir nuestros cambios e indicar a nuestro servidor que hay una nueva versión para que el downtime de nuestro proyecto sea 0 o prácticamente 0. ¿Cómo se consigue esto? Pues, “enseñando” a Capistrano qué pasos ha de seguir en el deploy de nuestra aplicación. Por ejemplo: empaquetar el proyecto, subir vía scp, extraer en un directorio temporal, apuntar el enlace simbólico de nuestra aplicación a la versión que acabamos de subir, hacer que el servicio de PHP actualice los cambios, etc.

Antes de todo lo que Capistrano ha de hacer, entraría en juego lo que se conoce como integración continua y Jenkins es una de las herramientas que más se utilizan en la actualidad para ello, además de ser gratuita. Jenkins nos permitirá detallar un “guión” con todo lo necesario para crear una nueva release o versión de nuestra aplicación. Recreará el proyecto desde 0, instalará todas las dependencias necesarias, optimizará y ejecutará todos los tests que anteriormente hayamos programado. Estas 4 funciones que acabo de detallar son un ejemplo de lo que nos permite hacer, aunque por supuesto hay muchísimas más. Si todo ha salido bien, nos marcará la release como OK y ya nosotros decidiremos si subirla a producción o qué hacer con ella.
  • Phabricator platform (reviewing and auditing code, repositories, tracking bugs, tasks, etc.)

La plataforma Phabricator nace con Evan Priestley, un antiguo ingeniero software de Facebook. Consta de un conjunto de aplicaciones o módulos con los que administrar un proyecto: revisión de código, control de repositorios, seguimiento de bugs, gestor de tareas, chat, calendario… Hoy en día tenemos muchísimos servicios que nos ofrecen esto individualmente, como pueda ser Github, Bitbucket, Slack, Hipchat, Trello, pero quizá ninguno tan completo como Phabricator. Uber, Dropbox, Fedora, Nokia o el mismísimo Facebook son ejemplos de compañías que tienen integrado Phabricator en sus desarrollos.

Conocer Amazon AWS es, sin duda, un plus a la hora de mejorar tu CV o incluso facilitar las tareas del día a día. Uno de los servicios más conocido es Amazon S3, que es el módulo encargado del almacenamiento en la nube. Hay otros como el servicio de mensajes Amazon SQS, que por ejemplo podemos utilizar para el intercambio de mensajes previo a enviar una notificación push al usuario o simplemente a ejecutar tareas en segundo plano en un servidor PHP. También Amazon Route53 nos puede servir de alguna manera para suplir las carencias de no tener un balanceador de carga en caso de que tengamos más de 1 servidor y alguno se caiga o simplemente para enrutar al usuario a uno de nuestros servidores por geolocalización, para reducir los tiempos de carga y la latencia.

¿Cómo conseguiste experiencia en todas estas tecnologías?

Sí, la respuesta es obvia: proyectos personales. Hoy en día hay muchísima, y muy buena documentación, sobre todas estas tecnologías. Además y gracias a comunidades como StackOverflow por ejemplo, además de los canales de ayuda vía IRC, Slack, etc., podemos resolver muchísimas dudas que nos van surgiendo según vamos familiarizándonos con ellas. La única recomendación, aunque más bien debería ser una obligación, es tener unos conocimientos, por lo menos básicos, de inglés. Ya que gran parte de la documentación que nos encontraremos será en este idioma, aunque cada vez haya más en español.

Muchas gracias y mucha suerte en tu carrera profesional Javier que seguro será exitosa.


Por si usáis twitter, hemos habilitado uno para avisar de las nuevas entradas: @_jaalvarez_
Si os gusta el contenido de este blog por favor publicitadlo para que el esfuerzo valga la pena.
Finalmente os recordamos nuestros objetivos