Joey Battjav4.1
PDF
Resume · v4.1 · Reference format

Joey Battja

Joey Battja

Chief Product Officer. Eighteen years in banking and payments: ING, then Adyen through its IPO, then CPO at Xendit — those last two grew 35× and 10× while I was there. Now CPO at Open Fabric. Dutch, based in Jakarta.

GET/200 OK
{
  "name": "Joey Battja",
  "version": "4.1",         // age ÷ 10
  "role": "Chief Product Officer",
  "company": "Open Fabric",
  "since": "2026-01",
  "domain": ["payments", "banking"],
  "years_in_domain": 18,
  "nationality": "NL",
  "location": { "city": "Jakarta", "tz": "UTC+7" },
  "previously": ["Xendit", "Adyen", "ING"],
  "trained_as": "classical pianist",
  "links": {
    "email": "joey@battja.com",
    "linkedin": "linkedin.com/in/joey-battja-152a41a8",
    "pdf": "/JoeyBattja-CV.pdf",
    "experience": "/experience",
    "contact": "/contact"
  }
}
content-type: application/jsonlatency: 12ms
Getting started

Key figures

If you read one thing, read this. Everything below is expanded under /experience.

10×
Xendit valuation growth during my tenure, to over $3B
35×
Adyen valuation growth during my tenure, to $80B
3mo→2wk
Time to ship a new payment integration after re-architecting Xendit's core
5
New countries launched, each with its own local payment rails
~60
Product managers and designers led as CPO
75%
Product & Engineering headcount cost cut as CPO — same delivery velocity
GET/metrics200 OK
{
  "valuation_multiple_during_tenure": {
    "xendit": 10,
    "adyen": 35
  },
  "integration_lead_time": {
    "before": "P3M",
    "after": "P2W"
  },
  "countries_launched": 5,
  "team_led": { "pms_and_designers": 60 },
  "scheme_memberships_negotiated": ["mastercard", "visa"],
  "headcount_cost_reduction": 0.75,   // see /experience/xendit
  "maintenance_cost_reduction": 0.5,
  "velocity_change": 0
}
GET/experience

Experience

Returns the career as a sequence of movements, most recent first. The tempo markings are honest: a slow start, an acceleration, a sprint, one deliberate pause, and now a smaller stage at full speed.

GET/experience200 OK
{
  "object": "list",
  "data": [
    { "movement": "IV",  "org": "Open Fabric", "tempo": "Allegro con brio", "from": "2026-01", "to": null },
    { "movement": null,  "org": "Intermezzo",  "tempo": "Adagio",           "from": "2025-03", "to": "2025-12" },
    { "movement": "III", "org": "Xendit",      "tempo": "Presto",           "from": "2021-08", "to": "2025-03" },
    { "movement": "II",  "org": "Adyen",       "tempo": "Allegro",          "from": "2016-09", "to": "2021-07" },
    { "movement": "I",   "org": "ING",         "tempo": "Andante",          "from": "2008-11", "to": "2016-08" },
    { "movement": "Prelude", "org": "Prins Claus Conservatorium", "tempo": "Rubato", "from": "2004", "to": "2007" }
  ],
  "has_more": false
}
IV
Open FabricAllegro con brio
January 2026 – present

Issuer processing — the other side of the card transaction from everything I did at Adyen and Xendit. A much smaller company than the last two, so the title says CPO but the job is Product plus whatever else lands on the table: pre-sales, legal, account management. One-man show.

Chief Product Officer
  • Launched Tap & Pay in the Philippines with the largest wallets and BNPL providers in the market.
  • Closed deals from Southeast Asia to Africa.
  • Work with Mastercard and Visa day to day — this time from the issuing side.

Working AI-native

With no team to delegate to, I run the company's product work the way I'd expect a team to run it in 2026. Some examples:

  • Rebuilt the company website in a matter of hours with Claude Design. The previous version took a marketing agency weeks.
  • Wrote the developer documentation from scratch in days, using LLMs to draft, check and keep it consistent with the actual API.
  • Contracts, proposals, pre-sales decks and internal tooling: same approach. Most of what used to need a specialist or a vendor now needs an afternoon.
