This is the second part of the story of a small internship in a small company. In this part, I’ll talk about how the internship in 2013 passed in fact in relation to the previously developed plan, here are collected observations and results.
The first part can be read at
this link .
Introduction
The previous part of the article was purely theoretical. The result of theoretical fabrication was an internship plan. Next, it was necessary to arrange the deadlines for each item’s readiness and implement the plan:
- Preparing text ads for search ( by mid-May ).
- We run ads on all selected channels ( in the middle of May ).
- We are waiting a bit (all applications are processed by HR as soon as possible , we planned to start inviting for interviews when a certain number of applications are typed).
- HR conducts telephone interviews ( until mid-June ).
- In mid-June, we conduct face-to-face interviews ( a week or two before the start of the internship ).
- We select on the basis of the results of the interview of the interns ( a week before the start of the internship ).
- We develop a plan of lectures taking into account the technical level of interns ( to the beginning of the internship ).
- We come up with practical tasks for each topic ( in the first week of the internship ).
- By the beginning of the internship we prepare laptops for beginners ( the day before the internship begins ).
- We are launching a two-month internship ( from July 1 ).
- We monitor the progress of interns ( throughout the internship ).
- If necessary, we sort out some topics in more detail ( throughout the internship ).
- In early September we sum up the internship results and make appointments to the team ( in the first week of September ).
All dates were tied at the beginning of the internship, July 1 could not be moved anywhere: neither in the direction of June because of the student session, nor in the direction of September, since it was planned to finish the internship before the start of study, and reducing the duration would inevitably lead to a decrease in its quality.
')
Internship Preparation
This section presents the results of preparation for an internship until the interns exit. For convenience, the activities are grouped with respect to the points of the plan, but with the general chronological order preserved (almost).
Ad texts
The text of the print ad was generally similar to the text of a regular job, the only difference being that we offered paid internships. In the announcement on USU mathematics, the emphasis was placed on the proximity of the office to the university building (2–5 minutes on foot).
Observation number 1
The first responses revealed the students' need for compulsory work practice. As a result, we were forced to quickly understand and agree on what is needed on our part to close such a need (this issue was completely delegated to HR). Having gained clarity on this issue, we quickly replaced all the announcements - in the new ones they wrote that we would close the practice for students.
This (slightly obfuscated) ad was prepared by our HR Observation number 2
Realizing that students need compulsory practice, we are embarrassed. Try to answer the question: who will look for a practice in summer? You will probably imagine the last gibberish. So we painted this picture. Fortunately, spoiler , everything was much better.
Internship applications
Applications were accepted from mid-May to mid-June. If I remember correctly, there were a lot of non-core applications (nonresident, 1-2 years, non-technical specialties, etc.). Among the candidates were 16 people suitable for the profile.
Observation number 3
What we feared when we completely delegated telephone interviews with HR happened: in our answers, new OOP principles appeared, like “polymarxism”, a new topology “everything is not with everyone” and so on. Fortunately, a simple post-processing of answers solved the problem.
Internship screening
Interviews were conducted approximately with a shift of 3–7 days, if you count from contact with HR. They were invited to interviews on the basis of data from a questionnaire and a summary submitted.
Observation number 4
Inexperienced students, in their resumes, write key skills to everything they’ve ever heard / seen / used, regardless of the degree of possession of the specified tool. So, according to the resume, every second student who came came to have all these skills: HTML, CSS, JavaScript, jQuery, Perl, C ++, C, Java, C #, Python, PHP, Assembler, SQL, MS SQL, MySQL, UML, Linux ... After the third interview, we realized that with this purpose in the resume you can not even look.
We gave an invitation for an internship or refusal during the week. First, we wanted to first collect statistics in order to understand the average level of candidates. Second, they wanted to recruit the coolest students, and there was still time before the end of the recruitment.
Selection funnel
By mid-June, we decided on four future interns. This was the selection funnel:
- ?? telephone interviews
- 16 completed questionnaires
- 10 face-to-face interviews
- 4 interns
We took the fifth intern in the last week of June: he came to us on the recommendation of an already taken candidate, passing communication with HR. As a result, five people were taken for internship:
- mathema of USU;
- graduated from the 3rd course.
The answer to the main question, who is looking for an internship for the summer in the summerFrom the sad : candidates came to us who were not taken on internships at other companies. That's why you need to have time to disassemble cool interns before! And not like us - in the month of June!
From the positive : the students did not look for an internship for two reasons: they thought that they should go out immediately after the interview, but they had a study session; For some organizational reasons, the students did not know about the mandatory summer practice. It turned out that thanks to such students' ignorance, we “podgadali” the right moment.
Observation number 5
All the interns were bothered by the following things:
- how many hours you will need to work after the completion of the internship;
- is it possible to work on weekends;
- Is it possible to partially work remotely?
So we answered these questions: you need to focus on 32 hours, but at least - 24; You can work on weekends and remotely.
About advertising channels
The most effective from the point of view of the final result was VKontakte + personal connections: one candidate caught through a social network recommended three more.
In the second and last place were the announcements on USU mathematics - they brought another intern.
Job preparation
In mid-June, when we decided on only four trainees, we were asked to exact the exact number of future trainees, arguing that furniture and equipment should be ordered in advance. Here we had a trilemma, since there were three more candidates for two potential places - a choice with three outcomes: we won’t take anyone else, we’ll take only one, we’ll take two. As a result, they filed an application for five jobs - if they took the sixth intern, then they would think about solving the problem in fact.
Observation number 6
In a small company with limited resources, it is important to plan your expenses in advance - you cannot come to the management and say that we will have N trainees tomorrow and they need jobs.
The composition of the intern's workplace:
- Rough notebooks with Windows 7 and Windows 8 (not very powerful processors up to i-5, 3-4 GB of RAM)
- Monitor 19 "
- Wired mouse + keyboard
- Office table
- Office swivel chair on wheels
Observation number 7
If you do not explicitly indicate the exact characteristics of the ordered equipment or do not agree on the selected equipment, then you can end up with something completely different from what was expected. It should be borne in mind that between your application and its implementation there will be at least two people: one chooses the technique, the other agrees the estimate, and both of them may be far from understanding the needs of developers for the power of iron.
In principle, the resulting laptops for training and tolerable in terms of ease of development was enough.
Internship
Start
A series of accidents, including “sudden” examinations and unavailability of workplaces, and the “non-shifting” start of the internship shifted from July 1 to the eighth, and we received another week to prepare lectures and internships.
Setting up the workplace
After receiving the laptops, the trainees first of all began to install and adjust all the infrastructure things. In total, this process took
one to two working days .
Lectures
We are fortunate that all our interns have completed six semesters of maths, since they all had the same IT-objects plus / minus. All of our trainees were familiar with Java at the undergraduate course level “OOP: Java”.
The theoretical part was decided to be divided into four blocks:
- Infrastructure
- Backend
- Frontend
- Software Testing
I took over the first two points, the last two went to my colleagues.
Infrastructure
In our project we used the following tools:
- Apache maven
- Git / Git Extensions, gitolite
- Jenkins CI
- Nexus oss
- Redmine
Before telling about the code itself, it was necessary to immerse in the development process. To do this, the lecture was told about each of the tools from the list, its role in the development.
Greater attention, of course, was paid to Git:
- Purpose of version control systems, main types of VCS
- Basic commands for working with the repository
- Organization of branches in the project
The rest of the story about the tools was more like a collection of recipes. And work with all the tools was demonstrated on the example of our project. In total, this part took
about one working day .
A partial list of references:
- Apache Maven Documentation .
- The article "About Git on the fingers" from vitamin .
- The original article and its translation is “A successful branch model for Git” by zloddey .
- Article Continuous Integration (Martin Fowler).
Backend
On the back end, we had the following technology stack:
- Java 7
- Spring framework
- Spring MVC
- Spring security
- Hibernate
- Jackson
- Freemarker
At that time, we used the Oracle GlassFish Server as an application server, and the main repository was the PostgreSQL relational database.
With this in mind, a plan of lectures was developed:
- Java: remember everything!
- SOLID, DI and other acronyms.
- JEE: not SE united.
- web-app: application server, servlets.
- Spring Framework: the basics.
- JPA: organization and hibernization.
- Spring MVC: a little about the main thing.
- FreeMarker: template it.
- Spring Security.
To consolidate this material, a repository was prepared, in which new components were added step by step.
This part of the theory had, not surprisingly, the most time — more than two weeks. Pure theory (without practice) turned out
about eight working days .
A partial list of references:
- The Java Language Specification (James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley).
- Java EE 6 Technologies .
- Spring Framework Reference Documentation 3.2.2 .
- Spring in Action 3rd edition (Craig Walls).
- Pro Spring 3 (Clarence Ho, Rob Harrop).
- Just Spring Data Access (Madhusudhan Konda).
- Pro Spring MVC: with Web Flow (Marten Deinum, Koen Serneels).
- Spring Security 3.1 (Robert Winch, Peter Mularien).
- FreeMarker Documentation .
Frontend
The client stack included:
- TypeScript
- AngularJS
- jQuery
- (Twitter) Bootstrap CSS
- Angular UI (Bootstrap)
- RequireJS
- Some more libraries
- Testing tools (about them in the next block)
If almost everything is familiar with jQuery, and Bootstrap CSS was more important to the layout maker (in our project, the layout was done by an individual on the remote site), then the remaining items needed to be given an introduction.
Thus, on the front of the following topics were:
- TypeScript vs JavaScript.
- AngularJS: the basics.
- AngularJS: directives.
- AMD and RequireJS.
In fact, the theme with the basics of Angular was a squeeze of the official
developer guide and consisted of a bunch of small topics. The lecture about TypeScript was based on the
documentation .
The front-end theory took
three working days .
Software Testing
With a colleague agreed on the following topics:
- Functional testing
- Unit Tests
- Integration tests
- Non-functional testing
- Load tests
- Stress tests
- Usability tests
- Change testing
- Smoke tests
- Regression tests
It was also required to tell about the tools we use:
- Junit
- Mockito
- SeleniumHQ
- Karmajs
- Jasmine
All aspects of the testing touched upon were completed in
two working days .
Observation number 8
It was experimentally established that the theoretical topic for more than two hours in a row is difficult for the interns. It is necessary either to dilute with practical tasks, or to split up the big topic into parts and take breaks between them.
Practical tasks
Practical tasks were aimed at consolidating the theoretical material and were issued either after the completion of the topic, or after the whole block.
In the infrastructure unit there was a task to get used to git - for this, each intern was offered some scenario of creating a project that needed to be reproduced in his repository (branches, commits, murgi, ...).
For the backend block, as I wrote above, a repository was prepared with the skeleton of the application, where simple tasks could be done: DI, interaction with the database, REST API and so on.
As a practice on Angular, it was suggested to go through a standard
tutorial , but using TypeScript.
The final task was to create a full-fledged web application by connecting the server and client parts. This application had to be tested using the tools studied: JUnit + Mockito for the server side and Karma + Selenium for the client side.
It is difficult to estimate the total time spent on the practice; it seems that in total the practice took two full working weeks, that is,
about ten days .
Observation number 9
I do not know if it was a mistake or not, but, having some teaching experience behind my back, I approached training with a division into theory and practice, by analogy with university pairs. Over time, it seemed to me that in some cases it is better not to separate theory and practice: you tell something, and at the same time interns solve a related problem on their laptops.
Workflow internships
Prior to the internship in the project task tracker, the subproject “Internship” was instituted, where the mentors conducted both their own tasks related to the internship (preparation of materials and tasks) and internship tasks where it was possible to track the success of the tasks and the study of the material.
Observation number 10
Conducting internship tasks in a task tracker makes the process more transparent for all participants: the trainee sees his progress and the progress of his colleagues, without the additional participation of a mentor, he can see where there are shoals; for mentors, the task tracker becomes a synchronization point for all trainees, when it is possible to restore the context of the current work of each trainee without any problems.
Feedback from interns
Observation number 11
Students are used to listening at lectures, but not asking questions. Therefore, the call “ask questions if something is not clear” rarely finds a review.
So the understanding came that it is necessary to collect feedback from the interns in order to timely fix the jambs in the process and adjust the work to the children.
To collect feedback, we used Google questionnaires with questions about each mentor:
- Assess the degree of "clarity" of lectures First_name_i (from 0 to 5).
- Estimate the degree of interest in lectures First_name_i (from 0 to 5).
- Give a general assessment of the lectures Name_on__ .
- Appreciate the help of Mentor_i in resolving emerging issues (from 0 to 5).
- Comments about Mentor_i .
What is the benefit of feedback (example)Mentor number 1:

