𝗬𝗼𝘂𝗿 𝗧𝗶𝗰𝗸𝗲𝘁 𝗪𝗮𝘀 𝗖𝗹𝗼𝘀𝗲𝗱. 𝗧𝗵𝗲 𝗨𝘀𝗲𝗿 𝗦𝘁𝗶𝗹𝗹 𝗖𝗼𝘂𝗹𝗱𝗻'𝘁 𝗣𝗮𝘆.

Your backend returned a 200 status code. The mobile app showed an error. The user tapped "Pay" three times. Three charges hit their account. One order went through. Their balance is now short. Your logs show zero failures.

Every engineer did their job. Nobody solved the problem.

Teams often fail not because of bad code, but because they execute the wrong work. You might ship a system that works perfectly but creates a terrible experience.

Junior engineers think in tickets. Ticket assigned. Code written. Tests pass. PR merged. Ticket closed.

This mindset is a liability as you grow. An engineer who closes tickets is useful. An engineer who asks "does this actually solve the business problem" is indispensable.

Consider a payment flow. The backend engineer builds an endpoint. It processes charges and returns correct codes. 100% test coverage. Ticket closed. The mobile engineer builds the screen. It calls the endpoint and shows a response. Smooth UI. Ticket closed.

The problem nobody owned: What happens when the network drops after the charge but before the mobile app receives the confirmation?

The backend shows success. The mobile app shows failure. The user retries and gets charged twice.

The fix is not just a backend or mobile fix. It requires idempotency keys. The mobile app must generate a unique key for every attempt. The backend must use that key to ensure a retry never creates a duplicate charge.

This solution only happens if engineers talk to each other about the user experience during network drops.

The same happens with hardware. The hardware engineer ships firmware. The mobile engineer ships the app. The backend engineer ships the API. Each part works. Each test passes.

But the user presses a button and the light turns on 11 seconds later. The latency lives in the gaps between the components. No single engineer owned the end-to-end speed.

Real reliability is a system property, not a component property.

To fix this, you must change how you work:

Jawatan anda menggambarkan kemahiran anda. Ia tidak menentukan had tanggungjawab anda.

Jika anda seorang jurutera backend, anda bertanggungjawab untuk memastikan pembayaran pengguna boleh dipercayai. Jika anda seorang jurutera mudah alih, anda bertanggungjawab terhadap keyakinan pengguna.

Menutup tiket hanyalah tahap asas. Mengambil tanggungjawab terhadap hasil akhir pengguna adalah tahap tertinggi.

Sumber: https://dev.to/walosha/your-ticket-was-closed-the-user-still-couldnt-pay-14di