Transcript
This transcript was autogenerated. To make changes, submit a PR.
Jamaica make up real
time feedback into the behavior of your distributed systems and
observing changes exceptions errors in real
time allows you to not only experiment with confidence but respond
instantly to get things working again.
Those hi,
my name is Fabrizio and I'm going to talk today about
how can we learn to overcome the choice paradox.
Let me just begin introducing myself. I've been in love
with code since 2002.
This led me to can entrepreneur career.
In 2005 I started my first company. It was a software company,
ended up entering in these academia.
I have my life as a researcher since 2008
needed up getting my phd and since 2011
I've been working with startups,
both mine and some consultancy work.
Right now I'm the CTO at Bxblue and I
will share a bit of my experience avoiding and
how to handle decisions in this environment that we live in.
So why does this matter for us developers?
So when we think about problem solving,
we think about an analytical process that is used to identify
the possible solutions to the situations that are in our
hands. And part of the problem solving
process is making decisions. So that's why I'm
talking about the choice products today and problem solving
and decision making. They are very intertwined and
I'll show you here with an example. So imagine that you have
to handle some payments and you
right away is presented with a choice.
You can choose to implement the solution
of handling payments directly with your
choices. So you can integrate directly with visa,
with the banks, with many other credit card companies,
or you can use some kind of gateway like stripe or PayPal.
There are some advantages, there's some disadvantages with each
of these choices. So let's say
after you waiting everything up, you decide,
okay, I'll go with PayPal. So right now you have another choice,
how you scale this gateway, your payment
options, there are so many different solutions and
you decide, okay, I would use some kind of messaging system and
you have other options for messaging system. You can use rapid Miq redis,
you can use AWS sqs, you can use
Kafka, that's so used right now. And you decide,
okay, after waiting all these options, you say
okay, I'll go with Kafka, and okay, so then you
go to the team and say we're going to implement with
PayPal, we're going to use Kafka. So what language
should you use? Should we use Ruby, that is the main
code that we're using today. Or should we use
Java because we think it's more stable?
Or should we try something new like closure or python that
some of the members of the team want to try it out.
After every new decision, you're presented with more options.
And that's how we solve problems with code nowadays.
You are always making choices and you
are always making decisions. And how can you
avoiding CTO end up in these paradox of choice?
So most of what on my talk today will be based in this
book, the Paradox of Choice by Barish Watts.
It's a controversial book, so I'll try to stay focused
on the main points of the book. So the
book starts talking that we try to correlate
autonomy and freedom of choice with our
own well being. And we think that choice is
also a critical component of autonomy and freedom.
So we need autonomy and freedom to feel well,
but we also need to have
the ability to choice to feel that we have this freedom
and autonomy. But experience
shows that having more choice doesn't
give us more freedom and autonomy. And we don't seem
to be benefiting from this increase of
choice psychology in our minds.
So how can we see this?
So the first way that we can experience
things effect is with the so called
buyer's remorse. So it's that sense of regret that we
have after making a purchase,
especially when it's something very important. And usually
the choice paradox happens because we are trying to avoiding the buyer's remorse
when we're trying to make a choice. We don't want to feel
that after making that choice, we are going to feel bad
afterwards. So things is one of the main
hardships that we have when we are making choices. So let's
see can example. So imagine you're looking CTO
paint your house, and you have infinite amount
of colors at your disposal. And you can think
like if you make a simple choice, like, I'm going
to paint my house gray, but there
are so many different choices of gray. You have
yellowish gray, you have saint gray, and you have many,
many other options. And you can freeze when you're trying to choose
this kind of what kind of paint you want.
CTO paint your those. And you can try to
avoid this kind of situation if you just have
a simple palette to choose from. And this is what most
people think when they are trying to choose. So when you're trying to
paint your house, you start with a small palette or the
color choices that somebody
or your architect gives to you. They try to limit
your kind of options so you can choose better and you spend
less time choosing how to paint your house.
And this amount of options can lead you to what
is called analysis paralysis. Is when the fear of
making an error outweighs the realistic expectation
in making that decision fastly
is the famous adash,
perfect is the enemy of good. So you're trying to be perfect in
your decision, and you end up making no decision at all.
And what the book says CTo us, is that after
these two components, we learned that
having more choice does not equate CTO having more
happiness. Why that?
Because we think that freedom is
the opposite of commitment.
Because when we have the freedom of choice, we can choose
anything. But after we choose, we have to commit with that choice,
so we lose that freedom. That's why we fear so much.
And we usually things that having less rules
means a lack of choice. But that's not true,
because when you have no rules, sometimes you cannot choose,
because there are so many options that you don't know where to start.
And sometimes having rules, like less options,
can help you make that choice.
For example, when Twitter started, they have only 104
characters, and it was just after
the rise of the blogs. And you have so many creativity in
Twitter because that restriction of 140
characters helped people to make
more choices and CTO create more. And we see this
every day with new platforms and other kind of rules that we create
for ourselves and help us choose more.
And lastly, the fear of missing out.
So when we make a choice,
we fear what we don't know, like which other choices
that I should be considering, and I did not.
So that's the last part. So let's look now how
our brain handles choices, because it's
very important for us to understand what mechanisms
are inside our head when we're trying to make these choices.
I want to start saying that I'm not an expert in
neuropsychology,
although talk about some parts of the brain. It's worth
knowing that our brain is very plastic, so it can
adapt to its
shape. Not shape, the use of its shape according
to its use. But I'll focus here on two main components.
So the first component is our prefrontal contexts.
It's the part of our brain responsible for reasoning.
It's usually a part of our brain that consumes a
high amount of energy. Our brain itself already consumes a
lot of energy, but it's the most energy intensive
part of our brain. Usually we believe
that this part of the brain works very synchronous,
which means that when we're thinking, usually we are
thinking about this part of the brain because it respond
to what we believe as our ego.
But also it's a part of our brain that it's very low
on memory. And when I'm talking about memory, it's about
which concept it can hold at
each single time. But you can be
thinking, like, how can it be low on memory when I can remember so many
things and I can hold these thoughts, these complex thoughts
in my head? That's because the prefrontal
cortex works with a concept
of choosing. So when you're thinking about something, you don't hold
that whole concept at once.
You try to break it into
smaller parts. So let's say I talk
to you that I live in brazilian.
So how can you hold things thought that I live in
brazilian in your head? So you can imagine that we
are in planet Earth.
Brazilia is in Brazil. So it's in America, then Brazil,
and then in the center of Brazil, it's where I live.
And when I say that I want to travel to
Lisbon, you make your head okay, so he's getting
out of Brazil. He's going to go to another continent.
Things other continent. It's Europe. In Europe, there is Portugal. In Portugal,
there is Lisbon. So this chunking
that we do with maps, when you're trying to locate ourselves, is the same thing
in your hand. So we aggregate different contexts in
different sizes, and we hold these small
thoughts not at once, but in
small chunks at each time. The second part of
our brain is the hippocampus. So the hippocampus is usually
where we store our memory. Our memory is
not very selective because you can
connect different kinds of information. You can
connect and smell with an image,
with a feeling, with a sound,
and disconnections is what makes our memory
work so well. Usually our long term memory,
it's a synchronous. So when we are trying to remember
something, not necessarily, you're going to
get that information right away. So your brain is going to
process that information. And that's why sometimes you're
just out of the blue, you remember something,
or a feeling overwhelms me,
overwhelms you, because it's your hypocampus working
asynchronously and bringing that information to you. So these
two parts of your brain, they work together to help you make
decisions. And there are some ways that you can help these two
parts to work better. And the
best way for you to help is to make these two
parts of your brain feel safe. And when we say
safe, is to ensure that they're using
the best of their capabilities. Because when
you don't bring the best
of your memory CTO work, your brain
is going to still be worrying about things.
So that's why sometimes you're just working and in
the middle of your working session, you remember that you forgot to buy
milk and your whole flow
state is broken. So how can you help your brain
feel safer? So there are three things that you can do.
The first is to store information outside your
brain. And why that? Because your brain
is not a very reliable place to store information,
because it's going to always be worrying
about what you forgot and try to bring it back
for you in your
prefrontal cortex. So write down somewhere that you
believe that is going to be safe and you can find some later.
This will calm your brain. Also have
a process to review and reevaluate these
notes so your brain knows that it's really safe.
What you wrote down and
these way you wrote down is understandable.
So if you write down your notes
and sometime later you come back and you don't understand,
your brain will start worrying about what you wrote,
so you will not feel safe. And the last part
is to delay decisions. When you delay decisions, you're telling
your brain, calm down, you dont need to worry about this right now.
We can work with that later. But it only work
if you can review and reevaluate. And you are storing these
delayed decisions. So your brain doesn't have to worry that
you forgot what you are delaying.
So let's see some examples. So the first example is
the most common for every programmer is variable naming.
It's very hard thing to do, even though it's simple.
So here, let's say I'm avoiding a
method to evaluate a loan, and I have to evaluate
the amount that a payment has. And I think that payment is
not a very good choice of words, but I
could not things of something else. So I'll just make a mark
here, I'll just call payment avocado. And why
that? Because I know that if I try to get things pr
to production, I will not make it through code review.
Even my own code review won't accept this.
So it's just a mark for me to remember that after
I finish my code, I have to come back here and I can just keep
coding, finish what I have to do. And after that I can reevaluate
this choice of words and can come with a better choice
of words like stomach monthly value,
it's much more clear. It tells me the
time slot of that payment, and it's called
installment, so I know it's related to the loan, so it's much more clear.
So I delayed this choice and I made a better choice later.
Instead of just breaking my flow of work and these
small decisions, I find it helpful
CTO work using the Pomodor technique because it follows
the same process that we are talking before. That helps our brain to work better.
So you have small work sessions, you write it down and
you review afterwards and you have these time slots
like every break your brain has
some time to breathe and review what you're working with.
So I find it's very helpful. So let's see a second example.
Like imagine you have to deliver a new behavior in an
existing feature and there is some code that you don't
feel great about, but you are not sure how to act on it.
So let's say it's again our evaluate long
method with lots of code that you don't feel great.
So my first choice is I'll just isolate the old
code and code my
new code because I'm sure how it should be done. And after
I do that, I can then look at the code and see
the pattern of what I think it should be and
then I can just rewrite this code. In this case,
I find that it'd be much better to use in this
case observable
pattern and just change the
code to be more clear. But I delayed this choice later,
after I just inserted my new code and
I was sure about what change should be done. And let's go
to my third example where imagine
you are tasked with adding a new steps
to a purchase flow and you should
decide, should I go top down, bottom up or
just go vertically slicing these problem? And let's see,
imagine that you have this flow, you have a cart, and then you go straight
to a payment flow and you are requested to
start a new two steps in the middle that you should request documents.
Then you have to process the information and you can go many
ways. You can go top down and
you first develop the front end for
these two steps and you validate, then you develop the
back end and you deploy everything at once. But imagine
that these team is requesting that you should
deploy it faster because they are having lots of problem with
fraud. So you can say, okay, so I'll develop
the whole request documents at once. I can give these documents
to the antifraud team, they can start processing it
manually while I've developed the automation about
this, so I can give some value to the team and later on I
can automate that. But they can say,
okay, you cannot do that. We already have some documents
here. So I can start with the automation and then go to the request.
So there are many ways that you can approach this problem, but to
depend on the context that you are within. And there is no clear choice
here. And that's how we work. There is not
always a clear choice and you have to work with other people to
model your problem. And that brings us to
how can we choose if most of our decisions,
they are so complex. So there are some things that we can do.
But I'll be honest, there is no single way
to choose and no one knows how to make you
go to a better choice, to a single optimized
choice. But there are ways that can help you.
So the first one is to use these same way that your brain works.
So it's chunking you brain big things into
smaller things. And these you
can solve smaller problems into a bigger problem and compose
that. Also you can ask for advice,
ask for people that already worked in
similar contexts and how they solve it. This will inspire you
in how you can solve that problem. Not necessarily use the
same solutions, but you can be inspired to bring your
own solutions and know how their hardships can
be met to yours. And lastly, you weight
your choices and choose using one or more methods.
And there are hundreds of methods of choice or
choosing. You have pros and cons, you have AHP,
you have contract analysis and many others.
In my opinion, most of the methods, these are specific
types of AHP, analytic hierarchy process.
And I'll show you here how it works. It's basically a matrix
where you have your options, your criteria,
and in the end you weight your criteria to get to
a ranking. In my opinion,
the best part of doing this
kind of process is to come up with criteria.
When you're working towards establishing the
criteria that will distinguish your alternatives,
you come up with your
problem model. And this is the best part,
because when you're modeling your problem, you find
out what really matters and it will guide you towards
a better decision. Not always you have the best decision
in these end, but you can find the best decision at that
time. And also when you wait your criteria
and you come up with the ranking, you can compare that and you can
find out if that matches what you expected. So let's
bring the first example of this talk. And let's say you
wanted to choose which payment gateway you should use,
and you end up with these three criteria.
Familiarity of the team with that payment gateway, the coverage,
consolidating the business and how pricing can affect
you. And let's say you end up with this score
and in this case, you have a tie in the second
place, but you have a clear fourth place and a clear first
place. And this model can help you
understand how you can choose one here. You can say,
okay, so people it is, it's the first one, you should choose
it, but not necessarily. You can go and talk with other people
and they say okay, so pricing is good and everything else,
but I believe we can negotiate and get something better
because I have someone that I know at stripe
that can help us out. There is things incentive because we're
a startup, so you can choose it or something
like, oh, the coverage is okay, you give a tree,
but it's not necessarily a these. And discussion
can go even further. But the
modeling of these three criterias is what
will help you guide you and choose in
the end. And you can negotiate with other people and end up with a
better solution. So let's review what we talked today.
So first, to calm your brain and bring safe safety
into your mind. Remember to always store your information,
take notes, always have a slot
of time saved to review and reevaluate
what you wrote and replan and establish
a cadency of when you're doing this, when you're
delaying your decisions. Also,
don't overdo it. Look for help when you need
it. Evaluate different methods of choosing
and in the end, don't overthink. If you're overthinking,
you are not choosing. It's better sometimes to make a choice
and go with it. Experiment sometime
and then you can come back and make a different choice. Remember,
choosing, not always is a commitment. Sometimes it's
just an experiment and you can come back and try other methods.
So that's it. Thanks a lot and I hope,
hope you can reach me out and talk about your choice,
how you're doing, what you think, about, what we
talk. Today. I'm free
to receive any comments. Reach me out on Twitter.
Would be fun. Thanks a lot.