Monday came with the change of plans in our team. Tomas and Pieter realized that although our planned architecture looks really awesome (with all that messaging and dynamic component switching) it is too futuristic for our current goals. We want to migrate out of .NET+SQL, for a start. We also want to learn more about our domain before investing a lot of time to optimize it to perfection.
We archived our existing prototype code and switched gears to:
- Single git repository for the entire project
- Single process application with in-memory components
- Event-driven domain
Our short-term goal is to capture HappyPancake domain in golang in the simplest possible way. Then we'll improve design from there.
I spent part of the week working on our EventStore (which is just a layer on top of FoundationDB). After benchmarking it we encountered a very foundational problem: it is hard to append sequentially to a global event stream (transaction log) which is replicated on a cluster. You either get a horrible throughput or you need to sacrifice consistency which affects reading speed. Another alternative is to find something else to sacrifice in a way that has the least possible effect on event-sourced application.
This was an interesting tech challenge, neatly isolated and spinning in our minds. We agreed to take some time to think about it before moving forward with the implementation. Today is the day we share our ideas.
I also spent some time drafting a simple prototype of basic HappyPancake functionality decomposed into a bunch of event-driven components. It was an extremely rewarding experience to see concepts from C# being expressed in go language.
This weekend I went to Chelyabinsk to deliver a talk on software design (masked under the title of "micro-services in .NET") at dotnetconf.
Tomas was mostly dealing with the UI and UX, while sharing in some papers on algorithms and maintaining the first version of HappyPancake (something we have been spared from).
Pieter was reevaluating golang web frameworks while also trying to make them work with PJAX for fast updates in the web UI.