00:00:00.040
I'm Tony rib uh I don't really have a
00:00:02.040
catch title for this but when I
00:00:04.160
graduated from a coding school in Denver
00:00:06.399
uh about eight years ago I had no idea
00:00:08.800
what an infrastructure engineer was um
00:00:11.080
so I thought it'd be interesting to talk
00:00:13.080
about sort of a different career path
00:00:14.480
you could take in the software
00:00:16.080
space uh so this is a brief background
00:00:18.240
of what I've done since I graduated
00:00:19.720
touring just to sort of give you an idea
00:00:21.840
of when I actually got into
00:00:23.000
infrastructure engineering um and it's
00:00:25.240
not a talk about me but if you do want
00:00:27.480
to hear about my history at all I have
00:00:29.599
spoken this meet up once before but I
00:00:31.720
did a podcast uh with the coding tool
00:00:34.079
that I went to that has a link there
00:00:35.719
that I can post
00:00:37.200
later so uh historically I feel like we
00:00:40.680
talk a lot about frontend and backend
00:00:42.239
engineering programs which are sort of
00:00:43.640
the biggest buckets of software
00:00:45.199
developers however there's an entire
00:00:47.840
ecosystem that's actually surrounding
00:00:49.600
these two functions that make up the
00:00:51.239
full like cohesive software engineering
00:00:53.239
team and if you work at a small startup
00:00:55.719
that's just deploying to something like
00:00:57.039
Heroku you may not have an
00:00:58.399
infrastructure team but as your company
00:01:00.600
gets bigger it kind of becomes a
00:01:02.160
necessity over time so this isn't an
00:01:05.199
exhaustive list like for all these
00:01:07.159
pieces or even all the pieces that make
00:01:09.280
up a full software development team um
00:01:11.720
but I'm going to focus on the
00:01:12.560
infrastructure part because I found it's
00:01:14.240
a really fun job and one that isn't
00:01:15.799
talked about a
00:01:17.439
done so uh as a product developer which
00:01:20.680
encompasses sort of the back end and
00:01:22.079
front end engineering pieces here uh
00:01:24.759
you've completed your application so now
00:01:26.600
what do you do with it that code has to
00:01:29.119
be built and package in some way so that
00:01:31.040
it can eventually run with all
00:01:32.560
pendencies on a production environment
00:01:35.200
and then because he wrote some excellent
00:01:36.920
tests those need to actually be run
00:01:38.759
somewhere and there's probably some
00:01:40.240
other important checks that you want
00:01:41.640
running like linting and whatnot before
00:01:43.680
you actually want to go deploy this
00:01:45.600
code So speaking of deploy there's a ton
00:01:48.360
of tools out there that you can make
00:01:50.079
sure your code gets to the right place
00:01:51.840
on time and where is that right place uh
00:01:54.920
kubernetes is obviously the big sort of
00:01:56.960
thing these days and there's an entire
00:01:58.840
ecosystem of things just related to
00:02:00.759
kubernetes but you might be doing
00:02:02.680
something as simple as just running it
00:02:04.560
on a static ec2 instance in
00:02:07.640
AWS uh and once your code's deployed you
00:02:10.119
have to actually store your customer's
00:02:11.560
data somewhere so you're likely looking
00:02:13.120
at some type of managed database
00:02:14.840
solution in order to handle that and
00:02:17.760
there's a whole bunch of other things
00:02:18.920
that are actually involved in running
00:02:20.480
your application uh if you need to do
00:02:23.040
something like generate invoices for
00:02:24.599
your customers and have PDFs that need
00:02:26.280
to upload and download you might need
00:02:27.640
something like S3 for that need routing
00:02:29.959
to figure out how one part of your
00:02:31.319
application is going to talk to a
00:02:32.519
different part of your application you
00:02:34.160
might need something like terraform so
00:02:35.760
that you can have all your
00:02:36.920
infrastructure actually L this code
00:02:38.480
somewhere just like your application
00:02:39.720
code
00:02:41.480
does uh so at some point too you are
00:02:45.159
going to mess up production it happens
00:02:47.519
to all of us it's almost right a passage
00:02:49.440
as a developer uh so you better have
00:02:51.680
some monitoring Tools in place and some
00:02:53.879
way to page the people who are on call
00:02:55.800
so that they can come fix it in the
00:02:57.280
middle of the night here so if you
00:03:00.040
haven't guessed it already that all of
00:03:02.680
that is infrastructure engineering um
00:03:05.680
it's a ton of stuff and there's a lot of
00:03:07.400
different system that you need to learn
00:03:09.080
about and way less documentation that
00:03:11.319
you're going to find about uh if you
00:03:13.440
Google like a ruby or JavaScript problem
00:03:16.640
and also we end out having to get in the
00:03:18.840
application code most of the time to
00:03:20.680
make small changes here and there for
00:03:22.159
things so you kind of have to do that
00:03:23.560
part
00:03:24.599
too so even though this is a whole lot
00:03:27.400
of things you have to learn uh there is
00:03:29.519
something scarier flash a little more
00:03:31.720
fun in my opinion too that not only do
00:03:33.879
you have access to all of these systems
00:03:36.080
that other developers may not actually
00:03:37.760
have access to you have full admin
00:03:40.400
access to them which I think of as God
00:03:43.159
mode uh if I wanted to drop tables on
00:03:46.640
Productions or delete our entire
00:03:48.519
production deployment with one command I
00:03:50.400
could go do that at my work right now um
00:03:53.760
so it's a little scary but also like I
00:03:55.799
get to play around deeply in our systems
00:03:57.959
in ways that most other developers are
00:04:00.040
not even allowed to for security reasons
00:04:02.720
so it's kind of cool to actually like
00:04:04.560
have that thrust from your engineering
00:04:06.000
team that yes you can go do anything but
00:04:08.000
obviously you're not going to go do all
00:04:09.519
the bad things um which brings me to
00:04:12.040
another big difference between being an
00:04:13.879
infrastructure engineer and a product
00:04:15.959
developer uh which is well your job as a
00:04:18.840
product developer is to make a product
00:04:20.440
that customers love and want to use and
00:04:22.759
they're super happy that youve release
00:04:24.120
this new feature to them my job is
00:04:26.440
generally to modify the underlying
00:04:28.440
systems in such a way that nobody
00:04:30.440
actually notices I did anything at all
00:04:32.919
um so it is a lot of upgrades and like
00:04:35.000
re architectures and fullscale migrating
00:04:37.479
applications from one system to another
00:04:39.560
databases from one place to another and
00:04:42.120
the last thing that I actually want to
00:04:43.440
do is cause downtime or drop critical
00:04:46.000
data for
00:04:47.360
anyone so why do you want this big kind
00:04:50.560
of scary job where you have to learn a
00:04:52.320
whole bunch of different things uh if
00:04:54.919
you like learning this is a great job to
00:04:57.120
be in it's basically always full of
00:04:59.120
challenges and you're always learning
00:05:01.039
something new so if you're bored of
00:05:03.240
writing your like 50th rails controller
00:05:05.680
or react container this might be a good
00:05:07.880
thing to consider secondly your
00:05:10.280
customers are your fellow developers at
00:05:12.000
your company so if you like those people
00:05:14.479
you basically have a job that's making
00:05:16.240
their lives easier on a day-to-day
00:05:19.240
basis also kind of a special py job uh
00:05:22.600
there are less people who want to do it
00:05:24.639
which means you're also competing with
00:05:26.080
less people for this job which also
00:05:27.720
means you generally get paid higher than
00:05:30.440
other development jobs because it's
00:05:31.720
harder for them to find
00:05:33.560
people and even though that's like a
00:05:36.440
giant list of things that I work on as
00:05:38.280
an infrastructure engineer you do still
00:05:40.319
get to pick your faculty right like
00:05:42.160
nobody I've met that's working this job
00:05:44.160
is amazing at every single thing that's
00:05:45.880
on that list uh people sort of naturally
00:05:49.000
gravitate to certain things and when you
00:05:50.440
put an infrastructure team together the
00:05:52.039
managers are often trying to pick people
00:05:53.880
of various Specialties to all kind of
00:05:55.720
work together so uh as I got introdu as
00:05:59.280
mind are kind of like database
00:06:00.600
performance kubernetes and honestly
00:06:02.479
observability as a thing uh I personally
00:06:04.960
suck at networking but that's okay
00:06:07.240
because other people on my team are good
00:06:09.000
at it and I can just go to them when I'm
00:06:10.840
inevitably stuck on
00:06:12.919
something so how do you get into
00:06:15.639
infrastructure engineering if all you've
00:06:17.240
been taught is Ruby or Java or
00:06:19.080
JavaScript or some other language um
00:06:22.120
just go befriend your infra or devops
00:06:24.759
Engineers ask them if next time there's
00:06:27.319
an outage that you can go Shadow them or
00:06:29.800
just ask them if you can Shadow them on
00:06:31.720
a random day and just sort of see what
00:06:33.639
it is that they work on um I ended out
00:06:36.319
getting into it because I did a rotation
00:06:38.080
onto the team and just never went back
00:06:39.919
so that can be a possibility sometimes
00:06:41.880
too uh but I it's always good to just go
00:06:44.880
get involved and sort of see what's
00:06:46.360
going on with your application outside
00:06:48.240
of the normal code that you're writing
00:06:50.199
on a day-to-day basis so I can leave you
00:06:52.800
with one thing it's that in for
00:06:54.360
engineering is awesome and everybody
00:06:56.240
should try a little bit and that's it
00:06:58.720
that's the whole talk