Work.
A record of roles, projects, and the trajectory that shaped me.
I
Roles
Where I have worked, in reverse order.
Apr 2023 - 2026
Barcelona
Account Executive · M&A , Deale
- First member of the Account Management Team. Managed relationships with 200+ companies, 250+ investors and 40+ brokers in the Spanish M&A market; contributed to 5 deal closings (avg. EV €6M).
- Structured onboarding and operational workflows; onboarded 3 team members, each reaching ~89% portfolio retention, up from roughly 75% before the protocol.
- Designed and implemented a churn prediction system. From a 28% monthly churn rate, we drove it down to 5%, and now stabilized in 10% team-wide (counting accounts that left during the month against those active at the start).
- Built an investor classification system to improve prioritization, personalization, and matching quality.
- Worked with Marketing on acquisition (campaigns, outbound, deal visibility) to raise deal quality and cut churn among mismatched users.
- Worked with Product on recommendation systems.
May 2022 - Jan 2023
Madrid
Financial Analyst , AURA PAY
- Met the founders at a Demium All-Startup weekend in March 2022. Their honest care for the migrant remittance problem in Spain and LATAM was what pulled me in.
- Co-built long-term financial planning and scenario models for the Seed round, presented to Spanish and international investors.
- Benchmarked the remittances market in Europe and Spain.
- Supported investor relations with VCs and business angels; built KPI tracking and forecasting models.
Sept 2021 - May 2022
Madrid
Private tutor , Masqueclases · Superprof
- Personalized teaching for college and high-school students: mathematics, English, French, and economics (micro, macro, statistics).
- First real experience of the idea that education is the engine of prosperity in any society.
Apr - Jul 2018
Lima
Junior Sales Consultant , Avance Legal S.A.C.
- First professional experience abroad, having just moved to Peru. Telemarketing of Movistar Peru telecommunication products.
- Where I first learned that selling is mostly helping.
II
Studies
Two master's degrees, applied economics and public policy.
2023-2024
M.S. Public Policy and Development
Randomized control trials, machine learning, causal inference, long-run trade history, political economy.
2022-2023
M.S. Applied Economics
Universitat Pompeu Fabra, Barcelona
Applied econometrics, machine learning, game theory, public policy analysis.
III
Projects · Deale
Systems, models and playbooks built inside Deale. Open a card for the full detail.
Filters apply to Deale projects and personal projects.
Buyer Quality Score
Nobody could agree on which investors deserved attention first.
Problem
Sales and Account Management at an M&A marketplace had no shared, objective way to prioritise investors. Attention drifted to the loudest names, not to the ones most likely to close, and two people looking at the same account could reach opposite conclusions.
Approach
I designed a layered scoring model, built with the data and account teams, that reads a handful of independent signals about a buyer (what kind of buyer they are, the size of cheque they can write, how complete and coherent their stated thesis is, how much acquisition experience they carry, how fast they expect to move) and resolves them into a single prioritisation tier. Declared intent counts, but attention-weighted behaviour counts more, because saying and doing are not the same thing.
Results
- Five independent buyer signals collapsed into one tier, so Sales and Account Management worked the same queue of 250+ investors by evidence instead of by whoever pushed hardest.
- Tiers written straight into the CRM, so routing and personalisation happened without an extra judgement call.
- Prioritisation became arguable with data instead of a matter of taste, and it was reviewed against real closings rather than left as an opinion.
How it works
- Structure: five signals, each scored 0-100 on its own rubric, then a weighted sum BQS = Σ wᵢ·sᵢ with Σ wᵢ = 1. Weight distribution: behaviour 0.30, cheque capacity 0.25, thesis coherence 0.20, acquisition experience 0.15, declared urgency 0.10.
- Normalisation: per signal, min-max against the trailing 90-day cohort using the 5th and 95th percentiles, sᵢ = 100·(x − p5)/(p95 − p5) clipped to [0, 100], so a single outlier cannot dominate the ranking.
- Behaviour signal: effort-weighted event count over a 30-day window (logins, deal views, document requests, meeting acceptances), each event type weighted by the effort it costs the buyer, with recency decay 0.5^(days/14).
- Cheque capacity: declared range mapped to five bands, then validated against observable proof (prior transactions, committed vehicle, verified funding). Unproven declarations are capped at 60/100.
- Thesis coherence: rubric of five binary checks (sector named, geography named, size band, timeline, exclusion criteria). Score = 20 × checks passed, so coherence comes from observable specificity and not self-assessment.
- Missing evidence: weights are renormalised over the signals that exist, wᵢ' = wᵢ / Σ available wᵢ, and the record carries a low-confidence flag when signal coverage falls below 60%.
- Output: tier A ≥ 75, B 55-74, C 35-54, D < 35, written to a CRM field. A and B route to Sales within 24 hours, C to nurture sequences, D to self-serve.
Design decisions
- Five signals capped by design, because a model an account executive can restate in one sentence is a model they actually apply.
- Tiers exposed to operators, continuous score kept underneath: a 2-point difference is noise, a tier change is a decision.
- Renormalisation instead of zero-filling, so a new account is not punished for having a short history.
- A hard cap on unverified claims rather than exclusion, so self-reported capacity can lift a buyer but never carry them alone.
- Quarterly recalibration against the closed-won base rate, validated by rank correlation between tier and conversion rather than by overall accuracy.
What I would change
- Calibrated on one market and roughly 250 accounts, so the weights are trustworthy at tier level and not at single-point differences.
- It ranks probability of closing, not quality of fit. Those are two different target variables and deserve two models.
Seller Churn Model
Sellers were leaving mid-process and the team only found out once they were gone.
Problem
Sellers were leaving mid-process, often past qualification and sometimes with a deal already in motion, with no way for Account Management to see it coming. Retention was reactive, which meant the team learned about a departure from the departure itself.
Approach
A churn model that puts deterministic rules before any statistics. A small set of unambiguous situations decides the answer on its own, and only when none of them apply does a weighted read of behaviour take over: how much contact there is, whether meetings keep happening, whether conflict has appeared, the emotional tone of the relationship, and how long the account has gone quiet.
Results
- Seller churn went from 28% to 5%, and now stabilized in 10% team-wide, counting accounts that left during the month against those active at the start.
- Retention work turned proactive, because the list of accounts to save arrived before the cancellation did.
- Account Management gained a shared triage order built on five behavioural dimensions and a portfolio of 200+ companies, instead of a private sense of who was at risk.
How it works
- Two stages in fixed order. Stage 1 evaluates deterministic override rules; stage 2 runs a weighted behavioural score 0-100. If a rule fires, the score is ignored.
- Override rules: an explicit cancellation or mandate withdrawal sets risk to 100; an account in exclusivity or with a signed letter of intent is capped at 20; an account under 7 days old is routed to the onboarding read instead of the churn read.
- Behavioural score: R = Σ wⱼ·dⱼ over five dimensions, contact frequency 0.25, meeting cadence 0.25, silence duration 0.20, relational tone 0.20, unresolved conflict 0.10, each dimension expressed 0-100.
- Silence: d = min(100, 100 × days since last two-way contact / 30), so a month of quiet saturates the dimension instead of growing without bound.
- Meeting cadence: expected meetings are defined per stage, and the dimension is 100 × (1 − min(1, held / expected)), which separates a slow stage from an abandoned one.
- Conflict and tone come from logged interaction events with polarity and severity 1-5, aggregated with recency decay 0.5^(days/21).
- Late adjustment: verified external interest (a competing platform, a direct buyer) adds 10 to 15 points, applied after the core read and capped at 100.
- Bands to plays: ≥ 70 critical, owner call within 48 hours; 40-69 watch, weekly check-in plus a re-match; < 40 healthy, standard cadence.
Design decisions
- Rules before weights, because when operational truth and a smooth curve disagree, the rule is right.
- Interpretable linear weights over a black box, so any operator can reconstruct why an account was flagged from five numbers.
- Tone weighted at the same level as meeting cadence, since logged friction precedes cancellation by weeks in the observed cases.
- External interest applied as a post-adjustment rather than a sixth dimension, keeping the core read stable when that evidence is missing.
- Specified in writing before implementation, so the thresholds could be argued by people who do not read code.
What I would change
- Thresholds are calibrated on one market and one product; the 30-day silence saturation and the stage-level meeting expectations would need refitting elsewhere.
- It predicts risk well and cause only partially: the dimension tells you where to look, the operator still has to ask the right question.
Investor Friction Framework
Investor churn was explained after the fact, never measured before it.
Problem
Investor churn was only understood after the cancellation. Reasons were narrated, not measured, and retention interventions were built on intuition, which made them impossible to improve.
Approach
Instead of explaining departures after the fact, I specified an architecture that treats an investor leaving as accumulated friction: emotional signals across the relationship, how hard it is to get a response, how well the supply they see matches what they said they wanted, how they absorb a process that fell through, and how complex their own search is. Each of those became a module with its own variables, so the question moved from why did they leave to where is friction building.
Results
- Five friction modules and their variables written down for the first time, which became the working contract between operational knowledge and future modelling.
- Retention was reframed from post mortem to early intervention, giving the team leading indicators to act on rather than reasons to recite.
- The data team got something specific to build against instead of an anecdote.
How it works
- Five independent modules, each returning friction 0-100: relational tone, responsiveness, match fit, resilience after a failed process, and search complexity. Composite F = Σ wₖ·fₖ, with the weights deliberately left unset until enough labelled churn cases exist. The specification fixes the variables and the scales, not the coefficients.
- Responsiveness: median reply latency mapped on a log scale, under 4 hours = 0, 24 hours ≈ 50, 72 hours or more = 100, combined with the share of unanswered outbound messages over a rolling 30 days.
- Match fit: share of surfaced opportunities inside the declared box (sector, size band, geography, timeline). Each match is weighted by counterpart seriousness, signed mandate, financials shared, historical response rate, so twenty loose matches score below three verified ones.
- Resilience: a 30-day window after a process falls through, measured as the ratio of activity in that window to activity in the 30 days before it. Below 0.5 means the relationship, not the deal, is the thing at risk.
- Search complexity: count of simultaneous hard constraints. Above four, the friction is classified as structural, coming from the mandate itself, rather than as service friction the team can fix.
- Trend over level: every module reports the slope over the trailing 4 weeks, and intervention is triggered by a rise of 15 points or more, not by an absolute value.
- Each module resolves to a different play: expectation setting, re-matching, or a human conversation with the owner.
Design decisions
- Modules before a single composite, so a weak module can be refitted without touching the rest of the architecture.
- Friction rather than satisfaction as the organising concept, because latency, match rates and activity ratios are observable while satisfaction is reported.
- Match volume explicitly discounted by counterpart quality, since raw match counts were the metric that hid the problem in the first place.
- Resilience isolated as its own dimension, because a failed process is a fork in the relationship and behaves differently from ordinary inactivity.
- Delivered as a written specification with variables, scales and triggers rather than as a prototype, since the scarce resource was shared definitions.
What I would change
- It is a specification, not a validated model. The composite weighting stays honest only once there are enough labelled outcomes to fit it.
- Two modules depend on event data that was not captured consistently, so instrumentation has to come before prediction.
Sentiment Risk Score
Emotional warnings were logged everywhere and read nowhere.
Problem
Emotional signals across the seller lifecycle were logged inconsistently. A remark right after onboarding carried the same weight as a red flag in a first meeting with a buyer, and there was no shared scale, no sense of how old a signal was, and no agreed response.
Approach
A single emotional risk score whose weights redistribute according to the phase an account is in, because not every kind of signal exists at every moment. Recent signals count more than old ones, a signal type that repeats is read as a trend instead of a list, and every band of the score is wired to a concrete playbook.
Results
- One emotional risk scale from 0 to 100 across every lifecycle phase, which made accounts comparable for the first time.
- Redistributing weights removed the phase bias that made early accounts look artificially calm.
- Each band ends in a named play, so the score changed what people did that week and not just what they knew.
How it works
- Every logged emotional signal carries three attributes: a category (onboarding, valuation expectations, buyer meetings, process delays, commercial friction), a polarity, and a severity from 1 to 5.
- Score: S = 100 × Σ (w_c · sev_e · decay_e) / Σ (w_c · 5), normalising by the maximum reachable mass, so the scale stays 0-100 no matter how many events an account has.
- Weights w_c are defined per lifecycle phase. A category that cannot exist yet in the current phase gets weight 0 and its share is redistributed proportionally across the categories in play, so an absence never dilutes the score.
- Recency: decay = 0.5^(days/21), a 21-day half-life, with a floor of 0.25 reserved for the first relationship signal, so a bad start never disappears entirely.
- Repetition inside a category is not summed. It is smoothed with an exponentially weighted mean, α = 0.5 on the most recent event, which lets a recovery move the score instead of being buried by history.
- Bands and plays: 0-24 stable, standard cadence; 25-49 monitor, note in the weekly review; 50-74 at risk, structured call with a written next step; 75-100 critical, escalation to the lead and a recovery plan within 72 hours.
Design decisions
- Per-phase weight tables instead of one global table, because a signal in week one and the same signal mid-process are not the same event.
- A 21-day half-life chosen over a fixed lookback window, so the score cools down continuously instead of dropping when an event leaves the window.
- Normalising by reachable mass rather than by event count, otherwise a talkative account looks riskier than a silent one.
- Bands, not the raw number, shown to operators, so the response to a score is unambiguous.
- The floor on the first relationship signal added deliberately, since early distrust kept predicting late churn.
What I would change
- Severity and polarity are human input, so the model inherits the discipline of whoever logs the interaction.
- The band cut points come from judgement more than from labelled outcomes, and that calibration debt has to be paid with real cases.
Investor Onboarding Protocol
Retention depended on who happened to run the first call.
Problem
Investor onboarding depended on whoever ran the call. Portfolio retention swung widely from operator to operator, which meant the process, not the people, was the variable.
Approach
A structured onboarding protocol: mandatory research before the call, three defined blocks during it (understanding the thesis, walking through the platform, agreeing on next steps), and a short checklist to close the loop afterwards. The point was to make preparation non optional and the sequence identical whoever was in the room.
Results
- The three team members I onboarded with the protocol each reached around 89% portfolio retention, compared with roughly 75% before it existed.
- Onboarding stopped being an act of talent: three fixed blocks in the call and a short closing checklist that a new joiner can run in their first weeks.
- Preparation became visible work, which made it reviewable and improvable.
How it works
- Before the call: a fixed 20-minute research checklist, six items, investment history, prior transactions, sector and geography, cheque size, likely source of funds, and three questions written specifically for that investor. If the checklist is not documented in the CRM, the meeting is rescheduled.
- During the call: 45 minutes split 15 / 20 / 10. Fifteen minutes on the thesis, using open questions and no product talk; twenty minutes walking the platform on live opportunities that match what was just said; ten minutes agreeing next steps with a date.
- Qualification criteria are explicit and captured as fields, not impressions: declared box (sector, size band, geography), decision process, timeline, and the number of deals the investor expects to review per month.
- After the call: a six-item closing checklist inside 24 hours, CRM fields updated, declared criteria recorded, contact cadence agreed, first matches sent, objections logged verbatim, next date booked.
- Measurement: portfolio retention at 90 days per operator, reviewed monthly, which is the number that moved from roughly 75% to around 89%.
Design decisions
- A protocol rather than a training session, because a protocol survives turnover and a session does not.
- Preparation made a blocking precondition rather than a recommendation, since that was the only step that reliably disappeared under pressure.
- Fixed sequence and fixed time split, free tone, so structure does not turn the call into a recital.
- Objections recorded verbatim instead of summarised, because the wording is what feeds the next re-match.
- Ten items total across the two checklists, since a longer protocol is a protocol nobody follows.
What I would change
- A protocol raises the floor more than the ceiling, and the best operators still outperform it.
- It needs revision as the product changes, otherwise the walkthrough ages badly.
IV
Personal projects
What I build on the side, and why.
Amaru Invest
Problem
Value investing is the most proven wealth-building methodology in the history of financial markets, and one of the most time-intensive. Applying multiple frameworks rigorously to a single stock can take 4-6 hours. Individual investors cut corners, apply one framework, or default to consensus opinion that is already priced in. Emotional decisions, loss aversion, FOMO, anchoring, do the rest.
Approach
A web platform that scores any stock against the criteria of 9 legendary value investors, Graham, Buffett, Munger, Lynch, Greenblatt, Fisher, Templeton, Marks, Schloss, in seconds. The output is the Graham Score: a transparent, multi-dimensional 0-100 score with each pass/fail visible, plus a paper portfolio to simulate composition and an embeddable widget for third parties.
Features
- Simulated full-portfolio recommendations with no real-money commitment, so users can test allocations before capital is exposed.
- Recommendations calibrated to KYC signals: risk aversion, experience, and other investor metrics.
- Comparison tools across asset classes, equities, bonds and commodities, side by side.
- Macro overview by country, because investing is never only about the asset or the company but the environment they operate in.
- Due Diligence PDFs for full analysis, plus Amaru Agent (beta), the first voice-first coach guiding investors toward the best options in the market.
- The full flow is embedded in a seamless UX designed to prevent the informational overload that pushes most beginners to give up.
- TAM $2.5B · SAM $380M · 12% CAGR to 2033.
References
- [1]Arroyo, J. F. (Amaru Invest) (2026). Amaru Invest, Investor Brief 2026. Amaru InvestBrief↗ PDF
Hermes Fitness
Problem
Most fitness apps optimize for content, streaks, or aesthetics, not for the daily discipline that actually produces a transformation. Personalized plans are generic, tracking is a chore, and accountability disappears the moment life gets busy.
Approach
A training platform for athletes who want to train the way the ancients trained, with structure, progression, and community accountability. Personalized daily, weekly and monthly plans that adapt to logged performance, plus a global ranking system that keeps consistency visible.
Features
- Personalized plans, daily, weekly, monthly, tailored to declared goals and adjusted from what you actually lift.
- Rep-by-rep tracking, sets, reps, weight, with the plan re-adapting as you progress.
- Global ranking on streaks and consistency, not vanity metrics.
- Community layer, meet athletes, share the journey, push each other forward.
- Beta: macro meal tracker that reads nutritional data directly from meal photos, making ingestion accountability effortless.

