476ca596
extracted
Panel Event-driven Rails - wroc_love.rb 2023.panel.txt8e9163e12598| Status | Model | Tokens (in/out) | Duration | Cost | Nodes/edges | Read set (nodes/edges) | Time |
|---|---|---|---|---|---|---|---|
| completed | claude-opus-4-7 |
210,964
/
14,036
58,842 cached ยท 19,614 write
|
207.9s | - | 21 / 57 | 168 / 0 | 2026-04-17 22:12 |
| failed | claude-opus-4-7 |
RubyLLM::BadRequestError: You have reached your specified API usage limits. You will regain access on 2... | 2026-04-17 16:18 | ||||
um so this is an event-driven rails
discussion panel
and it's kind of like something between
a discussion panel and maybe a little
bit of a confrontation we like to
confront confront ideas at this
conference uh but just to give you maybe
a little bit of a context uh Scott and
Nathan they're behind Eventide a tool
for kind of like a worse version of race
events or let's say
and me and Pavel uh are of course behind
the receiving store so this is like one
kind of division between us but actually
uh how many of you are using event
sourcing in let's say in your systems
even sourcing let's even sourcing yeah
okay so not so many people so actually
it's all of us here we're in the same
team of even sourcing people because
we're all using even sourcing and you
are kind of the opposition to us so we
are happy to confront also with you
against you so we'll probably talk a
little bit about our tools about
paradigms we have some vocabulary
differences so we may want to cover this
a little bit maybe not too much we will
ask questions to each other but also we
are totally open to questions from the
audience if you have some very difficult
questions to Scott feel free to ask them
um yeah so I think we can start uh maybe
you can start introducing each other
just very shortly and and we can kick it
off and then we will get to some
questions
and we I think we can sit we should
switch with Pavel so it doesn't look
like a like a
pump
okay so Scott can you introduce your
shortly what you do and just okay sure
my name is my name is Scott belware I'm
the co-founder of uh the Eventide
project
and uh message DB
um both of these are tools used in uh
evented systems development
um
message DB is a tool for postgres it's
what Eventide uses and and Eventide is a
toolkit built in Ruby my background is
software testing software design user
experience
architecture management
babysitting
all kinds of stuff I work with Nathan on
that tool we work together on a project
uh
uh in uh for a law firm in Silicon
Valley that's involved with venture
capital
okay
so my name is Pavel patana I've been
working on Race event store as a
maintainer and as a person who does
regular releases of that software for
over five years
my whole career is based around Legacy
software this is what I mostly do I
usually work on code bases that have
accumulated some history
so that's a very interesting position to
introduce Ray's event store into
um
Nathan Wadd of course I gave the
presentation about test bench earlier
today but yeah in addition to uh and to
that I'm sort of Scott's partner in
crime on the Eventide work we do
okay and time
at Arkansas
we help existing projects with you know
difficulties let's say so race even
store was one big thing we built
together to help existing race projects
and also some of you yesterday with the
workshop there is this code Base called
to e-commerce this is like a quite a big
application built with relative install
but also with domain during design
secure us and even sourcing so that's
those are the practices that we also use
um so yeah that's that's what we do at
Arkansas and that's that's our that's my
background too
and because I know that this is already
our first difference between us and we
will start with this uh we embraced
domain-driven design in our
um projects uh we see the techniques
behind it quite useful maybe not all of
them exactly but in general it's okay
very often domain driven design works
very well with even sourcing and secure
us and I know you were quite vocal to be
against domain driven design while you
share even sourcing ideas and even
driven architecture and so on so we are
super similar in many approaches but I
would like to maybe start with this why
not domain driven design
I think that it's a cliche
and it's one of those things that is
a bunch of really elaborate patterns
that are so
all-consuming that when a developer goes
into that they can only do that and they
start thinking only that way
so I got into domain driven design in
2002.
I'm one of the first you know if you
think about like the whole population
developers I'm one of the first
developers who gave conference talks on
domain driven design
um I get it
I've been a zealot but I I don't
I don't stay a zealot in anything
for a long time I do I I embrace zeal
as a learning tool
um and then sort of move on so it's not
that I'm
it's not I'm opposed to domain driven
design I'm opposed to what it has been
subjugated into and like many things in
Tech
I think it's just been turned into
something that gives a few celebrity
Geeks celebrity and to or in order to do
that in order to keep a captive audience
this is true in rails as well in order
to keep a captive audience a celebrity
geek will make a tool that is so
mentally taxing
that
the audience can't escape
because they've got to be constantly
fighting it
this is
react
Tailwind
devops
rails on and on and on and on where you
find celebrities
you will find
subjugation
I'm opposed to that domains of InDesign
didn't used to be that way
but it has become that way and so these
elaborate patterns that have that have
emerged from the uh DDD es cqrs uh
Community are I I mean they're they work
but they're completely unnecessary
so for me it's Once a community once the
people go that way once the it's hard to
take a geek and give that geek celebrity
Geeks can't manage celebrity
and so anything where geek and celebrity
comes together usually turns to crap
um DDD is one of those things rails is
enough like name it anything that
anything that we're involved with it's
okay but it's like it's got well it's
not what it and I'm not saying like I
miss what it was it's the essence of it
that's good the essence of DDD the
design principles the fundamentals
that's good all the other stuff that got
added to it all the patterns from DDD
seqrs
that not only not only are they
problematic and overly complex but you
know Nathan and I did a talk in 2018 at
explore DDD conf
um specifically pointing out the
mistakes
in many of the Tactical patterns to use
the the term of the of one of the
authors
um
and there's just mistakes like it's just
not worth it like if if a fundamental
set of patterns has measurable mistakes
they need to be disqualified with
prejudice and with alacrity
so
um
I think it's just a way
and we're all subject to this I think
it's just a way to sound smart
all of the things that are in domain
driven design that went into the Eric
Evans book
they all existed before domain driven
design so our my choice of vocabulary
is to not use some specialized
vocabulary of some uh some subculture
uh or you know some subculture with its
own dialect my choice is to use the the
higher level
vocabulary terminology that applies to
all of software not just one subset of
it and the reason for that is
you'll solve many more problems with a
broader with a more generalized
Universal set of terminology rather than
coming up with brand new terminology but
there's no doubt that Concepts in
domain-driven design at the time that
they came to my life
now 20 years ago
um were transformational for me from
being like a new senior developer to a
senior senior developer there's no doubt
about it I just
try to avoid it I don't want to con I
don't want to
I don't want to feed energy into that um
hype machine because I think it's at
this point in the game more harmful
developers to developers to get stuck in
in that in in a scene in a subculture
[Music]
that's it okay okay so your alternative
to that is using different vocabulary
and not General no using using the
vocabulary that existed before domain
driven design that covers much more
ground already like the like there was
software development before Eric Evans
wrote a book
um the word aggregate
we used to use the word partition
why did we why like what good is it to
use new terminology like I'm not using
what I'm saying is don't just adopt new
terminology and erase all the knowledge
that came before it that's what domain
driven design to me is there's like is
there is there chalk
like here's the amount of here's the
amount of software design knowledge in
the universe
and here's domain driven design
I want this
if I use this vocabulary I'm cutting
myself off from this so I will never
choose a more constrained set of
terminology vocabulary so it's not just
to be different or just to be a rebel or
whatever it's that there's more
knowledge out there and it's necessary
and if you choose
if you spoke a language
if you spoke a language with a vastly
contracted or compressed vocabulary a
human language
your poetry your music and your writing
would probably suffer for it okay so
just to be sure if that thing was called
Partition it would be all for it
further vocabulary yes and that's that's
the terminology that I use because it it
also says what you're doing to partition
let's take a rails app to partition a
model to partition a data model
the words like already tells you where
you're going how do you what do you how
do you aggregate a data model like
there's there's no more that terminology
doesn't lead to more knowledge and more
inquiry I definitely agree that Gregory
term itself is very confusing I don't
oppose the essence of it because the
essence about invariance
and what it has to know what it doesn't
have to know is fine for me
I think that the vocabulary like you
mentioned it's sometimes constraining
because someone introduces new
vocabulary for the time that already
existed
it has this function of grabbing
attention on focusing the communication
about the new term that describes
something
that we've known before by a different
term
but I just wanted to know if you're
opposing to the vocabulary and the hype
but you mentioned that the essence of it
and how you understood it years ago was
basically fine oh yeah for sure yeah
yeah and and the word aggregate actually
you know that's just oh
um when when uml was being introduced in
1997
um you'd go you know if you were on the
message boards at that time you'd hear
about white diamond aggregation Black
Diamond composition like they were like
aggregate is a word just from oo so it
just became something else and it's not
really from Eric Evans it became
something else when it got into the
hands of ddds cqrs who kind of like we
were talking this morning about how like
rails got the word fixture and took it
change the meaning and now you know
here's a room full of people who if I
said you know what is a test fixture
they're probably going to come back and
say it's something that creates test
data
that's an example of what happens when
we take a well-known term and make it
mean less and create a social movement
around it a clique
so
yeah it's
that's the part so anything that to me
that does that I oppose it because it's
it's opposed to learning and education
in order to elevate a small group of of
um celebrities
um I'm not sure like I like this drawing
that you made so let me show my
interpretation it's very detailed it's
also to scale I think is it that tomato
if I change it a little bit is that here
are the people that understand your
vocabulary that you use and sure that
people understand domain during
vocabulary because even if it's wrong
it's very popular and I know that well
it's popular
for the language and for the vocabulary
always I agree with this but I think
this battle is kind of already lost
I here's an interesting thing I think
that perspective actually it rep like um
exemplifies what I'm talking about in
the domain-driven design community that
vocabulary is very popular but that
domain that Community is so insular it's
so inside itself and so isolated
um that we can say with all due respect
that it's popular and it's I don't think
you know I don't know about you know
well actually these these these folks
might be more clued in than than the
average but the average software
developer doesn't know anything doesn't
know that vocabulary yeah the same
discussion we can have not only about
DDD but actually this morning example is
really perfect with the fixture uh
concept so rails stole many many
Concepts fixtures that's one problem
like active records model like what kind
of model is this yeah
exactly so rails redefined completely
many terms and now this is the same
discussion as with DDD probably uh is
there any way to fight against it like
or we just accept it maybe it's like two
philosophical question in general but I
think like it's super hard to just
suddenly say hey rails is not MVC
well I mean that there's that's actually
a reasonable argument to make though
yeah it's a different point but
um yeah it's it can be done so the
question is
like
is it worth the effort for me it's worth
the effort because it's a it's a moral
issue and it's an ethical issue it's a
matter of professional ethics I don't
want to feed
any I don't want to feed that troll of
of uh of fad and of clique and of
celebrity uh celebrity uh geek uh Clique
leader because all that is doing is
giving power to people who who are very
bad at having power
okay so my Approach would be to actually
have a dictionary to translate from the
one vocabulary to another
because I think at that scale
it is it's not the battle worth taking
it's a battle for the for the hearts and
minds of human society I think it's
worth taking well because we need to do
that not only in software but in
everything that we do yeah I just want
to say I admire it uh what you do
[Music]
it's a very challenging project in
general yeah yeah life is but but I I'm
sorry sorry anything I don't think we
need a dictionary because
these terms are the preeminent terms the
terms that we tend to use pre-date to
pre-exist and are preeminent to these
new special things that are coming it's
DDD that needs a dictionary and has a
dictionary but I but but I understand
what you're saying if nobody understands
you still need to do something different
it will be something different in the
future in maybe different scope of the
programming it depends who's who's you
know there will always be celebrities
trying to exploit a larger group of
followers that's why you're having a
dictionary would allow you to Simply
jump from the terms that you already
know to the new world because you have
that mapping that's one way to solve it
but I also admire your fight
maybe chat GPT can solve our problems
and just
could you explain this to me as a DDD
person
I will say uh just
in my experience I've definitely run
into some Junior and mid-level
developers who have been
highly anxious
and and concerning themselves with am I
doing DDD correctly and to me that's the
uh that's the moment where I realized no
there really is a difference it's not
just a matter of two different
terminologies
when somebody's when somebody's
uh wanting to do DDD correctly versus
just design I mean it's in the term
domain driven design if there is a force
exerting any pressure on your design
that is not your domain you've got a
problem uh and to con to concern oneself
with whether I'm doing DDD correctly and
I've seen this many times that that's
that's where the the movement is not
just a different set of vocabulary it's
it's uh it becomes an end unto itself
it's a ritual yeah whereas if you take
it away what's what's the goal just to
do design well and that's always been
the goal
well okay
um if
it's a general problem
am I doing right this way correctly am I
doing a good kind of logic
logic am I using those design patterns
as well Etc and this is not just a
problem with TV no but before yeah but
yeah when we're on ddd's territory we
fight that if we fight the DDD battle
when we're in the rails territory we
fight the DDD the the the the rails yeah
we're always fighting the D to know but
real say you know fight fight fight
fight for what's good you know
I wonder like if there was an experiment
but we will never probably make it if me
and Pavo per for one week on the same
requirements and then you and Nathan
paired together my hypothesis is that
the code will be almost similar or most
identical maybe some tactical
differences
even though we would use what I couldn't
say that I couldn't I couldn't say
whether or not that would be true
because I've never worked with you
um I've read some of Arkansas's code and
thank you for Arkansas's code without it
our
uh event store implementation would have
never come into existence in 2014 or
2015 or whatever it was
um but I don't I don't really know
that's true because what matters is
software design fundamental deep level
finely detailed software development
software design principles
and I don't know I couldn't say what
kind of
you know
Acumen any in any programmer has about
those things and until I work what I
mean is probably the structure will be
similar like I don't know if it were
built we were building you know
e-commerce kind of project I think you
would also have some kind of pricing we
would call it domain you would call it
maybe component you would have inventory
component we would have inventory domain
uh maybe inside there will be some
probably we would use Aggregates you
would use entities we would use we would
emit events from the Aggregates you
would ask the entity and retrieve the
state from The Entity to emit events
probably that's what that's my
understanding maybe yeah maybe
so I think in general a little bit
differences between some tiny layers but
like I know what you mean by you know we
would admit a a emit events from the
aggregate because I I know those I know
those patterns the DDD style of doing
um event sourcing
um
another term I don't like to use but
that one is that one's done I can't
change that one I won't fight that one
but um yeah I would never have an
aggregate emit events I think that's a
mistake
I think the aggregate aggregate is not a
software pattern like it wasn't supposed
to be a code pattern
somebody made it a code pattern because
it makes it easy for beginners
to start typing on their keyboards to do
that stuff but you know this is the
nature of the talk that we did that you
can find on uh find on on YouTube the
what is it the aggregate the
something or other just yeah anyway if
anybody's interested I'm familiar with
the recommendation night and did the
talk here actually about about this
aggregate route
arguments that you have against it so
yeah you know so yeah so there it is
like I wouldn't I wouldn't do that
because as a as a
it's like what Nathan said
if a developer is focused on
implementing that pattern it's basically
following a ritual and they're
distracted from the fundamental laws of
physics of the universe that's a problem
because that software it could be a
great Implement of implementation of a
DDD pattern ddds cqs pattern
um and the developer could be really
satisfied with it and the design could
still be an absolute screw-up
I would interrupt now with the questions
from the audience
if I could separately move the topic
from the DDD I'm not ready for that yet
to like the events which the world which
uh wasn't said yet I think uh is that
yeah just like to start the discussion
what would you say like would be the
immediate benefit of like having the
event-driven architecture or something
like that because like the definitions
variant different people and like
understand that differently than what it
would be like to convince someone in few
minutes if they have like basic grasp
that this is about
components communicating through events
well first of all I don't like the word
event so I would no I'm just kidding I
wouldn't
just kidding translation this code is
driven architecture it's productivity if
you like productivity if you don't if
you like not having frustration in your
life
um then a signals and Telemetry approach
there I changed it from events I didn't
mean to but that's what it is you know
the problem is people get all wrapped up
and what's an event and how do I do
events right it's like it's basically
about having autonomous pieces of
software that
um that broadcast
um
the status of their work
and then other pieces of software can uh
Choose Or to react to those broadcasts
of signals or disregard that which as
opposed to what you do in in uh active
record so the technical terminology here
is tightly coupled versus Loosely
coupled but you can I can say tightly
coupled I can say coupling and cohesion
all day and everybody will fall asleep
because most
like you either know what it is and and
basically it's changed your life or you
don't know what is and you think it's
just you feel it's just random syllables
but if you understand really understand
coupling and cohesion to the point that
that's everything you do everything you
do is about controlling that to the
subatomic level your productivity will
Skyrocket
so we work on a team
nobody believes nobody believes it like
in what we do but we work on a team uh
for a product called neuron it's for uh
it's for a venture capital law firm uh
there's a handful of developers that do
the work of probably a team five times
the size of that we don't have mono
repos we have close to
400 repos now for 15 Developers
how do you do that we we change the we
changed the dials so all the things that
are are typically things that slow down
teams software teams we change those so
we're not slowed down by all the things
that every other team has slowed down by
so we can take on 400 repos we can take
on vastly different approaches to doing
software development that have nothing
to do with the common patterns or
cliches that I would say that are in
there so
um
if you like
having no frustration if you like making
progress and you want to work somewhere
between two times and 10 times faster
than you have before
start paying attention to the laws of
structural physics
and how they apply to software design
because it's these aren't laws of
software
they're just the laws of the universe
and if we disregard the laws of the
universe software is the only thing that
humans can do where if you disregard the
laws of physics
the computer is going to be perfectly
fine with it
if you disregard the laws of physics and
you're let's say on Nathan's balcony
um leaning over too far you're going to
pay for but you can make any number of
mistakes in software and the Machine is
still going to run it what will be
problematic is that you won't make
progress your team will start at one
level of velocity or Pace and you're
going to lose
productivity you're going to lose your
pace what we do all of our methodologies
are about saying we're going to start at
a pace and we're going to maintain that
pace forever and never slow down
that's that's the thing that matters
even though the volume of code that
we're dealing with is increasing all the
time
because that volume of code is
increasing all the time so is our
productivity so that we can maintain our
velocity
um
that's why events and it's not event or
evented or event sourcing I think event
sourcing is irrelevant honestly it's
just a side effect event sourcing is a
side effect of doing Pub sub Pub sub is
what matters event sourcing is just a
smart way to do to do Pub sub
um where you're dealing with a A
different kind of messaging technology
and big I always say it's because you
have Pub sub does anybody else want to
talk because you have Pub sub you can
have event sourcing
because you have Pub sub you have events
are saying I don't think that events are
saying this we're talking about like
here's where we go I don't think event
sourcing should exist in a rails app I'm
not sure I could agree
heavy knowing that we have a different
vocabulary so I can't tell if you're
meaning the same thing by using the term
even sourcing
but can that kind of uh says that it's
very hard to like maybe not convince but
explain someone why it is beneficial
because it's it kind of you're saying
that if you would work with even driven
architecture let's say for some time
then you would immediately see this and
feel these benefits but until you didn't
then you it's kind of hard to imagine
why they are unless you are like you
said constantly thinking about coupling
at cohesion then I get you but I I think
you can know it intellectually without
even having
experience with it because again it just
respects the laws of of the universe so
if you the hardest thing in software and
this is why test driven development is
so important and I'll change the
terminology to to consume first design
or or consume first proofing or proofing
the reason why test driven development
is so important is because when you do
test driven development your software is
friendly to being tested other word for
that is transparent that's a fundamental
that's a fundamental principle in in
engineering if you don't have
transparency in your mechanism you've
got no way of knowing that when you
change it it will it will work or not
and that's the and as that accumulates
it gets harder and harder and harder
that's why software teams lose their
lose their productivity the only reason
software teams lose their productivity
is that they get more code over time and
when they try to change that code they
don't know whether their changes work or
not work and it gets harder and harder
and longer and longer to prove things
test driven design is about making sure
that that difficulty doesn't go up and
that it stays level that's why our
productivity stays level and it's all
about it's all about transparency and
design Telemetry is just another way of
doing that
so events are just Telemetry coming out
of your business logic
if you don't have like if you have an
active record callback what was the
example we gave for testing like if you
try to test an active record callback
and like
um oh it was it was like a deposit right
or a withdrawal was it like an order so
you do a withdrawal and it's an actual
record book callback so you in one in
one transaction you do withdrawal and
then
um you you notify the the uh the fraud
detection Department to check on this
and then you like notify like the
Loyalty program uh software and then you
update some other software and then you
update some other software and you
update some other software the test for
that is going to be absurd
because it's one unit of testing
so you take all of those different
actions and you remove them from each
other
and all of them can be tested as if none
of the other actions even exist
that's why we do
um
event of an architecture or event driven
development that's why we do Pub sub
um that's and we have we have event
sourcing just because
we have events but the point is the only
point to this why I do this it wasn't
like getting years and years and years
of experience it was just
common sense if you take a whole bunch
of procedural program code
and you remove every every unit of that
code and separate them into autonomous
pieces of software your productivity is
going to is going to multiply
by some function of how many how many of
those individual pieces of the procedure
exist in that procedure that's
fundamental you can know that you can
know that just by you you can prove that
with math it doesn't even require
experience to do it
okay
I would answer it very similarly but
maybe instead of following the the law
of physics
my argument is usually the law of uh the
word of business because I believe in
our software we try to reflect business
uh which is just a sub part of the
physics let's say
um and we should follow their vocabulary
we should follow their structure which
is not always maybe perfect but
sometimes we need to teach them how to
structure the business because it's
sometimes actually code tells the truth
instead of the business telling the
truth sometimes the business hasn't
thought in detail about what they're
doing until until we come along and have
to do we have to think in detail yeah
also like we call certain events domain
events because they're coming from a
specific domain and they're very like
domain specific
there might be integration events or
some technical events which are all very
useful at certain levels let's say and I
really like this fact that we can group
those events belonging to specific
domain because now okay I'm that's
that's where I'm come back to this
domain word okay this is this is pricing
domain this is marketing domain this is
sales domain let's group it together
because it belongs together the same
people in the real business when humans
do that it's the same people you do the
same things those are specific roles
um uh what what Scott explained as if
the mix in active record and using
callbacks and you know you have to test
everything I agree with this totally
that you you prefer to decouple it uh
callbacks are usually to me assigned
that there is actually a process uh from
domain driven design well there's a
process also in the business meaning we
try because in reality we have this
magic one-liner called after create so
we use it because it's just one line of
code but actually it's a big concept
behind it and we just throw a bunch of
after creates together thinking that
okay I have this one small class called
whatever and then just four lines of
after create I'm done but actually what
you did was try to hit hide some
complexity in four lines of code yeah
and the the way to the the way
the way to find out the way to
understand whether your system is is
great or garbage
not garbage maybe that's a little strong
trash
um the way the way the way to know
whether or not you're you're going to
have you have the productivity that you
should have
or you're missing that productivity
because maybe you just haven't thought
of that yet
is to examine the setup code in your
tests
the setup code in your test will tell
you whether you have a high quality
system or a low quality system the whole
point of tdd is not the lines that say
expect that or should equal or anything
those are just checks
the point of tdd is the setup code
the more things you have to set up
the lower quality your system is the
whole point and the problem is when when
developers get a hold of a tool they go
all nuts for the tool like it turns on a
part of our mind that like it's like
what Nathan was saying this morning it's
that part of us that likes playing with
toys
so if you're a developer who likes toys
you're highly susceptible to being being
distracted by all the wrong things
because things like Tailwind can be
really fun to play with but from a
fundamental design principles
perspective couldn't be more wrong
s has a ton ton of things like this fat
model skinny controller was a very
interesting idea and we and our the the
the playful part of our minds latched
onto that but fat model skinny
controller can be proven by simple math
to be absolutely wrong but we did it
well the community did it for years so
that thing that is in test tools that's
the toy
and we like the test tools and we like
playing with and experiencing those
tools but that's play that's not
engineering engineering doesn't derive
pleasure from play
engineering isn't fun it's satisfying
it's rewarding but if you're getting fun
from your job
great but be really careful it means
that there's a part of your mind that's
just been shut off and it's the part of
your mind that needs to be critically
thinking and when you look at test code
like I see like you know work with
developers all the time we're very happy
about their tests and what what's
happening is they're very happy
they've been made Happy
the reasons they've been made Happy are
the wrong reasons because if if you look
at the setup code in the average code
base you'll basically see all the
symptoms that you need to see to
understand that there's that there's
fundamental design problems the problem
is that as long as we sit with our tests
and I agree with this argumentation uh
is uh you can see set up for I don't
know inventory when we're actually what
you want to test is pricing
um
yeah but as developers we don't really
see this as a problem and my um
my thinking usually goes this way that
we should show our tests to the business
people and suddenly they will detect
that what the are you doing here we
are talking we are meant to talk about
pricing while you're showing me some
lines of code of inventory like what's
wrong with your system in general
because in the business uh they would
actually care a lot about separating
certain divisions not not all of them
but okay certain divisions like
different people work in inventory don't
want them to be included in uh let's
Okay pricing let's say it's completely
different concepts it just they
shouldn't even be bothered about this
and and to this point without events
and I think here probably were on the
same page without events as the
decoupling mechanism we are not able to
separate those Concepts yeah
the the only thing and this actually
isn't pushback I agree with what you
said but
to to elaborate on that example of why
am i setting up inventory data when I'm
trying to test pricing
the way that this can kind of transpire
or play out in reality in rails apps is
often really subtle uh but you'll have
one product model for a product model to
be valid it needs to have inventory data
and pricing data and as a result in your
in your test setup you're having to the
these these different uh pieces of data
have to be synthesized but if you're
using something like Factory uh Factory
bot it's it's already been hidden
the minute developers add the validation
requirements for inventory data they're
gonna to make the test pass they're
going to go to the factory bot
definition for the product and they're
going to add inventory data so it can be
very uh there's a there's a whole lot of
stuff in rails a whole lot of patterns
and tools that are specifically designed
to conceal all of that coupling that
that we're that we're talking about
eliminating through events so I just
wanted to add that yeah almost every
release tutorial you will see is
actually broken at the design level
because once they show a list of
products with the name and the price
together and validate them kind of
together it's already wrong it's already
drawing design
and I don't want to blame anyone but I
suppose 90 of the projects that are on
this venue is wrong
because it's basically like I suppose
all of us have projects where you have
active record where you have like those
many Concepts mixed together so and the
design is just wrong I thought we were
gonna tell each other we're wrong I
didn't realize we were going to tell the
audience they were wrong I'm good with
that I'm good with that I like where
this has added you're all wrong
and you need to hire Arkansas
for as long as possible and as soon as
possible
okay point taken
and if you're in North America you can
hire brightworks but we have a treaty
it's up the Atlantic and we're not
allowed in each other yeah when a client
comes to us and says rewards vocabulary
we send them to we send it
yeah what can we talk about more about
specific tools like how you want to
mention even tight how it works like
okay because I think there's one area
where I think we maybe there was a
misunderstanding between us maybe it's
actually very different because the way
you're using the word microservice I
think is different than the everyone in
else in the world thank God so let's go
thank God we don't have to use the term
microservices anymore autonomous what's
that autonomous yeah exactly wow that
that's yeah that's that's about because
it used to be the case that when you
showed Eventide uh maybe it was just
accident but okay that was the
impression that was built that you were
kind of relying on separating your
components by Network let's call it this
maybe I'm not sure I think many examples
were showing this at least building this
impression that you were quite far in
this okay we are going microservices in
the broad meaning in the popular meaning
and when the release event store
approach is basically relying on the
realist monolithic approach one database
okay
yeah you actually do use one data oh
yeah sure yes we use multiple schemas in
the database but I mean having multiple
databases is often a performance so you
use the micro services in the popular
meaning but you use one database under
the
um I use microservices in the original
meaning which
um having been there at the start of
microservices and before that it used to
be called service-sonite architecture
but there was problems with service
Orient architecture Microsoft and IBM
and Oracle got involved and they turned
it into a great big pile of tools
so microservices the only reason that
the term micro is in microservices I
remember all these articles like how
small is a microservice like that's not
what that means the micro and
microservices just means that IBM
Microsoft and Oracle are not involved
like it literally is like Biz talk is
not involved the micro is a a smaller
footprint of Enterprise tools and then
it's like then web developers got into
it and it was basically web developers
said Well microservices Services
it's probably HTTP right I mean what
else could it be there's nothing else in
the universe
that's the problem of not knowing a lot
about software that's a problem of using
tools that consume all your spare time
so that you can't learn other things
um
web developers heard microservices and
recreated a failure Mode called
web web services like we'd already
proved that web services were a bad idea
and then a new generation of developers
thought they invented something great
and basically what you develop what
you've discovered was a rotting corpse
that we didn't bury deep enough in the
ground to avoid you fine you mean corba
was a bad idea what's that korba was a
better idea and deposit well yeah I know
exactly I'm old yeah yeah yeah no right
yeah yeah but court corba was basically
like
and it's funny where a soap and web
services reinvented corba so
yeah it's just this failure mode again
and again microservices the the the it's
not the right way to do microservices
the right way to do software is the way
that lets you go a lot faster than you
go now and that means Loosely coupled
it means
lack of entanglement between Parts it
means that it's organic like if you go
for a surgery on your and hopefully you
don't but if you go for surgery on
something in your body like a kidney
we can do that because the kidney is
separate from hopefully from the lungs
but if it's a if it's a cockroach
or a worm it's really hard to see the
distinction between the kidney and the
and the and the lungs it's just oh uh
well maybe if some maybe somebody's like
a worm scientist is going to correct me
but it's just a pile of goo like you
can't do a heart transplant on a worm
because there's no heart there that's
that's entanglement that's why it's so
hard for everybody to manage their
monolith that's why monolith was never a
good idea ever
um and monoliths can't be turned into
into service architectures because
they're already just this pile of goo in
order to separate things they already
have to be separate you have to start
separate just to translate for the
audience When you mention monolith you
mean no bond No Boundaries No Boundaries
right yeah right so here we understand
monolitas no network
between components
I see what you're how you yeah I see her
using network now yeah for sure
um God uh what was the we were talking
about entanglement I was talking about
entanglements about worms and how it
represents worms
SOA right so microservices
um yeah I don't like yeah we don't wanna
I'm glad that that microservices is a
word we don't have to use anymore
because it got so twisted and so
misrepresented that it was that period
between like when Eventide was well that
period between like 2013 and 2020 2023
where microservices like was really
popular and now everybody's like oh
microservices that was a mistake it's
like well what web developers thought
microservices was was a mistake it's
been a mistake since the 1980s
um and now we can just go back to saying
autonomous components okay and so when
we're going to change like we're you're
going to see like all the microservices
mentions in in our documentation
materials be removed because thanks okay
finally that's a failure I still mean
the actual meaning of this and the
reload uh
we kind of agreed that pricing inventory
are different concepts they kind of
should be separated but now okay uh
would you in your implementation there
is no scalabit scalability requirements
to manage your performance issues would
you hide those components behind HTTP or
create almost never okay okay because
that was my impression for a long time
so thanks for clarifying this yeah I
mean it's it's not needed
okay um once so we have you know we have
hdp by the by the way like we don't
avoid rails there's no like you're in
Ruby we like Ruby we want to work in
Ruby we built Eventide and Ruby Ruby's
the right language for for what we do
um
but if you're in Ruby and you're and
you're building anything with HTTP and
you're not using rails then you're
probably building a lot of custom stuff
uh that don't that you don't have to
build so yeah all of our apps run run on
Rails we just don't have a monolith
um and as soon as possible we get out
like the H rails for us is a web server
the web request comes in we deal with it
and we get out of rails as quickly as
possible by recording a message by
recording an instruction on a message
queue or recording a uh the result of
processing an instruction on a message
queue but we get out of rails as quickly
as possible
um that's that's literally not a
performance thing it's basically a human
thing we don't want a lot of code in
rails because a lot of code and rails
tends to go really bad and tends to
become the anchor that slows down or
buries or drowns a team so it's still
like it's still like incredibly
important like we're not anti-rails
we're just anti-dum
Community I have great hope for the
rails Community I just think you know we
need to start listening to people who
understand software design and not
people who are cute
sorry Nathan
no offense to the Q people I'm good with
nobody listening to me
okay I think it's time to wrap up time
is oh the next talk is coming uh would
you like to have some final words anyone
that's good
I don't think anybody needs to hear from
me
I think I have to add a dictionary to
translate from Scott's vocabulary and to
adopt autonomous for bounded contacts
inside the monolith to
to show that we probably mean the same
but use different vocabulary and maybe
on the code level we would agree at some
point yeah there's there's a whole other
conversation there about how how to
organize a system and we organize our
system around behaviors and around
processes rather than rather than orm
and end data and data data we just treat
data as a side effect so we don't
actually have to worry about all the
stuff from domain driven that
domain-driven design is concerned about
by the way domain driven design is
almost always concerned with orm
no completely not that's interesting
maybe it was like that 20 years ago are
you doing active record
with DDD only for read models which is
totally somewhere else so no damn it I
thought I had you in a trap but I I
doubt I think that's my impression that
the world also kind of um for you guys I
get it because you're sorry because you
are like already in in the in the event
uh in the event world but I think in
general when people are working with DDD
they're they're they're they're they're
struggling with problems that are are
orm problems yeah I shared all against
the orms for business logic
it's a problem yeah so all that
partitioning and that boundary stuff
that's all about relational databases
and associations and it's unfortunate
because let's say in real sport there
are some other movements let's say for
example there's a big initiative called
ROM which is kind of something like
active record but let's say better but I
think it just shares the same problems
in general because it still tries to be
an orm to implement business logic
within our um yeah the problem with orms
is they're very prone to being like that
worm with no with no separation no
boundaries between the organs everything
is entangled
um there's there's no difference between
one organ and another organ I'm sad that
we agree on so much actually
yeah I was gonna say well we've only
been talking for an hour like if we get
if we if we go on I'm sure we can we can
disagree like I think we disagree I
think I disagree on a lot well you're
still wrong with the aggregate but okay
but uh like I think if we looked in
detail about the way we Design Systems
and designing it around
processes
actually I can't say that I don't know
how you Design Systems I've just made a
I'll admit I've made a huge presumption
that isn't uh isn't validated by
anything other than my own prejudice
so
I'm sorry if that's wrong and if I'm
right
I'm right I mean yeah I think we both
are busy with our own projects so it's
probably we don't look at each other
enough to understand where you're going
where we are going so that's normal yeah
it's like we could have a whole Summit
just on Eventing and uh that would be a
good thing to do
I still think the real battle is the
rails way versus a real versus versus
the design way yeah
[Music]
the rails way is basically a bunch of
shortcuts that disregard
the fundamental laws of structural
design
on the proposition that if you do that
your work will be really fast and what
you get is your work is fast for two
weeks to three months and then it's hell
and it's ten times slower than it ever
should have been and your life should
have been a lot better so if you if you
what's the old expression if something
seems too good to be true it probably is
that's blog in 10 minutes that's rails
watch out further look at the code you
didn't have to write it's like the what
really matters is look at the mistakes
you're making that you didn't that you
don't know that if you don't know what a
mistake is in software design you're
gonna you're gonna experience a lot of
pain learn what mistakes are in software
design and take them very seriously and
understand that they're that they have
that they happen at an atomic level not
a visible level
you'll learn to create to put on a more
powerful lens cancer starts with a cell
but you can't see it with your eyes
you're not gonna be able to see software
design mistakes with your with with your
naked eye early in the existence of that
of that uh uh a mistake you have to look
at secondary effects
um to understand that you've got
mistakes and the problem is we're doing
really really crude things looking to
see something the size of a cell
something the size of a molecule with
our naked eye and not seeing it deciding
that there is no problems
right we're trying to finish right yeah
uh okay maybe just as a summary from my
side I'm I'm happy that I met someone
more radical than me
uh I I agree with quite a lot of what
you're saying I think with my approach
to release applications and to the rails
world is to accept the reality that it
is like it is
um I'm trying to fight my battle as well
uh however with the rails even store
approach and the tool we kind of
accepted that there are many
applications out there which are crowd
which are rail its way which are wrong
and to what your focus is not to make a
perfect design in the end it's it would
be great we just are focused on small
steps which are getting to better design
and I mean you you you have a Noble
business
um we don't ever work on existing
applications unless we're there to only
do that yeah we only work on New on new
systems I haven't worked on a legacy
System since a long time even when I
went to work on Legacy systems I
convinced the company to replace them so
I I don't do I I just don't do that we
work on clean code from the start all
the time and it's necessary for the
kinds of work we do
um
that's a very big that's a very big
factor not competing yeah yeah right no
exactly like that's that's a big that's
a big factor for Eventide like when you
try to cram P cram Eventide into Legacy
application I would say that's like as
much as that harms me for saying don't
adopt our tools that's a very you're
you're that's you're that's you're
playing with fire that's a date like
know what you're doing before you do
that because that could be really
harmful to your company or your project
so
yeah okay my summary would be don't
design your system like it's one cell
organism and have make sure that they
have visible organs within it
[Music]
I got nothing okay
thank you guys it was interesting to
discuss and thanks for the answer thank
you
[Applause]