Mentor number 2:

Mentor number 3:

In the first and third case, nothing interesting - no emissions. But on the second one we go to the lecture notes:
- "It seemed to me that the lecture began from the middle."
- “The material was interesting, but the lecture itself was a bit crumpled.”
- “The lectures of the Name of the instructor_2 are interesting, but he cannot always clearly express his thoughts =) It is clear that he knows what this is about, but he cannot always convey this knowledge to us.”
Problem: we were not able to prepare part of the material in a fairly simple exposition, because of this, there were problems with understanding.
Solution: additionally sorted out some of the questions on practical problems.
Specialization
The entire basic course (theory + practice) met exactly one month. All five trainees listened to one lecture, solved one problem.
Observation number 12
Students, coming to internship, often declare their chosen specialization. For example, they are sure that they want to become a backend developer. Moreover, only a few truly understand what is behind the chosen specialization, and can explain their choice. Only practical tasks close to the project, or directly project tasks will allow you to understand their capabilities and motivation.
After a month, the interns could be divided into three groups - backend (2), frontend (2) and QA (1).
Project
The interns were ready to start working on the project tasks from the second week of August. For them, a whole module of the developed system with its own server- and client-side was allocated.
From this point on, they left the “Internship” sandbox of our task tracker and joined the work on the main project: they began to take part in project rallies, delve into the details of the project, communicate with the project manager and analysts.
And we are here, this, on vacation gathered
Some of the interns started talking about this at the end of July, some at the beginning of August. Before the start of the school year, 4/5 of our interns wanted to go on vacation at the end of August.
Observation number 13
The trainee, unlike an employee who is taken on probation, has several features: he is not used to working for six months (or even longer) five days a week, he has a study whose priority is higher, he often considers working in a company, as a source of experience, and then - money.
I will not deny that for us it was very important to keep students after the internship, so we understood that it was necessary to maintain their loyalty both to us (mentors) and to the company. Fortunately, we were able to convey this to the management of the company, so all the interns went safely on vacation. An additional condition on our part was the automatic extension of the internship for two weeks.
Sometimes they leave
Shortly before the end of the internship on the day of leaving the vacation, one of the interns left us. He just came in and, without explanation, said that he was leaving forever.
Generally speaking, the reason for this outcome may be either in the working plane:
- problem in the company;
- the problem is in us (mentors);
- problem in the intern;
or outside the work plane (as is usually said in such cases, for family reasons). In our case, the problem lay outside the working plane.
Observation number 14
It is necessary to build work with interns in such a way that there are no surprises (sudden partings, vacations, etc.): make work plans for a month or two, be interested in the intern's own plans, maintain continuous communication.
Teamwork
The most common way to involve an inexperienced developer in team work is to work in tandem with an experienced colleague. This approach has a significant drawback when, obviously, the initiative is on the side of an experienced employee.
In our case, there were not enough experienced for all the inexperienced, so all the interns were united in a common group to work on the whole module of the system. In a sense, this was a necessary measure, but it gave positive results: the interns learned to make decisions, to take the initiative, to form their area of responsibility. In this case, the mentors controlled the overall work, verified the decisions made by the group and conducted a code review.
Over time, the interns learned to pair up to work on individual parts of the module. For example, one trainee was responsible for the backend of any functionality, and the second was doing a front end for it, while working together on developing an API, drawing pictures on the board, solving integration issues with other parts of the system.
From hand to hand
My biggest joint during the internship was a situation where I gave the task to the interns with all the accompanying materials and left for a few days. Upon return, it turned out that the interns themselves had failed in their task, and the mentors did not understand it properly.
Observation number 15
It is important to correctly transfer all the necessary information from one mentor to another in case of a long absence of the first: setting the task, all available materials, agreements on work and so on. After the return of the mentor, the same procedure should be carried out in the opposite direction.
Internship Results
Four of the five interns successfully completed the internship and we managed to keep all of them in the team - I think this is a success!
In total, our entire internship took 5 months:
- 0.5 month for approval and planning
- 1.5 months for internship search and training
- 1 month of theoretical training and non-project related tasks
- 1 month of team work on the system module
- 0.5 month on internship leave
- 0.5 month to summarize, planning further work.
findings
As practice has shown, it is possible to get together like this and organize a good internship. This requires the most important resource - time, and the main condition for success is the motivation of mentors. Any motivation can be: teach the guys something good, prepare personnel with similar views on the development and, in the end, just don’t screw up.
All the so-called “observations” are small conclusions in their own right. Now they can be taken into account when planning. This is great to reduce entropy. In general, advice for those who want to keep everything under control.
And finally, motivational polls!