GET/experience/open-fabric200 OK
{
  "movement": "IV",
  "org": "Open Fabric",
  "tempo": "Allegro con brio",
  "role": "Chief Product Officer",
  "from": "2026-01",
  "to": null,
  "domain": "issuer processing",
  "company_size": "small",
  "team": 1,                // me
  "also_running": ["pre-sales", "legal", "account management"],
  "launched": [
    { "product": "Tap & Pay", "market": "PH", "partners": ["largest wallets", "BNPLs"] }
  ],
  "deals_closed": { "from": "Southeast Asia", "to": "Africa" },
  "networks": ["mastercard", "visa"],
  "ai_native": {
    "website_rebuild":  { "took": "PT4H", "previously": "P3W", "with": "Claude Design" },
    "developer_docs":   { "took": "P3D",  "from_scratch": true, "with": "LLMs" },
    "also": ["contracts", "proposals", "pre-sales decks", "internal tools"]
  }
}
IntermezzoAdagio
March 2025 – December 2025

Nine months of advisory work, and the first real pause since 2008. I used most of it to learn to build with LLMs properly: shipped a series of my own AI tools, some of which I still use daily. That's where the way I now work at Open Fabric comes from.

GET/experience/intermezzo200 OK
{
  "movement": null,
  "org": "Intermezzo",
  "tempo": "Adagio",
  "from": "2025-03",
  "to": "2025-12",
  "activities": ["advisory", "building AI tools", "rest"],
  "shipped": ["Laminar", "Arc", "…"],   // see /skills
  "regrets": 0
}
III
XenditPresto
August 2021 – March 2025 · Jakarta

The leading payment gateway in Southeast Asia. When I joined it was Indonesia-only; when I left it covered every major market in the region and the valuation had grown 10× to over $3B.

Head of Product & Chief Product Officer Nov 2022 – Mar 2025
  • Led the Product organisation — around 60 product managers and designers — and joined the leadership team.
  • Cut Product & Engineering headcount cost by 75%. That means I let most of the team go. It was hard, and it was the right call: we kept shipping new features at the same pace with a quarter of the cost.
  • Expanded the product to 5 new countries, integrating directly into the local payment infrastructure in each one.
  • Personally drove the conversations with Mastercard and Visa that made Xendit a direct scheme member, then built the cards processing platform and the team for it from scratch.
Product Lead, Payments Aug 2021 – Nov 2022
  • Hired to run the core business line. Re-architected the payments platform: maintenance cost down 50%, and time to ship a new payment channel down from about 3 months to about 2 weeks.

How I worked there

Practical, and leading by example. I want to know the product inside out and the customers just as well, so I spent a lot of time in the region meeting merchants, partners and the team. Colleagues describe me as direct, no-bullshit, biased to action, and calm about all of it.

GET/experience/xendit200 OK
{
  "movement": "III",
  "org": "Xendit",
  "tempo": "Presto",
  "from": "2021-08",
  "to": "2025-03",
  "location": "Jakarta",
  "company": {
    "what": "leading payment gateway, SEA",
    "countries_on_join": 1,
    "countries_on_leave": 6,
    "valuation_multiple": 10,
    "valuation_usd": "3B+"
  },
  "roles": [
    {
      "title": "Head of Product & CPO",
      "from": "2022-11",
      "to": "2025-03",
      "team": { "pms_and_designers": 60 },
      "leadership_team": true,
      "headcount_cost_change": -0.75,
      "velocity_change": 0,
      "countries_launched": 5,
      "scheme_membership": ["mastercard", "visa"],
      "built_from_scratch": ["cards processing platform", "cards team"]
    },
    {
      "title": "Product Lead, Payments",
      "from": "2021-08",
      "to": "2022-11",
      "maintenance_cost_change": -0.5,
      "integration_lead_time": { "before": "P3M", "after": "P2W" }
    }
  ]
}
II
AdyenAllegro
September 2016 – July 2021 · Amsterdam

