{dev.talk} - The One With Work That Waits and Software That Sells
Hi there,
When a payment is waiting on a business event, replaying an old message can act on stale intent; learn how to persist deferred work in Kafka and re-decide it against current state. Then explore how to build software that sells now that LLMs have made building easier, with practical perspectives on reliable systems and commercial value.
Thank you for being part of our amazing community of software engineers and tech enthusiasts.
Quick Reminder: Organising these events takes a lot of time and effort from our dedicated volunteers. If your plans change and you can't make it, please cancel your ticket via the ticketing app or drop us an email at contactus@devdottalk.uk. This helps us manage the event better and allows others to attend.
📍 Venue Details Coming Soon!
We'll reveal the exact location on campus a few days before the event. If you get a ticket, you will be notified of the location on the day, as well as links to maps too. This helps us to manage capacity more effectively.
Event Details
Date: Wednesday, 24th March 2027
Time:
- Doors open: 6:50 PM
- Event starts: 7:00 PM
- Event ends: 9:00 PM
Location: Bournemouth University, Talbot Campus
Speakers
Build to sell
Anyone can build now, almost. The LLM has taken the shiny armor from the software developers. But how to build that you can sell. I will talk about software development which sells.
Abdul Aleem Khan Bio
Abdul Aleem Khan is a UK-based software engineer and technical co-founder who has been building production AI systems since 2018. His work ranges from computer vision running on edge devices in retail stores to real-time news pipelines that detect and rewrite biased and toxic content. As co-founder and CTO of two AI startups, he built and led engineering and AI teams, designed microservice and edge architectures, and created proprietary datasets where public ones did not exist. Products he built have been recognised by national and Asia-Pacific technology awards, and he was selected for Google for Startups' first AI Academy APAC. He speaks about practical, production-grade AI: what works, what breaks, and how to keep humans in the loop.
Don't Replay It, Re-decide It: Recovering Deferred Work in Kafka and Java
Event-driven systems often receive work before its business preconditions are met. A common response is to throw and let Spring Kafka retry with DefaultErrorHandler or @RetryableTopic, eventually sending exhausted work to a dead-letter topic. That makes sense for transient technical failures.
It works badly when you're waiting for another business event. If that event arrives after the retry window, valid work sits on the dead-letter topic even though nothing is broken, and nothing retries it again until someone redrives it by hand. By then it may have been amended or cancelled, and replaying the original message can be idempotent and still be wrong.
Say a customer pays a new payee who's still being verified. In the usual setup the failed attempt rolls back, so there's no saved payment while it waits. A cancel finds nothing to cancel, and once the payee is verified the retry sends the payment anyway. If the customer lowers the amount from £500 to £300 instead, replaying the original request still sends £500. Blocking retries avoid some of the ordering problems, but hold up every later record on that partition.
This talk takes a different approach: persist the payment as waiting state, record which business event can unblock it, and when that event arrives, decide again against current state rather than replaying the original message. A payment waiting on its payee is never sent to the dead-letter topic, a cancel or amendment applies to it while it waits, and nothing holds up the partition. Retries stay for technical failures.
We'll build it in Java 21 with Spring Kafka and PostgreSQL, with a pure decision function, sealed outcomes and optimistic locking for changes that land during a wake-up. Then we'll reproduce a lost-wakeup race deterministically, close it with PostgreSQL row locking, and see why the fix depends on the isolation level.
Every scenario is a Testcontainers test against real Kafka and PostgreSQL: github.com/elgamal-ahmed/kafka-deferred-work-recovery
Ahmed ElGamal Bio
Ahmed Elgamal is a Senior Associate Product Engineer at CAIS in London, with nearly eight years building backend and distributed systems, most of it in fintech and banking. Before CAIS he worked at JPMorgan Chase, Klar (Latin America's first digital bank) and Amazon. He works mainly in Java and Kotlin on event-driven systems with Kafka.
What to Expect
We'll have soft drinks and some snacks available to keep you refreshed throughout the evening. If you have any dietary restrictions or allergen concerns, please let our organisers know.
Upon arrival, we'll check your ticket and provide you with a name badge. This is a great opportunity to network with fellow attendees, so don't be shy, introduce yourself.
The night will consist of some software focussed talks (normally 2) interspersed with networking opportunities.
For more on the event format, see our Attending page and FAQs.
Important Notes
By attending this event, you agree to our Privacy Policy and Code of Conduct.
Photography & Recording: Please note that the event will be recorded and photographed. If you prefer not to be included in any photos or videos, kindly inform the camera operator. These materials will be used to promote future events and shared on platforms like YouTube.
We Can't Wait to See You
Thank you for being part of {dev.talk}. We're excited to connect, learn, and grow together as a community. See you soon!
Warm regards,
The {dev.talk} Team
