zhorifiandi

Hey, It's Ari! 👋

Software Engineer and Architect from Indonesia 🇮🇩
with 7+ years of experience

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...

Previously worked on Personalization and Recommendation @Bukalapak, mixed of Backend Engineering, Cloud Engineering, and Data Engineering.

I studied Informatics (Computer Science) @Bandung Institute of Technology (ITB)

Connect with me:

zhorifiandi zhorifiandi zhorifiandi


Languages:

go typescript python ruby


Stacks:

aws aws cassandra docker elasticsearch gcp hadoop kafka kubernetes mongodb postgresql rabbitMQ react redis


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.