Through hardship to the stars. History of the internship program

    I do not like the current market of web developers. In particular, Moscow. Actively do not like. Demands are high. The experience is small. And if it’s great that the code is often scary, team practices are not developed. Where these N years worked - it is not clear why they did not develop - it is unknown. And you rarely see in the resume at least something from XP (review and CI, not to mention paired coding with TDD) ... And so that you do not just “hear and always want,” but immediately “know how to cook” - work, as you can see, they’re not particularly looking for and, in all likelihood, chained to offices in batteries, they’re quite happy in their roles as presenters / team leaders / architects.

    And even if you agree on cooperation with an adequate-looking person, it is still not known what will work out with him, how we work together, whether he will harness as you expect. And it remains to be seen whether the impression of a person corresponds to how he will manifest himself in the role of a specialist.

    So, there is a problem - we will act.

    And we opened an internship program. Well ... so as not to lie: it’s not that they directly Opened up, and not even even the Program, but with a source of theoretically trained, but almost inexperienced guys, they found and agreed, a message was posted on the source forum, and I waited for the weather by the sea.

    Next is a lyrical story about how it was.

    Was given:

    • the need for talented, not spoiled and “burning” recruits;
    • my own managerial interest and desire to grow in different areas of the web development field;
    • moral and ideological support of company management;
    • understanding of “why and for what.”

    It was not given:

    • experience in conducting systematic long-term training “from scratch”;
    • significant material base;
    • time (I have full-time work on current projects);
    • understanding “why would they need it without money and a clear plan?”

    What to do with such sources was not very clear. Therefore, he put on an innovative flexible methodology “I will begin, and then we will see”. And they sent applications (a little), but there was a lot and was not necessary. The chosen methodology forbade a sharp start.

    Some more input
    string bags and emotional longings.

    Of course, we will be training in PHP (most often it is php developers that are needed, and a language for beginners is quite suitable). And you have to come to terms that it will be Win. But we will take the bar high. Since almost nobody has been coding on the “clean” php for a long time, let's take the framework. Of course, Laravel (wide functionality + we use in our projects + I personally like it myself). And Laravel also has a lack of Russian-language support (let them immediately understand that they will have to be able to work with English-language documentation ... only ruthless hardcore). Because Since there is no time, then a “kindergarten” is unacceptable, therefore, a quick “screening” of children who are mentally unprepared for such an active practice is necessary. Plus, we need automation of the process, again, due to lack of time.

    In addition, the internship should be a team. It must include git and group work on tasks. At the start, I naively believed that the tasks of future trainees would be brought to me on a silver platter (with a little edge), and among them there may even be brilliant things that we will sell on Google for millions of money. But a backup plan is always needed, and it was: invent tasks for interns themselves.

    Two words about the height of the bars: we have complex projects. Basically b2b-services on a financial topic (where there are not even fronts), only api-services and the implementation of all kinds of gates according to the specifications. And we decided to do an internship (I remind you) not just like that, but to develop activities in our field and to ensure a personnel reserve.

    And yet - “kicks” from my side should be completely absent. If the intern really wants to get practical experience, if he is motivated and interested, he will push me on his own. I gave myself the vow: to respond in a timely manner and help constructively. To provoke activity in those who did not stir, did not see the point (again - time!), And to be there.

    Having thought over all this strategy, he did not evaluate in advance its success or failure. Because I didn’t know with which contingent I would have to work. One more flexible methodology for the note: “do what you must, and be what happens”.


    Due to the need for teamwork and the absolute uselessness for anyone of our own “corporate site”, the site of FINTEC_FAB was chosen as a site for interns. The idea was born of itself that the internship will be open, we will do everything on the git hub. No additional “troubles” in the form of dev servers and ticket systems were useful.

    Trying at first to at least somehow systematize my work on this project (I'm still a manager, and fearing a large stream of randomly tuned interns, I could not do without an acute attack of “management”), I tried to formalize the process in Trello, or in some other then ticket gizmos, but this temperature quickly dropped and as a result everything remained at the level of tasks + commits in the git hub and in no way regulated communication in skype. I didn’t even get an ex-file to keep track of the participants — it was not required.

    Start. Automation is our everything

    The first thing that was done was, of course, the wiki resource, which described the long and tedious process of preparing the working environment on the win platform. Which, theoretically, should be simple and universal, even for completely zero practitioners. Following the task of “high bar”, Denver and other LAMP-points under WIN were completely excluded. For the happy linux craftsmen, a postscript was made “do it yourself, you can.”

    In short, the automation included the Vagrant configuration, specially prepared and configured with all the lamp software (VirtualBox) on the ubuntu server, and a bunch of instructions on how to start it all on windows. It was also necessary that all this work together with PhpStorm (for two reasons: this IDE is used in our teams, and I did not want to delve into the intricacies of other environments). Ideally, the trainees should have started with a flick of the wrist a working copy of the project with all the necessary body kits.

    Note: when I started to regret this decision with the IDE (100 bucks then for a personal license - not superfluous!), Then under the internship program (more precisely, under the result in the form of open-source libraries) JetBrains gave us a free license, for which they - separate sencue.

    After the appearance of Laravel Homestead, the instruction quickly migrated to this feature, because with the first version, I got enough of it (all the lack of time), and it (feature) already provides a rather powerful and flexible config for Vagrant and a supported (hooray! no longer mine) virtual boxing machine. (Whoever is not familiar with the tool: Laravel Homestead can be used not only for development on Laravel).

    First applications

    Interviews as such, selection criteria, and so on - simply did not exist. He answered (and I continue to act in the same spirit until now) - to everyone. A person sends an application, I ask him to find me on Skype. Next we contact, explain what’s what, answer questions. I voiced the main points:

    • Collaboration is non-financial.
    • There are no obligations or deadlines.
    • We work exclusively on mutual interest.
    • If there is no interest, we don’t work.
    • Getting into the state is possible, but unlikely.
    • A reward for accomplished tasks is possible, but even less likely.

    And so it began. It was fun. I was worried that I chewed too much on setting up the development environment and wrote too many beeches on the wiki resource. That some kind of trained dudes will come and will not respect me for this. But everything turned out to be much more prosaic. At the entrance, people who received paid (O_o) theoretical training within 1-2 months of developing in PHP (o_O) were expected. But immediately it became clear that this preparation did not even include rumors about:

    • frameworks
    • composers
    • git ah
    • patterns (there was a bit of MVC)
    • code rules and standards
    • console teams
    • not to mention other bubunts

    But he perfectly guessed about the background in the form of software a la Almighty Denver. I wouldn’t even take such astronauts, not to mention coding in any of our projects. But in the internship - what can you do! I thought. Took, as they say, for tug ... Wiki resources have been added even more. The first participants brought a lot of profit in the form of understanding what should I do with all this now.

    Initially, I planned to completely exclude theoretical training. Those. at least those who knew the php theory were expected - those who came later to learn how to code on it. In general, it turned out that way, but the above failures in the theoretical part had to be closed nonetheless.

    Therefore, I started with those who could drive up to our office (a group of 4 people), and a simple technique started: small thematic workshops: introduction to the framework, a demonstration of working with git, distribution of small simple tasks. With all this, developers from the company staff actively helped me.

    Then the trainee profit loomed:

    • Interns receive everything that is necessary to know in modern web development (not only coding, but also tools and processes).
    • They can choose in which direction to drag themselves.
    • Whatever they do - authorship is saved in the form of commits on the git hub.
    • If the task concerns web interfaces, it will forever be available for demonstration on our “corporate website”.
    • High-quality review, including nit-picking of all stripes - from petty-malicious to variable names, to serious at the application architecture level.

    Eh. They would give me such opportunities for practice when I was just starting my way in web development ...

    About the results: after a couple of months, the first group naturally broke up. We managed to make a section with an internship (for submitting applications directly, and not through the source forum), a couple of tasks that did not fall into the git-hub, sending letters and something else simple. In addition to the coder’s profit, they received from me a carriage with a cart of all kinds of smart tips on the life of the developer — both about how best to look for work, and how to make friends with a possible future team, etc. One of the guys then successfully took the advice (got a job and is rumored to be quite satisfied), one remained with us. Made a useful service - an emulator of the kiwi system. Now helping me with new interns. The rest are “missing”, and I hope that my work has brought them a significant share of benefits.


    According to the results of the first participants, after optimizing the “entry” processes and intern tools, I decided to open the field of activity to remote participants. Intentionally complicated my life, to say the least. In addition, I had to remain alone (our regular soldiers could not help with the format of remote work). For remote participants of the internship, a strict entry condition was the independent adjustment of the working environment. Which, as a result, turned out to be a rather serious barrier.

    Approximately half of the applications after the first acquaintance and the task of setting up tools for yourself disappeared immediately and completely. For reasons unknown to me: in view of the relatively stable flow of applications and the extreme time limit, I deliberately did not seek feedback. It was enough for me that a dozen people had no problems with setting up a working environment before and they were all happy.

    About a quarter: they asked questions, helped with tips and links to materials (I forbade myself to chew on the steps), but apparently they expected something simpler; Someone could not cope with ssh keys for ubuntu, someone stopped at the stage of work with git.

    About 10% still managed everything, but then they also disappeared. Probably because summer and gardens :-). Nevertheless, the reason in this case was obvious - the starting “fuse” went somewhere in the opposite direction. They wrote about this to me, apologized, promised to return to tasks, but never returned. All I could do was console you with the fact that “you do not owe me anything, but on the contrary, I owe you, so please contact us any time.”

    In general, the guys turned in most of the very “zero”. Probably my policy on the level of entry and refusal of detailed assistance was an obstacle to further work (but this is only an assumption). Many (I think) simply found themselves another (more official) internship and learn the same thing (we will not mention the quality), but not for free.

    Frankly, I am not at all interested in why they did not want or could not continue. Because it is not yet included in the goals and objectives of the internship. And I needed those who independently will go through the first stage, having shown a sufficient level of patience, and then I can teach them how to code correctly (in the right environment and on the right tools).

    What is more important to note, there were no fools among the second half. I was all afraid and invented ways to politely dare especially “gifted”, but they weren’t. And all my art and literary blanks disappeared in vain.

    But enough about the sad

    The remaining percentages are successful (and some people, having experience - very quickly) - overcame the starting piece and received tasks. Curiously, no one brought the task himself. I had to invent, invent something that should be useful and interesting.

    In order to avoid individual work, I began to “dig” various things for webinars with a demonstration of the desktop, with the ability to remotely “poke fingers into the code”. You can write a separate story about this. It was investigated pieces of 20 different software on this topic. Many did not work at all. Many worked, but only for some participants. Plus it was difficult to bring several people together at the same time, but it turned out that they did not see or hear nothing ... And all over again. As a result, everything turned out to be completely working only in citrix (but still lagged delivering my screen in real time), and ultimately stopped at (that's where everything worked without complaints, only the guys with narrow Internet had sadness channel).

    And now, when all the problems with the tools have been resolved, the effectiveness of remote “seminars” turned out to be significantly lower than offline workshops. This is not the kind of webinar - when you just “broadcast” (and let it be rich to those who listened and poorly to all idlers). Here I needed understanding and “hearing” - I could not afford to then repeat to everyone what was voiced by the whole group. Subsequently, the number of restrained in oneself, unspoken aloud phrases “I told you” simply went through the roof.

    The era of individualism

    The flow of applications was stable, but there were not many guys in the active part. For reasons of uncomfortability of webinars, as well as a small number of active audience, he temporarily stopped the webinar approach and decided to try to work individually.

    The process now went like this: we agree on a task (or one task falls on a whole group), the guys code, readily write to me, I take a branch with the task, look at the code, leave comments in it and commits to a separate branch. The github perfectly shows all my “nit-picking”, the intern takes (or not quite) all of them, and makes the next “release”. All disagreements are resolved on Skype. When the task is more or less realized, the most time-consuming begins - you need to test. And of course I immediately catch the “jambs” that block further work. I report errors, and so on.

    And suddenly I find that we are now working on a “standard” development process :-) I was so “fooled” in trying to optimize my cooperation with the interns that I did not immediately notice how the process went on such familiar footing.

    About Communications

    Nothing complicated. The main thing is that everything is honest, respectful and prompt. You can’t disappear, you can’t stop responding for a long time - at least disrespect. You can’t refuse, because this contradicts the idea of ​​the project that was started. I warn the participants about all difficulties and dangers in advance (this is another possible reason for the disappearance immediately after meeting). I answer stupid questions with links to Google. On clever - I understand, help solve problems. It takes a lot of patience and willingness to repeat the same thing (to different people). And a certain limit of rigidity is necessary in order not to waste time idle, not to “sew up” and not to lose interest yourself.

    And it was always important not to miss those who are really interested. I am fully aware that people who are initiative, quick-witted and sane - there is room to go, besides my not-so-systematic initiative. And now, when out of many dozens, only the most motivated remain, who work together on tasks and help each other - I have less and less time, problems are solved much faster than at the beginning; the process goes along the beaten track. And ready for new experiments.

    About the results

    Experience - he is such an experience. What was feared at the very beginning is now beyond recall. The potential difference of the internship participants is great. The amplitude of sorrows and joys from the failures and successes of different people is high. The brain periodically goes into debug-mode and sometimes does not want to return from there. Ways to solve the same small problems are not that amazing (which code I just didn’t see), but sometimes they enter into a complete stupor ... it seems that it’s “wrong” done, but it’s not clear how to do it right). It is not possible to argue in some things about some of the guys. From their little experience, they find impenetrable arguments in favor of their decisions. And for me personally, this event perfectly removes oxidation from the brain covered with “serious years of experience”. And significantly expands the horizons of perception of technical and human-development problems.

    In the bottom line, guys come out of me who:

    • Learned to write “clean” code according to the rules, understand the importance of standardization when working in a team;
    • Able to work with git and git hub, IDE;
    • Cured of Denver and other non-tearing tools;
    • They are able to work with documentation, independently find solutions to problems;
    • Conventionally they know the Laravel framework, are able to handle migrations, ORMs, view controllers, models, understand the importance of layered architecture and putting functionality into components;
    • They are able to find ready-made solutions on the network and connect them to the project;
    • They are able to write tests and understand why they are needed;
    • Familiar with things like queues and asynchronous processes;
    • To some extent they can handle the frontend (bootstrap, jquery);
    • Particularly advanced - receive recommendations;
    • They have a common understanding of what tasks in web development can do.

    To Be Continued ... Possible Future Plans

    • To increase the audience - to do everything more systematically and correctly, to attract more participants;
    • To expand the technological stack - to increase the complexity of tasks, to raise the mobile direction (mobile fronts on web services);
    • To make friends with Moscow universities, conduct start-up trainings, give introductory lectures to students on various highly philosophical and mundane topics about their future in IT, help to navigate in the choice of development directions;
    • To systematize and expand organizational work - it is possible to attract one or two assistants;
    • To attract time and money - I want a separate room for offline meetings, and for other small expenses;
    • Due to the internship - to rock the direction of open source, make various plugins and other things that are useful to the world;
    • At the same time, experiment in new web development technologies.
    • There is an idea (so far unformed) to take orders for “training” developers on team processes for solving problems from other companies (with a return);
    • Somehow, rock the theme of front-end technologies (in our main team there are practically none).

    Pruflinks - a section where you can apply. He is also a “corporate site” and an intern patient for experiments. - the one that scares beginners, wikis. - github. - configuration for vagrant. - Laravel Homestead documentation. so far the only task brought to “full mind”, implemented with excessive thoroughness, covered with the correct tests with mokas and dancers, using asynchronous processing through task queues and http callbacks, designed in the form of packets connected via the composer (agree ... write such a thing in resume for junior is not weak, m?)

    UPD: I don’t understand why commentators have an opinion that this project is only for students. I did not say anything about the socio-material situation of the internship participants. There is probably an omission in the post, but I will not correct it in detail. I’ll just mention that at the moment, the internship participants are not students, but adults (from 20 to 56 years old), all (judging by the initial information) have a stable financial and social position. Work with universities only in plans, because this requires funding for our project and a special and clear concept of work in the student area.

    Also popular now: