Ari Pratama Zhorifiandi

Hey, It's Ari! 👋

Currently working on Cross Border Payment and Fintech Infrastructure @Xendit wearing multiple hats: Staff Software Engineer (IC), Software Architect, and Technical Lead, and scaled the products from 0 to 1 to 10 to 100 and so on...

What I Do

Org-Wide Migrations

"130 services, 43 teams, one quarter, zero downtime"

Led the full RabbitMQ-to-Kafka migration across the entire org at 700 TPS of real-money writes, raising uptime from 99% to 99.99% and cutting infra cost by 70%.

Cross-Border Payment Systems

"$10B+ annual volume across 6 countries"

Built FX conversion platforms, remittance payout systems, and multi-corridor bank integrations (Wallex, JPM, Standard Chartered) processing 1M+ transactions/month at 99.99% uptime.

Engineering Culture & Standards

"Making the safe path the easy path"

Defined org-wide standards for reliable messaging, CI/CD, and trunk-based development. Cut production incidents ~90% and doubled release cadence across 3 teams.

IC Leadership & Mentorship

"12 engineers mentored, 3 promoted to Senior"

Driving impact through architecture ownership, design reviews, RFCs, and ADRs. Scaling through delegation, coaching, and building systems people actually want to use.

Experience

Staff Software Engineer

2021 – Present
Xendit · FX / Money Out
Architected org-wide Kafka migration across 130+ services (99.99% uptime, 70% infra cost reduction). Built cross-border FX Platform powering $10B+ annual volume. Defined reliable worker standards adopted by 4 teams, cutting failed transactions 80%. Mentored 12 engineers; 3 promoted to Senior.

Senior Software Engineer

2020 – 2021
Xendit · Remittance
Built full-stack remittance and risk-scoring systems with direct bank integrations across 6 countries. Processed 1M+ transactions/month at 99.99% uptime. Led 5 zero-downtime migrations from AWS Elastic Beanstalk to Kubernetes (EKS).

Software Engineer

2018 – 2019
Bukalapak · Personalization
Built personalized recommendation system (4000 RPS @ 100ms) for 10M+ users. Migrated 5 services to GCP with zero downtime.

Personal Notes


  • Reliable Messaging Workers - Rule of Thumbs

    In distributed systems, messaging workers are the backbone of asynchronous processing, ensuring web servers can respond to clients promptly. But what happens when things go wrong? From awkward database states during third-party downtime to lost messages and manual recovery efforts, unreliable workers can lead to endless firefighting. This post explores practical tips and rule-of-thumb properties for designing reliable messaging workers. Inspired by my experience with Xendit teams, these strategies have resulted in nearly zero message issues, happier developers, and no more manual fixes.
  • Understanding Software Architecture Characteristics (or Non Functional Requirements) in a Nutshell

    When building software systems, understanding your functional requirements—what features your system should provide—is crucial. However, that alone will only take you so far. To truly ensure the success and longevity of your system, you need to go beyond the functional aspects and dive into Non-Functional Requirements (NFRs).
  • Optimize Latency using Parallelization in Node.js

    Struggling with slow response times in your app? Often, the delay is due to slow dependencies, like third-party APIs. If you can't speed up these external services, try optimizing your own app's performance by leveraging parallelization. Running independent tasks concurrently can significantly reduce overall processing time and improve efficiency, even if some tasks remain slow.
  • Simplify Your Code Review Process with Automation Tools!

    As engineering teams grow, code reviews become challenging yet still crucial for quality control. We've all been there – nitpicking over minor issues while important stuff gets lost. These reviews often become bottlenecks, slowing us down. These kind of reviews often become bottlenecks, slowing us down, put heavy toils on developers, or in worst case, even cost us! (*Production Down*) It needs to stop! It's very possible to automate this kind of checks by leveraging existing tools and focusing on what really matters. By then, we can speed up the code review and make it more effective. Say goodbye to endless debates about tabs vs. spaces!
  • Avoid Manual Reconciliation, Solve Stuck Systems Flow using Saga Pattern

    Have you ever encountered case where you need to do manual reconciliation when your systems break? This often happens in transactional flow, in which every request matters. Implementing saga pattern will help reduce manual intervention, improves system reliability, and ensures smooth user experiences when things go wrong.
  • Optimize Latency using Parallelization in Go

    Struggling with slow response times in your app? Often, the delay is due to slow dependencies, like third-party APIs. If you can't speed up these external services, try optimizing your own app's performance by leveraging parallelization. Running independent tasks concurrently can significantly reduce overall processing time and improve efficiency, even if some tasks remain slow.