One of the world's leading payments companies. I was there while it went from a relatively small scale-up to a global industry leader: IPO in 2018, and 35× in valuation to $80B by the time I left.

Product Manager, Local Payments
  • Implemented and ran a long list of payment methods and partners: iDEAL in the Netherlands, Klarna globally, card instalments in Turkey, convenience-store payments in the Philippines.
  • Day to day: negotiating with partners and prospective partners, fixing operational and financial issues, and being the subject-matter expert for merchants.
GET/experience/adyen200 OK
{
  "movement": "II",
  "org": "Adyen",
  "tempo": "Allegro",
  "role": "Product Manager, Local Payments",
  "from": "2016-09",
  "to": "2021-07",
  "location": "Amsterdam",
  "company": {
    "ipo": 2018,
    "valuation_multiple": 35,
    "valuation_usd": "80B"
  },
  "payment_methods_shipped": [
    { "name": "iDEAL",  "type": "online_banking", "market": "NL" },
    { "name": "Klarna", "type": "bnpl",           "market": "global" },
    { "name": "card instalments", "type": "cards", "market": "TR" },
    { "name": "convenience store", "type": "cash", "market": "PH" },
    "…"
  ],
  "day_to_day": ["partner negotiation", "ops & finance fixes", "merchant SME"]
}
I
INGAndante
November 2008 – August 2016 · Groningen & Amsterdam

The largest bank in the Netherlands. Started on the phones, ended up owning product.

Call-centre advisor → Business Analyst → Product Owner
  • Answered customer calls on online banking and mortgages in Groningen. Within two years, was asked to help set up the second-line support team at head office in Amsterdam.
  • Moved into Business Analysis, then became Product Owner for ING's online business banking channels across Europe.
  • Learned to work with internal and external development teams, and spent most of my time solutioning and making trade-offs with stakeholders to get things live. This is where the affinity for tech started.
GET/experience/ing200 OK
{
  "movement": "I",
  "org": "ING",
  "tempo": "Andante",
  "from": "2008-11",
  "to": "2016-08",
  "location": ["Groningen", "Amsterdam"],
  "roles": [
    { "title": "Call-centre advisor",  "scope": ["online banking", "mortgages"] },
    { "title": "2nd-line support",     "note": "helped set up the team, head office" },
    { "title": "Business Analyst" },
    { "title": "Product Owner",        "scope": "online business banking, Europe" }
  ],
  "learned": ["internal & external dev teams", "trade-offs", "shipping"]
}
PreludeRubato
2004 – 2007 · Prins Claus Conservatorium, Groningen

Classical piano. Beethoven, Chopin, Rachmaninoff, Bach, Liszt, Mozart, Prokofiev, Schubert. Still playing — see /recordings.

GET/experience/prelude200 OK
{
  "movement": "Prelude",
  "org": "Prins Claus Conservatorium",
  "tempo": "Rubato",
  "from": "2004",
  "to": "2007",
  "instrument": "piano",
  "repertoire": ["Beethoven", "Chopin", "Rachmaninoff", "Bach", "Liszt", "Mozart", "Prokofiev", "Schubert"],
  "still_active": true
}
GET/skills

Skills

Payments

  • Payments and cards processing, clearing and settlement for bank transfers, local e-wallets and national QR schemes.
  • Regulation and compliance: licence applications on both sides of the world — Europe and Southeast Asia. I know how to work with rulebook regulators like the EU and Singapore, where the answer is in the text, and with regulators like Indonesia, where the answer is in the relationship. Few people have done both.
  • Commercials and pricing. I can show, with data, what a product does to a company's revenue and cost.
  • Enough conversations with e-commerce, digital goods, digibanks and travel companies to know their pain points and turn them into product and commercial opportunities.

Technical

