[Interview Experience] Breaking Through a 75:1 Competition with a Pre-Assignment
11 Nov 2023 |
This post was originally written in Korean in 2019 and was translated into English in response to the positive feedback I have received since posting it. You can find the original post here and the repository here.
Before we begin…
This review is written a year ago, after I passed the hiring internship selection. It outlines the key points I focused on to strengthen my pre-assignment. Originally shared only in the XXIT community, I am now making it public as a way to reflect on my progress over the past year. Please keep in mind that this may contain very subjective opinions and experiences.
Although I double-majored in Computer Science, I had many shortcomings in various subjects (like network), and the field I got employed in as a developer was one I had only studied for 4-5 months - truly a state of zero experience. The recruitment process consisted of pre-assignment - 1st interview - 2nd interview.
I want to share the points I definitely implemented as strengths in the pre-assignment. Recently, while coding tests are common, many companies also use pre-assignments to assess practical skills. Here are the three points I believe made me competitive:
Upload the Pre-Assignment to GitHub
Although requirements may differ by company, always upload your pre-assignment to GitHub and submit it as a repository link. The reasons are as follows:
- Showcase Your Git Skills
- I especially recommend implementing features in separate branches and merging them into master. Even if it’s a solo project, this shows that you understand these concepts.
- Also, real development is done this way creating branches for each feature and merging into master, so it’s a chance to experience this.
- You can use it as a portfolio later even if you don’t get the job
- Even if you don’t get the job, you can further develop the assignment into a portfolio piece. Often, pre-assignments mimic real services or apps, making them excellent portfolio material.
- If you don’t have a portfolio, pre-assignment opportunities can serve as a stepping stone.
Make full use of the README
This is the area where I believe I had the most competitive edge. As the term Readme-Driven-Development has emerged, README is the first thing you see when entering a GitHub repo.
Wouldn’t you rather hire a candidate who tries to answer something more than just sitting silently in the interview? I think readme is a similar concept.
I was given a week until the pre-assignment submission, and I spent the last 3 hours before the deadline solely pouring my heart into the readme. The reasons I emphasize the readme are as follows:
- It’s the Face of Your Code
- Interviewers are human too and can’t read all the code. So if there’s a readme that neatly summarizes the overall structure and what features were implemented, it’s much easier to understand, right?
- You can highlight the parts you want to emphasize and have implemented well.
- As a user myself, I’ve always been more drawn to libraries with well-explained readmes, so I paid a lot of attention to this part.
- Use It During Interviews
- After submitting your pre-assignment, there might be some time before the interview. A complex structure can be hard to remember. Think of the README as preparation for your future self.
- I spent the last three hours before the submission deadline pouring my heart into the README.
My README was structured as follows:
- Features
- If it’s a client-side or front-end project, use screenshots or GIFs to showcase the features.
- Overall App Structure
- Use diagrams or mind mapping tools to visualize the overall structure and abstract it.
- I also included the roles of each class here.
- Troubleshooting
- Include the problems you encountered while working on the assignment and how you solved them.
- It’s good to include your own valid reasons for why you solved them that way.
- Lessons Learned / Reflections from the assignment
- Although I eventually removed this section, it’s another potential point of appeal. I included it initially because I learned a lot during the pre-assignment.
- Study Notes (Optional)
- I always kept a markdown file with content and links I looked up while working on the assignment, so I just copy & pasted that.
Think About Why You Implemented Features the Way You Did
This shines later when you have an interview based on the pre-assignment. Development is context-dependent; what was a correct approach in one situation might be incorrect in another.
Creating sustainable, flexible software structures is crucial. This consideration is why design patterns are so extensively discussed among developers.
Don’t just write code that works because the assignment says “Implement feature A~”. Think about why you structured it that way, if there’s a more efficient method, and then write your code. It’s even better if you can summarize these considerations in the readme mentioned earlier.
Especially consider things like design patterns and memory usage. This may vary by field, but each area of development has elements that are considered priorities. Showing that you’re aware of these aspects can be a strength.
Interviewers will ask why you made the assignment the way you did, and this gives you a basis to answer. I found it helpful to first explain the structure through the readme and then have a lot to discuss about distinctive features. It’s also an opportunity to show that you’re aware of related concepts before the interviewer asks.
I view interviews as an opportunity to receive a code review, get feedback, and grow further. Personally, I like receiving code reviews, so I really enjoyed the first interview based on the pre-assignment because I could get feedback. It’s also rare for a beginner to get such a review from a professional developer for free.
Conclusion
Additionally, I think I was able to pass because I had a clear set of values regarding growth, and I conveyed that well to the interviewer.
Initially, I wasn’t planning to apply to this company, but I decided to give it a shot and tackle the assignment. A month later, I joined the company as a developer. Please, have confidence and believe in yourselves. Challenge yourselves frequently and promote your skills!