SlideShare une entreprise Scribd logo
1  sur  197
Télécharger pour lire hors ligne
YOU KEEP USING THAT WORD
Sam Newman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
#TeamHexagon
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
Inventory
Returns
Customer
Order
Shipping
hachyderm.io/@samnewman
Inventory
Returns
Customer
Order
Shipping
hachyderm.io/@samnewman
Inventory
Returns
Customer
Order
Shipping
Logical dependency
hachyderm.io/@samnewman
Returns Shipping
hachyderm.io/@samnewman
Returns Shipping
hachyderm.io/@samnewman
Returns Shipping
The Returns microservice depends on some
functionality which Shipping provides
Synchronous
Synchronous vs Asynchronous
hachyderm.io/@samnewman
MAIN STYLES OF COMMUNICATION
hachyderm.io/@samnewman
MAIN STYLES OF COMMUNICATION
Request/Response
hachyderm.io/@samnewman
MAIN STYLES OF COMMUNICATION
Request/Response Event-Driven
hachyderm.io/@samnewman
REQUEST-RESPONSE
Returns Shipping
The consumer is asking
the microservice for
something
hachyderm.io/@samnewman
REQUEST-RESPONSE
Returns Shipping
I need a postage label!
The consumer is asking
the microservice for
something
Request
Consumer
hachyderm.io/@samnewman
REQUEST-RESPONSE
Returns Shipping
I need a postage label!
Here you go!
The consumer is asking
the microservice for
something
Request
Response
Consumer
hachyderm.io/@samnewman
EVENT-DRIVEN
Inventory
An event (fact) is broadcast
hachyderm.io/@samnewman
EVENT-DRIVEN
Inventory
An event (fact) is broadcast
Stock Level
Changed!
Event
hachyderm.io/@samnewman
EVENT-DRIVEN
Inventory
An event (fact) is broadcast Promotions
Wishlist
Stock Level
Changed!
Event
hachyderm.io/@samnewman
EVENT-DRIVEN
Inventory
An event (fact) is broadcast
Interested parties receive
the event and react
accordingly
Promotions
Wishlist
Stock Level
Changed!
Event
hachyderm.io/@samnewman
EVENT-DRIVEN
Inventory
An event (fact) is broadcast
Interested parties receive
the event and react
accordingly
The emitting microservice
doesn’t need to know about
consumers
Promotions
Wishlist
Stock Level
Changed!
Event
hachyderm.io/@samnewman
EVENT-DRIVEN
Inventory
An event (fact) is broadcast
Interested parties receive
the event and react
accordingly
The emitting microservice
doesn’t need to know about
consumers
Promotions
Wishlist
Stock Level
Changed!
Consumers
Event
Synchronous vs Asynchronous
Request/Response Event-Driven
Request/Response Event-Driven
Synchronous or Asynchronous
Request/Response Event-Driven
Asynchronous
Synchronous or Asynchronous
I don’t think there is any consistent
de
fi
nition of what asynchronous
communication means
https://pathelland.substack.com/p/dont-get-stuck-in-the-con-game-v3
https://twitter.com/samnewman/status/1414894650125586434
What I found might shock you!
https://twitter.com/darrenhobbs/status/1414920239142342662
This implies that asynchronous
communication will be slower!
But this *feels* like a useful distinction
hachyderm.io/@samnewman
REACTIVE MANIFESTO
https://www.reactivemanifesto.org/
hachyderm.io/@samnewman
REACTIVE MANIFESTO?
https://www.reactivemanifesto.org/glossary#Asynchronous
hachyderm.io/@samnewman
“…the processing of a request occurs
at an arbitrary time, sometime after it
has been transmitted from client to
server”
https://www.reactivemanifesto.org/glossary#Asynchronous
hachyderm.io/@samnewman
“…the processing of a request occurs
at an arbitrary time, sometime after it
has been transmitted from client to
server”
https://www.reactivemanifesto.org/glossary#Asynchronous
Wat?
hachyderm.io/@samnewman
As opposed to the server processing a
request before it is sent?
hachyderm.io/@samnewman
https://
fl
ickr.com/photos/londonmatt/34854868023/
hachyderm.io/@samnewman
REACTIVE MANIFESTO (CONT)
“This is the [opposite] of synchronous processing which
implies that the client only resumes its own execution
once the service has processed the request.”
https://www.reactivemanifesto.org/glossary#Asynchronous
https://twitter.com/SteveSmith_Tech/status/1414906580542312450
https://twitter.com/SteveSmith_Tech/status/1414906580542312450
https://twitter.com/SteveSmith_Tech/status/1414906580542312450
hachyderm.io/@samnewman
What this really is about is
non-blocking
Let’s explore the concept of non-
blocking calls
hachyderm.io/@samnewman
Subscription
Loyalty
Enrolment
hachyderm.io/@samnewman
Subscription
Loyalty
Award Points
Enrolment
hachyderm.io/@samnewman
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
hachyderm.io/@samnewman
BLOCKING CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
hachyderm.io/@samnewman
BLOCKING CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
hachyderm.io/@samnewman
BLOCKING CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
We then wait until we either get a response, or we give up
hachyderm.io/@samnewman
BLOCKING CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
We then wait until we either get a response, or we give up
hachyderm.io/@samnewman
BLOCKING CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
We then wait until we either get a response, or we give up
Once the response to loyalty has completed,
then we can call Subscription
hachyderm.io/@samnewman
PROBLEMS WITH BLOCKING CALLS?
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
hachyderm.io/@samnewman
PROBLEMS WITH BLOCKING CALLS?
Latency is the sum of the calls
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
hachyderm.io/@samnewman
PROBLEMS WITH BLOCKING CALLS?
Latency is the sum of the calls
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
50ms
hachyderm.io/@samnewman
PROBLEMS WITH BLOCKING CALLS?
Latency is the sum of the calls
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
50ms
150ms
hachyderm.io/@samnewman
PROBLEMS WITH BLOCKING CALLS?
Latency is the sum of the calls
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
50ms
150ms
e.g. 50 + 150ms = 200ms in total
hachyderm.io/@samnewman
PROBLEMS WITH BLOCKING CALLS?
Latency is the sum of the calls
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
50ms
150ms
e.g. 50 + 150ms = 200ms in total
But remember that latency for an
operation is not
fi
xed - it will have
a range
hachyderm.io/@samnewman
An improvement would be to
do these two calls in parallel
hachyderm.io/@samnewman
PARALLEL CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
hachyderm.io/@samnewman
PARALLEL CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
hachyderm.io/@samnewman
PARALLEL CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
hachyderm.io/@samnewman
PARALLEL CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
hachyderm.io/@samnewman
PARALLEL CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
res1 =
loyaltyService
.awardPoints(
custID, 200)
res2 = subsService
.upgradeSub(
custID, PLATINUM)
hachyderm.io/@samnewman
PARALLEL CALLS
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
res1 = loyaltyService.awardPoints(custID, 200)
res2 = subsService.upgradeSub(custID, PLATINUM)
res1 =
loyaltyService
.awardPoints(
custID, 200)
res2 = subsService
.upgradeSub(
custID, PLATINUM)
hachyderm.io/@samnewman
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
hachyderm.io/@samnewman
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
The future represents a background thread of
execution - we can continue while the call is made
in the background
hachyderm.io/@samnewman
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
The future represents a background thread of
execution - we can continue while the call is made
in the background
So the calls to Loyalty and Subscription
service can now be made in parallel
hachyderm.io/@samnewman
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
The future represents a background thread of
execution - we can continue while the call is made
in the background
So the calls to Loyalty and Subscription
service can now be made in parallel
hachyderm.io/@samnewman
But we may actually need the
responses, right?
hachyderm.io/@samnewman
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
hachyderm.io/@samnewman
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
hachyderm.io/@samnewman
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
At this point, we don’t know if the calls to
either service have been processed or not.
hachyderm.io/@samnewman
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
At this point, we don’t know if the calls to
either service have been processed or not.
We might have to wait for the results!
hachyderm.io/@samnewman
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
At this point, we don’t know if the calls to
either service have been processed or not.
We might have to wait for the results!
await(fut1, fut2)
hachyderm.io/@samnewman
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
At this point, we don’t know if the calls to
either service have been processed or not.
We might have to wait for the results!
await(fut1, fut2)
And now we’re blocking program
execution….
hachyderm.io/@samnewman
Even if you have non-blocking calls,
the logic of your processing may
require waiting for things to happen!
hachyderm.io/@samnewman
Even non-blocking calls may
end up blocking
hachyderm.io/@samnewman
But in general if you can use
non-blocking calls and run them
in parallel, that is a good thing.
https://twitter.com/evolvable/status/1414909633597116417
https://twitter.com/Benkzxar/status/1414965335338496001
Intermediary?
Broker
A
A
Message
B
A
Message
B
A Broker
Message
B
A Broker
Message
B
A Broker
Message
B
A Broker
Message
B
A Broker
With a broker, we can of
fl
oad the
requirement to guarantee delivery
(kinda)
Message
https://twitter.com/goingkilo/status/1414898869075251201
https://
fl
ickr.com/photos/pro
fi
lerehab/5707316547/
There are variations on how we can
implement this “inbox” pattern
There are variations on how we can
implement this “inbox” pattern
Database
There are variations on how we can
implement this “inbox” pattern
Database
File system
There are variations on how we can
implement this “inbox” pattern
Database
File system
Email!
The sender of a message doesn’t need to
worry about whether or not the recipient is
currently available
The sender of a message doesn’t need to
worry about whether or not the recipient is
currently available
But we do need to trust the intermediary (the
broker), and that does have to be available!
hachyderm.io/@samnewman
BROKER-BASED REQUEST-RESPONSE
A
Broker
hachyderm.io/@samnewman
BROKER-BASED REQUEST-RESPONSE
A
Request
Broker
hachyderm.io/@samnewman
BROKER-BASED REQUEST-RESPONSE
B
A
Request
Broker
hachyderm.io/@samnewman
BROKER-BASED REQUEST-RESPONSE
B
A
Request
Queue
Request
Broker
hachyderm.io/@samnewman
BROKER-BASED REQUEST-RESPONSE
B
A
Request
Queue
Request
Broker
hachyderm.io/@samnewman
BROKER-BASED REQUEST-RESPONSE
B
A
Request
Queue Request
Broker
hachyderm.io/@samnewman
BROKER-BASED REQUEST-RESPONSE
B
A
Request
Queue Request
Response
Broker
hachyderm.io/@samnewman
Response
Queue
BROKER-BASED REQUEST-RESPONSE
B
A
Request
Queue Request
Response
Broker
hachyderm.io/@samnewman
Response
Queue
BROKER-BASED REQUEST-RESPONSE
B
A
Request
Queue Request
Response
Broker
hachyderm.io/@samnewman
A
Response
Queue
B
A
Request
Queue
Broker
Response could be
received by a different
instance
hachyderm.io/@samnewman
A
Response
Queue
B
A
Request
Queue Request
Broker
Response could be
received by a different
instance
hachyderm.io/@samnewman
A
Response
Queue
B
A
Request
Queue Request
Response
Broker
Response could be
received by a different
instance
hachyderm.io/@samnewman
A
Response
Queue
B
A
Request
Queue Request
Response
Broker
Response could be
received by a different
instance
hachyderm.io/@samnewman
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
hachyderm.io/@samnewman
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
Here, the assumption is that the response comes
back to the same instance
hachyderm.io/@samnewman
Subscription
Loyalty
Award Points
Upgrade Subscription
Enrolment
fut1 = future(loyaltyService.awardPoints(custID, 200))
fut2 = future(subsService.upgradeSub(custID, PLATINUM))
Here, the assumption is that the response comes
back to the same instance
So we may need to deal with what
happens if the consumer dies part way
through
hachyderm.io/@samnewman
It’s arguable that the intermediary-
based communication encourages
stateless processing
hachyderm.io/@samnewman
COMPETING DEFINITIONS?
hachyderm.io/@samnewman
COMPETING DEFINITIONS?
Immediacy
hachyderm.io/@samnewman
COMPETING DEFINITIONS?
Immediacy
Temporal Coupling
hachyderm.io/@samnewman
COMPETING DEFINITIONS?
Immediacy
Temporal Coupling
Non-blocking
hachyderm.io/@samnewman
COMPETING DEFINITIONS?
Immediacy
Temporal Coupling
Non-blocking
Intermediary
hachyderm.io/@samnewman
Will the real asynchronous
communication please stand up?
Does this matter?
Words have different meanings
What words in the English language has
the most dictionary meanings?
hachyderm.io/@samnewman
Set
hachyderm.io/@samnewman
Set Run
hachyderm.io/@samnewman
Set Run
430 meanings
https://www.guinnessworldrecords.com/world-records/english-word-with-the-most-meanings
hachyderm.io/@samnewman
Set Run
430 meanings 645 meanings
https://www.guinnessworldrecords.com/world-records/english-word-with-the-most-meanings
https://www.nytimes.com/2011/05/29/opinion/29winchester.html
hachyderm.io/@samnewman
So we’re used to this, right?
hachyderm.io/@samnewman
We derive personal understanding
of a word via context
hachyderm.io/@samnewman
“The meaning of a word becomes
more narrow as we add other words
around it”
- Ian Cooper (heavily paraphrased)
hachyderm.io/@samnewman
run
hachyderm.io/@samnewman
run
The issue got worse
the moment the
program was
hachyderm.io/@samnewman
run
hachyderm.io/@samnewman
run
The economy crashed
due to a on the
banks
hachyderm.io/@samnewman
So, does this matter?
hachyderm.io/@samnewman
But we throw around terms like
“asynchronous” without enough
context around the term to derive
shared meaning
hachyderm.io/@samnewman
https://www.reactivemanifesto.org/glossary#Asynchronous
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
“Originally only in medical contexts”
- Oxford English Dictionary
hachyderm.io/@samnewman
hachyderm.io/@samnewman
hachyderm.io/@samnewman
ASYNCHRONOUS DEFINTION IN A COMPUTING CONTEXT
“Designating data transmissions in which packets
of data are sent at irregular intervals, with the start
and end of each packet being marked by speci
fi
c
signals involving such transmission”
- Oxford English Dictionary
hachyderm.io/@samnewman
Software is a type of
sociotechnical system
hachyderm.io/@samnewman
Sociotechnical
hachyderm.io/@samnewman
Sociotechnical
Sociotechnical
{
People
hachyderm.io/@samnewman
Sociotechnical
Sociotechnical
{
People
{
Technology
hachyderm.io/@samnewman
https://
fl
ickr.com/photos/chaoticmind75/52046974941/
hachyderm.io/@samnewman
hachyderm.io/@samnewman
The amount of useful software created
by individuals is vanishingly rare
hachyderm.io/@samnewman
Bringing groups of people together
to use and use technology requires
good communication
hachyderm.io/@samnewman
hachyderm.io/@samnewman
So, we’re going to make this asynchronous…
hachyderm.io/@samnewman
So, we’re going to make this asynchronous…
hachyderm.io/@samnewman
So, we’re going to make this asynchronous…
hachyderm.io/@samnewman
So, we’re going to make this asynchronous…
hachyderm.io/@samnewman
So, we’re going to make this asynchronous…
hachyderm.io/@samnewman
The term “asynchronous” in the
context of inter-process
communication has so many meanings
that it is effectively meaningless
So what can we do?
Understand what your
application needs
Understand what your
application needs
Describe how it should handle
different situations
What should happen when the
server is unreachable?
What should happen when the
server is unreachable?
How fast should it be?
What should happen when the
server is unreachable?
How fast should it be?
What if the client crashes?
Where possible, use more
explicit terms
Clients should be non-blocking
Clients should be non-blocking
Run operations in parallel
Clients should be non-blocking
Run operations in parallel
Use broker X as an intermediary…
But try not to make having a
common meaning be about
correcting someone else
"You keep using that word. I do not think it means what
you think it means."
— Inigo Montoya, The Princess Bride
When someone says “we should
make this asynchronous”…
When someone says “we should
make this asynchronous”…
Perhaps just say, “what does that
mean to you?”
What you
fi
nd might shock you
hachyderm.io/@samnewman
THANKS!
https://samnewman.io/
@samnewman

Contenu connexe

Plus de Fwdays

Plus de Fwdays (20)

"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy Tytenko
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"Mastering cross-cultural communication", Anna Gandrabura
"Mastering cross-cultural communication", Anna Gandrabura"Mastering cross-cultural communication", Anna Gandrabura
"Mastering cross-cultural communication", Anna Gandrabura
 

Dernier

Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
panagenda
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
UK Journal
 

Dernier (20)

WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdfBreaking Down the Flutterwave Scandal What You Need to Know.pdf
Breaking Down the Flutterwave Scandal What You Need to Know.pdf
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4j
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptxBT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
1111 ChatGPT Prompts PDF Free Download - Prompts for ChatGPT
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdf
 

"You Keep Using That Word", Sam Newman