Deep enough to review an architecture, and to build and ship products on my own. Historically Java and SQL, with enough HTML and JavaScript to get by; since 2025, mostly LLM-assisted, and end to end — including the infrastructure (AWS, Cloudflare, deployment, monitoring). Two of the things I built are live B2B SaaS products with paying customers:

  • Laminar — AI-native product documentation. Writes PRDs and keeps the documentation aligned with the code, automatically.
  • Arc — AI-native presentations. An agent that builds the deck from a prompt with full context of your company, plus a Google-Slides-grade editor and presenter.

Not commercialised, but built end to end: a payment gateway from scratch, and a sheet-music library with an AI tutor.

Leadership

Teams from a handful of people to sixty. Companies from a small startup to a scale-up through its IPO to a large incumbent bank. Different sizes need different ways of working, and I've done enough of them to know which one a company actually needs.

"There's no one size fits all."

GET/skills200 OK
{
  "payments": {
    "processing": ["cards", "bank transfers", "e-wallets", "national QR"],
    "clearing_settlement": true,
    "regulation": {
      "licence_applications": ["EU", "ID"],
      "regulator_styles": {
        "rulebook":     ["EU", "SG"],   // answer is in the text
        "relationship": ["ID"]           // answer is in the room
      }
    },
    "commercial": ["pricing", "unit economics", "revenue impact"],
    "verticals": ["e-commerce", "digital goods", "digibanks", "travel"]
  },
  "technical": {
    "reviews_architecture": true,
    "builds_things": true,
    "languages": { "Java": "solid", "SQL": "solid", "HTML/JS": "basic" },
    "infra": ["AWS", "Cloudflare", "deployment", "monitoring"],
    "since_2025": "LLM-assisted, end to end",
    "projects": [
      { "name": "Laminar", "url": "laminar.orchesthq.com", "what": "PRDs + docs that stay aligned with code", "status": "live", "customers": true },
      { "name": "Arc",     "url": "arc.orchesthq.com",     "what": "agent-built slides + full editor",      "status": "live", "customers": true },
      { "name": "payment gateway",     "what": "built from scratch",        "status": "not commercialised" },
      { "name": "sheet music library", "what": "with an AI tutor",          "status": "personal" }
    ]
  },
  "leadership": {
    "team_size_range": [5, 60],
    "company_stages": ["startup", "scale-up", "IPO", "public", "incumbent bank"]
  }
}
GET/languages

Languages

Dutch natively, English near-natively. Indonesian well enough to run a business meeting in it — with an accent, but nobody has to switch to English for me. German, French, Spanish and Italian well enough to have a proper conversation. And a dozen or so more where I can order a coffee or a beer and get the right one.

Separately: I can read Cyrillic, Greek, Hangul, Hiragana, Katakana and a bit of Kanji, and cannot speak most of the languages that use them. The response marks those read_only.

GET/languages200 OK
{
  "spoken": [
    { "lang": "nl", "level": "native" },
    { "lang": "en", "level": "near-native" },
    { "lang": "id", "level": "business", "accent": true },
    { "lang": ["de", "fr", "es", "it"], "level": "conversational" },
    { "lang": "~12 more", "level": "coffee_or_beer" }
  ],
  "scripts": [
    { "script": "Cyrillic", "read_only": true },
    { "script": "Greek",    "read_only": true },
    { "script": "Hangul",   "read_only": true },
    { "script": "Kana",     "read_only": true },
    { "script": "Kanji",    "read_only": true, "partial": true }
  ]
}
GET/characteristics

Characteristics

  • Sees the bigger picture and thinks in long-term goals, while knowing nearly all the details and staying hands-on.
  • Translates technical into business and back, fluently.
  • Pragmatic. Would rather do it than discuss doing it.
  • Driven to deliver above what was asked. Every time.
  • Calm. Relaxed. In control.
  • Direct. You'll always know where you stand with me.
  • Autodidact: programming languages, instruments and human languages, all self-taught, all fast.
  • From a household of several cultures, religions and languages, with work across Europe and Asia. Cultural gaps are crossable.

"You can't understand the bigger picture without understanding the details."

