Talks

What I Have Learned From Organizing Remote Internship

EuRuKo 2016

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