About Me
TL;TR
My experience in software development is mainly with PHP since 2006. Even though since 2016 I’ve been also using Golang and jumping to be mainly focused on Golang since 2022.
I have experience creating systems ready to handle heavy load using event driven architecture and (micro)services.
Extended Version
I’ve been developing web applications and RPC/REST APIs using PHP as a server script language, Symfony as a framework, and MySQL as a relational database for more than 10 years, always looking for good API design, using hypermedia and JSON:API. For the last 6 years, I’ve been also creating event-driven services that consume events from AWS SQS, RabbitMQ, and Kafka queues, adding NodeJS, Golang, Python, and AWS Lambdas to my stack.
Also, I used Redis as a cache database and as a fast in-memory database, Solr for fast read models, AWS DynamoDB for no-SQL databases, ElasticSearch to handle a big amount of logs, that are analyzed through Kibana, and InfluxDB for application metrics that are shown on Grafana, delivering and testing all the code through Jenkins, GitLab CI, Travis Ci or Circle Ci pipelines. I’m familiarized with Docker either on dev or production environments also using Kubernetes or AWS ECS to orchestrate the containers having all the infra as code with Terraform.
When the size of the project allows me I apply DDD and Hexagonal Architecture, and if the read performance is important I use CQRS, ending up to Event Sourcing (I used Prooph and Broadway) if tracking all the system changes is a must. I’m pretty comfortable developing with TDD. Also, applying Clean Code and SOLID principles for me it’s a must if the project I’m working on needs to last more than one year.
Related to the performance I’ve been working with auto-scaled applications with 20M monthly active users and APIs that handle 200K rpm, all these supported by queue consumers that react over 20M of events per day coming from other (micro)services. Some of the applications were handling Apple, Google, and Stripe payments.
I’m an open-minded developer that is always trying to learn new stuff. I don’t close the door to any language but I’m really pushing for Golang lately and to increase my DevOps skills. I’m really interested in delivering my projects from the beginning to the very end that have a high impact on the business.
I enjoyed leading small teams from the more technical side also helping to onboard and to mentor new members, working close to TPM/EM and PO/PM to improve team performance, taking care of big epics, also doing POC’s of new technologies that can help the company in several ways.
Work Experience
💵 Thunes
Senior Software Engineer @ Virtual Accounts
👔 Business: Thunes is a B2B company that powers payments for the world’s fastest-growing businesses - from Southeast Asia's super app Grab and Gig Economy giants, to Fintech leaders such as PayPal and Remitly. With a single, simple connection, your business and customers can send payments to – and get paid in – every corner of the world. Instantly. We support 79+ currencies, enable payments to 130 countries, and help you accept 300+ payment methods.
⏱️ Challenge: The virtual accounts team provide the virtual account solution allowing our partners to collect money abroad using a regular bank account. Our solution provides all required security checks as saction list screening (SLS), transaction monitoring, safeguarding, etc.
⚙️ Tech: We develop web services using Go and following hexagonal architecture and event-driven architecture. The second allows us to prevent data inconsistencies while dealing with complex money and data flows.
🤼 Team: The team is formed by one tech lead, one software engineer and o myself as senior software engineer.
💵 Impact: Our team impact is mainly in money and data flows. Providing a solution that is compliant with any regulation in the country where we integrate.
⚡ Wallbox Chargers
Senior Backend Developer @ Core/Platform Squad
👔 Business: We produce electric vehicle (EV) smart chargers that can be remotely controlled from the MyWallbox site and Wallbox mobile app. Also, the chargers can take energy from the EV using them as a power source for the building.
⏱️ Challenge: Wallbox is growing super fast which makes us go the extra mile every day so we are ready to manage the active users increase. Also, the team is growing fast too so this challenges how everything is organized.
⚙️ Tech: We create and maintain services mostly based on Go and PHP. We also have some old NodeJS services just to maintain where we don't add new features. We are creating more new isolated services that come from a big legacy monolith. We go for an event-driven communication fully asynchronous that gives us reliability enough to deal with problems we might face in one of the services. We apply Hexagonal Architecture, DDD and Clean Code because we feel that is the way to have a good codebase that is easy to extend and to understand.
🤼 Team: I'm on the platform team. A one that is growing fast having already 12 members which 10 of them are backends. Our main purpose is maintaining the legacy monolith doing big refactors so gets easy to add new features, splitting part of it on new services, helping the TechOps team deal with our infrastructure, having proper monitoring and alerting in place so we catch any problem before our users.
⚡ Impact: From the backend team we have a huge impact on the company since any business logic of the chargers is inside our services ecosystem: remote charger actions, authorization, authentication, group of users management, charging metrics, user notifications, payments... I also have an impact on our team members mentoring some of them for the new architecture we are implementing.
🤝 Letgo
Senior Backend Developer @ Monetization Squad
I'm maintaining and developing new features for all payment (micro)services of Letgo which includes Bump Ups, Subscriptions (We created this (micro)service when I was on Verticals squad), and payments (Apple, Google Play Store, and Stripe).
All the services are developed with PHP 7 and Symphony, most of them use No-SQL databases over DynamoDB, a few though have some RDS database with MariaDB.
We also have several Golang lambdas to handle some scheduled jobs and to react to events. Also, for the sake of speeding up some features, we've been implementing some features to other team projects made with Scala.
A part of the main projects I've been creating and maintaining a Golang CLI tool to help us with some fixes and maintenance that need to be applied to a big volume of data.
Also, I've been in charge of migrating two of our main services to Kubernetes: payments and bumps.
The devs in the squad are also handling part of our Terraform setup, so we can create and modify SQS queues, SNS subscriptions, filters... in a faster way.
The squad follows scrum and is formed for backends, sysadmins, iOS developers, Android developers, QAs, TPM, POs, and BIs.
Senior Backend Developer @ Verticals Squad
[Aug 2018 - Apr 2019]
Barcelona
I joined one of the squads in charge of preparing the app to be able to sell new kind of products and to handle the new subscriptions system that works with Google and Apple purchases.
The squad follows scrum and is formed for 2-4 backends, 1 sysadmin, 2 iOS developers, 2 Android developers, 1 QA, 1 TPM, and 1 PO.
We use PHP 7, MySQL for the write model, Solr for the projections of the read model, Symfony 3, Doctrine... we design all the services following DDD and CQRS.
To communicate between (micro)services of our squad and the ones of other squads we use domain events, through AWS with SQS and SNS, so we get reactive systems with a low number of direct HTTP calls.
We test our API's and consumers with Behat and our code with PHPUnit.
We also use Golang to develop small lambdas and processes to handle and manipulate data.
I joined one of the squads in charge of preparing the app to be able to sell new kind of products and to handle the new subscriptions system that works with Google and Apple purchases.
The squad follows scrum and is formed for 2-4 backends, 1 sysadmin, 2 iOS developers, 2 Android developers, 1 QA, 1 TPM, and 1 PO.
We use PHP 7, MySQL for the write model, Solr for the projections of the read model, Symfony 3, Doctrine... we design all the services following DDD and CQRS.
To communicate between (micro)services of our squad and the ones of other squads we use domain events, through AWS with SQS and SNS, so we get reactive systems with a low number of direct HTTP calls.
We test our API's and consumers with Behat and our code with PHPUnit.
We also use Golang to develop small lambdas and processes to handle and manipulate data.
🗒️ CMP Group
Backend Developer @ Mainstream Squad
Backend Developer in one of the company teams in charge of two projects.
The first project is based on PHP and Node JS, and we do unit tests over PHPSpec and PHPUnit.
It's a background-checking site, operative only in the USA.
The interesting part of the project is getting all the needed information from several providers via API.
Also since it's kind of legacy projects that were done fast and without tests, so we are increasing unit tests coverage, and doing TDD with the new features.
Another problem was MySQL performance, a bad design was making that service consume 80% of CPU. We solved that by adding proper indexes and updating some wrong-configured fields.
Also, I've been creating NodeJS Lambdas over AWS, which were importing data from third-party APIs to a No-SQL database over DynamoDB.
This project has three services:
- A PHP service that manages all the frontend and the API in charge of creating any content, access control... We migrated that project from PHP 5 to PHP 7, and from Silex 1 to Silex 2... we had fun doing that.
- A NodeJS 4.7 service that does all the searches.
- A new NodeJS 8 service where we are migrating all the searches. TDD with Mocha, Chai and Sinon.
The second one is a new project made from scratch following TDD and DDD. It's fully developed with PHP, using Symphony 3. The unit tests are made over PHPUnit.
It's a website that provides security for personal identification. It's also a product only available in the USA.
In that case, we have 2 services:
- On static content service with Nginx, where we have all the front end. That frontend is fully HTML and JS, so we don't have PHP mixed there, our API is fully separated.
- On PHP 7 service with an API secured with OAuth using JWT tokens. The API is RESTful level 2 (see Richardson Maturity Model), but we'll start adding hypermedia, so the idea is to jump to level 3.
The team is following Kanban, and we also use Event Storming for big features or new projects, like we did with the second one.
🛎️ Enables Concierge
Backend Developer @ Core Squad
I was a Backend Developer in a scrum team of 5 devs. We were creating new modules of API Rest based on PHP 7.
The API centralize all data management of the business and sales too.
We used Symfony 2 but only as an application layer. All the business logic was isolated and structured following DDD and Hexagonal Architecture.
Otherwise, we were following CQRS, so we had a read model and write model isolated. And we were using Event Sourcing on majority part of the project.
Security was over OAuth 2.0 using JWT.
After joining them, it turned out that the company wasn't in good financial health and they closed 3 months later.
⛑️ Freelance
Fullstack Developer @ _
Projects:
- Motocard: New ERP to handle website products. Website connection with ERP SqlServer database.
- Inforsa: Develop new API to read data from their data providers from API calls, FTP files... Develop new ERP to handle client and providers liquidations.
- Pans&Company: Website and background processes maintenance.
- Ribs: Website and background processes maintenance.
📱 Nodo Ambar
Fullstack Developer @ _
Migrate old TT2 to new NodoGestion.
Prepare the ERP for new sectors like energy and fishing distributors and factories.
📱 Codalia Research
Fullstack Developer @ _
Maintain GestorTT which was a telefony ERP for Telefonica, Vodafone and Orange stores.
I was specifically working on logistics, commissions and liquidations sections.
Migrate old GestorTT to new TT2 based on PHP.
NiWebTo Studio
Fullstack Developer @ _
Tailor-made websites from scratch and Drupal adaptations. Also, Drupal plugins creation.
I did corporate websites, social networks, back offices, online shops...
Info PC Manresa
Fullstack Developer @ _
Tailor-made websites from scratch and Drupal adaptations. Also, Drupal plugins creation.
I did corporate websites, social networks, back offices, online shops...
Also, I was doing server administration for web, DNS and mail services over Debian servers.