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.
- 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.
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.
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.
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.
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:
Thanks for the idea!
In other words, a transaction log.
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 ([email protected]).
"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.