00:00:04.210
our next speaker is even enemy chinko correct awesome he's from Russia but
00:00:11.839
right now he is living in Serbia he has been a roux beast since 2006 speaker
00:00:19.940
since 2010 led something and a get leopard since 2016 and a little bird
00:00:28.550
told me that he wants brute 50 liters of mulled wine for an after party what's
00:00:34.399
the story bug so let's welcome him on stage and enjoy thank you that's true
00:00:47.899
and today I'll be talking about my
00:00:54.190
experience of organizing remote internship for junior Ruby developers
00:00:59.589
this happened a year ago so this is not related to my working yet lab but in
00:01:07.729
develop I spent time I actually exploring develop and its possibilities
00:01:13.820
and explaining its to other people and I spent almost two months exploring
00:01:20.180
possibilities of github CI and for now i have since there are so many rubies I
00:01:25.219
have a question for you please raise your hands those who are using see I systems okay thank you it's actually
00:01:36.859
hard to understand how when and who is not using see I so yeah I know that's
00:01:44.329
that's a shame to rest Teresa him yeah okay nevermind so yeah I'm started I got
00:01:51.350
my first paid job as a programmer in 2002 and I switched to ruby in 2006 and
00:02:01.210
in 2008 I my project will got bigger and
00:02:07.270
I found another guy with the same experiences me and we started to work
00:02:13.290
this project together I had to tell a bit about about myself in order to give
00:02:20.790
you some context about the story first so later we found two juniors and taught
00:02:29.310
them everything we knew and we started to work together then later our small company been merged to to a small
00:02:38.400
start-up and then one day two guys
00:02:44.879
appeared in our office they were students and they had to finish some
00:02:50.010
project for the university to show and they needed some paper that they have
00:02:55.859
finished some project in some company so we did we gave them some tasks they did
00:03:00.959
it and we gave them this paper and they disappeared later I quit the startup and
00:03:07.519
completely forgot about these two guys but they appeared again like they they
00:03:14.280
graduated from the University and they came to me and they said I won we kind
00:03:19.290
of love Ruby and we would like you to continue teaching us and we want to
00:03:25.560
become ruby on rails developers and since I was working in startup I've
00:03:31.799
learned a bit about how startup work and I was thinking I had a lot of ideas and
00:03:39.060
I wanted to turn them into startups of course and I had another idea that it's
00:03:44.400
actually a good opportunity for me so that i will give some of my ideas for
00:03:50.790
these guys to implement and and i will teach them how to how to build druga
00:03:56.549
ruby on rails applications so two months later they they built a prototype for me
00:04:01.650
and I actually gave some i presented my
00:04:06.989
startup in some mm in some sort of meetups obviously i realized that it is
00:04:13.259
not so easy that the code and even a product is not enough to become a real
00:04:18.959
start-up but and later i joined another company and these two guys joined this
00:04:25.469
company developers and I was kind of co-founder later I quit again and I switch it back
00:04:34.330
to freelancing and then I finally realized that I've missed a tons of
00:04:41.590
stuff I that I was writing code in a bad way so I was actually writing code in a
00:04:47.740
railway and my coat my business logic was coupled to the framework logic and then I real then I started to read lots
00:04:56.350
of books and watch a lot of videos from conferences about stuff like solid
00:05:01.750
principles design patterns refactoring techniques architecture types and so on
00:05:07.690
and so on and I realized that such a
00:05:13.090
thing exists and I had a couple of projects where where I was able to apply these and I even give a talks like stop
00:05:21.250
being rails developer and from way from rails way to model our modular architecture I even created a website
00:05:28.420
rails farce calm and there is a first lesson for you here like don't be the
00:05:36.760
best student in the class because if you are the best student like and you don't
00:05:42.130
have a mentor who will give you a feedback about the stuff you are doing you will spend a lot of time to become
00:05:49.330
better in what you are doing and that's all with the context and let's let me
00:05:58.720
tell you actually about the internship it happened almost exactly a year ago I
00:06:06.570
I found myself working half time on a freelance project and I was thinking I
00:06:12.850
was looking for a way to invest the rest of my time in something interesting and potentially useful and of course I had
00:06:20.500
even more ideas of projects and I decided well why can't I find the couple
00:06:30.910
of guys again and they will do this they will implement the prototype from
00:06:38.520
prototypes for my applications again and I will teach them so this would this is
00:06:46.500
what came into my mind so what will in turn get so basically he will get a
00:06:55.160
project in portfolio you'll get an experience of development from idea to
00:07:00.210
production he will get the word working team experience and remote work
00:07:06.330
experience because I at this moment i moved to do Serbia but I was going to do
00:07:13.560
it in Russian so and the technology stacks was pretty simple I wanted to keep it simple and it looked like this
00:07:21.750
and the requirements were also simple basic ruby on rails and rails knowledge
00:07:27.630
and ability to contribute at least 20 hours per week so I wrote the blog post
00:07:34.950
and accidentally become very popular and in first couple of days I've got 20
00:07:43.110
applications and then in a week I got something like 40 applications and I
00:07:51.480
realized that at first I was excited because it looks like this thing become
00:07:57.600
popular then I got a bit scared and I realized that probably I need to choose
00:08:04.050
the best and I started to think on some tests for them in order to reject the
00:08:11.460
worst tend to to do projects with the best while I was working on death I've
00:08:19.620
got about 60 applications and then another idea came into my mind well if
00:08:28.200
there is such a big demand maybe I should try to turn this internship into
00:08:33.300
her if not start about something which could scale then and then I decided to
00:08:40.620
turn this test into aptitude test so I was not going to reject anyone if you
00:08:46.500
were able to finish this test you will be you will be able to work on a project and let me show you
00:08:55.200
what how the test actually looked like so first first part was really simple so
00:09:01.920
you need to create a simple web application and there should be a
00:09:06.990
registration once registered you should be able to see the list of product you should be able to create a product and
00:09:13.589
you will you should be able to view the product that's really simple and most of
00:09:19.500
the interns variable to accomplish it in a day or two but then whenever someone
00:09:26.220
reported me that he is completed first part I sent him the second part and in
00:09:33.180
the second part there was a new set of requirements and the first requirement
00:09:40.649
was that now we have three different type of users and those three different
00:09:47.610
types of users have different registration forms and different validation rules and moreover now we
00:09:56.550
have different types of products and different permissions according to the
00:10:02.540
types of users the third part in the
00:10:08.640
third part i introduced the ability to purchase a product and it was
00:10:13.800
implemented through work with external API and the the purchase logic was a bit
00:10:20.790
complicated so that if you would implement it in a very straightforward way you will end up having like a bunch
00:10:30.240
of nested if statements in the controller action and I was not doing
00:10:36.810
any code review between those steps and guess what the final result looked like
00:10:43.500
this and this was done intentionally because at this point the year old wrote
00:10:53.220
the worst code they were able to write and let me show you a couple
00:11:00.329
snippets of this code so this is let me explain what was my intention while
00:11:06.029
while I was creating those tasks so my intention was to the idea is that there
00:11:15.989
is no default rails way to solve their problems I was introduced so someone
00:11:21.839
would for example for different types of users someone could start doing STI
00:11:27.600
single table inheritance someone would use some gems someone would create
00:11:33.269
multiple models and so on and so on and I well I wanted to make them think I
00:11:41.730
wanted them to make decisions that was my goal and they made decisions and they
00:11:46.850
felt the pain from their decisions because every business logic pivot
00:11:53.179
forced them to think a lot and to feel the pain from their decisions because
00:11:59.009
they they actually don't know how to write code properly so they're doing it
00:12:05.069
somehow and this is how this method in controller looks like in some of the
00:12:12.209
projects so and this is not an example
00:12:17.869
so common mistakes common problem so they tend to ignore all levels of
00:12:23.519
abstraction so that low level work with external PAP I and business logic in one
00:12:29.100
place is a like very common thing to see in this code they tend to use a lot of
00:12:35.790
gems because they kind of these gems are kind of a standard in a community but
00:12:42.029
they usually don't know the limitations of which these gems i introduced into
00:12:48.179
your system and it means they but they treat them like it is the only way to do
00:12:56.639
it like and they treat this limitation as a thing with which cannot be changed
00:13:07.009
nobody knows almost nobody knows about service objects and therefore they tend
00:13:12.749
to put business logic in pretty random places and spread it across across whole application and
00:13:19.820
of course bad naming and after the after
00:13:26.400
this this test there were a couple of next steps and the first steps whenever
00:13:33.360
I should say that they haven't like finished the helm started this
00:13:39.570
internship this test at the one moment they were coming they will finish in
00:13:44.850
this test in batches and whenever first six or seven people have finished that their test we organized the Hangout call
00:13:54.600
and did a code review like we went through all the steps of every project
00:14:00.930
and analyze it every decisions and describe why those decisions are bad or
00:14:09.450
good then I read them short lecture about patterns which can solve the most
00:14:15.690
of the problem they had then they did a refactoring session and then did a cross
00:14:23.430
code review when they were given the code of each other and then finally the
00:14:29.820
project board have started I have not so
00:14:36.000
much to tell about the project part I will just demonstrate you the results one of the first results one of the
00:14:43.620
first thing we did is this Ruby or rail squeeze and it was done really fast by
00:14:52.620
the first team and this thing got very popular if you haven't seen it you should try it another thing was and I
00:15:02.370
really love this idea because it was so mad because interns were developing the
00:15:08.940
platform for internship I real love this idea and first thing they implemented is
00:15:14.339
the task delivery automation whenever someone tagged some someone created tag
00:15:20.700
in the repository they received the next task automatically and then
00:15:26.620
another team created the dashboard so that I could browse the projects and the tags easily the next project was very
00:15:35.200
ambitious open source project it's supposed to be open source alternative
00:15:40.630
to New Relic I don't think it's finished but the guys who were working on this
00:15:47.500
those of our were actually two external mentors except me and they had very
00:15:56.710
pretty challenging task this is why I mentioned in them and they were of
00:16:02.200
course the problems when when I had almost 16 or something about it interns
00:16:10.870
who were ready to work on the projects I had a problem because I found only these
00:16:17.290
two mentors and they had only one project so they took four of my mentors
00:16:22.870
and I had to deal with the rest of them at first I thought I thought this is a
00:16:29.350
good idea because when you're like your expectations are always like this like
00:16:34.870
you will give them direction and they will steadily go in this direction and then you have three projects your
00:16:41.320
expectations all like this so you they will steadily go in the direction you're
00:16:46.440
showing tonight but in reality it was more like this because of a bunch of
00:16:54.730
problem basically no my mistake was that
00:17:00.010
I was treating them like it is not a real project but it was a real project
00:17:09.220
and you have all the men all the management problems like in the real
00:17:15.220
project but they're even like even more these problems I even more aggressive because the people are you working with
00:17:22.960
are less experienced so here are some of the problems I had so collectively
00:17:29.440
responsibility people like saying that they will do something but they are not
00:17:34.960
doing it sometimes people are just not able to communicate with each other
00:17:42.290
in a good way and this was also a problem sometimes it is it's a lack of
00:17:48.630
motivation and as I said the lack of manners but the the main problem was
00:17:55.740
that I realized that in every project I had to play these three roles I had to
00:18:02.370
play the role of product owner of project manager and of code mentor and
00:18:10.020
it was too much for me and of course it ended up with burnout and these are my
00:18:17.760
mistakes so I'm still not sure about it whether i should take money from these
00:18:23.400
people but i'm still thinking on this two big teams I think two for the first
00:18:31.710
project is is just enough and I think I should have been filtered them I should
00:18:38.430
have been rejected some people because I had a lot of problems with just two
00:18:44.940
people if I would like through for them it would be much easier for me so things
00:18:52.590
that work not so well this project work but things that work just perfectly this
00:19:00.090
aptitude test I realized that it was that good because in two months I
00:19:06.630
started to receive emails from people who passed this aptitude test and they started to to say hey I one thank you we
00:19:15.890
realized what you were saying us and we were able to get a good job now so then
00:19:23.340
I I realized that it was really good thing and today today I have a bunch of
00:19:32.180
thoughts on this because a year passed and of course I was thinking about it
00:19:37.860
and I'm thinking maybe I should like try it one more time but we'll see so let's
00:19:45.900
talk about junior needs junior needs first of all he needs a real project to
00:19:51.600
work what what what has been real because if you're because the real project gives
00:19:59.190
you a context and the context mean that there is always a business reason why
00:20:05.280
something should be done it's not just some some fake stuff and it is very
00:20:10.860
important because well there is always as I said there is always a real reason
00:20:16.290
why something should be implemented they
00:20:21.510
need something they need some something some achievement to put in in their
00:20:26.820
portfolio as I said previously they need whole development cycle experience and
00:20:33.020
they need a team work experience because it is also a problem for many of developers of of beginner developers and
00:20:41.690
how do they learn if they are not like in any internship or workshop how do
00:20:47.490
they learn one way to learn is to go to a conference and these gray spot in the
00:20:55.590
middle it represents your brain your current skills and acknowledges and
00:21:01.550
those lighter spot's those are new areas
00:21:07.200
of knowledge you will learn about like in after you visited conference this is
00:21:13.980
how your brain will look like we can represent it in this way and the bad thing here and I like this way of
00:21:21.630
learning a lot I call it exploratory learning you learn about a lot of new stuff around you but the problem here is
00:21:30.630
that you had to choose you have to choose where to put your efforts on and if you choose for example to become
00:21:37.790
veteran Alex here and you decide to spend like next at two weeks to improve
00:21:44.010
your alexr skills you will improve it and this area of knowledge will become
00:21:49.530
stronger in your brain but the rest of the stuff you will just forget that's
00:21:55.830
the trick that's how our brain works and so this is why taking notes at the
00:22:02.100
conference this actually might help another way of learning is a book reading and online courses this might
00:22:10.840
help you to develop a really sophisticated picture of a subject in your brain like a lot of connected areas
00:22:17.470
and related stuff but the problem is that this knowledge is not very
00:22:22.540
practical the problem is that when you're maint real problem you will not
00:22:28.210
be able to apply your knowledge to solve this problem quickly so you need to
00:22:33.490
develop skill skills as well and in order to develop skills some beginners
00:22:40.330
do do the pet projects and it works well
00:22:45.700
so they really develop practical skills they know how to use tools but the
00:22:53.680
problem here is that they don't have a person who would give them my feedback
00:22:58.930
and if you don't have a have a feedback you don't know your mistakes you don't
00:23:04.750
know you don't have a reason to fix those mistakes and you and you just end up having some delusions in your like
00:23:11.890
picture in your mind set right and another bad thing which a lot of
00:23:22.540
beginners think so they think that okay
00:23:27.880
I'm graduated now I want to become a ruby on rails developer ok I will spend next six months like reading books
00:23:36.490
watching online courses and so on and in six months I will magically turn turn up
00:23:44.710
into a rails developer and I will get a job and stuff like this but I think in reality it works a bit differently the
00:23:52.150
graph looks like this so first you need to learn to do some some something
00:23:59.110
useful and if you learn how to do at least something useful it means that for
00:24:06.010
sure there is a person who will would like it who would like to pay you for
00:24:12.310
doing this exactly this kind of tasks for example you could learn how to
00:24:17.320
how to scrub your pages and I that these
00:24:23.440
this skill is still required for by a lot of companies so I know that most of
00:24:31.360
the senior developers would consider this task really boring but for juniors it's just it is it is a very good duck
00:24:38.470
to to grow and then you get another and
00:24:43.509
you make another step and another step and you learn how to become more and more useful and this is how you become a
00:24:49.710
strong developer and another way to improve yourself is to contribute to
00:24:56.649
open source and see I had to mention gitlab for example as an example of
00:25:02.049
major open source project because in amateur open source project there is a
00:25:09.990
set of different problems and you can choose the sides size which is right for
00:25:16.539
you you can suit you can choose perfectly sized problem which is not too
00:25:21.940
boring and not too scary for you another good thing about mature open source
00:25:27.129
project is that there is a community and the community means feedback and as we
00:25:33.159
said previously feedback is crucial to your growth okay let's talk about
00:25:38.470
seniors yeah and seniors they have lots
00:25:45.580
of tasks they are very busy so and of course they have a lot of important
00:25:51.850
stuff to do but they also have lots of routine tasks they have a lot of research tasks they have a lot of nice
00:25:59.440
to have features to work on they have lots of flow priority features and they
00:26:07.090
have missing features in their favorite open source project but obviously they don't have time to contribute to these
00:26:12.519
projects and of course they have tons of ideas for their side projects hmm it
00:26:20.429
looks like they have exactly this kind of tasks which are required by these
00:26:27.279
juniors right so why can't we take these juniors and start giving them
00:26:32.429
than these tasks well you don't want to
00:26:37.760
to deal with just any junior with any beginner you would like them to have the
00:26:45.720
same mindset as you have and you would like them to look like this so they
00:26:51.450
ideally did they should share the mindset you have ideal situation would
00:26:57.630
look like this like you would like just to clone yourself right but since it's
00:27:03.270
not yet possible we had to like find a workaround and let's take this mindset
00:27:09.210
and see where where it comes from so
00:27:16.260
this small piece of of your mindset I know that it came from from one up
00:27:23.100
on one project like you you did something you you made some decision and
00:27:30.020
well you basically erased half of the database in production maybe not the
00:27:35.460
health but you learn it you've learned from this mistake right then was another
00:27:41.429
it was another project and you wrote very inefficient query and like and
00:27:48.050
simple operation they took like half an hour in your in the website so and
00:27:55.080
you've learned this lesson as well and there were more and more projects like this and you and and you've learned and
00:28:02.820
this is how you got this picture this is how you go to your mindset and this also
00:28:09.000
can be represented as a path like you went for a couple of projects and you learn some lessons in these projects and
00:28:17.720
what I'm suggesting is to like split
00:28:23.340
those is to turn these turn your
00:28:28.350
experience from these projects into exactly same set of tasks which I was
00:28:34.080
describing which I was given in the in this internship like this you can
00:28:39.270
represent your experience as a set of tasks which which is also a set of
00:28:45.980
business requirements pivots so you can turn the first experience in this set of
00:28:53.100
task in the second one and the third one this is of course just a hypothesis but
00:29:02.150
for now I have like a huge pile of tasks like this i would like to delegate them
00:29:08.940
and those will be very useful if someone would work on this on them it will be
00:29:15.870
you it will be very useful for my company and the solution the solutions
00:29:23.340
will take a lot of attention and now if
00:29:29.340
I ever decide to do it again what I will
00:29:34.440
change first of all I will develop more tests so I have I would develop tests
00:29:42.030
for like for myself I already have an idea of a test for our spec for work
00:29:47.820
with external IP api's and work with the CI and I will be calling not only for
00:29:55.260
interns but also for mentors and I'm going to help these mentors to turn
00:30:01.620
their experience into the same into the tasks like this and of course I'm going
00:30:10.020
to reject the bad nudist because sometimes there are people which are
00:30:17.160
just not worth your time I think that's
00:30:22.500
it for me like I still have those stickers so please come and ask ask me
00:30:30.780
for them i would like to like to talk to those who are somehow related to
00:30:38.929
teaching to dealing with newbies to teaching newbies so that's it thank you
00:30:54.770
Thank You gun
00:31:05.750
you