work

work/moonpay

MoonPay

Senior Software Engineer·Aug 2022 — Jul 2026

Consumer app, experiments, and the marketing site — owned the practice, not the vanity metric.

  • TypeScript
  • React
  • React Native
  • GraphQL
  • Node.js
  • LaunchDarkly

I spent four years at MoonPay, first as a frontend engineer for Growth and then as a Fullstack Engineer for Consumer. I worked on the Website, SEO, the React Native App, Account Web and multiple backend services and APIs. I worked really closely with Product and Design to deliver the best possible experience for our users. And helped the team prioritize and manage technical debt.

  • App screens 4s → instant

    Unified four APIs behind a GraphQL layer that fetches, caches, and transforms the data.

  • Experiments other teams could trust

    Wrote the flags and A/B test playbook, then coached Consumer through it.

  • 150k+ lines deleted

    Usage and revenue dashboards to decide what to keep, retire, or rethink.

  • ~40% higher buy conversion

    Showed the five most-bought tokens instead of the full list of thousands.

$ projects

$ achievements

From four APIs to one

App screens 4s → instant

Not long after I started working as a Fullstack Engineer, and I started working on the React Native App, I noticed that the data we needed for the App was scattered all over the place. We had at least 4 APIs to retrieve the data we needed, which was forcing the App to make multiple sequenced requests, a lot of data manipulation and the performance of the screens that were consuming more data were performing very poorly.

I was one of the engineers that led the first initiative to make this problem very clear and undeniable to everyone with the expectation of getting some time improve the architecture. We started by listing every endpoint and payload the app consumed, then drew the interdependencies — APIs, resources, and the transforms we were doing on the frontend. Once that picture existed, it was easy to justify the effort and we were able to get approval to dedicate some real time into this initiative.

We ended up creating a GraphQL layer on top of the existing APIs, that would be responsible for fetching, manipulating and caching the data needed. And the outcome was that we removed completely the sequenced API requests on the API, we were able to introduce caching before any data manipulation happens and the performance improvements were really noticeable. Some screens that were taking 4+ seconds to load, started loading instantantly and the experience was much smoother. From the Developer Experience perspective, we started owning the API layer that feeds the App, allowing the team to make changes quicker and more efficiently.

Flags and tests that did not lie

Experiments other teams could trust

I was the go-to for feature flags and experiments across Consumer. I did not introduce or integrate LaunchDarkly, but I was able to get a lot of hands on experience in setting up Feature Flags and AB Tests, I worked closely with the Data team to understand what worked and what didn’t. And run dozens of experiments while working on the MoonPay App. With this knowledge I created some very detailed guides and documentation to help the team set up and run tests quickly and efficiently and I did some 1 on 1 coaching to support other teams.

A developer’s favorite: House cleaning!

150k+ lines deleted

At some point after a really intense growth year for the app, the team made the decision that we needed to do some house cleaning. This meant that we wanted to simplify the app to our users and our engineers. I was fortune enough to take the lead and being the main engineer responsible for this initiative and I took a very data-driven approach to this. I started by creating some dashboards that would help me understand all the features usage and the impact (revenue) they had on the app. With this I was able to identify the features that were not being used and the ones that were not being used enough to justify the cost of keeping them. With this information I was able to discuss and reach an agreement with Product and the team on what features we would like to keep, what we would like to retire and what feature we would like to rethink. The outcome was really positive, the app was simpler to use and maintain, we deleted more than 150k lines of code and the team was able to focus on the features that were really adding value to our users.

When showing less profits more

~40% higher buy conversion

Early in 2025 the MoonPay App had a directional shift and we introduced support for Solana tokens (DeFi). This was a really big change not only our users but also for the team, suddenly we had a lot more complexity to deal with. What tokens should we show to our users? How should we handle the different types of tokens? How can we handle scam tokens? But one of the top priorities was to improve the revenue drop on the Buy path. Suddently our users were presented with a lot more options to buy, we went from supporting around 200 crypto currencies, to supporting thousands. And the numbers grew by the day. We had a good amount of filtering and sorting options to help our users find the most relevant tokens to buy, but this was still not enough. The problem was that the cognitive load of the users was to high. When they pressed the button to buy, they were presented with a lot of options and they were probably not sure what to do next. We decided to start a new experiment, when the user pressed the button to buy, we would show them only the top 5 popular tokens to buy. These were the top most bought tokens on MoonPay. And if this was not what the users wanted they had the option to navigate to the full list of tokens with search, filtering and sorting options.

This very simple change had a really positive impact on the revenue, the user group that was presented with the top 5 popular tokens, had a ~40% higher conversion rate than the group that was presented with the full list of tokens.

This just shows how important it is to understand the our own user’s needs and how to simplify the experience for them.

work

terminal