GET/characteristics200 OK
{
  "big_picture": true,
  "detail_aware": true,
  "hands_on": true,
  "tech_to_business_translation": "bidirectional",
  "pragmatic": true,
  "bias_for_action": true,
  "calm": true,
  "direct": true,           // not configurable
  "autodidact": ["code", "instruments", "languages"],
  "multicultural": true,
  "one_size_fits_all": false
}
GET/recordings

Recordings

Piano. Because it's a large part of who I am, and because a CV that only lists what you did at work is only half a CV. Two excerpts, recorded at home in Jakarta.

Rhapsody in Blue
George Gershwin · opening, solo piano version · Jakarta, 2021
0:00 1:07
Ballade No. 1 in G minor, Op. 23
Frédéric Chopin · introduction and first theme · Jakarta, 2022
0:00 1:48
GET/recordings200 OK
{
  "object": "list",
  "instrument": "piano",
  "data": [
    {
      "title": "Rhapsody in Blue",
      "composer": "George Gershwin",
      "arrangement": "solo piano",
      "recorded": { "city": "Jakarta", "year": 2021 },
      "excerpt": { "start": "PT0S", "duration": "PT1M7S" },
      "url": "/recordings/gershwin-rhapsody-in-blue.mp3"
    },
    {
      "title": "Ballade No. 1 in G minor, Op. 23",
      "composer": "Frédéric Chopin",
      "section": "introduction and first theme",
      "recorded": { "city": "Jakarta", "year": 2022 },
      "excerpt": { "start": "PT0S", "duration": "PT1M48S" },
      "url": "/recordings/chopin-ballade-1.mp3"
    }
  ],
  "has_more": false
}
POST/contact

Contact

Email is the endpoint: joey@battja.com. LinkedIn works too. If you need the one-page version for a file: PDF. Based in Jakarta, so factor in UTC+7 — I tend to answer quickly, but not at 4am.

Happy to talk product leadership, payments and fintech — advisory, a second opinion, or something bigger. Come with specifics; I'll answer with specifics.

POST/contact202 Accepted
// request
{
  "to": "joey@battja.com",
  "subject": "…",
  "body": "specifics go here",
  "about": "product_leadership" | "advisory" | "something_bigger"
}

// response
{
  "status": "accepted",
  "expected_reply": "within a day, UTC+7 permitting",
  "linkedin": "linkedin.com/in/joey-battja-152a41a8",
  "pdf": "/JoeyBattja-CV.pdf",
  "phone": null           // see Errors → 404
}
Reference

Errors

This resume uses conventional HTTP status codes. These are the ones you may run into.

CodeMeaning
404phone_not_foundPhone numbers aren't exposed here. Use POST /contact.
409fluff_rejectedThe request contained corporate euphemisms. Rephrase plainly and retry.
429too_many_meetingsRate limited. Retry with an agenda.
422one_size_fits_allYou asked for the same playbook that worked at your last company. It won't validate here.
503at_the_pianoTemporarily unavailable. Retry after the movement ends.
GET/phone404 Not Found
{
  "error": {
    "code": "phone_not_found",
    "message": "Phone numbers aren't exposed here.",
    "hint": "POST /contact"
  }
}
Reference

Changelog

Version number is age ÷ 10. A minor release ships every 29 July, whether or not anything changed.

VersionChange
v4.1 · 2026-07Scheduled release. No breaking changes.
v4.0 · 2026-01New major: CPO, Open Fabric. Switched to the issuing side.
v3.9 · 2025-03Intermezzo. Advisory, rest, and a series of AI tools shipped — see /skills.
v3.7 · 2022-11Promoted to Head of Product & CPO, Xendit. Added /experience/xendit.roles[0].
v3.6 · 2021-08New major: Xendit, Jakarta. Region changed from EU to SEA.
v3.1 · 2016-09New major: Adyen, Amsterdam.
v2.3 · 2008-11First production release: ING, Groningen.
v1.9 · 2004-09Prelude. Prins Claus Conservatorium.
v0.0 · 1985-07-29Initial commit.