On software and life
From human decisions, to suggestions to automated decisions
I've been wanting to share this experience for a while, but it took me a while to come up with a story and example I cou...
My InfoQ interview on DDD, events and legacy
Seems that it's impossible to beat the Gaussian curve of blogging frequency. On the other hand, I spent quite some of my...
Notifications from an event log
User notifications are a feature that came as an afterthought, but turned out to be rather easy to implement - without t...
Visualizing event streams
In my recent talk on [Evil by Design](http://www.jefclaes.be/2015/11/slides-from-my-talk-evil-by-design-at.html), I show...
Slides from my talk "Evil by Design" at Build Stuff
Third time attending Build Stuff, first time doing a talk. I'm happy that it's out of the way and can now just enjoy the...
Defining big wins
Casinos invest a lot of energy selling the dream. One way to do this is by showing off people winning big in your casino...
Basic casino math
In a previous series of posts, I went over the models used by casinos to spin a wheel ([spinning](http://www.jefclaes.be...
Scaling promotion codes
In our system a backoffice user can issue a promotion code for users to redeem. Redeeming a promotion code, a user recei...
Domain Language: The Playthrough Bonus
Since online gambling has been regulated in Belgium, basically each eligible license holder has complemented their land ...
Spinning the wheel: clustering and near misses
The previous post showed a simple model casinos use to manipulate the odds. Instead of relying on the physical wheel for...
Spinning the wheel: manipulating the odds
The previous post defined a basic set of data structures and functions to spin a wheel of fortune in F\#. There was...
Spinning the wheel
In this post, I'll define a basic set of data structures and functions to spin a wheel of fortune. In the next post, I'l...
Hot aggregate detection using F#
Last week, I wrote about [splitting a hot aggregate](http://www.jefclaes.be/2014/11/splitting-hot-aggregates.html). Disc...
Splitting hot aggregates
When you visit a real casino, the constant busy-ness is overwhelming; players spamming buttons, pulling levers, spinning...
Thinking No Computers
The other day I happened to see a curious exchange in one of our businesses. The cashier swapped a torn, but carefully r...
Not about the UI and the database
When you ask an outsider which components an average application consists of, he will most likely be able to identify th...
NCrafts Eventstorming slides
Me and [Tom](https://twitter.com/tojans) just finished doing our Event storming workshop at [NCrafts Paris](http://ncraf...
Alternatives to Udi's domain events
Almost four years ago [Udi Dahan introduced an elegant technique](http://www.udidahan.com/2009/06/14/domain-events-salva...
Strategic DDD in a nutshell
There are two big parts to Domain Driven Design; strategy and tactics. Strategy helps setting out a high-level grand des...
Repositories, where did we go wrong?
In essence, repositories are a simple abstraction over aggregate storage. A repository will insert, update, delete or fe...
An event sourced aggregate
Last week I shared [my theoretical understanding of event sourcing](http://www.jefclaes.be/2013/10/my-understanding-of-e...
My understanding of event sourcing
I've been studying event sourcing from a distance for little over a year now; reading online material and going through ...
Eventual consistent domain events with RavenDB and IronMQ
Working on side projects, I often find myself using [RavenDB](http://ravendb.net/) for storage and [IronMQ](http://www.i...
When your commands spell CUD
A good while ago, I blogged on commands (and queries). After exploring various flavors, I eventually settled on this one...
Multiplayer Enterprise Architect
Hanging around in the pub after DDDX, I ended up talking to [Alberto Brandolini](https://twitter.com/ziobrando). For tho...
Accidental entities - what about the UI?
This post is a follow-up to my previous blog post "[Accidental entities - you don't need that identity](http://www.jefcl...
Accidental entities - you don't need that identity
An entity is identified by an identifier, while value objects are identified by their value. If I make a living ren...
IDDD Tour notes (2/2)
This is the second and last part of my notes I scribbled down attending the IDDD Tour. [The first part](http://www.jefcl...
IDDD Tour notes (1/2)
Two weeks ago I got to spend four days attending the [IDDD Tour](http://idddtour.com/) by [Vaughn Vernon](https://twitte...