00:00:18.880
FlexCAR. Uh director of engineering with Flexar, not the whole director of Flexar. Um someday so my talk 365 days
00:00:26.960
later. Uh but I think you know kind of with this whole past, present and future vibe that we have the conference this
00:00:32.960
year I actually lied. Uh it's more like 500 days later because I'm going to start a little bit before uh we launched
00:00:40.160
last year. Try to not everybody was here. Not everybody knows our story. Um so I'm going to fix that. Uh so our
00:00:47.120
backstory. So when I first joined Flexcar about 2003, uh we were a Java uh backend with uh not
00:00:55.760
70 80 microservices. Uh thank you very much. And it was total chaos. Um and
00:01:02.800
obviously it didn't start out this way. It grew over time about not that long. You'd probably think like a five or 10
00:01:08.320
year journey. It was more like a year and a half, two years. uh and we got in this state uh where we had all of this
00:01:16.640
um and thing you know we thought things were going along okay you know I just joined get my feet wet um you know
00:01:23.439
things were we're moving I thought things were okay uh and and what happened right so so how did we get here
00:01:30.240
how do we move from Java to Ruby on Rails so we were working on a project uh
00:01:36.880
and we were changing how flex car uh you presented inventory to our customers.
00:01:43.119
Uh, and you'd think, you know, how how hard how hard can that be, right? So, with AD microservices, uh, you know, we
00:01:50.320
sell cars, right? We we sell, uh, you know, leases on cars. So, you want to see a picture of the car, information
00:01:55.520
about the car, you know, what color it is, etc., etc. Each of those was a separate service. Uh, so when we asked
00:02:02.079
to uh, and before flex car, how it used to work, um, we would show a picture of
00:02:07.600
a Toyota Camry, right? and it represented the one to, you know,
00:02:13.520
hundred or so Toyota Camry we had on site. Um, but we didn't show you all those cars. We just showed you a picture
00:02:19.040
of a Toyota Camry. We were changing that to show every Toyota Camry we had on site. So instead of showing like say 12
00:02:26.640
tiles, hundreds of tiles of cars, right? So we wanted you know sub 500
00:02:32.000
millisecond response time. Uh we asked for all this information we were going to put on the site and the answer we got
00:02:37.120
back um from the many stakeholders uh for those microservices was no we can't give that to you. Um so one of my
00:02:44.080
engineers here Dan Dunkers uh built this caching layer. Yeah, props to Dan. Um
00:02:52.319
I don't think this is the nail in the coffin, Dan. Don't worry. uh the he built this thing in about 3 weeks and it
00:02:58.640
was a whole cash and later just to get this data that we should have had on hand right uh our CTO at the time uh Mr.
00:03:05.360
Freedom Dumlow, I'm sure a lot of you guys know him. Um, uh, you know, made the decision I think
00:03:12.319
and you can correct me after this if I'm wrong, but I think because the fact we had to build this caching layer to get
00:03:18.720
core data for our service uh to, you know, our website so people could actually come and get our cars uh made
00:03:26.239
him think we got to do something different, right? Um, I was not involved in this decision. Uh, I will say that uh
00:03:32.879
this was this is Mr. Freedom. uh and and you know his thoughts in in his his working uh but he looked at a few things
00:03:40.640
uh sweet uh Django Nex.js JS uh spelt uh
00:03:47.840
what else? Elixir and of course Ruby on Rails right and he decided you know the
00:03:52.959
one I want to go with um is Ruby on Rails hence you know otherwise I wouldn't be here right so uh freedom
00:04:00.000
brought us all into a room you know sat us down as an engineering group and said I have an announcement you know we're
00:04:06.080
we're going to switch from Java and you know all these microservices to a a Ruby on rail monolith and you know we just
00:04:13.280
went a static it was wait a minute that doesn't not exactly right.
00:04:18.799
No, that's not right at all. Um, we are all pretty livid. Um,
00:04:24.560
possibly myself included. I I believe my quote was I'm sure this will you guys
00:04:29.680
will love this. I think my quote was 2005 called and wants its technology back. Um,
00:04:36.560
I hadn't heard about Ruby on Rails for quite a while at that point. Um and you know, Freedom took it all in and uh
00:04:43.520
decided and rightfully so that he was correct and we were going to go ahead with this anyway. Uh and so we did. Um
00:04:51.680
we had a target of rebuilding our whole entire uh for the most part, let's say
00:04:58.080
90% of our of our uh you know platform in three months. Um pretty aggressive
00:05:04.800
timeline. Uh I would I would argue and trust me that was mumbled throughout engineering for quite a while. Um and so
00:05:11.919
we started and uh we grabbed uh four core engineers. Again, Mr. Dan Dunkers
00:05:18.240
was one of those four core engineers. Um four engineers built I would say a good 80% um of what we have in Ruby on Rails,
00:05:26.800
right? Got us stood up and we didn't do it in three months. We failed. We did it
00:05:32.560
in four. Um, and uh,
00:05:39.919
now notice I said we were planning on doing it in 3 months. That was a month before Railscom last year and we missed
00:05:46.400
that mark. Um, and so we pushed it out, you know, a month. I don't think we we
00:05:51.840
looked at the dates uh, because the the day we were going to release landed on
00:05:57.919
right in the middle of Rails Comp last year. Um, we had, I think, an eject
00:06:03.520
button. If we didn't think things were going to go right, we could have pushed it out a week. No one would have been
00:06:08.639
the wiser, or so I thought. Um, and so, uh, we we attended the, uh, so, so last
00:06:16.000
year, sorry, last year was my first Rails conf. It's a little, um, bizarre that I'm up here now speaking to you all
00:06:21.919
after, you know, last year. Um, by the way, Nadia's talk, opening keynote last year, ridiculously good.
00:06:29.680
Um, so a little bit of pressure on me and then I attended the uh the closing keynote that day uh by Arena, also
00:06:38.240
ridiculously good. Uh, but the more important part of that was uh she talked about Flex Car and told our story and
00:06:45.199
how we were going to, you know, do this migration and mentioned we were going to do it that night. So me and Freedom kind
00:06:50.639
of looked at each other and was like, "There goes our eject button." Um
00:06:56.080
so uh we sat down and decided okay we're we're doing this thing. Uh so you know
00:07:02.479
we woke up that morning attended you know first day of Railscom. Um full day
00:07:07.520
you know went out met people afterwards and we kicked things off uh at about uh
00:07:13.280
11 p.m. So here's me and Freedom probably looking uh the happiest we were going to
00:07:19.680
look during this migration. Um, uh, trust me, it it only it only
00:07:25.280
gets better. Um, and so it started about 11 p.m. We had to do a, you know, whole data migration, right? Because we had
00:07:31.680
customers, uh, that have been with us, you know, since the beginning, we had to move all that data over, uh, make sure
00:07:37.440
that it was going to work, you know, even though we had we had done our testing and staging because everything works flawlessly when you test it and
00:07:43.680
staging and then go to prod. Um, so we tested everything and you know, I think our original estimate was it was going
00:07:49.520
to take two three hours to do the data migration. This was uh me and Freedom uh kind of in
00:07:55.840
the middle of it. Notice 5:00 a.m. That's more than two or three hours. Um, there was also some rumors at this time
00:08:02.560
that snoring was heard over the the Zoom call. Um, I told Freedom like I tell my
00:08:08.400
wife and kids, I don't snore. No matter how many times you tell me this, it's impossible. So don't believe that rumor.
00:08:15.759
Uh it took us to about 3:00 the next day. Uh we had uh already kind
00:08:23.520
of launched by about 11 in the morning I believe. You know timeline kind of gets blurry. Uh we were taking orders and uh
00:08:31.120
we just you know things were actually looking okay. Obviously there were some fires but uh for the most part we were
00:08:36.880
feeling good. Right. So freedom I think, you know, tells me like about five
00:08:41.919
o'clock, we got to get out of this hotel room, our own our separate hotel rooms. We
00:08:47.200
weren't in this one hotel room. Uh as much as I love freedom, that would have been, you know, you know, different. Um
00:08:52.720
so we were, you know, I was like, "Okay, that sounds good." You know, took a shower, you know, changed whatever because we've been up for whatever. And
00:08:59.440
we attended the happy hour at Railscom. And I think I want to hit on what was talked about here, the uh the the
00:09:06.080
community and and you know, I think like all of you guys and just the the uh the positivity that's felt. So, uh, when we
00:09:14.959
got the announcement back, you know, with the the torches slide, um, one of the things that Freedom told me was, you
00:09:20.640
know, one of the reasons not of, you know, you know, I don't think it was like the main reason, but, you know, I think one of the important reasons was
00:09:26.800
when we picked Ruby on Rails was the community and like how supportive everybody is and that and I I don't
00:09:32.800
know, I kind of brushed it off. I was like, "Yeah, yeah, yeah, whatever." Right? And then when we came, you know, to to Rails Conf last year, um, and we
00:09:40.720
went to this happy hour, it really struck me because, uh, because of, uh, Ireina's keynote, um, you know, not
00:09:47.839
putting pressure on us. Um, everybody kind of knew our story. Everybody, you know, knew we were trying to launch. So,
00:09:55.279
a lot of people came up to us and asked us how did it go, right? And you could
00:10:00.320
tell that people wanted to know. They cared. uh they were actually very interested and very very supportive um
00:10:06.800
when we told them that yes we we did go to production and u you know we got it done in four months and people were like
00:10:12.399
ah that's awesome you know so the the community here um is absolutely
00:10:17.519
something special um I I I concur with that it's not something that you find at a typical you know tech conference um it
00:10:25.440
is something uh truly different uh and it's something that I think should be cherished uh and appreciated um and so
00:10:32.240
hence you I wanted to to kind of highlight, you know, we went to Rails, uh, you know, everything was, you know,
00:10:37.279
was a pretty, you know, pretty special time. So, all right. So, I think we can wrap it
00:10:42.959
up. Um, so we moved, everything was perfect, right? Uh, it's, uh, you know,
00:10:48.720
happy ending and all and all. Wait a minute. That Nope. Nope. Um, so once we
00:10:54.240
got back from Railscom, uh, you know, reality kind of kicked in. Um, and you know, how' the how' the next two months
00:11:00.399
go? Um, I spent hours and hours trying to find the right slide for this. Uh, I
00:11:07.360
figured this one did did pretty well. So, uh, we spent the next two months,
00:11:13.360
uh, maybe six weeks, but I, you know, six to eight weeks, somewhere in that time frame, um,
00:11:19.600
fixing production bugs, right? Things things that we didn't quite catch in staging. um features that, you know, we
00:11:26.959
either purposely didn't didn't bring along because of time um or, you know, we we were going to, you know, do it
00:11:32.640
later or we just we just missed. Um now you had, you know, a real customers, you know, hitting our site every day um
00:11:39.600
calling uh our care team. Uh nobody from our care team is here. I wish they were. I would I would give them a big hug. Uh
00:11:46.000
it's not a giant care team. I think it was like five to to to seven people. um
00:11:51.200
their call volume went up I think a factor of like five to six times uh for a good solid like month maybe these two
00:11:58.000
months um god bless each and every one of them for dealing with that. Um and
00:12:03.040
then you also had you know we have our obviously our our customerf facing site where people go and get cars. We have
00:12:08.959
our internal tooling where you know operations people you know take care of cars you know manage the fleet etc etc.
00:12:15.680
Um that probably didn't get as much love during this transition as the uh the
00:12:21.120
consumerf facing site. Uh so there was some issues you know maybe maybe more than one on the uh the operations side.
00:12:27.279
So we spent the next two months um cleaning everything up and I think getting us to a place that um we were
00:12:33.680
very stable, right? And uh now I think you know so that's the that's the past
00:12:38.800
you know that's that's how we got here and and why um and now I can talk about you know some of the things that you
00:12:45.440
know we learned um prior you know like post you know post doing all this and
00:12:50.560
and you know some of some of the uh the benefits right so uh some observations right um I think the first one looking
00:12:58.399
back you know through the process uh couple things from the actual transition I wanted to highlight So, uh, and and
00:13:06.160
kudos to Freedom here. One of the things that I learned watching us go through this and obviously being one of the
00:13:11.760
people holding the torches. Um, if you're going to make a decision like this, you got to go all the way in. You
00:13:18.720
can't just dip your toe in. Because if we had spent, you know, months, ah, we'll we'll do half of it in in Java and
00:13:25.839
we'll do this other little bit in Ruby and eventually we'll migrate everything over, um, we wouldn't be there today.
00:13:32.240
you know we we would probably have like 50 60% you know in in in Ruby um we
00:13:37.760
would not have gone all the way in. So um that is the one thing I you know the one most important thing I think I
00:13:43.839
learned from this was go all in and and you know you can answer people's questions you know freedom let us email
00:13:50.320
them questions about why we're doing this and and he sat down and and and addressed all those questions and said
00:13:56.079
at the end and we're moving to Ruby on rails right so you go all in and you
00:14:01.120
stay committed um especially when you're doing something like this because it's important to get everybody on you know
00:14:06.959
everybody on board you're all marching towards the same goal and you're not tearing, you know, in two different
00:14:12.720
directions because all that's going to do is slow you down, waste time, and we would not be where we are today, which
00:14:18.320
is in a much much better place. Um the the other thing I noticed um so we had
00:14:25.440
zero people in our engineering team minus freedom uh who had ever used Ruby on Rails.
00:14:31.199
And so we told every engineer, you know, now you're going to learn Ruby on Rails.
00:14:36.240
you know, we know a lot of you guys are Java backend developers. That's great. Now, you're going to be Ruby on Rail
00:14:41.680
developers. Uh, which also means we had nobody that knew what they were particularly doing, right? You know, we
00:14:47.199
we look, you know, you could look things up online and and you try to get an understanding for um the best practices.
00:14:54.399
Um, but what you know, what we did was we brought in a consultant. Um, unfortunately, it was only for about 10
00:15:00.720
hours a week. And so we would throw about 8,000 questions at them in those 10 hours. Uh, and God help him, he tried
00:15:07.360
to answer, you know, everyone wanted that he could. Um, but he wasn't, you know, he didn't have full context. He
00:15:12.480
wasn't sitting there writing the code with us every day. Um, so I think one thing, uh, that that would have went,
00:15:17.839
you know, a long way is if we could have brought somebody in who was sitting with us, you know, in those seats. That's not
00:15:23.360
our conference room, thank God. uh in those seats though uh helping us you know build along the way so they
00:15:29.600
understood the context you know they could understand you know you know where we're heading and and why and kind of
00:15:34.959
steer us in the right direction um uh and uh I think that would have been you know pretty pretty beneficial for us so
00:15:42.079
those are some of the things you know I noticed you know again along the way getting us there now that we're there I
00:15:47.120
think this is you know the more maybe more important thing now that you guys know the story um what happened right So
00:15:54.560
back you know in the in the Java days um what would happen is we would get a
00:16:00.160
project and obviously products involved and you know UX design is involved and
00:16:05.600
obviously engineering is involved when we would get the project um not every
00:16:11.519
time would all the requirements be fully scoped out would all the design be fully scoped out and it didn't particularly
00:16:17.199
matter because it took us a pretty long time uh to do these features you know to
00:16:23.120
you know get through these project. So they had time to, you know, would get us going. They would give us like the, you know, the beginning requirements, the
00:16:28.720
beginning design. We could, we could start off and and do our thing and then they could kind of fill in the gaps as,
00:16:34.000
you know, as we went along. That doesn't happen anymore. Um, and in fact, uh, I think we caught a lot of
00:16:41.120
people off guard when we switched to Ruby on Rails. We got through the fires. We put them all out and we started doing
00:16:46.399
new features. Uh, oh, side note, if you tell product not to do anything for like four months when you're building
00:16:52.720
something else, they think of a lot of ideas. Um, so there is no shortage of work from a
00:17:00.240
feature standpoint. Um, and so they had all these ideas and all these features and they were kind of used to the old
00:17:06.720
way, right, where they could they could get those beginning requirements and let us kind of get going. Now, I noticed
00:17:12.079
we're we were pinging them, you know, pretty consistently to be like, "Okay, we're done." Like, can you hand us the
00:17:18.160
next, you know, we notice these edge cases you didn't you didn't catch or how do you want to handle this? Same thing
00:17:23.360
with design. You know, we we would we would reach back and say, "Hey, we need the final design. You know, it's it's
00:17:28.559
not all here where they were, you know, they were not used to this because of how long it would take us before." Um,
00:17:34.160
we sped up uh a pretty a pretty significant factor. uh and I'll go into uh I'll show some some numbers in a
00:17:41.120
second. Um when you have 80 microservices
00:17:46.480
um one of the things that happens is a team becomes responsible for these sets
00:17:53.039
you know these five to 10 services or whatever and only that team you know makes changes right and even if you go
00:18:00.080
and make change to that code you you know they're going to review your PR and sign off on it and so if you get a
00:18:05.280
project um and you need to interface with say three or four of these other teams you need now convince them you
00:18:12.880
know what you should be doing right now instead of all that other work you're doing this project because it's super cool and it's high priority not
00:18:19.039
everybody agrees with that uh so that slows things down and then I think the knowledge transfer suffers as well right
00:18:26.000
because you know this is my little kingdom my little fftom you know I I do this you know you guys do your code I do
00:18:32.559
my code um and so that you know we got rid of all that right the other thing
00:18:37.919
when you have a system like this you you know I could not run Flex Car on my laptop, right? And again, you know,
00:18:45.280
Freedom, Freedom said this to me in the beginning, too, and I didn't really see the power of it as much. Um, it very
00:18:50.400
quickly we did you, you know, you would have pseudo services that kind of stood in the place of it. So, when you did
00:18:56.400
testing, you really weren't fully testing it because you really couldn't run the whole thing on your laptop. When
00:19:01.760
we have a monolith Ruby on Rails app, you can. Um, which is awesome. Um, so
00:19:07.200
the, you know, the thing that really stood out though was, you know, since we tore these kind of these the these, you
00:19:13.120
know, little thief and little kingdoms down and now everybody can look at any part of the system and and make changes.
00:19:18.400
Um, people know a lot more, right? They're they're less afraid. Um, let's say if a billing issue, Dan, if a
00:19:24.720
billing issue comes up, um, it doesn't always have to be uh Dan. I know I've been pointing to him a lot. He's a very
00:19:31.039
important part of our project, our team. Uh, but he was like Mr. billing uh in the Java world. Uh he's ironically still
00:19:38.080
did a lot of billing in the Ruby world, but it doesn't always have to go to Dan. Uh anyone has the ability now to jump in
00:19:44.480
there and take a look if there's a billing issue or they want to add a feature and they have to interface with it. Um that kind of gets spread out,
00:19:51.360
right? So, you know, when we, you know, back in the Java world, we did I went
00:19:56.559
back and tried to get some, you know, some rough numbers here. We did we were doing around 10 to 15 I would say like
00:20:02.000
you know projects you know not like little features but projects a quarter right so 10 to 15 a quarter and our
00:20:08.080
engineering team um was uh larger than it is in in the Ruby on Rails days um we
00:20:16.320
now do 25 to 30 uh projects in a quarter
00:20:21.520
um with a much smaller engineering team uh probably people for people that have been in this this this Ruby on Rails you
00:20:28.240
know system for a while. It's probably not shocking at all. For us, it was kind of shocking. We weren't expecting that kind of speed um and that kind of
00:20:35.120
improvement. Um so that part has been uh awesome. Uh oh, and you know, one thing
00:20:42.400
I would say, and it's not 100% correlation of you can point to this and say this is because of Ruby on Rails. Um
00:20:48.480
but I would say because of the speed, we can try out new features. Right? So before if product had an idea for
00:20:55.440
something and they weren't quite sure if it was going to work um you know now they're looking at the amount of time it
00:21:01.200
takes to build that feature and if it fails the amount of time it takes to build you know the follow on feature
00:21:07.840
right and you're talking months um and so there was definitely hesitation of like should we try some of
00:21:14.159
these things should we not in this Ruby on Rails you know side of
00:21:19.200
the game we can we can try those things out really quickly we're talking, you know, weeks um you know, maybe a really
00:21:25.840
big thing, you know, month, month and a half, but a lot of things we're doing is in the weeks, two or three week uh kind of camp. So now you can try both of
00:21:32.240
those things in a month. You know, the the pressure is way down. Um and so we have been uh really trying things out
00:21:38.799
with product and working, you know, pretty closely with them to to try to, you know, move Flex Car in the right
00:21:44.240
direction. And we have doubled uh membership growth uh just from last year when we shipped, you know, here at at
00:21:50.720
RailsCom. Um again not it's not a oneto one uh you know correlation but I think
00:21:55.840
it uh it is a large part because of the speed and what we can deliver for products so they can try things out and
00:22:02.400
figure out what's working and and you know really what's helping uh and focus in on that. Uh so that's been uh
00:22:08.080
amazing. Thank you.
00:22:14.400
The team size is another I think really big thing and I think this is kind of cool.
00:22:20.159
So we were working in teams you know uh five to eight I would say in the Java
00:22:25.840
world you know nowadays two to three is kind of our norm. Um and what that
00:22:31.360
allows us to do and again because of that whole like feft kingdom thing you know you kind of did one thing and you
00:22:36.400
stood there. Now what it allows us to do is we have two to three teams. We can swap people around, right? So if we
00:22:41.919
want, you know, more of our senior engineers to mentor, you know, some more of our juniors or just this person who
00:22:47.760
knows this part of the system to to work with this person to do that correlation, you know, that that crosspollination, excuse me. Um, very possible, right? And
00:22:55.760
and the small team size um again has been uh not just from an engineering
00:23:01.039
standpoint, I think from a product standpoint um you know, we get to shift things around. So again, more of
00:23:07.600
product, more of design is interacting with more of engineering as a whole, which I think is great. You know, we're
00:23:12.720
not that big of a company. So to to knock those walls down and have people actually, you know, communicating and
00:23:19.120
talking um amongst each other and and you know, kind of meeting each other for the first time even though they probably worked together for like three years, um
00:23:26.000
is kind of a you know, a special thing uh for Flex Car, you know, not just for engineering.
00:23:33.200
So, you know, when we did this whole migration, um, we didn't just take, for the most part, the if you look at some
00:23:39.840
parts of our codebase, uh, and you looked at it, you would go, that's Java code in Rails. Um, but for the most
00:23:47.280
part, we actually started over, right? We we knew some of the warts and the
00:23:52.559
things we had to come, you know, get around in the Java world and not from because of Java, but because of what we
00:23:58.240
were trying to build. So when we did this in Ruby on Rails, it was a great opportunity to rethink everything,
00:24:04.080
right? How are we doing this? How are we approaching this? We know what the end result we, you know, we want. We've been doing this now for a while. Um, let's
00:24:11.440
redo it, you know, and um, I'll get into this in a second. You know, I'm a I'm a front-end guy, you know, I know, boo
00:24:17.200
hiss, but the re, you know, so I'm in React, uh, pretty heavily. And even on the React side, it it was, you know, we
00:24:23.120
could have just, you know, grabbed what we had already built, plop it over. Um, but even that, you know, we we we wanted
00:24:29.120
to clean house and kind of restart and rethink how we're doing. So, it was kind of all over the map. We were, you know,
00:24:35.120
kind of just starting over and rethinking everything. Um, and I think that alone cleared up, you know, some of
00:24:41.760
the stuff we were trying to overcome with, you know, the changes and the pivots. You know, you kind of start over
00:24:47.279
again. Don't worry, we probably have a lot of those back again, you know, in in the years since. You know, tech, as we
00:24:53.360
all know, accumulates the second you hit the button. So, uh, we do have some, you know, cleanup to do, but for the most
00:24:59.760
part, uh, the code base is is so much cleaner. Um, you know, the features we
00:25:05.039
have, you know, work a lot better. Uh, we are putting out way less fires, you know, than we were before. Um, like I
00:25:12.320
just mentioned, we we kept, uh, you know, our React front end. Um, me and Mr. freedom might have had a
00:25:18.240
conversation about um how if we didn't keep our react front end uh several of
00:25:23.760
us including myself maybe you know would have left flexar uh I don't know how how much of that was was reality versus
00:25:29.679
joking but um you know freedom freedom gave us the opportunity and said okay prove to me it's going to work we did um
00:25:35.840
we kept our our react front end for our consumerf facing um applications um uh
00:25:42.240
so like you know our main website and we use react native for our our mobile uh experience
00:25:47.440
So all that but you know bottom line that all works great with Rails right like it's you know um it's not like a
00:25:54.080
you know a tough thing and the performance is is solid um you know it's been and in fact um no offense Dan our
00:26:01.840
front-end devs were the ones who became full stack I think the first right they figured out really quickly like oh I
00:26:08.320
don't have to wait around for for all you backend guys to to build this you know API that I need with the data I can
00:26:14.559
just do it uh and So really our senior front end guys became truly full stack I
00:26:20.159
would say before anyone else. Uh and they're you know at this point uh leading the charge um you know being
00:26:26.080
full stack and being able to do both. Um now for our our internal um uh you know
00:26:33.440
operations side right we were using initially you know ERB turbo stimulus
00:26:38.960
you know that's what we kept um but we recently in the last couple months um
00:26:45.520
decided to uh you know kind of bite the bullet and we're going to use inertia uh
00:26:50.559
and react so we can write on rails. Um, I hugged somebody in the audience because they built this awesome um, uh,
00:26:58.400
read me or, you know, a blog post. Uh, thanks to Evil Martians, uh, Arena in
00:27:03.440
the corner. Thank you. Um, this blog post
00:27:09.279
took us, you know, from, you know, nothing to having inertia up and running
00:27:15.039
and working uh, in our system in 20 minutes, right? Uh, like no joke, 20
00:27:20.320
minutes. Um, and no joke, I hugged the individual who wrote this blog post because, uh, he saved us so much time
00:27:27.440
and it was, you know, it was awesome, right? Uh, so please, you know, uh, follow Evil Martians. They do, you know,
00:27:32.799
amazing stuff. Uh, but for us, you know, the thing that we decided, uh, recently
00:27:38.240
was, you know, we're now asking people to be full stack. you know, they have to know, you know, Ruby on Rails. They have
00:27:43.360
to know React. Um, and they also have to learn, you know, this this, you know, kind of a different shift in thinking,
00:27:48.880
you know, when you do React versus, um, you know, uh, you know, Turbo and Stimulus. If we could just do React
00:27:54.799
everywhere. Um, it kind of lowers the bar for us. You know, we're a small group. Um, and and I think because we're
00:28:01.919
all kind of learning it, none of us were really doing probably if you looked at our code, you would probably want to hurt us uh, or throw things at us
00:28:08.399
because I'm sure it's we're not doing things correctly. So, um, yeah, we're going to we're going to get rid of that,
00:28:13.679
uh, and we're going to focus on one, um, uh, front-end framework, you know, for flexar.
00:28:22.080
So, oh, and yeah, sorry. So, this this kind of goes into that as well is we really wanted to um put uh a kind of a
00:28:29.360
focus. Yeah, I think I wanted a lens for this picture. By the way, if you couldn't tell, all these slides have been from
00:28:36.320
MidJourney. Uh, awesome tool. It's been great. Um, and I kind of think I wanted a lens, but uh, it after about like 20
00:28:44.080
minutes trying to get it to do that, uh, this is the best I could do. So, obviously it took on the, uh, internal
00:28:49.200
tooling and that was the words it picked up on to to come to this slide. Sorry, not related to Ruby Unreal at all. Um,
00:28:56.000
our main focus to this point because we wanted people to, you know, obviously, you know, uh, lease cars from us, right?
00:29:02.240
Because if they don't do that, we don't make money and, you know, we don't have a company. So our main focus for a long time was the external facing site and we
00:29:09.600
had these internal tools for our operations people and our fleet people. Um but we didn't put a lot of attention
00:29:15.120
uh to it until recently. Uh and so because we're going to go Flex Car is going to go into this expansion. Um and
00:29:22.480
you know again we are set up for success here. You know we can scale this thing. There's no issues of you know is Flex
00:29:29.360
Car going to you know you know not be performant because you know we're on Ruby on Rails. There's none of that obviously. Um and the focus is now how
00:29:37.679
do we better support our you know operations folks uh and the people in the field you know actually you know
00:29:43.120
getting these cars into our customers hands and again this is kind of I think why you know we want to do this whole
00:29:48.720
you know shift to inertia and react um we can reuse the you know the components
00:29:53.760
we can already built for our customerf facing site and and make um some very nicel lookinging and easy to use um
00:30:00.640
internal tools. I'm not saying you can't do that with Turbo and Simulus. I'm saying we probably can't do that because of our our lack of knowledge. Uh and is
00:30:07.520
much easier for us to do that with React. Um so our focus going forward is going to be how can we support the um
00:30:14.240
the operations folks you know obviously we're not just going to leave the customer behind. We're going to you know but uh we're doing more for the the
00:30:20.399
operation side as we start to scale um and that becomes more important for flexard.
00:30:27.039
Ah so you know obviously during this whole transition and then you know and then post when we launched um obviously
00:30:33.520
Ruby was talked about amongst engineering the thing that caught me off guard is um I remember you know I was
00:30:40.320
you know getting coffee or something and the COO comes up to me and he's like ah how about that Ruby and I was like what
00:30:47.760
um and you know he was like yeah it's you know obviously freedom has been talking to him about it but he you know
00:30:54.000
people you know in the boardroom people in different departments knew that engineering switched to Ruby and they
00:31:01.120
were saying it in like a positive way, you know, not they weren't, you know, downplaying it. Um, and so it actually
00:31:06.320
got talked about in places you didn't expect like getting coffee with the COO. Um, and to me that kind, you know, I
00:31:13.120
think is a great thing. Um, people are aware that the change in in engineering
00:31:19.600
in our speed and our, you know, how we're doing things and our efficiency um is thanks to you know, Ruby on Rails,
00:31:25.600
right? they it's not just some blackbox thing and yeah engineers do their thing and blah blah blah like everybody in the
00:31:30.720
company is now kind of a part of this uh if they wanted to be or not but they are and they see the value and uh it's yeah
00:31:38.080
you know the heart's up there maybe I'm pushing it but uh it's talked about you know very positively at flexcar and uh
00:31:44.799
you know obviously very supportive of of what we're doing and going ahead
00:31:50.559
so when we started out last year again none of us knew Ruby on rails um my most exper experienced dev again Mr. Dan
00:31:57.519
Dunker is in the corner um is a year and three four months into his Ruby Unreal
00:32:02.559
journey. Um so we were relying very heavily on AI when we were going through this journey last year. Um and what we
00:32:09.679
were using uh was chat GPT and um
00:32:16.159
it's fine. Um and so what would happen is um you know it would hallucinate. We
00:32:22.080
definitely saw that. But the problem is, you know, like nowadays if it did it, you're like, "Yeah, yeah, you you're talking nonsense." At the time, you
00:32:28.240
don't know what you don't know, right? And so, we didn't know that it was sending us bad things. So, we we would waste an hour going down this path and
00:32:35.440
like, "Why won't this thing run?" So, the Sorry, really quick note. The the best thing ever was one of my senior devs sent me his chat with with Chat GTP
00:32:44.480
and it was like, "Hey, the original author of this code missed a few things and you know, but he's like, "That's
00:32:50.880
you. you're the original author of this code, you're yelling at yourself and it was like, oh, my apologies. Um, you
00:32:58.399
know, and so it was helpful in some regards. Uh, uh, we did we did co-pilot,
00:33:04.080
you know, for a while. Um, and that helped, you know, a little bit. Uh, but the real big game changer for us, you
00:33:09.840
know, and and I, uh, probably not surprising is this year, um, we started using cursor, maybe soon to be cloud
00:33:16.559
code, but for right now, you know, we're just trying to get people to use cursor. uh and the change has been night and day
00:33:22.320
right you know under obviously I I don't need to explain why for everybody here but you know the context thing has been
00:33:27.679
you know stellar um I think if we had cursor last year when we were doing the
00:33:33.200
migration wherever freedom is I don't know where he is we might have been able to hit the three months I think if we
00:33:38.799
had uh cursor or cloud code last year it like it is really uh been that
00:33:44.080
beneficial for us you know as we're doing things um takes away a lot of the the boiler plate. So again, I mentioned
00:33:50.080
before I'm a front end guy, right? Uh I uh I ignored this I mean I was I was
00:33:56.000
doing the the React side of this whole Ruby on Rails thing. I ignored the Rails side for a very long time uh until I
00:34:02.640
think I sent Freedom one of my PRs for like a migration. Um was very proud of myself. It was probably to like add one
00:34:09.679
column or something. Um but now because of cursor uh Dan's probably in his seat
00:34:14.960
chuckling because of cursor um I'm you know I've started getting into you know actually writing uh you know rail side
00:34:21.359
right so I've done a few PRs um probably not great but hey you know I'm learning
00:34:26.399
and I think for me the great thing is I can ask it to explain certain things to me you know so to use that you know kind
00:34:31.760
of rubber duck you know thing too of like if I have an idea and and I'm trying to you know talk through it I can you know talk to cursor as sad as that
00:34:38.720
sounds and it you know it really kind helps me, you know, kind of get an idea of, you know, am I going down the right
00:34:43.839
path or am I not? Um, but it's really for me kind of, you know, unlocked the ability for me to jump in there and not
00:34:49.919
feel like I'm I don't know what I'm doing even though I don't know what I'm doing. But I'm learning, you know, I am I am getting better. And I think um what
00:34:56.720
I have noticed is, you know, cursor in the beginning for us, you know, it could write pretty much production ready react
00:35:03.760
code pretty easily. It probably because it's been trained a ton on React. um it
00:35:09.359
struggled a little bit more for you know uh Ruby on Rails. It's getting better and I think you know we're adding
00:35:14.800
certain rules to it and and and you you know people have been great in the community like hey this has been working
00:35:20.240
for me. They put things up you can you can take them you know put it into your rule set uh to get your code to be in a
00:35:25.920
much better place uh than it was. Um so for us you know I think AI obviously is
00:35:30.960
going to continue you know we're just kind of getting started with it. I'm really excited to like where's it going to take us? um you know the speed
00:35:37.839
improvements you know it's it's you know on you know that part's great on the other hand I you know I don't think I'm
00:35:43.680
afraid of anyone you know losing our job at Flex Car because of AI uh we we kind of put those fears to rest um but it
00:35:50.880
really has kind of you know pushed us um you know to get further ahead um you know definitely gets rid of a lot of the
00:35:57.200
boilerplate stuff um you know helps us uh all of us you know from seniors down
00:36:02.880
to juniors um you know PR reviews tests, by the way. Although, uh, yeah, I'll
00:36:08.800
talk about that quick. Um, we chose mini test. Um, yeah, I know. Um, yeah. Uh,
00:36:16.000
which is cool. Uh, I liked, uh, I do want to move to RSpec at some point, only for me because it looks like just
00:36:21.680
or at least to me it feels like Jest, you know, from React. Um, but cursor every once in a while, even though we have like multiple rules, do not write
00:36:28.960
tests in RSpec. Um, it's better because we have like literally like probably three rules for it now. Uh but every
00:36:35.200
once in a while it's like here's your test in ourspec. Um not very helpful. Uh
00:36:40.800
but uh you know we uh we we you know we are very happy where we are in this
00:36:46.640
whole AI journey. Um and we have you know a mile you know miles and miles to go but um it's been it's been great for
00:36:52.800
us. So I think um I kind of alluded to this before. So our
00:36:59.359
our engineering team in the whole Java world was much bigger right? Um and
00:37:04.720
where we are now as an engineering team we are much smaller and I think you know when you when you have a smaller team um
00:37:12.000
there are certain things you need to pay attention to you know like career growth uh and making sure our junior devs and
00:37:17.760
you know mid mid-level you know devs um get the experience the exposure you know to to move up in their career um and I
00:37:25.200
think you know one of the cool things here you know everybody um you know
00:37:30.480
obviously jumped kind of had no choice jumped head first into this whole Ruby on Rails journey we did um you know for
00:37:36.720
you know right or wrong I think our junior devs jumped the hardest if that I don't know if you can jump harder but
00:37:42.720
you know they dove maybe faster into the into the deep end um you know kind of no fear um and it's really you know kind of
00:37:50.800
let them I think we we put a lot of pressure and you and maybe um you know
00:37:57.520
responsibility on our junior devs than maybe we we should but they do great um and I think it's, you know, part of that
00:38:04.000
though is because of Ruby on Rails where um we have a little bit more, I think, leeway, you know, there's, you know,
00:38:10.240
it's opinionated, you know, so like there are certain things they they're not going to be able to do um between
00:38:15.680
that and I think, you know, some of the AI stuff. It really kind of unlocks, you know, their growth, you know, and our
00:38:21.040
growth as an engineering team. Um, and I think, you know, I'm sure, you know, it
00:38:26.160
wasn't just Java alone. I'm not trying to like you know make fun of Java but it was definitely how we were using Java
00:38:31.680
and Flex Carb 4 where I think um it was a much more uh tougher journey I think
00:38:37.119
you know as a as an engineer uh along your career path to to get the experience to get the exposure um versus
00:38:43.760
now you know it's with a small team with Ruby on rails um you're getting exposed
00:38:48.800
to uh quite a lot um so
00:38:54.320
not everything along this journey has been uh you know, you know, unicorns and rainbows, right? Um, you should have
00:39:00.720
seen the midjourney pictures for for that one. Um, so, uh, this is the best I came up with. Um, and so we did struggle
00:39:08.560
with some things, you know, along the way. My water. Um,
00:39:14.000
uh, so yeah, obviously the the the RSpec mini test we already talked about. Um, some of the things that I think caught
00:39:20.320
us um we had to play some catch-up on um, you know, jobs, right? you know,
00:39:25.520
having jobs run. Um, I think we were also like multiple versions behind whoever good solid Q. Uh, and so that
00:39:31.839
wasn't helping anybody. Um, but we had to, you know, start to understand how do we, you know, take care of all these
00:39:38.800
jobs priority, figuring things out, um, you know, kind of, you know, along the
00:39:43.839
way and without knowing we were doing it wrong, uh, to begin with. And so we would kind of figure that out when
00:39:49.359
things started failing at like three in the morning, which is super fun. Um
00:39:56.079
the uh the one thing because I kind of asked the team, you know, hey, I'm doing this presentation, you know, what are
00:40:01.280
some things you want me to highlight for the stuff we struggled with? Uh pretty much every single dev was like it's
00:40:07.280
really easy to write N plus1 queries. Um highlight that a lot. Uh and and that's
00:40:14.400
true. Um uh I think uh so we use Sentry. Anyone from Sentry's here? Yay. Uh we're
00:40:20.960
using Sentry and Sentry has been great because it uh it calls those out for us. Um after they're in production um
00:40:28.160
because our that's not on that's not on Sentry, that's on us uh for how how our staging environment is right now. Um
00:40:34.960
we're going to fix that. I promise. Um but uh you know that I think is you know
00:40:41.119
thankfully I would say even with the N plus1 queries even with our Javaesque uh
00:40:47.839
Rails code um we are still pretty performant right and again I'm sure if a
00:40:53.599
lot of you looked at our codebase there would probably be parts that again you would want to hurt us saying all that
00:40:59.040
you know I think the really cool thing for us though has been we haven't faced that like performance penalty of like oh
00:41:04.480
you guys are a bunch of knuckleheads and now your stuff's really slow. Um it's it's just kind of handled it moved on um
00:41:10.560
and done great. So you know yeah we we do have N plus1 queries. We do try to kind of you know clean them up. Um
00:41:17.280
probably you know sim similar along the line is uh you know uh using scopes. Um
00:41:24.960
we don't use them as much as we should I think and so we try to build these things in memory without realizing it
00:41:30.480
and then uh you know trying to get everybody to kind of learn that along the way. Again, you find out when it's in production. Um, which is super cool.
00:41:37.920
But again, our site still runs, so you know, not not that horrific. Um,
00:41:43.520
uh, authentication, you know, I think, uh, you know, we're using device, I'm not saying deise was hard for us to
00:41:49.520
learn. Um, it was the, uh, maybe you guys will point at me and say, "H, we told you so." But when we had our React
00:41:55.440
separate, uh, you know, code repo in React trying to authenticate it against, you know, our Rails uh, repo, you know,
00:42:02.319
Rails back end. Um, there was some challenges. I'll say there's literally some parts of that codebase that says do
00:42:09.040
not change. I don't know why this works. We'll figure it out later. Um, but uh
00:42:14.800
but so we don't change it. Uh, and it's fine. And you know, it's it's great. Um,
00:42:21.280
so uh man, everyone says when you when you do one of these, you talk way faster. It's very true. I just looked at
00:42:28.400
the time. I was like, oh boy. Um, all right. So the good news is I have a few you can tell me too if you need me to
00:42:34.319
wrap this up anytime to get back that time. I will not be I will not be offended for any of these. So uh what
00:42:41.040
you know what do we go from here right? So now we're going to look at like the future right where are we going? So now
00:42:46.480
that we're here, we have this Ruby on Rails thing, you know, we we kind of have our, you know, front end, back end kind of sorted. You know what, you know,
00:42:53.520
what do we focus on, right? Um, and you know, that's not to say we don't have any things to clean up on like N
00:42:58.800
plus1's, but the really thing I think cool thing is this lets us start to
00:43:04.480
think about like where do we want flex car to go, right? not just like flex car engineering but like what things do we
00:43:10.720
want to unlock for flex car and really start we can start to architect those things you know work more with product
00:43:16.800
um we're not spending as much time you know putting out fires because you know something blew up at like 2 in the
00:43:21.920
morning or something like that uh that part alone has been great um you know it's not like we had a ton of those
00:43:28.560
trying to make it sound like flex car was on fire all the time in the Java world but we definitely had more of those kind of production issues um I'm
00:43:35.440
not trying to jinx anything so I'm actually not going to say anything out loud about how we haven't had that for a while uh now. But
00:43:42.560
when you when you know when you get through all that and you know we don't have to worry about those kind of things you can really start to to focus on like
00:43:49.200
the next layer the next level right and for us it's really this kind of like where do we want to architect you know
00:43:54.560
flex car obviously engineering is going to take us there along with product but you know how do we want flex car in a
00:44:01.599
year to look how do we want flex car in three years to look we know how we can get there right we don't have to worry
00:44:06.880
about like ah but we can't you know I got to write like five more services or you know or the you know we're not going
00:44:12.880
to have the performance to get you know we don't have to worry about any of that. Um, and again, I know it makes
00:44:18.560
sense, but yeah, you know, I think for half a second up there, you guys saw my my cursor window. Like, you know, I'm
00:44:24.079
running Flex Car on my laptop. It's super cool. Um, you know, again, I know that probably sounds weird for everyone
00:44:30.000
that's been using Ruby on Rails, but you know, coming from that AD microser uh world to this uh gamechanging.
00:44:38.480
Um, so, um, uh, Indiana Jones for anyone who doesn't get the reference, the, uh,
00:44:44.400
we do have tech debt and, uh, you know, it does, uh, it does pile up quicker
00:44:49.599
because I'm sure people are thinking, you guys have only been out for like a year. How much tech debt could you have? A lot. Um, I mean, not crazy amounts.
00:44:56.800
I'm not trying to make it sound horrible, but we do have things we need to, you know, clean up and kind of, you
00:45:03.119
know, along the way, you know, refactor, especially that Java code that we have laying around that's in Rails. Uh, and
00:45:09.520
lastly, you know, uh, we just want to keep learning, right? So, see, you know, where this whole Ruby on Rails journey
00:45:15.680
is going to take us. Actually, wait, I add one more. I like I want to use it because it's Ruby on Rails.
00:45:23.040
That's not me. That's midjourney. Don't can't yell at me.