Applying for Senior and near-senior Front-end roles — advice for preparation and thoughts
Need a freelancer (or consultations / help) for a project or want to build a showcase project? Hire me. Expertise: JS, React.js, Redux, Node.js. Click and leave a message or email@example.com.
Want to get a Web Developer job having no experience? I provide one-to-one on-line training. Click here.
As I was recently looking for a new job aiming for Senior and near-senior positions I will share my thoughts on recruitment processes and give some advice on how to prepare and improve chances for landing such job. Senior role is a very relative and flexible term and one company could classify you as a Senior while some other would tell you that you’re a Regular in terms of skills. It is also often related to a company you work in — the longer the better because you have a thorough understanding of the project you work on and are more productive even having lower skills than someone more experienced but new in the project.
My area of expertise / interest
I didn’t want to limit myself and apply only to bigger companies and corporations. Small firms are also good and sometimes even better. I’ve been working for several companies so far ranging from very small ( < 10 employees) to corporations (> 500 IT people) and I can say that the bigger company the less work you will probably have because of the rules that impose getting confirmation from different people to allow developer work. In firms you can contribute in the first day. Often you are rewarded with bigger salary in corporations but this rule doesn’t apply everywhere.
I expected to find some pattern here like “bigger companies will first do telephone / Skype screening, send you a task to solve and then invite you for an interview” but it was not the case. Instead, I encountered the following scenarios after sending the CV:
OSI: on-site interview
RT: recruitment task (including solving tasks on platforms like Codility)
TSiS: telephone / Skype initial screening (easy stuff to check if you have a general idea of technologies listed in the CV)
TSfS: telephone / Skype full screening (including video calls and screen sharing for live coding)
→ TSiS →RT
→ RT → OSI
→ TSiS → OSI
→ OSI →RT
→ OSI → OSI
→ TSiS →RT → OSI
→ OSI →TSfS →RT
So sometimes it was enough to send CV to go straight to the interview and other times it was a multi step process. It can be related to how fast some company is willing to hire someone (they have high demand for new people, time pressure on projects etc.) but also that some companies learn by experience and prefer to really give candidate a vetting.
Type of tasks | live coding | questions
This section is probably the most important for you so I will get straight to the point with examples that I remember:
Tasks (home assignments)
Most often I had no time limit (“the sooner the better”) but sometimes it was X days.
- (React.js + Redux + unit tests) list all the songs from a local JSON file, possibility to create playlists and adding songs there, state of the app must be preserved after page refresh (localStorage could be used)
- (React.js + Redux + Redux-Saga) create a CRUD app based on the provided API
- platforms like Codility and Devskiller
Live coding (on-site [including whiteboard] and on-line)
Some tasks look like a no-brainer but remember that stress play its role and the fact that somebody is watching can be intimidating for some people. You need to also think about most efficient and concise solutions.
- write a function that will check if an IP is valid + test it
- reverse a string
- write a method (extend the String prototype) that will repeat some string n times
- find a bug in the code (list of items is not sorted properly)
- having an array of objects find items based on category and sort them ascending
- SOLID principles
- REST principles + idempotent methods
- var vs const vs let
- containers vs components
- ways of declaring functions in React.js
- functional vs class components
- JS design patterns (observer vs publish/subscribe) and React.js + Redux patterns
- reconciliation in React.js
- render props pattern vs HOC
- component lifecycle methods
- how would you structure your React.js + Redux app
- Promises vs async/await
- what is JSX
- bind vs call vs apply
- what is Context API and refs
- how to optimize React.js app
- use cases for using TypeScript and general discussion about types
- how can you apply styles in React.js + specificity rules in CSS
- what is closure / callback / IIFE
- principles of Redux
- HOC approach vs using Redux connect()
- objects deep and shallow copying
- event loop
- describe getDerivedStateFromProps()
There were also questions like: “what will the output of this code be?” concerning e.g. hoisting, calling nested functions and order of execution in the call stack.
Advice for preparation
- Spend some time going deep into the topics of ES6. For instance be aware of the Temporal Dead Zone and that let variables won’t be subscribed in the window. Ideally you can read all the stuff from here or here.
- Go through React.js docs + Redux as well.
- Code a lot without help from the Internet. Sometimes you think that you know you can code something but it’s getting harder when you don’t have access to documentation, Google and Stack Overflow :)
- Practice coding to be prepared for platforms like Codility and Devskiller. You can find sample tests there and you can challenge yourself on sites like Codewars. I would put some time into getting through popular Array methods because coding tasks with arrays are very common.
As you apply for Senior positions it’s often not enough just to know something. On most of my interviews I needed to explain why I would use some solution and not the other, care about performance etc. Be prepared for a thorough discussion. For instance, it’s not enough to just name the design patterns but you should also be able to provide real-life cases for them.
Final thoughts and conclusion
It didn’t take me long to find a new, satisfying job (~ 2–3 weeks from sending first CV). I was involved probably in around 10–12 recruitment processes. The market is hot and specialists are in high demand. Some of the attempts were unsuccessful, some were successful so I needed to choose where I want to go and also I needed to quit some on-going processes because I finally accepted one offer. That’s how it works and it’s perfectly normal.
Be in the constant “growing” mode; learn new things, get deeper into topics that you know and code new things. Stable job and project that you work on for months/years can jeopardize your self-development and perspectives for a better job. Spend some time refreshing your knowledge and skills before going to an interview. It may sound so obvious but many of us developers keep forgetting about this :)