To cut a long story short: Event-sourcing as a persistence mechanism, where you store deltas instead of the current state, similar to what Git does. CQRS is a pattern to separate the write side from the read side of your application, with the goal of being able to scale both independently of each other.
Regarding Datomic: I'm not an expert for Datomic, but AFAICS Datomic is primarily a database, while wolkenkit is an out-of-the-box full-featured framework for business logic, storage and so on.
Just to clarify here: event sourcing is _not_ what Git does at all. Git stores complete snapshots of objects, not diffs [1].
Event sourcing itself is a fairly straightforward concept which the parent does sum up though - store events which describe what happened to an entity in a system rather than the resulting state. The state of an object can be derived via application of a left fold over the history.
Conceptually, it's still capturing the deltas, instead of storing the current state and overwriting it. Storing the history is the key ingredient here, and of course, there are differences in how to achieve this.
I would argue that there is a fundamental difference between the two: one stores the state and calculates the deltas, and the other stores the deltas and calculates the state.
Both are common in systems, but only the latter is event sourcing - at least if the definition is to have any use and not become overloaded.
The text-book example for event-sourcing is accounting. To calculate the current balance of an account, you add up all past transactions. You don't need to store the balance (state) because you can deduce it by replaying all events.
This gives a few nice advantages. For example, with this system in hand you can now also ask "What was the balance 30 days ago".
You can, as long as you open-source your commercial project's source code, according to the AGPL 3.0 license.
If you don't want to do this, you need to get an enterprise license, which does not neccessarily mean to buy one: There are other options as well (sponsored development, …).
For details, please contact us directly using hello@thenativeweb.io
Interesting. I briefly looked at this a few weeks back and didnt look much further when I saw the box listing enterprise agreement or something like that for commercial use. I’ll take another look!
But what other options than going dual-license do you have if you want to do open-source in a sustainable way? MIT does offer nothing here, unfortunately.
There are many good business opportunities if your open source technology, without strings attached, gets popular. You could just sell professional support as part of subscriptions and verified builds. Later on, when you release a new version, you can still support the previous one or build migration tools that you include with subscriptions, etc.
Yes, it is already running in production, but due to NDAs, unfortunately I can't provide any details here.
Regarding the scalability most is prepared, but there are still a few things that need to be done. We would be more than happy for anyone who wants to contribute or to sponsor us. For details see https://github.com/thenativeweb/wolkenkit/issues/90
I don't see any messages in my network console, so it seems the message form is actually not really sending anything and the app is not a real wolkenkit app. Am I right?
"wolkenkit is a CQRS and event-sourcing framework for JavaScript and Node.js which fits perfectly with domain-driven design (DDD). It provides the technical foundation for your application, including an event-store and a scalable real-time API. This allows you to focus on what's essential: Solving actual real-world problems in no time."
I've been a developer for decades and this means almost nothing to me. I'm sorry if this comes across as harsh - I'm just trying to be helpful. What's your elevator pitch for this product? I'm not looking for CQRS because I don't know what it is. How many more people might you attract to your product if you could translate your pitch into how it benefits me? It's really hard coming up with your one-liner in plain English. But every time I see a one-liner that means very little to me as a programmer (which is unfortunately most projects), I encourage folks to put in the effort. Otherwise, I just skip over it and move on. And I'm guessing I'm not the only one.
Here's a one liner I think works well: "React: A JavaScript library for building user interfaces".
That's so much better. Now I know what it does. I know whether or not to read on. But I would also throw a benefit or two in there. Why should I use a framework (or your framework specifically) if I want to build a scalable API that uses historical data?
And the next step is putting your one-liner everywhere that people first come across your product. On your website main page, and especially at the beginning of blog articles.
I guess this is becoming enough of a pet peeve of mine that I should write about it myself and give examples of good vs. bad and why to do it.
Well, the point here is: The reason why you should use it, because of the benefits of CQRS and event-sourcing – and unfortunately, at this point, I think you need to get your feet wet and learn about these concepts ;-)
> The reason why you should use it, because of the benefits of CQRS and event-sourcing
So this is the ONLY framework that provides an implememtation of CQRS and event-sourcing? What I was trying to get at is to try to tell me why you're different and better.
None of this is easy. One-liners are very hard to get right. But it's worth the work.
I agree with you it's tough to sell CQRS, it's like trying to explain to someone that their business should use a database in one line.
For me event-sourcing is a historical layer below your existing database that allows you to replay the sequence of events that got your database to its current state.
If I had to businessify it, maybe it would be 'Wolkenkit is a framework that allows you to save and replay your entire business's history so you never miss a key insight again.'
From a technical perspective, engineers can focus on the product and organically build and destroy the data structures around a changing business instead of trying to find the perfect data-structures that will inevitably be incorrect as the business grows and evolves. You get regression tests for free, and you get backups for free which may be nice-to-haves when the business is small, but absolute requirements once you have real customers paying real money. Not sure how I would squeeze that in an elevator pitch though.
Greg Young's presentation on event-sourcing is pretty great, you may find some inspiration there:
"For me event-sourcing is a historical layer below your existing database that allows you to replay the sequence of events that got your database to its current state."
Yeah, that's essentially what it is. For example, you can build event-sourcing by tapping in to the log-shipping facilities that postgresql offers (set wall to logical, and assign a replication slot to it)
A transaction log is too detailed and specific. Typically an event log lists actions from the business domain rather than what got affected. It should explain what happened, not how it happened.
This was my end goal. A better one liner for you. This one liner works for me as a programmer. And I'd venture to say most business people would get it too.
Great explanations that avoid too much jargon and that I think most developers could understand. Your one-liners and more detailed explanations got me hooked, and I want to know more. This is the right way to do it. Thanks!
Maybe you should check out CQRS? You already know what a UI is, so the React tagline makes sense to you. Likewise with CQRS and the other things you don’t recognize, they’d make sense if you spent as much time looking them up as writing about how you don’t know what they are? I mean, this is not a product, it’s a software framework. Maybe that’s a product to someone, but to me that’s a tool you need to learn about if you want to make sense of it. It’s like you’re expressing frustration about not knowing something, which is easy to fix in 2018.
I think one thing that is also important here is (and this also may sound harsh, but is not meant to be offensive): If you don't know what CQRS and event-sourcing are, you probably don't have the problem that CQRS and event-sourcing solve ;-)
Which is funny because I’d think anyone who’s ever tried building and then maintaining a web app would recognize they have the problems CQRS/ES is trying to solve, but the that shouldn’t be taken for granted I guess.
The catch with CQRS is that it isn't widespread enough that everyone recognizes its shortfalls, and the upsides are really easy to convey:
- Excellent auditing abilities
- "time-traveling" debugging (you get the entire history of what happened)
- Easy backup abilities (append-only stores are objectively easier to backup)
- Datastores tailored to your querying requirements (say bye to monstruous SQL queries)
These are the things you see on CQRS-related websites. Then you decide to try it or to research conference talks and such and you find out the downsides:
- Data deletion is now a PITA (and you need it if only for legal reasons)
- Doing actual transactions (in the ACID sense) is now somewhere between hard and impossible
- Welcome to the magic world of non-linearizable datastore operations. Here be dragons.
- If you make a mistake (wrong event / wrong data in an event) you will suffer from it greatly, possibly for all eternity.
I think you're speaking more about event-sourcing than CQRS. CQRS is a generic concept that's only about separating writes from reads. It's useful paired with event-sourcing but on its own it does not suffer these specific drawbacks.
Another problem with event sourcing is that there is no easily definable concept of a "field" that can be read from and written to using a named address (contrast with a SQL table column identifier). For a given aggregate, you'll have a single command service that writes a set of "fields" and an unbounded number of query services that receive a copy of that "field" from the event stream and can transform it in any imaginable way. Your "field" may be renamed and moved around through its journey from your command service's API request body to your event's serialized form and to your query service's internal data structures and its final resting place on the query service's persistence data store (mongodb or SQL table or whatever).
To identify a field, it's best to use its writable address, and you'll need to come up with your own identifier namespace and naming convention to represent those addresses.
> I think you're speaking more about event-sourcing than CQRS
True. I was reading to the comments here and yes, most of them were focusing on the Event Sourcing part of Wokenkit, not the CQRS so my mind got tricked.
Great overview! I’ve hit these problems. I wish people would be more honest and upfront about how it’s really hard to implement these patterns and operate them.
That said, I think that’s what frameworks are all s about. I’m using Kafka Streams which is an amazing foundation for CQRS/ES but the absence of a framework for it means you need to implement all these models/patterns by hand. It’s pretty hard.
I read one to two hours a day keeping up with the latest jargon and best practice. I'm pretty sure every programmer knows what a user interface is. I'll guess that most programmers don't know what CQRS is. And with how busy we all are as devs I think my point is still valid: tell my how it benefits me and I might read further. Others here have already done a really good job of improving on the jargon-filled original description. So I'm not wrong in saying there was room for improvement.
> It’s like you’re expressing frustration about not knowing something
I'm not. I'm trying to help startups and small projects do a better job of communicating what value they add so that potential customers and users don't skip over their project.
Your version is still a big improvement. I only have to look up event sourcing now. But I would throw a couple of the benefits of event sourcing into that elevator pitch. Others already have. Here's mine, now that I've learned a little more:
"Wolkenkit: A JavaScript library for building event-sourcing applications.
Event sourcing is an alternative to relational databases and uses a transaction log as the primary source of data which gives you a true history of how data has changed. This allows you to put your application in any prior state which is useful for debugging, audit, traceability, and easier backups along with other benefits. Wolfenkit is the fastest JavaScript event sourcing framework by far."
I'm sure someone could do even better than that. But now any programmer who comes across this knows what event sourcing is at a very basic level, some of the benefits, and why this particular framework should be considered. A lot accomplished.
I also think it's fair to point out that "user interface" is a term every programmer knows. I typically read an hour or two a day from a variety of tech sources to keep up on best practice in programming, and I just now heard of event sourcing. I could just be out of it, but Google search shows about 219,000 results for "event sourcing" and about 78 million results for "user interface". I think I'm on solid ground saying that one deserves to be explained and the other is common knowledge.
EDIT: here is another one liner from another comment that I think works great: "Wolkenkit is a framework that allows you to save and replay your entire business's history so you never miss a key insight again." No jargon. Gives a key benefit. I'm interested. Maybe even as a business person. Tell me more.
> It's really hard coming up with your one-liner in plain English
Sometimes libraries are there to solve problems that you only have when doing a certain thing a lot and you are involved in that any way. That's when abstractions happen. CQRS/DDD are quite established enterprise patterns, these are not for everyone, on the contrary. Probably you don't want to do this.
A library implementing a thing I don't think should be on the hook for educating people what the thing is.
And, it's a matter of continuum anyway and where in the continuum your 1-liner should draw its line; web pages for programming languages need not (and should not) explain what programming is, how computers work, 2's complement, bits, etc.
In contrast, I thought that was a great description, admittedly because I am familiar with the domain. If I didn't know what JavaScript was, I'd be at lost as you are with CQRS. ;-)
I guess it depends on whether or not you want to attract customers / users not already familiar with the domain. Maybe in some cases you want to exclude anyone who isn't already in the know. But I would guess that's rare.
Or maybe they just didn't know the jargon for these things. This industry is filled with individuals having no formal training and it is filled with plenty of non-standard jargon. It isn't unreasonable to ask that said jargon not appear in the one-liner when the intent is to sell, so to say, the framework.
These are industry standard terms that allow for efficient high-level descriptions of complex concepts. That's what jargon is for.
It's on you to know those concepts so you can understand these terms. Would you read technical descriptions that a doctor would be familiar with and complain that they don't explain all the basics for you? Perhaps you should invest effort in learning instead of skipping it and moving on?
Even as someone who uses CQRS/ES on a daily basis, I don't expect most engineers to know them, just like I wouldn't expect a lot of engineers to know "currying".
Tech is a big field, it has a ridiculous amount of vocab. Unlike Doctors, we didn't standardize heavily.
I think you missed op's point. They weren't seeking an explanation, they were pointing out the initial sales pitch was too jargon dense as to be meaningless. The initial sales pitch might as well be in ancient Greek for your average engineer.
That doesn't make sense. Of course it's meaningless if you don't know the jargon.
The op says the product devs should "put in effort" otherwise the op will "skip over it and move on". This is backwards because it's up to you to learn things you don't know.
As a professional of course I try to keep up with industry standard terms and jargon. My point still stands because it's not about my lack of knowledge.
My point is that your elevator pitch, and what's on the landing page of your website, shouldn't tell me what cool buzzwords you use in your tech stack. Potential users / customers generally don't care. They care about how it benefits them.
> It's on you to know those concepts so you can understand these terms.
It's not if you want me as a customer. I don't have the time to look into the literally thousands of projects out there asking for my attention and then to learn the jargon to see if the project perhaps meets one of my current needs. Usually it doesn't. So if you want my attention, tell me how it benefits me. It's not going to hurt me to skip over it. A smaller project that gets no attention will just eventually die. So small projects / startups need to make their value proposition very clear if they want to stand out from the crowd. That's why incubators like Y Combinator insist you spend the time to get your elevator pitch right.
> Would you read technical descriptions that a doctor would be familiar with and complain that they don't explain all the basics for you?
If I were a busy doctor, I would want to start with the one liner "treats depression faster than other drugs in its class and with fewer side effects". Now I'm interested enough to read the tech details and why.
Bad: React is an ES 2015 JS framework that uses JSX along with Babel and Webpack to create a virtual DOM along with efficient tree diff algorithms to prevent unnecessary renders.
Who cares? It sounds like a bunch of bragging about implementation.
Good (from their landing page): React makes it painless to create interactive UIs. Design simple views for each state in your application, and React will efficiently update and render just the right components when your data changes.
Now I know how it benefits me. Almost zero jargon, and what jargon they use is very basic.
I hope that helps you understand where I'm coming from. Which is an attempt to help startups and small projects get their one-liner / elevator pitch right. Get it right, and then I'll be interested in how you implement it.
It's trying to sell you to the newest enterprise fad of "CQRS" and "event sourcing" :). If you don't know the meaning of those terms, or don't feel compelled to learn the meaning, then the product is likely not for you.
Love how the "Getting Started" to Wolkenkit doesn't even have any tangible code until page 3. If your quick start guide can't even get to the point until halfway down the page, I'm gonna bet that your framework isn't very user-friendly.
Also, can anyone tell me what this even does? I've been clicking around and besides a bunch of vapid "philosophy" documents I can't figure out what the fuck anyone would use this for...
As others have said on this page, event sourcing is one of those technologies where if you don't know what it is, you certainly don't need it. Even if you do know what is, you usually don't need or want it unless you have no choice.
In event sourcing, instead of having stateful objects, you have a log of events that you use to build that state. It gives you powerful rollback, backup, and history features at the expense of some insane code complexity (usually solved by tooling). When paired with CQRS, another architecture separating reads and writes in your abstractions, and done well with events that are domain oriented ("AccountingReconciliationStarted" instead of "StartButtonClicked"), you can hide most of the code complexity and allow developers and less technical users to focus on domain complexity (i.e., the logic that matters to the real world).
Why the insane code complexity? Yes there can be a lot of complexity in storing the events but using Kafka or similar event stores which provide libraries for handling the connection details should remove most of that complexity. Then your code can essentially be written as a map-reduce. Add a stream filter and it can easily be transformed to/from a Redux event system to a business one. Perhaps if your codebase didn’t build on a streaming architecture it would necessitate a lot of advocacy code.
Why does libraries like this insist of using a query language similar to SQL rather then map, reduce, filter that are more like JavaScript!? Or is SQL so much better ?
66 comments
[ 3.2 ms ] story [ 121 ms ] threadis this like Datomic?
Regarding Datomic: I'm not an expert for Datomic, but AFAICS Datomic is primarily a database, while wolkenkit is an out-of-the-box full-featured framework for business logic, storage and so on.
Event sourcing itself is a fairly straightforward concept which the parent does sum up though - store events which describe what happened to an entity in a system rather than the resulting state. The state of an object can be derived via application of a left fold over the history.
[1]: https://willi.am/blog/2014/10/14/for-the-last-time-git-store... - this is the best reference I can find quickly, though the git manual would obvioiusly be more authoritative.
Conceptually, it's still capturing the deltas, instead of storing the current state and overwriting it. Storing the history is the key ingredient here, and of course, there are differences in how to achieve this.
Both are common in systems, but only the latter is event sourcing - at least if the definition is to have any use and not become overloaded.
This gives a few nice advantages. For example, with this system in hand you can now also ask "What was the balance 30 days ago".
If you don't want to do this, you need to get an enterprise license, which does not neccessarily mean to buy one: There are other options as well (sponsored development, …).
For details, please contact us directly using hello@thenativeweb.io
PS: I'm one of the core developers of wolkenkit.
And you know what? It was true. We changed the licensing to MIT for most of Opa (http://opalang.org), but maybe a bit too late.
Are there any companies using this in prod already? Or any load experiment numbers? Proving that this actually is a "scalable real-time API"?
Yes, it is already running in production, but due to NDAs, unfortunately I can't provide any details here.
Regarding the scalability most is prepared, but there are still a few things that need to be done. We would be more than happy for anyone who wants to contribute or to sponsor us. For details see https://github.com/thenativeweb/wolkenkit/issues/90
I don't see any messages in my network console, so it seems the message form is actually not really sending anything and the app is not a real wolkenkit app. Am I right?
"wolkenkit is a CQRS and event-sourcing framework for JavaScript and Node.js which fits perfectly with domain-driven design (DDD). It provides the technical foundation for your application, including an event-store and a scalable real-time API. This allows you to focus on what's essential: Solving actual real-world problems in no time."
I've been a developer for decades and this means almost nothing to me. I'm sorry if this comes across as harsh - I'm just trying to be helpful. What's your elevator pitch for this product? I'm not looking for CQRS because I don't know what it is. How many more people might you attract to your product if you could translate your pitch into how it benefits me? It's really hard coming up with your one-liner in plain English. But every time I see a one-liner that means very little to me as a programmer (which is unfortunately most projects), I encourage folks to put in the effort. Otherwise, I just skip over it and move on. And I'm guessing I'm not the only one.
Here's a one liner I think works well: "React: A JavaScript library for building user interfaces".
I hope that helps.
We have had a very hard time to grasp what's special with CQRS and event-sourcing, and to put it into a one-liner, but basically, I agree with you.
And the next step is putting your one-liner everywhere that people first come across your product. On your website main page, and especially at the beginning of blog articles.
I guess this is becoming enough of a pet peeve of mine that I should write about it myself and give examples of good vs. bad and why to do it.
Maybe https://docs.wolkenkit.io/3.0.0/getting-started/understandin... is a good place to start.
So this is the ONLY framework that provides an implememtation of CQRS and event-sourcing? What I was trying to get at is to try to tell me why you're different and better.
None of this is easy. One-liners are very hard to get right. But it's worth the work.
Actually, inspired by your comments, I'm currently sitting at my desk, thinking about how to improve the claim.
I would love to discuss things with you. If you are interested in exchanging ideas as well, feel free to contact me via mail (hello@thenativeweb.io).
For me event-sourcing is a historical layer below your existing database that allows you to replay the sequence of events that got your database to its current state.
If I had to businessify it, maybe it would be 'Wolkenkit is a framework that allows you to save and replay your entire business's history so you never miss a key insight again.'
From a technical perspective, engineers can focus on the product and organically build and destroy the data structures around a changing business instead of trying to find the perfect data-structures that will inevitably be incorrect as the business grows and evolves. You get regression tests for free, and you get backups for free which may be nice-to-haves when the business is small, but absolute requirements once you have real customers paying real money. Not sure how I would squeeze that in an elevator pitch though.
Greg Young's presentation on event-sourcing is pretty great, you may find some inspiration there:
https://www.youtube.com/watch?v=JHGkaShoyNs
In other words, a transaction log.
Thanks for the idea!
- Excellent auditing abilities
- "time-traveling" debugging (you get the entire history of what happened)
- Easy backup abilities (append-only stores are objectively easier to backup)
- Datastores tailored to your querying requirements (say bye to monstruous SQL queries)
These are the things you see on CQRS-related websites. Then you decide to try it or to research conference talks and such and you find out the downsides:
- Data deletion is now a PITA (and you need it if only for legal reasons)
- Doing actual transactions (in the ACID sense) is now somewhere between hard and impossible
- Welcome to the magic world of non-linearizable datastore operations. Here be dragons.
- If you make a mistake (wrong event / wrong data in an event) you will suffer from it greatly, possibly for all eternity.
Another problem with event sourcing is that there is no easily definable concept of a "field" that can be read from and written to using a named address (contrast with a SQL table column identifier). For a given aggregate, you'll have a single command service that writes a set of "fields" and an unbounded number of query services that receive a copy of that "field" from the event stream and can transform it in any imaginable way. Your "field" may be renamed and moved around through its journey from your command service's API request body to your event's serialized form and to your query service's internal data structures and its final resting place on the query service's persistence data store (mongodb or SQL table or whatever).
To identify a field, it's best to use its writable address, and you'll need to come up with your own identifier namespace and naming convention to represent those addresses.
True. I was reading to the comments here and yes, most of them were focusing on the Event Sourcing part of Wokenkit, not the CQRS so my mind got tricked.
That said, I think that’s what frameworks are all s about. I’m using Kafka Streams which is an amazing foundation for CQRS/ES but the absence of a framework for it means you need to implement all these models/patterns by hand. It’s pretty hard.
> It’s like you’re expressing frustration about not knowing something
I'm not. I'm trying to help startups and small projects do a better job of communicating what value they add so that potential customers and users don't skip over their project.
As others have pointed out, neither of those two are useful if you don't know what "user interfaces" or "event sourcing" are.
What you're looking for is this: https://martinfowler.com/eaaDev/EventSourcing.html
"Wolkenkit: A JavaScript library for building event-sourcing applications.
Event sourcing is an alternative to relational databases and uses a transaction log as the primary source of data which gives you a true history of how data has changed. This allows you to put your application in any prior state which is useful for debugging, audit, traceability, and easier backups along with other benefits. Wolfenkit is the fastest JavaScript event sourcing framework by far."
I'm sure someone could do even better than that. But now any programmer who comes across this knows what event sourcing is at a very basic level, some of the benefits, and why this particular framework should be considered. A lot accomplished.
I also think it's fair to point out that "user interface" is a term every programmer knows. I typically read an hour or two a day from a variety of tech sources to keep up on best practice in programming, and I just now heard of event sourcing. I could just be out of it, but Google search shows about 219,000 results for "event sourcing" and about 78 million results for "user interface". I think I'm on solid ground saying that one deserves to be explained and the other is common knowledge.
EDIT: here is another one liner from another comment that I think works great: "Wolkenkit is a framework that allows you to save and replay your entire business's history so you never miss a key insight again." No jargon. Gives a key benefit. I'm interested. Maybe even as a business person. Tell me more.
Sometimes libraries are there to solve problems that you only have when doing a certain thing a lot and you are involved in that any way. That's when abstractions happen. CQRS/DDD are quite established enterprise patterns, these are not for everyone, on the contrary. Probably you don't want to do this.
And, it's a matter of continuum anyway and where in the continuum your 1-liner should draw its line; web pages for programming languages need not (and should not) explain what programming is, how computers work, 2's complement, bits, etc.
PS- Move the code, not the data.
It's on you to know those concepts so you can understand these terms. Would you read technical descriptions that a doctor would be familiar with and complain that they don't explain all the basics for you? Perhaps you should invest effort in learning instead of skipping it and moving on?
Tech is a big field, it has a ridiculous amount of vocab. Unlike Doctors, we didn't standardize heavily.
The op says the product devs should "put in effort" otherwise the op will "skip over it and move on". This is backwards because it's up to you to learn things you don't know.
My point is that your elevator pitch, and what's on the landing page of your website, shouldn't tell me what cool buzzwords you use in your tech stack. Potential users / customers generally don't care. They care about how it benefits them.
> It's on you to know those concepts so you can understand these terms.
It's not if you want me as a customer. I don't have the time to look into the literally thousands of projects out there asking for my attention and then to learn the jargon to see if the project perhaps meets one of my current needs. Usually it doesn't. So if you want my attention, tell me how it benefits me. It's not going to hurt me to skip over it. A smaller project that gets no attention will just eventually die. So small projects / startups need to make their value proposition very clear if they want to stand out from the crowd. That's why incubators like Y Combinator insist you spend the time to get your elevator pitch right.
> Would you read technical descriptions that a doctor would be familiar with and complain that they don't explain all the basics for you?
If I were a busy doctor, I would want to start with the one liner "treats depression faster than other drugs in its class and with fewer side effects". Now I'm interested enough to read the tech details and why.
Bad: React is an ES 2015 JS framework that uses JSX along with Babel and Webpack to create a virtual DOM along with efficient tree diff algorithms to prevent unnecessary renders.
Who cares? It sounds like a bunch of bragging about implementation.
Good (from their landing page): React makes it painless to create interactive UIs. Design simple views for each state in your application, and React will efficiently update and render just the right components when your data changes.
Now I know how it benefits me. Almost zero jargon, and what jargon they use is very basic.
I hope that helps you understand where I'm coming from. Which is an attempt to help startups and small projects get their one-liner / elevator pitch right. Get it right, and then I'll be interested in how you implement it.
Also, can anyone tell me what this even does? I've been clicking around and besides a bunch of vapid "philosophy" documents I can't figure out what the fuck anyone would use this for...
In event sourcing, instead of having stateful objects, you have a log of events that you use to build that state. It gives you powerful rollback, backup, and history features at the expense of some insane code complexity (usually solved by tooling). When paired with CQRS, another architecture separating reads and writes in your abstractions, and done well with events that are domain oriented ("AccountingReconciliationStarted" instead of "StartButtonClicked"), you can hide most of the code complexity and allow developers and less technical users to focus on domain complexity (i.e., the logic that matters to the real world).
At least in theory.