24 Comments

Thanks!

Expand full comment

👊

Expand full comment

Very useful. Thanks for this!

Expand full comment

Glad to help. Thanks for reading!

Expand full comment

Great article. Nicely illustrated! Thank you, Raúl.

Expand full comment

Thanks, Rafa!

Expand full comment

It's useful info,

Expand full comment

Glad to help. Thanks!

Expand full comment

I use to combined retry and DLQ, I appreciate your show up when retry or not retry. Seems obvious but worth to noticed!

Expand full comment

Retry and DLQ are a good combo for so many cases that they are hard to ignore.

Thanks, Romain.

Expand full comment

Great article with underrated topic, Raul!

Expand full comment

Thanks, Heru!

Expand full comment

fantastic article, thanks a lot, Raul

Expand full comment

Thanks, Neo!

Expand full comment

Enjoyed reading it. Great article Raul!

Also, thanks for the mention.

Expand full comment

Glad you liked it, Ashish.

Thanks!

Expand full comment

An excellent breakdown about and underrated topic.

And thanks for the mention my friend.

Expand full comment

Keep those articles coming, my friend.

Thanks!

Expand full comment

When is the 2nd part going to be released?

Expand full comment

Great article, takes me back to many years ago. I’d like to contribute a perspective on handling retry mechanisms, particularly in the context of network timeouts. Based on my experience, network timeouts can escalate into critical issues, especially when interfacing with unreliable payment providers. There are numerous factors that contribute to network timeouts, and to mitigate risks such as financial loss or double-charging, the most secure approach is to leave transactions in a pending state rather than attempting retries. Final reconciliation can then be performed once the transaction status is confirmed, either implicitly or explicitly, by the provider. This reconciliation process is often scheduled at the end of the day or through periodic checks between involved parties.

A common issue arises when the payment provider receives the request but experiences delays due to inefficient processing or mismatched timeout configurations. In such cases, the requesting system may prematurely terminate the connection, assuming a failure, even though the transaction has already been committed and is likely to be processed successfully on the provider’s end. This underscores the importance of aligning timeout settings and implementing robust reconciliation mechanisms to ensure transactional integrity.

Expand full comment

Working with payments is crucial. This was one of the reasons I joined such a company last year.

Great article, Raul!

Expand full comment

Excellent explanation Raul.

I really liked the point about identifying transient errors vs permanent failures. An intelligent payment system should know when to stop.

Thanks for the mention as well!

Expand full comment

Hi, thank you for sharing very interesting topic, but I disagree with the method of CodeCrafters of recreate something that already exist. For me Is Better tò have a timed coding contest with real world project in order to improve and learn new skills.

Expand full comment

It's all good; everybody learns in different ways.

The idea of reconstructing these projects is to understand how they were built, the scale of the problems they solved, and the trade-offs they made.

Expand full comment