Episode Transcript
Transcripts are displayed as originally observed. Some content, including advertisements may have changed.
Use Ctrl + F to search
0:00
This podcast is sponsored by TalkSpace. You
0:02
know when you're really stressed or not
0:04
feeling so great about your life or
0:06
about yourself? Talking to someone who understands
0:08
can really help. But who is that
0:10
person? How do you find them? Where
0:12
do you even start? TalkSpace. TalkSpace makes
0:14
it easy to get the support you
0:16
need. With TalkSpace, you can go online,
0:18
answer a few questions about your preferences,
0:20
and be matched with a therapist. And
0:22
because you'll meet your therapist online, you'll
0:24
have to take time off work or
0:26
arrange childcare. You'll meet on your schedule,
0:28
wherever you feel most at ease.
0:30
If you're depressed, stressed, struggling
0:33
with a relationship, or if
0:35
you want some counseling for
0:37
you and your partner, or
0:39
just need a little extra
0:41
one-on-one support, TalkSpace is here
0:43
for you. Plus, TalkSpace works
0:46
with most major insurers, and
0:48
most insured members have a
0:50
$0 copay. No insurance, no
0:52
problem. Now get $80 off
0:54
of your first month with
0:56
promo code space 80 when
0:58
you go to talkspace.com. Match
1:01
with a licensed
1:04
therapist today at
1:06
talkspace.com. Save $80 with code
1:08
space 80 at talkspace.com. Hello,
1:10
everybody. And today we have
1:12
a special guest, Jesse Speedback.
1:14
Great to be here. So
1:16
Jesse, would you mind explaining
1:19
just a bit about who
1:21
you are, some of the
1:23
things that you're doing, who
1:25
you work for, and why
1:27
you're famous, and all that good
1:29
stuff? Yeah, absolutely. So my name's
1:32
Jesse Speedack. I'm a senior engineer
1:34
at a company called Hybata, which
1:36
is a cashback for shopping app
1:38
based in Denver, Colorado. I've been
1:40
working there for about three and
1:42
a year years page. I guess
1:44
I'm famous as it were because
1:47
I gave a talk at the
1:49
first remote rails conference past May,
1:51
and I talked about kind of
1:53
how crummy of a developer I
1:55
am. Yeah, I think we can
1:57
all relate to that on the...
1:59
daily basis sometimes. So would you
2:02
mind giving a bit of a,
2:04
you know, highlight talk about what
2:06
you covered at the conference and stuff?
2:08
So we can just kind of pick
2:10
it up from there. We'll link to
2:13
the in the show notes, a link
2:15
to the conference. But just for
2:17
those who maybe didn't see
2:19
it. Sure. And there's no
2:21
substitute for actually watching
2:23
this fantastic talk. But
2:25
more seriously. The talk is really
2:28
about. my experience as a tech
2:30
lead at I bought a working
2:32
on a pretty critical project
2:34
over the course of about
2:36
six months or so and over
2:38
that time I made four very
2:41
big mistakes that put the project
2:43
in jeopardy and hopefully
2:45
there are mistakes that I will
2:48
learn from and not make again
2:50
as I continue to lead projects
2:53
that I bought in future and my
2:55
hope is that I sort of
2:57
articulating these mistakes and what
2:59
I learned from them, other
3:01
folks can benefit. And so the
3:03
four mistakes that I made are
3:06
first, we picked the wrong technology,
3:08
we can get more into that. We
3:10
also as a team, we siloed
3:12
work. So work was divided up
3:15
in not the best way. We
3:17
fell into the premature optimization
3:19
track and then maybe worst of
3:21
all, we made. way too many changes
3:23
at one time. So I can go
3:26
into detail on any of those. Yeah,
3:28
and I think it's fair to say
3:30
that I, our listeners, other members on
3:32
the panel, have been there before. Yeah,
3:35
I've worked with loads of people who've
3:37
made those mistakes. Obviously, I've never made
3:39
them myself, but oh my words. Oh
3:41
my words. Luke is the perfect developer,
3:44
let's be fair. No, I was actually
3:46
going to jump in and say the like...
3:48
I feel like I don't feel like
3:50
I'm alone but usually when you
3:52
make a mistake it cascades into
3:55
more for whatever reason I generally
3:57
feel like you either you either kind of
4:00
ever rolling along and you feel pretty
4:02
good about stuff, or you're just
4:04
like in a bottomless pit. And
4:06
there's very little in between time.
4:08
You just suddenly notice that you're
4:10
at the bottom. So yeah, just
4:13
saying. And absolutely. And I just
4:15
want to kind of call out that there's
4:17
like a certain amount of privilege
4:19
that comes with being able to
4:21
talk about our mistakes, right? I'm not
4:24
worried that my boss is going to fire
4:26
me and I'm also not worried that. folks
4:28
won't take me seriously for giving
4:30
this talk. If anything, it probably
4:33
improves my reputation as evidence by
4:35
getting to talk to three of you
4:37
gentlemen. So I just want to call that
4:39
out because I think it's important.
4:41
I think that, okay, so speaking of that, I
4:43
think that's a give and take there too. So
4:46
I think this is one of, this will get
4:48
into a thing that I care a
4:50
lot about this particular subject because for
4:52
most of my, shoot, I still feel
4:54
it today or whatever, it doesn't really
4:56
matter. I still always feel this pressure
4:58
to not let people know about the
5:00
mistakes that I made, right? Because letting
5:03
people know about the mistakes that I
5:05
made makes me more vulnerable to them
5:07
not wanting me to work for them,
5:10
right? Like fire me, whatever, whatever the
5:12
bad thing is that it's a boogie
5:14
man. It's not real. It's just a
5:16
pressure, right? And so I guess what I'm
5:18
trying to get at is like, I kind of
5:21
feel like one of the things that
5:23
I always care a lot about with
5:25
mistakes is telling people about your
5:27
mistakes I actually have discovered
5:30
in reality actually makes people
5:32
respect you more but it doesn't
5:34
change the fact that it's like really
5:36
hard and I still feel that pressure
5:38
to this day yeah I agree with
5:40
what you're saying I think that for
5:42
a lot of us talking about mistakes
5:45
openly and honestly and what
5:47
we learn from them actually
5:49
builds our credibility but that's
5:51
not always the case depending
5:53
on sort of how you present what
5:55
you look like. I think that you
5:57
guys recently did an episode. I
6:00
think you talked about issues of
6:02
hiring and getting equality in a
6:04
workplace and I think that plays
6:06
in here for sure. And I
6:09
would go as far to say
6:11
that it depends on what the
6:13
mistake is, what kind of mistake
6:15
it is. If it is just
6:18
utter incomplete negligence, then those aren't
6:20
really the kind of mistakes I
6:22
would really want to be forthcoming and
6:25
outright about, you know, but like
6:27
if I went in. and always
6:29
had a VP and tunnel into
6:31
my production environment. And then we
6:33
got malware in our local work
6:35
environment and that transferred over to
6:37
production and encrypted all of our
6:39
production data. I don't know if
6:41
I would really say like, oh
6:43
yeah, you know, that was a
6:46
silly mistake in mine. No, it's
6:48
like, okay, not only are our
6:50
customers affected, but now, you know,
6:52
my job's in jeopardy because I
6:54
decided to always take shortcuts. But
6:57
something like, and what I'm really
6:59
interested in is your technology framework,
7:01
or the, you use the wrong
7:04
technology. Can you explain a bit
7:06
more about the scenario? Sure, absolutely.
7:08
So this, the high level
7:11
we, at Ibono, we have
7:13
just a wonderful majestic monolith
7:15
rails application. Actually, originally
7:17
the application we've written in
7:19
Scala. And then after about a
7:21
month of that, they switched it over
7:24
and rebuilt the whole thing in
7:26
rails. And it's been rails ever since.
7:28
So it's going on close, almost
7:30
10 years at this point. So it's
7:32
a large application. It serves millions
7:34
of users. Very cool. And about three
7:37
years ago when I joined, we
7:39
started growing the team and thinking about
7:41
how we could, like many people have,
7:43
pull pieces out of the monolith
7:46
into. microservices. So this
7:48
project in particular was about taking a
7:50
piece of billing logic from the system
7:52
from the Monmouth and pulling it out
7:54
into a microservice. The hope was
7:57
to make it better encapsulated, easier
7:59
to iterate on. I don't think it's
8:01
bad in and of itself. I
8:03
just think it was not the
8:05
right technology. Actually, before I say
8:07
the technology, before I get trolled
8:10
by all the lovers of this
8:12
technology, I'm going to preface this
8:14
by saying, I don't think that
8:16
this technology is wrong, and I
8:18
don't think it's bad in and of
8:20
itself. I just think it was
8:22
not the right technology for the
8:24
problem and the team. Hold on
8:27
a second. Hold on a second, Jesse,
8:29
because the slide I'm looking at says
8:31
big mistakes. It doesn't say small mistakes.
8:34
It says big mistakes. So let's
8:36
just keep this in mind for
8:38
we reveal what this technology is,
8:40
what a big mistake was. Absolutely.
8:42
This, whoever, whoever, who ever uses
8:45
this technology is, is definitely making
8:47
a big mistake. So, I know, spoiler,
8:49
we weren't building like us, a
8:51
side rails app micro service, which
8:53
would probably would not have been
8:55
as big of a mistake. The
8:57
issue really was that our team,
8:59
the small team of developers and
9:01
then a larger team of engineers
9:03
in the company, really did not
9:05
have a ton of experience with
9:07
the framework that we chose. And
9:09
as a result, we ended up
9:12
having to do a lot of
9:14
plumbing and reinventing the wheel and
9:16
just not benefiting from
9:18
the institutional experience that
9:21
exists at IBATA. Unfortunately,
9:23
right, this this could work if
9:25
you're doing kind of like a proof
9:27
of concept, like, let's show what
9:29
this technology can do, let's pick a
9:31
pretty isolated use case. But
9:33
the billing logic that we were pulling
9:36
out about Monolith was basically
9:38
like, do or die, right? If it did not
9:40
work, it costs millions of dollars
9:42
to fix or, you know, it ends
9:44
up costing the company millions of dollars.
9:46
So it really... We were walking on
9:49
a tie road and there was no
9:51
net underneath us. And unfortunately we decided
9:53
to, I guess, like walk on our
9:55
hands instead of go across normally.
9:57
So the framework that we use is called
10:00
ACCA and I think for a
10:02
team that knows ACCA this probably
10:04
would have been really a perfect
10:06
tool for the job. But our
10:08
team and our company really did
10:10
not have a ton of experience
10:12
with ACCA. And so unfortunately we
10:14
weren't able to sort of take
10:16
advantage of it and use it
10:18
in a way that sort of
10:20
professional ACCA developers likely can. So
10:22
this is kind of like a
10:24
functional programming thing? Right. It deals
10:26
with data streams and passing data
10:28
along. in a functional paradigm and
10:31
it's meant to accommodate high volume
10:33
data across highly parallelized system. So,
10:35
you know, at the time, we
10:37
went there, well, I'll talk about
10:39
what we went there in a
10:41
second, but in retrospect, it was
10:43
something that could handle basically 10,000
10:45
X really what we needed in
10:47
terms of what it was designed
10:49
to handle. So just sort of
10:51
on paper, it probably wasn't the
10:53
best, the best move. in that
10:55
respect. But I could also talk
10:57
about the team as well and
10:59
why it wasn't a great, a
11:02
great fit. Yeah, can you, can
11:04
you talk for just a minute
11:06
about like what was the problem
11:08
that you were trying to solve?
11:10
Why did you choose, like what
11:12
did you need ACCA for? Sure,
11:14
yeah, perfect. So the problem that
11:16
we're trying to solve and you
11:18
have to know a little bit
11:20
about the IVADA app. So I
11:22
assume all of you, all of
11:24
you guys have downloaded it and
11:26
are actively using, like. Nope. That's
11:28
funny. We did assert, well, I'll
11:30
get to that later, but basically,
11:33
I bought it as a way
11:35
for you to get digital coupons.
11:37
You can get brands, put offers
11:39
in the app, you click on
11:41
the offer, you show us evidence
11:43
that you bought the thing that
11:45
is on offer, and then I
11:47
bought it, we'll pay you cash
11:49
back, they'll send it to your
11:51
PayPal account, give you a gift
11:53
card to Amazon, whatever you want.
11:55
So the problem that we're trying
11:57
to solve is how we make.
11:59
Don't exceed the budget. that is
12:01
allocated to them by the brands
12:04
that put those offers in the
12:06
app. And that sounds maybe like
12:08
an easy problem, like there's an
12:10
easy way to just say, okay,
12:12
there's $500,000 in budget for Oreo
12:14
coupons, just divide $500,000 by how
12:16
much money we're giving out per
12:18
coupon, and then you know, but
12:20
it's actually much, like, it's obviously
12:22
much harder than that. And in
12:24
order to preserve a good user
12:26
experience, we need to make sure.
12:28
that we're not yanking content and
12:30
surprising our users. Like you would
12:32
be really upset if you went
12:35
to the store specifically to buy
12:37
Oreos to get coupon and then
12:39
by the time you checked out
12:41
the coupon is no longer in
12:43
your application. So we have to
12:45
run some predictive algorithms to basically
12:47
guess when we're going to run
12:49
out of money and kind of
12:51
slow the coupon, slow the velocity
12:53
down as we approach that point.
12:55
Oh dear. That's a dangerous recipe.
12:57
I must add that I don't
12:59
think about it is available in
13:01
the UK at the moment. Is
13:03
it available in Canada? We are
13:06
only in the United States right
13:08
now. Sorry, Luke. So... In my
13:10
defence. This looks like a perfect
13:12
storm for me because you've both
13:14
got the kind of strong financial
13:16
components, so if you get it
13:18
wrong you lose money. And if
13:20
you get it long, then people
13:22
will waste their time going to
13:24
the shop, you know. in Britain
13:26
it's so small I can walk
13:28
to the shop. You know sometimes
13:30
I just open the window and
13:32
shout at them and tell them
13:35
what I want. But you know
13:37
I know when I was living
13:39
in the States and people maybe
13:41
drive for two hours to go
13:43
to Walmart. So this is this
13:45
is quite a quite a problem
13:47
you've got there. Yeah it's interesting
13:49
that you say that because right
13:51
when I joined the company I
13:53
was kind of put on. The
13:55
team, I was actually given, you
13:57
know, my tech body, my mentor
13:59
when I joined the company. This
14:01
was his project and as someone
14:03
knew in the company, it was
14:06
very, it was really overwhelming problem
14:08
space because basically these campaigns and
14:10
our application almost got like a
14:12
physical momentum to them. So if
14:14
you imagine trying to stop a
14:16
moving train, you can't just hit
14:18
the brakes and expect it to
14:20
stop on a dime. You have
14:22
to apply the brakes over some
14:24
distance to slow the train down
14:26
and that's really how the content
14:28
in the application is modeled. And
14:30
I'm not a physics person and
14:32
so it's really confusing. I mean,
14:34
it's a it's a twist right
14:37
on your classical inventory problem, right,
14:39
is what it kind of sounds
14:41
like. So the way that ACCA
14:43
came into this is is what
14:45
you were taking like what all
14:47
these requests from users and trying
14:49
to decide whether or not you
14:51
were going to, I guess, give
14:53
them the coupon or not or
14:55
something. Yeah, that's, that's, that's sort
14:57
of right. So we have an
14:59
event-based architecture. where our system, for
15:01
the folks who are familiar with
15:03
that, that means that basically your
15:05
system publishes events, which is data,
15:08
that signify that something just happens
15:10
of interest in the system. So
15:12
maybe like, you know, shopping cart
15:14
loaded is an event that you
15:16
might have in like a typical
15:18
inventory space or something like that.
15:20
So we have events that we're
15:22
interested in, like, content awarded, which
15:24
means that John went to the
15:26
store submitted or submitted or received
15:28
through the app. and got cash
15:30
back, so the content has been
15:32
awarded. So we listen for those
15:34
events in order to keep track
15:36
in real time of how much
15:39
budget is being used, and we
15:41
basically track that over time to
15:43
make a rough prediction about how
15:45
fast things are moving. And so
15:47
ACCA, sorry, John, to get back
15:49
to your original question, ACCA is
15:51
really good at streaming data, at
15:53
streaming large amounts, high volume data,
15:55
high volume data. And I bought
15:57
a, we'll get on the order
15:59
of 700,000. these content awarded events
16:01
per day, which seems like a
16:03
lot, but it's actually much lower
16:05
than I think what ACCA can
16:07
kind of deal with or is
16:10
designed to deal with out of
16:12
the box. Yeah, did you, so
16:14
did you consider alternatives? Did you
16:16
reject them for various reasons? And
16:18
I guess, so obviously ACCA didn't
16:20
work out for you, so you
16:22
must have picked something else that
16:24
you like better. And how did
16:26
you arrive at that new thing?
16:28
And what was that, if that
16:30
makes some sense? Yeah, perfect. So
16:32
yeah, we basically, this comes down
16:34
to some team issues again and
16:36
not an issue with ACCA. So
16:38
the team issue was basically that
16:41
at the start of this project,
16:43
we scaled up our team. Like
16:45
this is a lot of work.
16:47
We need to bring in some
16:49
artillery and we brought in a
16:51
new developer from outside the company
16:53
who is awesome. She's a rock
16:55
star. and had it was coming
16:57
from the ad product space and
16:59
with dealing with volume much volume
17:01
of streaming data at a scale
17:03
much higher than what we needed
17:05
or we're going to be dealing
17:07
with it in any near near
17:09
future and you know she was
17:12
coming from I believe in Akasha
17:14
and so she joins the team
17:16
we're excited to have her we
17:18
think she's a rock star I
17:20
mean she is a rock star
17:22
and She's like, this is a
17:24
perfect use case for ACCA. We're
17:26
like, okay, never heard of that,
17:28
but you know, we trust you.
17:30
You crushed our interview and you
17:32
think you're amazing. So yeah, that
17:34
sounds pretty good. And again, this
17:36
isn't a knock against ACCA. I
17:38
think this is just that in
17:41
our company, we have a ton
17:43
of infrastructure set up to support
17:45
the tools that our company has
17:47
sort of blessed that that that
17:49
are kind of frequently in use.
17:51
In fact, we have like a
17:53
name for that we call it
17:55
the paved road which is like
17:57
if you're an engineer, you have
17:59
a lot of autonomy about about
18:01
what you use, but if you
18:03
stay on the paved road, it
18:05
should be an easy path. And
18:07
ACCA, which is a, you know,
18:09
which use with Java or SCALA,
18:12
typically, is not, I-bought as paved
18:14
road. So we had to kind
18:16
of have a contentious meeting, a
18:18
contentious conversation with the architects at
18:20
Arbata and say, no, we really,
18:22
we believe in in our developer,
18:24
and we think that she knows
18:26
what she's doing, and we're ready
18:28
to, and we're ready to. sort
18:30
of make our bed and lay
18:32
in it. And they were like,
18:34
well, you know, as long as
18:36
you know that. So they let
18:38
us kind of, they gave us
18:40
just enough rope to, I forgot
18:43
how the rest of that goes,
18:45
to hang ourselves with. Okay, so,
18:47
so it sounds like you had
18:49
an advocate and that's kind of
18:51
how you landed on it. Where
18:53
did you go after you decided
18:55
that ACCA was the poor choice?
18:57
Like, what did you end up
18:59
with? Yeah, so this, and this
19:01
kind of gets into the next
19:03
problem, which was the silo, the
19:05
silo, the silo, the silo, the
19:07
silo, We're starting to work on
19:09
building this ACCA-powered race car of
19:11
a microservice to pull billing logic
19:14
out of our rails monolith. And
19:16
there's sort of two streams of
19:18
work. There's the development of the
19:20
ACCA microservice, which is, we were
19:22
writing, the reason Cotton, which is
19:24
the JVM, it's kind of a
19:26
nicer job. It's what Android apps
19:28
are written in. It's actually pretty
19:30
nice. So we have that work
19:32
going on. And then we have
19:34
to integrate. that microservice, sorry, into
19:36
the rails model. So I ended
19:38
up taking on a lot of
19:40
the integration work and the other
19:42
developer took on most of the
19:45
ACCA and Scotland work. So we
19:47
have these sort of two very
19:49
isolated pieces of work that are
19:51
siloed and then something terrible happened.
19:53
And I don't blame this person
19:55
at all because I wouldn't want
19:57
to be on my team anyway.
19:59
She decided that she was much
20:01
more interested in data engineering and
20:03
she moved to... different team in
20:05
the company. So, and that's actually,
20:07
you know, a great thing about
20:09
working at IBata. Like, we've got
20:11
tons of really cool problems, different
20:13
spaces, and people are almost encouraged
20:16
to move around to find things
20:18
that they're, that they like and
20:20
are good at. So, she made
20:22
this move, and now, now the,
20:24
the problem of using a framework
20:26
that none of us had experience
20:28
with and that the general company
20:30
didn't have a ton of experience
20:32
with really became self-evident, because now
20:34
there was, there was still work
20:36
left to work left to do.
20:38
on the microservice. And I'm just
20:40
a, I'm just a rails developer.
20:42
Like I had to go into
20:44
there and start ready Kotlin, start
20:47
reading the ACCA documentation and try
20:49
to wrap my head around what
20:51
this whole, you know, actor system
20:53
meant. And it was, it was
20:55
tough. And that's why I call
20:57
it a big mistake. Sorry, Dave.
20:59
You know, from my experience too
21:01
is that, yeah, Ruby is slow.
21:03
No, there's no getting around that.
21:05
when you compare to a compiled
21:07
language. But holy crap is it
21:09
fast too. You know, I have
21:11
a production application which processes over
21:13
500,000 active jobs every single day,
21:16
and it does it extremely quick.
21:18
I don't need it to be
21:20
faster. I mean, that's plenty fast.
21:22
On the current setup that it's
21:24
on, which is... two cores and
21:26
four gigs of RAM and we
21:28
have two servers dedicated to the
21:30
background job, so two VMs, it's
21:32
able to handle that load and
21:34
we don't have to worry about
21:36
it crashing or anything like that.
21:38
So I mean, that's good enough
21:40
for us. Now, imagine that it
21:42
would be able to double that
21:44
workload before we ever ran into
21:47
any kind of performance issues where
21:49
we needed to start scaling up.
21:51
Absolutely, and we were originally in
21:53
the monolith. The way the system
21:55
worked was it ran on a
21:57
background scheduled job using rescue and
21:59
the scheduled job. basically took roughly
22:01
45 minutes to run. So it was
22:03
running like kind of like a waterfall like
22:05
every 10 minutes and started a
22:07
new job that would take 45
22:09
minutes to run. And so going from
22:12
that to basically completely real time
22:14
is a huge improvement. And if
22:16
real time for 500,000 events per
22:18
day versus 5 million events per
22:20
day are different things. But if
22:22
you're at real time, it's
22:24
already this just enormous improvement.
22:26
over what we were working with, which is
22:29
like the 45 minute loop. So at
22:31
that point, and I guess I'll say another
22:33
thing, before I get into like
22:35
how we fixed my mistake, this
22:37
is actually getting to what Dave said.
22:39
This is a case of premature
22:41
optimization. We sort of didn't
22:44
do the back of the envelope math
22:46
well enough or didn't have a
22:48
clear picture of like, okay, this
22:50
is really like designed to handle
22:52
like literally a thousand times more
22:55
traffic than our best day. So, you
22:57
know, we didn't, that was, that was definitely
22:59
a mistake. We should have asked
23:01
that question and realized, okay, maybe,
23:03
maybe this is a little too much
23:06
horsepower, we don't need this, it's too much
23:08
trouble for what is, for what is buying
23:10
us. And on my end, also, I was
23:12
imagining, you know, getting all these
23:14
events, we call it, so the
23:16
microservice was producing like prediction events,
23:19
okay, so predicting every time a
23:21
piece of content should come down
23:23
and making an when it thinks that
23:25
should happen. And so I'm
23:27
imagining the monolith is listening
23:29
to these prediction events, subscribe
23:31
to an S&S topic or SQ,
23:33
and I imagine, you know, thousands and
23:36
thousands and thousands of events
23:38
every second, which is wait, way too
23:40
much. And so I was thinking of like
23:42
all these clever ways to do cashing and
23:45
like to try to figure out when can
23:47
I drop events, so I don't need to
23:49
hit the database. Like when can I, when
23:51
can I, how can I come up with
23:54
these clever ways? to only make round trips
23:56
to the database when I really need to.
23:58
And that added time to the... development
24:00
and it also added a ton of complexity
24:03
so that when are two systems one were
24:05
like okay let's turn them on let's see
24:07
what happens the first error that comes out
24:09
because of course there's going to be an
24:11
error when you first try it out that was
24:14
really hard to debug it was really hard
24:16
to understand like is this a caching issue
24:18
is this actually an issue with
24:20
the data coming from the microservice
24:22
like it was really hard to isolate that
24:25
And then that obviously moves into
24:27
the third problem, the third mistake
24:29
was that we made too many
24:31
changes at one time. So all these were
24:33
ways that I tried to shoot myself in
24:35
my own foot while working on this very
24:37
important project. Makes sense?
24:40
I'm not sure if I understand it,
24:42
but so you're saying there's kind
24:44
of two separate things going on
24:47
here. Firstly, you're moving to a
24:49
completely new technology. So you're taking
24:51
a large part of the app
24:53
out, you're putting it in a
24:55
micro service. It's not very micro
24:57
if you're doing, what, 700,000 things
24:59
a day. That's not a micro
25:01
service. This is a, this is,
25:03
this is a macro micro, micro
25:06
or Medcro. And the second thing
25:08
you're doing is you're actually changing
25:10
the whole interface. So you're
25:12
saying you're going from, you
25:14
previously had a rescue batch
25:17
job. And now he's saying, no, no, no,
25:19
we're not going to do batching, we're going
25:21
to do it all immediately. Yeah,
25:23
Luke, that's a really a student observation.
25:26
So we were changing structure and
25:28
we were changing behavior at the
25:30
same time, which is something, since that
25:32
point, I've really tried to avoid
25:34
doing, even at like a micro PR
25:37
level, if I have a PR that I'm going
25:39
to push up. It's either going to
25:41
add behavior, change behavior, or it's
25:43
going to change the structure of the
25:45
structure of the code. So in this case,
25:47
we did the two things at the same
25:50
time. And at multiple points, we
25:52
should have known, or in retrospect,
25:54
we should have known to pause
25:56
and verify, right? And if we
25:59
couldn't verify. take that failure as
26:01
feedback and iterate. And I think
26:03
that that's really what really strong
26:05
engineers, experienced engineers know to do,
26:07
make one change at a time
26:09
and verify. Like I have a,
26:11
I guess it's kind of like
26:13
when I run our spec, right,
26:15
or our spec feels like supernatural
26:17
to me. So every time I
26:19
hit my test suite, I'm like,
26:21
okay, I expect this to happen.
26:23
And like sometimes I'm right. And
26:25
then sometimes I'm wrong and that's
26:27
like really interesting too. But making
26:29
that initial guess of what's going
26:31
to happen is super important. And
26:33
I think we did a slow
26:35
down and stop and say, okay,
26:38
here's our guess as to what's
26:40
going to happen, here's how we're
26:42
going to verify it, and if
26:44
we can't verify it, here's like
26:46
the corrected action we can take.
26:48
Yeah. So I think you're hitting
26:50
it like one thing that's like
26:52
really important, right? is not necessarily
26:54
like to avoid mistakes because shoot
26:56
for whatever reason, they keep happening
26:58
to me, right? It's, are you
27:00
good at cleaning up, right? Are
27:02
you good at figuring out that
27:04
something's not right, something's not right,
27:06
something smells funny, whatever it is,
27:08
can you go back and, you
27:10
know, sweep up your mess? You
27:12
know, either push it across the
27:14
finish line because you're close enough,
27:16
or say actually this is the
27:18
wrong path. We should back up,
27:20
go to the last intersection and
27:22
go down the other way. So
27:24
I mean, it's definitely, yeah, I
27:26
mean, I can speak to experiences
27:28
too, where I was just like,
27:30
man, I really like missed all
27:33
the flags. And then I kept
27:35
missing more flags and just kept
27:37
going. And why are we surprised
27:39
that we were in a bad
27:41
place? Because I like ignored everything.
27:43
So I hear you, man. And
27:45
kudos for recognizing it at some
27:47
point and doing something about it.
27:49
Yeah, so what do we do
27:51
about it? Unfortunately, I, well not
27:53
unfortunately, it was a good, it
27:55
was a good learning experience, but
27:57
obviously my happy place is, is
27:59
deep in a, in our leg.
28:01
Rail's application, finding all the pathways
28:03
there, but I had to really
28:05
push myself, get out of my
28:07
comfort zone. I had to pick
28:09
up Colin. Luckily, Colin is like
28:11
a super friendly language, I think,
28:13
to get into, especially for folks
28:15
who are coming from Ruby, because
28:17
I think that there's like kind
28:19
of like an emphasis on syntax,
28:21
on like, syntactic sugar, on like,
28:23
making the code actually like readable
28:25
and look nice, whereas that's not
28:27
always the case with all JVM
28:30
languages. So in that case, in
28:32
that sense, it was kind of
28:34
friendly. Also at Ibata, we were
28:36
able to like organize kind of
28:38
a learning group. So there were
28:40
lots of folks who were new
28:42
to Ibata or new to Colin
28:44
who were kind of trying to
28:46
solve these similar problems. So we
28:48
made a study group, we found
28:50
cool online coursework, we helped each
28:52
other accountable for making sure that
28:54
we were making progress on those
28:56
things. And I started writing Colin
28:58
in the microservice to. try to,
29:00
like you said, push across the
29:02
line. If we need to get
29:04
this across the line, and then
29:06
we can kind of circle back
29:08
and deal with some of the
29:10
underlying problems. And that's important because
29:12
like as engineers, like at the
29:14
end of the day, we're trying
29:16
to deliver value to the businesses
29:18
that we that we work for
29:20
and not just like trying out
29:22
any technology or like optimize what
29:25
what what technological solution should we're
29:27
we're implementing. So just to clarify
29:29
what what you're what you're saying
29:31
you kept. You kept ACCA. You
29:33
just pushed it across the finish
29:35
line despite all your problems. That's
29:37
how you resolve it. Okay. So
29:39
we had problems with it and
29:41
we decided, let's get this thing,
29:43
like we're close enough, even with
29:45
the problems, even with our lack
29:47
of understanding. We're close enough that
29:49
a total rewrite right now would
29:51
put us back a long way
29:53
and upset the business. So let's
29:55
push it across the line. and
29:57
then we can circle back and
29:59
figure out what to do. So
30:01
that was that delivering that value
30:03
even though it kind of felt
30:05
yucky, even though we knew that
30:07
there were things that were going
30:09
to need to change over the
30:11
long term, bought us some time
30:13
and brought us some credibility in
30:15
the organization. And I want to
30:17
circle back to the point you
30:20
made about moving too quickly or
30:22
too many changes happening at one
30:24
time. And I think that's something
30:26
that a lot of developers might
30:28
start to experience soon with the
30:30
whole. removal of jquery from bootstrap
30:32
five. So no, not my jquery.
30:34
No. Sorry. So the idea is
30:36
that bootstrap five no longer has
30:38
the jquery dependency. So you might
30:40
plan to upgrade your rails application.
30:42
the CSS framework from bootstrap for
30:44
to bootstrap five. And you might
30:46
say like, hey, well, why we're
30:48
making this change? Why don't we
30:50
go ahead and rewrite a lot
30:52
of our JavaScript that was also
30:54
JQI dependent? And so I would
30:56
say, instead of doing that, do
30:58
one thing. Either first, remove all
31:00
your JQI dependency within your application
31:02
and just have JQI be a
31:04
dependency of bootstrap. And then in
31:06
another iteration, upgrade your bootstrap version,
31:08
removing then J-queary entirely, or do
31:10
it vice versa, where you do
31:12
your bootstrap upgrade first, and then
31:14
you do your J-queary removal from
31:17
your application as a dependency. But
31:19
trying to do both side by
31:21
side, it's too big of a
31:23
task. You know, for one person
31:25
or one team to do right
31:27
away. I would just handle one
31:29
thing at a time, and moving
31:31
slower, you're going to say, okay,
31:33
what broke this? Was it the
31:35
new bootstrap framework that broke this
31:37
or was it our j-query rewrite?
31:39
So that way you're going to
31:41
be able to identify a lot
31:43
more problems quicker before they are
31:45
reported to you by the customer?
31:47
Absolutely. I think the most experienced
31:49
engine... one of the best engineers
31:51
I've worked with, his name is
31:53
Justin Hart, he was the, like,
31:55
did the first commit on the,
31:57
on the monoth that I work
31:59
on, and every time I work
32:01
with him, that is always my
32:03
experience, like, he is, like, we're
32:05
making this change, and we're going
32:07
to expect, and we're making this
32:09
change, and we're going to expect,
32:12
and we're going to do it,
32:14
and I'm always like, oh, why
32:16
don't we do this, this, this,
32:18
this, and this, and this, and
32:20
this, and this, and this, and
32:22
this, and this, and this, and
32:24
this, and this, and this, and
32:26
this, and this, and this, and,
32:28
and, and, and, and, and, and,
32:30
and, and, and, and, and, and,
32:32
and, and, and, and, and, and,
32:34
and, and, and, and, and, and,
32:36
and, and, and, and, and, and,
32:38
and, and, and in the projects
32:40
that I'm doing now, realizing, like,
32:42
okay, this thing that I want
32:44
to do, it's actually like four
32:46
different things, and I'm going to
32:48
do the first, the first thing
32:50
first, verify it, and then move
32:52
on from there. If you, all
32:54
your loved ones, are affected by
32:56
the removal of jquarie from Bootstrap,
32:58
why not check out the excellent
33:00
calls from Dev Chat, Dev Chat,
33:02
TV? You don't know JavaScript yet
33:04
30-day challenge available with the link
33:06
in the episode of this? Just
33:09
trying to just try to keep
33:11
a ship afloat man. Come on.
33:13
Come on. Oh, I was good.
33:15
So this goes along for me
33:17
with. No, no, no, no, no,
33:19
no, no, no. No, we have
33:21
to do jquery now because this
33:23
is really affecting me. I mean,
33:25
this is terrible news. I literally
33:27
can't write JavaScript without putting a
33:29
dollar sign in front of everything.
33:31
You can still have a dollar
33:33
sign. It just need to sign
33:35
something to the dollar sign. That's
33:37
all. One of the reasons I
33:39
started using Google, was because it
33:41
has a little dollar sign in
33:43
front of a data structure and
33:45
that kind of really makes me
33:47
feel at home. Plus, you know,
33:49
it feels like money, you know,
33:51
when I type the dollar sign
33:53
in, I feel like, yeah, this
33:55
is going to make me a
33:57
millionaire. Oh, I'm sorry, Luke. So
33:59
I guess, while we're on JavaScript,
34:01
I think another premature optimization, with
34:04
react. the dash at what back
34:06
equals react. Just thought through that.
34:08
in there for the arbitrary Bash
34:10
on React. I do like stimulus.
34:12
I do feel like I do
34:14
feel like we can we can
34:16
let React's go now. Yeah, I
34:18
mean, I don't know, have you
34:20
all checked out the Base Camp's
34:22
email? Hey, hey.com. Oh yeah. Yeah,
34:24
what do you think? Yeah, so
34:26
I've been using it and obviously
34:28
I'm a Base Camp fan boy,
34:30
but I think it's it's pretty
34:32
amazing what. what they're able to
34:34
do with, just HDML over the
34:36
wire for the most part, and
34:38
not relying on some of the
34:40
frameworks that have come out recently.
34:42
Also, I think it's super interesting,
34:44
like the 2020 Rubian Rail Community
34:46
Survey, if you look, the one
34:48
put out by Planet, Argonne, if
34:50
you look at like what JavaScript
34:52
libraries people are using, so I
34:54
was expecting that number one would
34:56
be react, maybe number two would
34:59
be, I don't know, or like,
35:01
Ember, or maybe, but number one
35:03
on there is j-quarie. And it's
35:05
like we're all in this in
35:07
this jquery world and it's not
35:09
it's not bad. I love your
35:11
query. So so for all of
35:13
you who along with Luke are
35:15
mourning jquery. I'm telling you stimulus
35:17
go check it out. Try to
35:19
understand it. I don't have an
35:21
answer. That's fair. I thought I
35:23
found it pretty easy. I thought
35:25
it gave me everything that I
35:27
felt like I was getting from
35:29
jquery before, which is a thing
35:31
happened on the page. And because
35:33
that thing happened, I mean, Jesse,
35:35
talking about event-based architecture here, come
35:37
on, this is exactly what JavaScript
35:39
is, right? And JQI especially, right?
35:41
Stimulus is exactly that. Event happens,
35:43
do something else because this thing
35:45
happened, right? Just saying, if you
35:47
love that event-based architecture style, stimulus
35:49
is that. It's just way prettier.
35:51
And I found it a lot
35:53
easier to use. And because I
35:56
don't like dollar signs, I was
35:58
happy about it. Yeah, look, if
36:00
you want a bunch of different
36:02
stimulus JS tutorials, check out. Drrifter
36:04
Ruby, man. I have a whole
36:06
bunch on there. It's a big
36:08
plug episode. Everyone quickly plugged their
36:10
thing. Do you know what? Actually,
36:12
Dave, I have already checked it
36:14
out and I still don't understand
36:16
it. So I need to check
36:18
it out again. It's definitely me.
36:20
I tell you what a problem
36:22
is, right? I've been leaning on
36:24
J query for so long and
36:26
I'm talking about 10 years, right?
36:28
and it's not just that I've
36:30
got my whole arsenal of weird
36:32
front-end stuff that I can pull
36:34
in and replacing that big long
36:36
list of handy widgets I know
36:38
will solve this problem is the
36:40
is what I'm lacking. So yeah
36:42
basic gum stuff fine you know
36:44
yes six or a way but
36:46
if I want to do something
36:48
weird if I want to do
36:51
something fancy The whole point of
36:53
stimulus, this doesn't have weird fancy
36:55
stuff, it's clean. So, so now
36:57
that we've decided that Jaycaree is
36:59
dying and that hopefully our morning
37:01
period is almost over. It is
37:03
dead. I know it's dead. I'm
37:05
just finding it hard to cope.
37:07
Okay, fair. So Dave, you earlier
37:09
had me a little bit on
37:11
this train and I kind of
37:13
wanted to go back to it
37:15
or whatever, talking about like changing
37:17
multiple things. Because there's so many
37:19
places where we can find ourselves
37:21
tricked or just like, I don't
37:23
know, seduced into it, right? Where
37:25
it just seems like the right
37:27
thing to do. So my, the
37:29
thing that like, I like to
37:31
tell people, because it made total
37:33
sense to me when I first
37:35
heard it, was, you know, Kemp
37:37
Beck's like, first you make the
37:39
change easy, then you go and
37:41
make the easy change, right? And
37:43
the important thing about that, right,
37:46
right, right, there are steps here,
37:48
right. Dude, engineering is all about
37:50
taking those like tiny steps. And
37:52
like you said, testing, right? And
37:54
we all know what happens when
37:56
we change a bunch of things
37:58
at once. And then we all
38:00
do it. And then we. Yeah,
38:02
so we go down the road
38:04
of mistakes. Engineering is a, it
38:06
requires self-discipline and whenever we don't
38:08
have self-discipline or whenever we, you
38:10
know, just break it because for
38:12
human beings, that stuff happens. I
38:14
almost feel like it's, I go
38:16
into like meditative state almost, it's
38:18
kind of like the flow state
38:20
kind of, and there are times
38:22
where it's like, like, I pick
38:24
up the story and say, okay,
38:26
yeah, this is easy, I can
38:28
just kind of like half think
38:30
about it about it and do
38:32
it and do it. And when
38:34
that doesn't work, which it almost
38:36
never dies, I have to like
38:38
get into this like very focused,
38:40
I'm making this one change verifying
38:43
state. It's almost like the cartoon
38:45
avatar going into your avatar state,
38:47
if you if you guys know
38:49
that amazing cartoon. Yes, I'm familiar
38:51
with it. Luke, I highly recommend
38:53
it. What's it called? Avatar in
38:55
the last air vendor, I think
38:57
came out like 10 years ago,
38:59
15 years ago. I was the
39:01
guy with a face, the face
39:03
tattoo. Yeah, exactly. You know exactly
39:05
what... I will check it out.
39:07
I've seen that art too. He
39:09
looks like he's really angry. Exactly.
39:11
He's got no hair, right? Yeah,
39:13
Baldhead. Yep. That's the guy. Yeah,
39:15
that's the guy. Yeah, all right.
39:17
Yeah, that's the guy. Yeah, all
39:19
right. All right. I'm a huge
39:21
anime watch too. That's a dangerous
39:23
gap in my knowledge. Yes, so
39:25
anyway, it's like you go into
39:27
the state. the first. And it
39:29
and unfortunately for me maybe it's
39:31
because of my age or whatever
39:33
but it getting into that really
39:35
focused state actually that costs something
39:38
right it takes like a little
39:40
bit out you can't maintain that
39:42
state forever there's like a manopool
39:44
almost of how long you how
39:46
long for me I can be
39:48
in that extreme focused state and
39:50
I think that when there are
39:52
times where I look at a
39:54
problem I'm like do it like
39:56
I almost like myself do I
39:58
need to be in this highly
40:00
focused day to get this thing
40:02
accomplished. And more often than not,
40:04
answer is yes but my initial
40:06
answer is no and so I
40:08
end up wasting time by not
40:10
doing things as systematically as they
40:12
need to get done. Am I
40:14
alone on this? Nobody else goes
40:16
into Qatar State when they when
40:18
they code? Go ahead. I find
40:20
that yeah people talk about this
40:22
flow state and I was I
40:24
was not a believer for a
40:26
while until I got something really
40:28
hard to work on. you know,
40:30
and it's those problems where you're
40:33
at the kind of limit of
40:35
what you can do when someone,
40:37
you're thinking, can I actually write
40:39
this? That is when I find
40:41
you get these kind of periods
40:43
of intense concentration and obviously you
40:45
don't want to be, you know,
40:47
the edge of your ability all
40:49
the time, you want to kind
40:51
of line up the nice easy
40:53
jobs or things tend to go
40:55
disastrously wrong. But one thing I
40:57
have found is that, you know,
40:59
when you're doing these really hard
41:01
problems, and you're like, can we
41:03
do it? You know, is it
41:05
possible? You always have to come
41:07
back and redo it. Once you
41:09
prove it's possible, then you have
41:11
to hit it again, and then
41:13
you come up the one. So
41:15
all of the stuff I've done
41:17
in a kind of state-intensive concentration
41:19
tends to get thrown away. But
41:21
it moves you forward down the
41:23
old, down the road, down the
41:25
road. And it's totally cool to
41:27
write really terrible code during naive
41:30
implementation. That's not the point of
41:32
it. The point is to get
41:34
from having nothing to having a
41:36
working thing. The important thing is
41:38
that after your naive implementation you
41:40
decide, you know, decide whether it's
41:42
worth refactoring when you're going to
41:44
refactor all that kind of stuff.
41:46
Yeah, I love that idea of
41:48
a naive implementation. I think the...
41:50
ACCA microservice was our naive implementation.
41:52
We didn't consider the scale at
41:54
all. We didn't consider the makeup
41:56
of the team changing. And as
41:58
a result, when we went back
42:00
to fix the naive, right when
42:02
we wanted to get rid of
42:04
the double loop, so whatever. We
42:06
ended up moving to Java, so
42:08
from Copland to Java and from
42:10
ACCA to camel. And the reason
42:12
that those tools made sense is
42:14
because they were very common in
42:16
our company. And what we didn't
42:18
have to reinvent the wheel. We
42:20
weren't seeing errors for the first
42:22
time in the entire company. It
42:25
was sort of a knowledge base
42:27
to draw from. So the current
42:29
state is that we have. Java
42:31
Camel Spring microservice talking to the
42:33
rails monolith. It's very stable. It's
42:35
performing super well now. And yeah,
42:37
I mean, getting, I guess a
42:39
question I have is like, how
42:41
can we speed up the process
42:43
of getting from our naive solution
42:45
to the more learning solution? I
42:47
think in my opinion, if I
42:49
had an answer for that, I
42:51
would be a super wealthy person.
42:53
Because in my experience, usually what
42:55
happens is when you get to
42:57
the point that you're calling something
42:59
a knife solution, right? It's usually
43:01
because you recognize that there's a
43:03
problem with it, right? And one
43:05
of the things that's going on,
43:07
I feel like, is that you're
43:09
kind of burning yourself out on
43:11
the problem at that point. When
43:13
you sort of have this realization,
43:15
you're also at the point that
43:17
you're kind of burning yourself out
43:19
in this problem. So if you
43:22
as a... as an organization don't
43:24
have the resources to sort of
43:26
like swap out people, you know,
43:28
bring somebody in the fresh, things
43:30
like that, right, or kind of
43:32
go back to a huddle and,
43:34
you know, somehow become re-energized. Like
43:36
all the things that we can
43:38
do are almost all like social
43:40
interactions, not engineering interactions, right? And
43:42
so if you have a culture
43:44
where you can kind of deal
43:46
with that, I feel like people
43:48
can... kind of turn around and
43:50
refactor and make reasonable choices or
43:52
whatever but If you don't, like
43:54
I feel like it's really hard.
43:56
It's really hard for you as
43:58
somebody who just burned yourself out,
44:00
pushing something across the finish line
44:02
that was really hard, to then
44:04
turn back around and be like,
44:06
I'm throwing you out and I'm
44:08
gonna redo this really hard problem
44:10
again. Right? Like that's just a
44:12
really hard thing to do, I
44:14
think. It's interesting that you say
44:17
that because at the point that
44:19
we made that decision, the problem
44:21
didn't seem hard anymore. At the
44:23
point that we were like... you
44:25
know, we can just do this
44:27
in job and camel, we had
44:29
wrapped our heads around the problem
44:31
enough that we really felt like
44:33
it wasn't hard anymore. And maybe
44:35
that's what it takes. You also
44:37
said a really important word there,
44:39
which is we, right? So one
44:41
of the things that you did
44:43
as a company to recover from
44:45
this problem is you went back
44:47
to this huddle and you said,
44:49
hey, I made some mistakes. And
44:51
then your team said, that's okay,
44:53
Jesse. we as a team are
44:55
taking ownership for this right like
44:57
and we as a team are
44:59
going to fix this right like
45:01
that that's what a lot of
45:03
that communicates right here and when
45:05
you do that like that's one
45:07
of those re-energizing moments or you
45:09
know things and then those decisions
45:12
become a lot easier in my
45:14
experience it breaks my heart every
45:16
time I have a have a
45:18
get commit with a kind of
45:20
more lines removed than added oh
45:22
man those are the proudest days
45:24
right right I know some people
45:26
like to take the code out
45:28
and they're like, oh, I go
45:30
knocked out, you know, loads of
45:32
that repeated code. I just think,
45:34
why couldn't I get it right
45:36
the first time? That's interesting. The
45:38
person who taught me how to
45:40
code, one of the first pieces
45:42
of advice that he gave me
45:44
was that you should write a
45:46
lot of code and throw a
45:48
lot of code out. And that's
45:50
how you'll get better at coding.
45:52
That is very, very sensible advice.
45:54
Do I, the context is a
45:56
big mistake. Now, just to be
45:58
clear, this big mistake has had
46:00
a happy ending. So this isn't,
46:02
this isn't the kind of. a
46:04
big mistake I got fired. This
46:06
is a big mistake. We pulled
46:09
through it and it all worked
46:11
out. Am I right? Thankfully. Yeah.
46:13
So I think so we did
46:15
a couple of things I think
46:17
that helped us. So the first
46:19
is, as John said, we were
46:21
open about these things. We didn't
46:23
try to hide that things where
46:25
I'm going as well as we
46:27
had wanted them to. And I
46:29
think that I bought a has
46:31
a pretty strong culture in the
46:33
sense that We're not trying to
46:35
throw people under the bus in
46:37
engineering. If something crashes, it's not,
46:39
who's going to get fired. It's
46:41
like, okay, how do we learn
46:43
from this? This is a mistake
46:45
that costs us some money. How
46:47
do we make sure that money
46:49
is actually teaching us something? So
46:51
that was part of it. And
46:53
then I think also we did
46:55
a good job of communicating to
46:57
external stakeholders. We communicated to the
46:59
finance team who are kind of
47:01
one of the main, main consumers
47:04
of the data that we were
47:06
producing. and really went through in
47:08
detail. Here's what we're at, here's
47:10
the timeline, like updating them, we
47:12
were checking in with them all
47:14
the time, and just keeping expectations
47:16
in line I think really helped
47:18
us out. So even though we
47:20
delivered a little bit later than
47:22
I think we thought we would
47:24
at the onset of the project
47:26
because we were able to communicate
47:28
that, we were not fired. And
47:30
yeah, I mean, not only that.
47:32
We've hired more people, we're still
47:34
hiring, and if you're thinking about
47:36
getting into the mobile coupon space,
47:38
there's a ton of really cool
47:40
problems, even if you're not passionate
47:42
about mobile coupons, and you might
47:44
get to talk to me in
47:46
the interview process, which will be
47:48
fun. Speaking of interviews, I understand
47:50
that you have a project which
47:52
you call Mena Swan interviewing. That
47:54
is... I've no idea what Minnesuan
47:56
sounds, but I see a lot
47:59
of people saying it in the
48:01
Ruby community, but I just, just
48:03
not, it's one of these weird
48:05
in jokes I think they have
48:07
in the Ruby community. it's so
48:09
nice and so i know i
48:11
know i know try humor luke
48:13
never pick up on your sarcasm
48:15
good lord i'm just over here
48:17
like like dying everything and that's
48:19
the what was it Dave sorry
48:21
it was seriously yeah go on
48:23
Matt's it's nice and so are
48:25
we yeah what the best thing
48:27
about reviews community it's a it's
48:29
a really It's a really great
48:31
language and that's a really strong
48:33
committee, really great events, even though
48:35
obviously the events this year have
48:37
been a bit difficult. So how
48:39
are you carrying that culture, that
48:41
tradition over into the interviewing process?
48:43
What's your gambit? Yeah, so maybe
48:45
everybody has experience or a lot
48:47
of folks having experience in, let's
48:49
just say, a not mean us
48:51
one interview interview. an interview that
48:53
maybe is a little more hostile
48:56
than we'd like and I think
48:58
I think a lot of us
49:00
have experienced kind of broken interviews
49:02
where it feels more like the
49:04
person on the other side of
49:06
the table is trying to prove
49:08
how much smarter they are or
49:10
how much better they are coding
49:12
than I am. And that's not
49:14
nice. Another thing that's not nice
49:16
is asking someone to do an
49:18
inordinate amount of work outside of
49:20
work. that's not paid in the
49:22
form of like a take-home project.
49:24
So I've done take-home projects that
49:26
have taken me entire weekends, multiple
49:28
days, and that's uncompensated work, and
49:30
that can bias your process against
49:32
people who have outside of work
49:34
commitments like families, and just, you
49:36
know, who don't want to be
49:38
working all the time. So I
49:40
thought... it would make sense to
49:42
kind of take the best part
49:44
of the Ruby community, this idea
49:46
that Matt is nice and so
49:48
we are nice and apply it
49:51
to interviewing. Let's actually be nice
49:53
to the people that we potentially
49:55
could be working with. And the
49:57
pandemic has been terrible in so
49:59
many ways, but it did offer
50:01
us this opportunity to kind of
50:03
dramatically rethink what our interview was
50:05
going to look like, because we're
50:07
not coming into the office. Everything
50:09
has to be remote. And basically
50:11
our HR team and our leadership
50:13
are like, how can we do
50:15
this? We've only been accustomed to
50:17
bringing people in, asking them super
50:19
tricky things that they have to
50:21
wipe word. How can we translate
50:23
this? to a remote interview. And
50:25
this is what I proposed and
50:27
this is like what we landed
50:29
on, which is an interview not
50:31
meant to trick the interviewee. It's
50:33
an interview meant to simulate what
50:35
the first couple days of work
50:37
is going to look like. And
50:39
it's supposed to give us as
50:41
an organization a sense of how
50:43
much we would enjoy this person
50:46
as a colleague, how successful they'll
50:48
be. And the message that we're
50:50
always trying to send is not,
50:52
hey, I'm so much smarter than
50:54
you. because I understand recursion or
50:56
because I understand how to do
50:58
whatever this type of model this
51:00
type of data structure. The message
51:02
is you're going to be successful
51:04
on our team and you're going
51:06
to like working with us and
51:08
we're going to like working with
51:10
you. So the way that we
51:12
do that is basically by giving
51:14
the person a sample of code
51:16
from our domain and it's highly
51:18
simplified and it's not and we
51:20
ask them to just read the
51:22
code and we say what is
51:24
this doing. What do you like
51:26
about this code? What do you
51:28
not like about this code? And
51:30
it's not a bug finding adventure.
51:32
We're not asking them to find
51:34
where an error is going to
51:36
be secretly raised or why a
51:38
test is failing. That's kind of
51:40
beyond, like you can't really do
51:43
that in a 20 or 30
51:45
minute conversation. We want to hear
51:47
how this person would approach an
51:49
alien code base, which is what
51:51
their first task is going to
51:53
be on the job. Then we
51:55
present them with some data, you
51:57
know, some award events from our
51:59
from our system. And we asked
52:01
them to manipulate that data with
52:03
a pretty simple. You even tell
52:05
them what the algorithm is. And
52:07
we ask them to code it.
52:09
And we say specifically, we don't
52:11
care about the answer here. The
52:13
answer is not interesting. We just
52:15
told you what the answer is.
52:17
We actually want to see what
52:19
it looks like when you code.
52:21
What's your approach? Are you systematic?
52:23
Are you making guesses about what
52:25
should happen and checking yourself? Those
52:27
are things that we're looking for
52:29
and we're not looking for some
52:31
for to see. Do you know
52:33
this random algorithm from your... from
52:35
your computer science education that you'll
52:38
never use as a web developer
52:40
at Iban. So those are the
52:42
big pieces and I'm stoked because
52:44
I got invited to talk at
52:46
Ruby Conf, which is coming up
52:48
in November, where I'm going to
52:50
be kind of outlining this. You
52:52
all got a preview of the
52:54
content there, exclusive to Ruby Rhodes.
52:56
Awesome. I'm definitely curious, as you
52:58
guys implement this, like, when you
53:00
kind of come back and say,
53:02
well, this didn't work or this
53:04
is like, like, this is how
53:06
we sort of had to come
53:08
up with a way to, you
53:10
know, because this is a subjective
53:12
thing, this is how we came
53:14
up with a way to make
53:16
this more objective than it originally
53:18
was, you know, and that helped
53:20
us, like definitely interested in seeing
53:22
this. I mean, all of you,
53:24
all of the pain points that
53:26
you're talking about, right, all this
53:28
homework that we have, all these,
53:30
you know, coding challenges that we
53:32
do, I mean, we, we're very,
53:35
I feel like as a community,
53:37
we talk about how well, where
53:39
we're where we're where we are.
53:41
that they don't work. But we
53:43
don't have alternatives yet. And so
53:45
people continue to use them regardless
53:47
because they're like, well, I don't
53:49
know what to do. And people
53:51
who are lost, you know, just
53:53
run back to where they came
53:55
from a lot of times, right?
53:57
It's like the squirrel. It's like
53:59
in the middle of the street
54:01
and the cars coming. It's like,
54:03
shoot, I gotta go all the
54:05
way back. So I kind of
54:07
feel like we do a lot
54:09
of that still. Yeah, there have
54:11
been various things like, there have
54:13
been various things like. they have
54:15
you come and spend like I
54:17
remember if it was like a
54:19
day or whatever, or half day,
54:21
but like a lot of time
54:23
with them, pairing, right? I know
54:25
that boot camp does that as
54:27
well, or base camp, sorry, wow,
54:30
whatever. Base camp does that as
54:32
well, or something similar. Though, actually,
54:34
I remember, they had an article
54:36
about they did some homework or
54:38
something recently, whatever. I thought base
54:40
camp does that as well, or
54:42
something similar. So. I'm super interested
54:44
to see all this turns out.
54:46
Yeah, I mean, so far, you
54:48
know, obviously hiring has been slower
54:50
than typical for iBata, but we
54:52
are still hiring. And so far,
54:54
the feedback from candidates has been
54:56
really interesting because, you know, we'll
54:58
get unsolicited emails about how much
55:00
people like the process and how
55:02
they hope that this is the
55:04
direction that the industry goes in.
55:06
A lot of folks who are
55:08
interviewing with us are interviewing at
55:10
other places as well. And I
55:12
see this as like a competitive
55:14
advantage for us, right? Does this
55:16
buy us like $10,000 in salary
55:18
or $5,000 in salary or something
55:20
like that? Like, does this make
55:22
our company more, you know, once
55:25
you get to a certain point,
55:27
there's like diminishing returns on all
55:29
these different levers that a company
55:31
can offer to a developer? And
55:33
I think that this is maybe
55:35
an unexplored lever or a lever
55:37
where there's a ton of room
55:39
to gain. And when someone goes
55:41
through our process and comes out
55:43
feeling like... hey I'm gonna I'm
55:45
gonna kick butt there the people
55:47
there are super nice they didn't
55:49
make me feel like an idiot
55:51
and they contrast that with other
55:53
interview experiences they've recently had hopefully
55:55
that that will play in our
55:57
favor that is certainly not the
55:59
current approach to coding interviews I've
56:01
been hearing recently mill more people
56:03
talking about make how to make
56:05
coding interviews harder if you go
56:07
on something like hacker news you
56:09
know they discuss which framework they
56:11
need to insert under the fingernails
56:13
of potential applicants. here if you
56:15
go to Facebook now and apply
56:17
for a job then they you
56:19
have to bring along your PhD
56:22
in computer science they then burn
56:24
it in front of you mix
56:26
it into old coffee and make
56:28
you drink it as part of
56:30
the interview process so it's really
56:32
I think it's really something that
56:34
the tech community needs we have
56:36
been doing a few episodes about
56:38
trying to make community more inclusive
56:40
trying to bring in people trying
56:42
to keep people in and that
56:44
sounds like a really great idea
56:46
for a talk you know why
56:48
don't we be be the the
56:50
nicer to people trying to get
56:52
the most out of them during
56:54
interviews and sort of subjecting them
56:56
to torture. I love that image
56:58
of shoving a framework under someone's
57:00
fingernails luke, but the thing the
57:02
thing that I noticed and I've
57:04
done a lot of interviews I've
57:06
done I would say easily 200
57:08
interviews over the past two years
57:10
we do a ton of hiring
57:12
so it's crazy and the thing
57:14
that I noticed is that when
57:17
we were asking people to whiteboard,
57:19
right, to answer these kind of
57:21
tougher algorithm questions, I didn't always
57:23
see a one-to-one correlation between the
57:25
people who crushed that kind of
57:27
question and the people who I
57:29
really enjoy working with in either
57:31
direction, right? They're false positives and
57:33
false negatives. And I just found
57:35
there to be way too much
57:37
noise in that type of diagnostic
57:39
for me to really make a...
57:41
a strong decision that I felt
57:43
confident with that proved out over
57:45
time. And I'm hoping that this
57:47
is a remedy for that. Yeah,
57:49
I mean, you always have to
57:51
check to make sure that whatever
57:53
test you're giving, right, like is
57:55
that you have to decide what
57:57
you're testing for and you have
57:59
to say, is the question that
58:01
I'm asking actually testing for the
58:03
thing that I'm testing for? And
58:05
too often, we jump to this
58:07
conclusion that, oh, yeah, this sort
58:09
of this sort of is related,
58:12
therefore it'll let me know. You're
58:14
making a subjective judgment call again
58:16
and calling it. So, yep, it
58:18
is, it is a thing that's
58:20
very painful. And maybe, maybe we
58:22
should, we should focus a little
58:24
bit on this in the future
58:26
and have a more in-depth chat
58:28
about this. I feel like that
58:30
would be an interesting subject. Yeah,
58:32
there was a Jazz Comp talk
58:34
last year. I believe the guy's
58:36
name is Eric, I'll throw it
58:38
in the, in the chat, and
58:40
second, he's from Test Double. And
58:42
he talked about, Test Double, like,
58:44
like, a really consultancy, based on
58:46
Columbus, I believe. And he talked
58:48
about their hiring process and more
58:50
in the sense of our goal
58:52
is to build a process that
58:54
lets candidates show off their strengths
58:56
and as opposed to helping us
58:58
find their weaknesses. And that's how
59:00
I've really informed our process that
59:02
I bought it. We're trying to
59:04
find people's strengths and trying to
59:06
figure out where they're going to
59:09
be able to make the most
59:11
impact in our company. Yeah, I
59:13
have gone for the past life.
59:15
I don't know, four or five
59:17
rails comps. I've gone to basically
59:19
every single talk that was sort
59:21
of like related to the subject.
59:23
I do, I care about it
59:25
quite a bit and I just
59:27
kind of hope that we get
59:29
to a better place. It's, yeah,
59:31
like I said earlier, my feelings
59:33
on this I think are basically
59:35
what I said earlier that I
59:37
think that a lot of people
59:39
are thinking about this. And I
59:41
just don't think there's a clear
59:43
answer. I think we're going to
59:45
get. a little better. Yeah. Well,
59:47
hey, looks like we're coming up
59:49
on the hour, so we need
59:51
to move things along. Jesse, if
59:53
people want to get in touch
59:55
with you, where should they go
59:57
in line and look? I would
59:59
say you can find me on
1:00:01
Twitter. I tweet from planet efficacy.
1:00:04
So if you can spell that,
1:00:06
you can find me. And you'll
1:00:08
find a lot of interesting ruby
1:00:10
contents, political outrage, and Vermont's progressive
1:00:12
rock. on that Twitter stream. Awesome.
1:00:14
Well, let's go ahead and move
1:00:16
over into. some picks look you
1:00:18
want to kick us off I
1:00:20
would my first pick is a
1:00:22
version of Windows 10 a bit
1:00:24
of a strange thing to pick
1:00:26
on a three rubs poke files
1:00:28
but this is called Windows 10
1:00:30
a mealyarated edition I found it
1:00:32
featured on the popular YouTube channel
1:00:34
a lot long ago and this
1:00:36
is a version of Windows temple
1:00:38
to spyware taken out which also
1:00:40
incredibly boosts the responsibility and performance
1:00:42
because it's not doing any Asink
1:00:44
network calls back home in the
1:00:46
background if you know what I
1:00:48
mean. This is the first operating
1:00:50
system I've ever found where to
1:00:52
download it I had to get
1:00:54
a bit torrent link from a
1:00:56
telegram channel. So if you want
1:00:58
some excitement in your operating systems
1:01:01
check out Windows 10. an ameliorated
1:01:03
edition. Never seen anything like it.
1:01:05
I just wanted to confirm something
1:01:07
really quick, Luke. Is this a
1:01:09
legal version of Windows 10? It's
1:01:11
got quite a big section on
1:01:13
Legality on the website. Okay. The
1:01:15
website does make it clear that
1:01:17
you do need to have a
1:01:19
Windows 10 license in order to
1:01:21
legally use the Windows 10 ameliorated
1:01:23
edition. I mean, come on, Pitorant
1:01:25
Link through a telegram channel. Wow!
1:01:27
That's quite a... Anyway, it's quite
1:01:29
troubling. It's a cool little project.
1:01:31
There's lots in the FAQ about
1:01:33
their rationale behind it, and it
1:01:35
does fly when it runs. It's
1:01:37
really quick. I heard there were
1:01:39
some issues with it, with not
1:01:41
being able to do certain things,
1:01:43
because it can't call home to
1:01:45
Microsoft. Even some like... simple rudimentary
1:01:47
things that you would think that
1:01:49
would be possible but just kind
1:01:51
of breaks it. Yeah, I mean
1:01:53
you could call it Windows 10
1:01:56
lobotomized. I mean there's barely anything
1:01:58
there at all, but it's it's
1:02:00
Oh, it's a lot of fun.
1:02:02
It flies doing nothing. Awesome. Well,
1:02:04
John, you wanna do some picks?
1:02:06
Yeah, so I have a different
1:02:08
pick this week too. You may,
1:02:10
by the time this comes out,
1:02:12
I have no idea if people
1:02:14
are even gonna still be playing
1:02:16
this game, but I have been
1:02:18
playing and streaming and absolutely having
1:02:20
a blast playing. I guess that's
1:02:22
redundant among us. So if you're not
1:02:24
familiar with it. If you're familiar
1:02:26
with like We're Wolf or mafia
1:02:28
or kind of games in that
1:02:30
nature where you there's another game that
1:02:32
people have like compared this to or
1:02:35
whatever where you like sort of have
1:02:37
like like townsfolk and then you have
1:02:39
like people that are pretending to be
1:02:41
townsfolk that are like trying to kill
1:02:44
everybody off and your goal is the
1:02:46
townsfolk or to try and find the
1:02:48
one in this game the imposters among
1:02:50
you. So this is like set in
1:02:52
space or whatever. But yeah. It's an
1:02:55
absolute blast. I really am not sure
1:02:57
what to say about it other than
1:02:59
it's like kind of like a great
1:03:01
social game. Yeah, it's it's pretty
1:03:04
awesome. So I highly recommend checking
1:03:06
it out. I definitely have been
1:03:08
doing a lot of streaming of
1:03:10
it lately. So yeah. I'll jump
1:03:13
in with a few picks. First
1:03:15
pick. bamboo flooring. So I love
1:03:17
bamboo and instead of the crummy
1:03:19
old chair mat, the little plastic,
1:03:21
thin plastic that I was using
1:03:23
for a long time, I finally
1:03:25
went to Home Depot and got
1:03:27
some bamboo flooring and I put
1:03:29
glued that to a piece of
1:03:32
plywood and I now use that
1:03:34
as my floor mat on my
1:03:36
carpeted floor. So my chair can just
1:03:38
slide around on it. It's really
1:03:40
really cool. And it's been a
1:03:43
life changing event here. So it's
1:03:45
pretty awesome. And the second thing
1:03:47
that I pick is the Elgato
1:03:49
Key Light. So I got those
1:03:51
for my streaming set up and
1:03:53
they make a huge difference. So
1:03:55
you won't be able to tell
1:03:57
on the podcast, but this is with.
1:04:00
lights off makes a really big difference
1:04:02
in quality. So having proper lighting on
1:04:04
doing any kind of video work is
1:04:06
an absolute must. Can you do that
1:04:08
again, Dave, just so everyone can see
1:04:11
on the podcast? Yeah, I gotta say
1:04:13
that is quite striking. Is that the
1:04:15
same company that did the shortcut bar?
1:04:17
Yes, the stream deck. Yeah, that's a
1:04:20
pretty cool thing as well. Big Elgato
1:04:22
fan. And Jesse, do you want to
1:04:24
jump in with some picks? Yeah,
1:04:26
I've got a couple of bits,
1:04:28
different categories. So first is a
1:04:30
talk that I watched recently
1:04:33
that maybe you all have seen
1:04:35
already, but I recommend revisiting
1:04:37
it. So Sandy Metz is
1:04:39
Rails' 2019 keynote, which is called
1:04:42
Lucky You. And I think it's
1:04:44
especially timely at the as
1:04:46
we approach election season and
1:04:48
thinking about. equality and
1:04:50
issues of inequality in our country.
1:04:52
So I highly recommend that talk.
1:04:54
It's amazing as all Sandy Met's
1:04:56
talks tend to be. Then I
1:04:58
have, when the pandemic started, we
1:05:00
started working remote, I made a
1:05:03
small investment in my work from
1:05:05
home setup that I highly highly
1:05:07
highly recommend. I went out
1:05:09
and I got an ergodox split
1:05:11
keyboard, having some wrist pain on the
1:05:14
keyboard I was using. So I know keyboards
1:05:16
can be a whole other podcast,
1:05:18
but Check out Urbodox, they make
1:05:20
a really really really good product
1:05:22
that's worth the price and I've
1:05:24
been a huge fan of it
1:05:26
since getting it. And then my
1:05:28
final pick, there's a book that
1:05:30
just came out, it's a guilty pleasure,
1:05:32
it's called The Trouble with Peace
1:05:34
by Joe Abercrombie, a British gentleman,
1:05:37
and it is in the grim
1:05:39
dark genre of fantasy literature
1:05:41
and I highly recommend it. Awesome.
1:05:43
Well, thank you for those picks and just
1:05:46
be sure to post them into our chat
1:05:48
section here so we can include them on
1:05:50
the show notes. Well, Jesse, thank you for
1:05:52
coming on today. It was a lot of
1:05:54
fun. I love these kind of talks where
1:05:56
we can just humble ourselves and talk about
1:05:59
past mistakes. and you know, what we
1:06:01
know, what we learned from them.
1:06:03
again. This again. Really interesting. to a long-time listener,
1:06:05
first-time guest, and this was this was, this
1:06:07
was awesome. Yeah, I appreciate it.
1:06:09
for Thank you for coming. all
1:06:12
Well, that's all for this episode
1:06:14
everyone. Thanks for listening. Take
1:06:16
care everybody.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More