Why Leetcode is Dead and Pair Programming for Interviews is the Way Forward

Rate this content

We’ve all experienced the job application which required us to do an online coding test. You have to brush up on your algorithms, data structures, time complexity, and by the end of it you’re cramming as if it was a university exam! Now that we’re the ones usually interviewing candidates, a good question to ask is: “are online coding tests the best indicator of a candidate’s proficiency and competence?” In this talk, we’ll explore:

  • - The pitfalls of Leetcode-like tests

  • - What we should be looking for in candidates

  • - How pair programming is the best way to see how a candidate would work with the team

  • - Plus a little mini demo on a remote pair programming interview

32 min
09 Mar, 2023

AI Generated Video Summary

The Talk discusses the problems with online coding tests and the benefits of pair programming interviews. It emphasizes the importance of hiring and growth, including creating a positive interview experience and considering the cost of hiring. The job of a software developer extends beyond coding and requires multiple skill sets. Pair programming provides a more accurate assessment of skills required for software development. The Talk also covers implementing a tennis scoring system and customizing pair programming interviews for different roles and levels.

1. Introduction to Hiring and Growth

Short description:

Hello everyone. Today, we'll discuss the problems with online coding tests, the benefits of pair programming interviews, and the importance of hiring and growth. We'll also explore the ideal candidate traits and the mismatch between online coding platforms and required skills. I'll share my personal experience with pair programming interviews and their impact on my career. Let's dive in.

♪♪ Hello everyone. I am super excited to be giving this talk at Tech Lead Conf. Thank you for taking the time to join us. So, today, we're going to be taking a look together at what's wrong with online coding tests, why leetcode is dead, and how including a pair programming interview can revolutionize your entire interview process.

So, I want to start off by giving an overview of what we're going to be talking about today. Firstly, very quickly, why does growth matter? And why should you focus on interviews? Two, what are you looking for in the ideal candidate? What are the key characteristics, traits, skillsets that you should be targeting? Knowing that, thirdly, what are the skillsets that online coding platforms like leetcode, like HackerRank are actually testing? Do these match up well to the skills that you need to be looking for in a candidate? And lastly, we'll go in-depth on the whole pair programming approach.

So, a little bit about myself and where I work at. My name is Muhammad. I am the head of mobile at a company called Theodo, based in the UK. Theodo is actually a global consultancy with over 600 people spread across the UK, France, US, and Morocco. We help clients build digital solutions to some tough strategic challenges. Things like self-service and retail journeys, to e-commerce platforms for second-hand clothing, or building Challenger banks from scratch. So, if you're interested in learning a little bit more about Theodo or just wanting to have a chat, please feel free to shoot me a message on Twitter. I'm always down to grab some coffee either in person or have a chat virtually.

On a personal note, the reason I really wanted to give this talk was actually because of my own journey in joining Theodo. So, my decision to join the company was largely influenced by my own pair programming interview. It was a real enjoyable experience that pushed me over the line. It got me to say yes and actually join Theodo and the team that we have. So, the impact of it is very much felt in my own personal career. And I'm now one of the people who conducts the pair programming interviews. So, we've come kind of full circle. And it's really something that I enjoy. So, I'm very excited to share it with you all today. Let's jump into it.

What is the importance of hiring and growth? Not gonna spend too much time on this, but really if you look at it, you can split it up into three categories. One is team quality. This might seem very, very simple. But a high quality of hiring will lead to higher quality of teams. So, without having a well thought out and good quality interview process, you risk having false positives. So, maybe hiring the wrong candidates, someone who's not a fit to the team or doesn't have the skill sets that you were requiring.

2. Importance of Hiring and Growth

Short description:

Having an effective hiring system is crucial for hiring the right candidates and avoiding false negatives. The hiring process can impact a company's reputation, so it's important to create an enjoyable and positive experience for applicants. Additionally, the cost of hiring, including the pay for candidates and the time spent by interviewers, should be taken into consideration. When looking for candidates, it's important to focus on their ability to write maintainable and understandable code, as code is read more often than it's written.

Or you'll have false negatives. And that's not hiring the right candidates. Sometimes having a system that isn't effective will make you lose out on some really good candidates that could have potentially been a very valuable asset to your team and to your company.

Secondly, company reputation. I remember when I was a graduate and I was looking for jobs, one of the things that came up regularly amongst my peers was certain companies are difficult to apply to. Why take the time? They had a bit of a reputation for being a little bit difficult and not enjoyable processes to go through. And hence it was kind of known amongst the student community, you probably don't want to spend your time applying for them or it's really difficult. Hiring process can have really positive and really negative impacts for the reputation of the company. And throughout that whole interview process and throughout hiring, you can utilize it as an opportunity to get to know more engineers, learn about people's experiences, share your own experiences. And it's a really good opportunity to just get to know more people in that whole interview and hiring stage. So it's good for reputation and also a good opportunity for you to get to know more people.

And lastly, cost. So if you're starting to look at being an EM or a tech lead, one of the important things that you're going to have to be grappling with is cost. So that's anything from the cost of the pay for the candidate. More short term, there's the cost of a deaf team that are going to be interviewing the candidate. The cost of their time that they're spending to go through these interviews with your candidate, see if they're suitable or not. And then in the worst case scenario, if the candidate wasn't suitable and you needed to rehire after some point, the cost of needing to rehire obviously can be quite heavy as well. So with all of that in mind, we can have an overview of why hiring and growth is important and why we need to focus on this. What should we look for in a candidate? I've got some of the sun rays and the lone figure to give this kind of grandiose, holy vibe. So this is a perfect candidate. I'm sure at some point, we've all heard of this concept of the 10X developer. It's the developer who can deliver at 10 times the speed with one tenth of the lines of code. I'm glad to say that after extensive research, I have come to the conclusion that the 10X developer is a lie. It's a total facade. It doesn't exist. And throughout my research about the 10X developer, I actually landed on this really cool quote that I liked, which was, code is read four times more than it's written. So if you write easy to reason about code, then it pays off dramatically in the future. I think it really encompasses a few key factors about what is important when you are looking to hire a candidate. You want someone who is able to write good code, code that will be maintainable and understandable by others, by more senior members in the team, more junior members in the team, and code that is ultimately understandable and reasonable by others in that team. And that is what will make that 10X payoff in the long term, because that code is going to be reviewed and looked at so many times in the future and in the lifecycle of a code base.

3. Job of a Software Developer

Short description:

The job of a software developer is multifaceted and goes beyond just coding. They need to identify and break down problems, design efficient solutions, work in cross-functional teams, and be pragmatic in their approach. For higher-level positions, coaching, managerial skills, and the ability to maintain code quality across projects are important. Hiring a candidate requires considering multiple skill sets.

Taking this concept of the 10X developer, more realistically, what is the job of a software developer? And I think it's very multifaceted. It transcends just coding. So a good software developer needs to be able to identify problems and break down problems from business requirements and business needs. They should be able to design a solution that solves the problem while working in a cross-functional team and really write that efficient solution within a good span of time. So they need to also be a bit pragmatic with the approach that they take. And if you're hiring for a higher level, so maybe a tech lead or an EM, there comes a coaching and a managerial aspect as well. So how well does the candidate teach more junior developers on the team, train them up, coach them? Can the candidate manage a project pipeline effectively with the PM? Can they keep code quality up across a multitude of projects? These are all factors that you're going to have to balance. So when you take a look at it on a grander scale, bigger picture, there are a number of skill sets that you need to actually look at when you're hiring a candidate.

4. Online Coding Tests and Pair Programming

Short description:

Online coding tests primarily assess a candidate's knowledge of algorithms and data structures. They follow similar patterns and require familiarity with classic computer science concepts. These tests also evaluate the ability to implement solutions quickly under pressure. However, they may not effectively assess skills required for day-to-day software development. Pair programming, on the other hand, involves realistic problems and coding environments, providing a more accurate assessment.

So thinking about that, let's actually look at online coding tests. What skill sets are online coding tests assessing? I'm going to be a little bit bold here and say that, primarily, online coding tests are effectively only measuring a candidate's knowledge and algorithms and data structures. So I'm sure you've gone through your fair share of online coding tests. They are mostly following the same patterns. Maybe you have a linked list that you have to reverse, or you've got a binary search tree that you've got to traverse and find a certain note. Most of these problems are very similar, actually, in nature. And you really need to get familiar with the classic COMSCI algorithms and data structures course.

So it's very academic in nature, and you will have encountered them if you had a classic CS background, or you will see them at some stage. But it involves a lot of the similar patterns that keep coming up over and over again. And on top of that, online coding tests look at your ability to do them under immense pressure with a short span of time. So how quickly can you actually implement those algorithms and data structures to match the problem that you're given? So really, if you've studied, memorize the algorithms, data structures, and you understand the pattern behind the questions, you start to see them, and you will after a bit of practice, you'll practically ace these. If you don't believe me, there's literally a book for it. So this is staple in every graduate's shopping list. Cracking The Coding Interview has 189 programming questions and answers that are typical in these coding tests. It's a book with several hundred pages, and you go through it one by one, go through the exercises. It very much feels like you're studying for the SATs or some sort of standardized test, and you'll quickly start to sense these patterns. So very, very formulaic, not incredibly effective to assess the things that we talked about when we were looking at the perfect candidate. And the question that we need to think about is, how much of this is actually applicable to a day-to-day software development role? How often are you thinking about, how can I reverse a linked list? Or how often do you actually grapple with these problems where you need to come up with the most efficient solution possibly, the most efficient solution that is possible? It's not a common day-to-day occurrence. It's certainly not something that requires the majority of attention when we're looking to hire a candidate. So there's this imbalance. It's a small part of the role, yet it gets a massive amount of say in which candidates make it through and which ones fail. So there is an imbalance there between the hiring and the actual role.

Let's jump into pair programming. So to explain pair programming, I want to start with what pair programming isn't. And pair programming is not this. It's not a candidate going up to a whiteboard, starting to scribble down some notes, and you, as the interviewer, are sitting there very immensely and intensely looking at them. That is not pair programming. For a good pair programming exercise, you need a realistic problem and you also need a realistic coding environment. So let's start with realistic problem and we'll go through an example of this later on. Not going to focus too much on this right now, but you want to try to find a real-world-like problem.

5. Realistic Coding Environment and Demo

Short description:

Encapsulate logic and knowledge in a relatable problem for testing candidates. Use a realistic coding environment, like CodeSandbox or VS Code's LiveShare extension, to simulate day-to-day coding. In a pair programming interview, focus on collaboration and problem-solving. Provide candidates with a demo of working within your team. Use real-world problems from GitHub repos for testing in interviews.

And within that problem, you can try to encapsulate and encompass some logic, some knowledge that you would like to test the candidate for. It's really important to make the problem understandable and relatable. Something that they might actually code in a real day to day job. That includes some sort of complex logic as well as a part of it.

Now when we talk about a realistic coding environment, that means no whiteboards, no pen and paper, use a real code editor. There's so many great actual coding environments that will enable you to collaboratively work on code at the same time. And this is going to be the closest thing to the day to day role. This is going to be what they are going to be using every single day when they come into the job. So examples of this, CodeSandbox is a popular one. You can use VS codes, LiveShare extension as well, and collaboratively work on a single file or multiple files at the same time and you have one environment and you share it, it's a great tool to use. And it really makes sure that you give the candidate the closest thing to an actual coding environment that they would be using in their day to day job.

And when we talk about a realistic coding environment, it's not just the tools but it's also the style of interaction that they have. So a question to pose is, in the day-to-day role, what happens when a developer encounters a difficult problem? And I want to let this sit for a second. When a developer reaches a point in their application and they're thinking about it, they're reasoning about it, and they've reached a slightly difficult problem, what they'll do is they'll usually consult with the team, take a step back, talk to others, get their opinion and try to come up with an optimal solution together. That's where that whiteboard comes into play. With that in mind, it's so, so important that you're actually working together as part of this pair programming interview. You should be coding and speaking as much as they are. You really want it to be a pair programming session, and this will let you get a sense of what it is to incorporate them into your team, what is it like to work with them? If they were to join your team tomorrow, which is a great thing to know, as an interviewer, but it also has the flip side, which gives them the sense of how it is to work within your teams. So that, for a candidate, is invaluable. They really get a tester or a demo of what it would be like to join your company and to join your team.

So without further ado, let's jump into a demo, and hopefully this will all start to fall into place. So the example that we have here is a rather simple example. It's a tennis-scoring kata. And you can find a compilation of these real-world like problems across different GitHub repos. This one comes from a kata catalog that someone has spent a lot of time compiling, so props to them. And it's got a number of different problems with different languages for sort of templates for you to start testing people with. Let's go through the background of this game, and then we'll go through a short live demo. It won't be the full extent of an interview. And obviously there's different problems with different lengths, different difficulties. So you can really go in and choose whatever you think is more applicable to your specific interview process.

6. Implementing Tennis Scoring System

Short description:

We'll be implementing the scoring system for tennis, focusing on the bare logic without UI or data validation. During the interview, observe the candidate's problem-solving approach, their interaction with you, their receptiveness to feedback, and their preference for simple solutions. We have a live share environment set up and will follow the TDD programming style. Let's move on to the next test for handling a win.

But in this case, just for this demo, we've chosen something that's a bit simple so that we can go through a little bit of it. And hopefully, it'll be easy to follow along with. So we're going to be implementing the scoring system for tennis. In a game of tennis, both players begin with a score of zero. And each successful rounds that they play, the points get added on in a sequence of zero, 15, 30, and then 40. And then once you're at that 40 stage, you will win the game if you score again, unless both players are at a score of 40, which is called a deuce. So that means that you're in some sort of deadlock. And the way that you win when you're in a deuce is that you have to score twice subsequently back to back. So if you were able to break the deadlock and score twice in a row, then you will end up winning the game. So basic tennis rules.

What we're trying to do is we're going to try to incorporate this and build the logic around this without focusing on UI, without focusing on data validation, just the bare logic of this. And we're going to try to see if we can do it in a short time span for this demo. So let's try to get into it. Before we do, I want you to focus on things like how much am I interacting with the candidate in the interview. When they get stuck, do they ask me for help? If they don't understand some sort of syntax, are they comfortable enough to ask me as the interviewer, how do I set a variable in this language? Do they take a step back before they try to take an approach and look at all the different paths, reason about it, think about the pros and cons? Or did they just go into the first route that they see? How receptive are they to feedback, if you give them hints? Do they start taking that and looking into that? Or do they just kind of ignore it and move on with what they were doing? And lastly, are they doing over engineered solutions or are they going for simple solutions, trying to be pragmatic with it? These are all kind of the things that you want to look at. And they're the things that will give you a good indication of how this person is in terms of their software development skills and just more generally how it is to work with them.

So we've got my good friend, Sadik here with us, who has graciously agreed to do this demo. Thank you Sadik for your time with us. No worries, a pleasure. Awesome, so we've got a VS Code live share environment set up. There's a tennis class, there's some tests, and we're going to be following the TDD programming style, we're going to create some more tests, get them passing, and then we're going to do a round of refactoring. We'll go through one round for this demo. Obviously you'd be doing a full fledge test if you were interviewing someone. So Sadik, should we move on to the next test? So we've got tests for handling a new game, a single pointer game, and a level game. What do you think we should be testing next? I guess this is handling pretty basic scoring. We could handle a win next. Cool. Let's do a test case for that. Cool. Fire in.

7. Representing a Win in Code

Short description:

To represent a win in code, we can either use a value above the highest score or have some sort of state in the class. Using a flag would require checks in multiple places and if-statements to prevent score incrementing. Although using a fake value deviates from the actual logic, it provides a quicker solution for this test.

And to win, they'll be scoring four times, just to get all the way to the end past a 40. Past 40. Okay, cool. And what are we expecting the actual get score string results to be? Yep. Let's change that to… So this is the second player I've given a win to. So there are two wins. Let's do it. And I guess, yeah, quickest way would be returning it here somehow. Okay. So a win… Well, we need to represent it actually in code. So there's a couple of ways we could go about it here. One would be in scoring, like past 40, I know that's the highest score you can get. We could have a value though above it just to represent, since we're going through each index here, we could have a last element represent a win or we can have some sort of state in the class. That's good.

So taking a step back here for the audience, it's really good… Sadiq is taking a step back, looking at the different routes that he can take with this. It's a really good sign, he's speaking out loud. I can fully understand what he's thinking of. So I'm going to try to contribute a little bit to this interview now. So, yeah, that sounds good to me. I guess let's think about the pros and cons of each approach. If we were to use a flag, we need to do checks in multiple places within the score functionality. And then have a few if-statements to not increment the score as we're doing now. That could have some complexity. The other side is we represent a fake value in scoring, like you said. But then you're not sticking to the actual logic. It's not tennis scores. So I guess with those trade-offs in mind, what do you think we should do? Well, to get the quickest solution, just the quickest pass for this test, it probably is easier to go for a value. And then if we wanted to come back, we could obviously refactor it. Yeah, we could come back. So why don't you let me know what I should type, and I'll do the keyboard.

8. Refactoring the Score Function

Short description:

Let's choose a value over 40, like 60. If both players have a score of 60, return Player1Wins. Otherwise, check if the second player has won and return Player2Wins. We've reached the refactoring stage. Inside the score function, let's refactor the code that calculates the index of the next score. Let's name it 'getNextScoreIndex' and pass in the score. While Sadiq works on that, it's a good sign that he's comfortable asking for suggestions.

So let's choose a value, just anything over 40. Let's do 60 for... Oh, God. I don't like that. Okay, cool. We've got a tennis-efficient auto here, so, okay. We've added a value of 60 to this array, Nice. And then the GetScoreString, I guess we should check the score. Okay. If it equals 60 for each player, so if this dot, yep, first player score, second player score. If it's 60, then we want to return a string that says something like Player1Wins, right, following the pattern that you've set there. Otherwise we check, see, okay, has a second player won. And then in that case, we would also return Player2Wins. All the typos. Okay, cool.

So we've taken a new test, and originally it was failing. We made it pass. We've now reached a refactoring stage. So, Sadiq, is there anything either in the tennis class or the test that we've written that you would refactor or clean up? Yes, so I guess the first bit of code I can see that's repeating is inside the score function, where we're calculating the index of the next score. These are long lines. Maybe we could take it up, put it into function. Let's do it, go for it. Sure. So, any name suggestions? Well, so if we're semantically naming this, it's getting the next score's index on line 14 and 18. So, why don't we name it that? Sure, and we'll take in the player. We take the player? Or we can take the current score, whichever one. Sure, so we'll just take the score. Cool. And from that, we're putting this bit here. So, while Sadiq is getting that working, this is good for naming, for things that he wanted suggestions on, felt comfortable asking me, that's a good sign.

9. Final Thoughts and Wrap-up

Short description:

Sadiq's comfort in asking for help is a good sign. We refactored the code and made it more efficient. Our tests are passing, and we're in a good state. The tennis problem is interesting, especially with deuces and advantages. Thank you, Sadiq, for your time. Let me share some final thoughts.

It shows that he's comfortable asking for help or asking for hints whenever he needs it. So, that's a good sign.

Cool, so, that function's there. We should probably return, yep, and then we can just call that instead of doing that long-winded scoring.find index on every single line.

So, here's the test. Cool. And then we can just copy this, do it again for the second player. Sounds good. Nice.

So, we've taken that. We've refactored it, let's save that and see if the test is still passing. Amazing.

One other thing as well, I think, on the test side, we have a fair bit of repetition here, like we're rolling, we're scoring multiple times for each one of them. We could potentially put it in a loop, especially for this one where it's happening four times. What do you think, Sadik?

Yeah, let's make a loop when it's four or more. I think it's getting a bit bulky. Let's do that. So, we'll create a loop here, I is less than four, we'll increment it, and then we'll iterate here and get rid of that. Cool.

So, we've got our tests passing. Again, we refactored both of our files. We're in a good state, we've done one loop of the red green refactor loop in TDD, you'd build up on this in a real exercise. But we're going to stop here just to keep the example short and simple.

It's a really interesting problem, I'd recommend you go and give this, this tennis problem a try, it gets really interesting once you have deuces and you're trying to deal with the advantages and whatnot.

Thank you so much, Sadiq, for taking the time with us.

No worries. Thanks.

So, let's wrap up. I want to leave you with some final thoughts. These are things that I typically do before and after the interviews, I think they really leave a good impression with the candidate.

10. Creating a Positive Interview Experience

Short description:

Don't jump straight into the exercise. Take time to get to know the candidate and create a better environment for the interview. Review the solution together and encourage the candidate to critique their own work. Ask for feedback to improve the process. A positive experience can make the interview worthwhile.

Firstly, don't really jump straight in immediately. You don't want to have just a plain introduction and then running into the exercise. I'd recommend taking a little bit of time, try to get to know the candidate. There's so much value in getting to understand their story, their ambitions, what they're like to chat with, and don't discount how great that can be in easing the candidate and hopefully giving you a better environment to conduct the programming interview.

Secondly, take a little bit of time at the end, look at the solution that you've come up with together and see if you can find any improvements and see if you can get the candidate to critique their own work. It is a really good sign when a candidate is willing to criticize or point out bits and bobs which are missing in their solution. So I'd highly recommend taking a little bit of time at the end, a couple of minutes to just talk over it.

And lastly, ask for their feedback. It gives them such a good opening to give you improvement points, but also to talk about how their experience was going through. And speaking of experience, I want to just end on this note. We had a candidate a little while back apply to us. Unfortunately, they didn't get in, but I got this email a few days afterwards. And I just want to leave that up there for a second. It's messages like this that make this pair programming interview so cool in my eyes. It's such a nice feeling when you as an interviewer feel like you haven't wasted an hour of an interviewee's time, and hearing back from them to say that they feel like they've actually learned something or they had an enjoyable experience is something that really has made all of us worthwhile. And I hope that in the interviews that I do conduct in the future, I can leave a similar experience with others. Thank you so much for listening.


Coding Tests and Pair Programming

Short description:

Most people have abandoned coding tests, but they still play a substantial role in the hiring process. The cost of interviews should be considered, especially in consultancy backgrounds. The coding exercise mentioned in the talk is called tennis scoring kata. Pair programming is effective for assessing communication skills and the ability to pick up concepts. For higher-level positions, the candidate's ability to explain topics and fit into a leadership role is important.

Yeah, it was like almost a battle till a few minutes ago, like few seconds ago, I checked it was 46 and 46. Now, the no option when the head with 56%. How do you feel about this?

To start with, I'm quite happy that most people have abandoned coding tests. It's cool to see and I hope that number just increases over time. The yeses are still I think about a third, so 32, 33%. I'm keen to see what people use it for as well. So the people that still use coding tests, like, what stage of the interview is it used for? Is it a fundamental part or is it part of a screening filter? But it's still a substantial amount, right? One out of every three jobs that you're applying to will probably have a coding test, which is, there's still a lot of time that's going to be spent on that.

Yeah, yeah. Time that's nowadays could have been way better invested in more practical, more like stuff. Because the energy in a higher process, and you mentioned in the talk, how long the cost is for interview for the higher process. Yeah. By the way, the other day was very trending, the meeting cost, you know, on Google, fake calendar and the cost of people. We should do that after hiring process at the end. How many people from our engineer side took the interview and how much that cost us? Yeah, yeah. Especially being in a, like, slight consultancy background as well, you know, it's a very like, it's very much a key factor there. So, definitely think about the cost of each individual person's time as well.

I'll start with a quick question. Someone was asking what was the coding exercise called again, tennis scoring kata or something in your talk? Yeah, so these type of problems are generally called katas. There's an entire GitHub repository with, you know, dozens of examples of them, you can find one that you suit you and your style. This specific one was tennis scoring kata. So if you search it up, you should find a GitHub repo to it. Good. Okay, that's being settled. The second question we got was about how you found the Pair Programming Method to scale with the candidates experience?

Yeah, that's a really interesting one as well. So, if you're hiring, let's say at a graduate level, what you're really looking for isn't something like experience with syntax or a lot of the things that you would expect with experience to come. What you're more assessing is that communication, that's the fundamental thing that you want, and how quickly they can pick up concepts, how much they're willing to learn, because that's that stage of the career. And that's what they're trying to pick up. If you're assessing, and doing a programming interview with someone who's wanting to come in at a tech lead level or a senior engineer level, then you're going to have to be looking at other things. The communication is important, but it's also how do they explain these topics to you? And you have to really be seeing if they can fit into that leadership mentor role. So maybe as the interviewer, you take a step back and you give them more remit to drive the interview.

Customizing Pair Programming Interview

Short description:

You can customize the pair programming interview to fit different roles and levels. It's important to assess architectural choices and integration skills. Consider asking candidates about handling complex problems before starting the interview. Tweak the process to make it specific to each role and team. Adapt to the changing tech scene to find the perfect fit for candidates.

And from that, you can have a sense, if you were a junior developer, working with the senior developer or with this tech lead, what would be the style of working with them be? So it's very tweakable. You can also choose more difficult problems if you're trying to hire a senior developer. There's so many of these CADAs with different requirements and different complexities. So it's very tuneable, I'd say.

Yeah. And as you mentioned, the communication, I've heard that at least some companies do these like a week trial or even more or less the person will be integrated in the team and literally has a job because that's the communication part you see. Asking question, debugging in a way, you know, even the process in the new company.

Yeah. The second question we got in was about the senior candidate, and it's like, I found with more senior candidates, the skill we're interested in may work on larger scales and not always lend themselves to looking at codes together. Examples will be architecture and organizational for green projects. What do you think, what would this format with staff class role feel for you?

Sure. So I've actually, I can give you an idea of how we handle this. So a part of, we have this pair of programming interview, we think it's still fundamental to hiring a tech lead or like an engineering manager. But on top of that, maybe we'll add an architectural design interview as well into it. And the idea is, well, we need to also assess how can they make architectural choices. How will they create systems and integrate them with different parts of an application? And I think you can add that on. But this pair of programming interview is still quite important, especially because I think we've learned throughout the day today is like a tech lead and an engineering manager's remit oftentimes is interacting with people, is communicating, is empathizing with the team, teaching them stuff. So I think it's still a fundamental part of it. If you wanted to tweak the pair of programming interview, one suggestion could be trying to take a step back and before the start of the interview, asking them overall about a more complex problem. Let's say you can have a problem, like how would you handle login in general and see how they can explain those more fundamental concepts as well. So that's another step that you can add before you actually start the pair of programming interview. Yeah, and you can tweak it. As you mentioned, it's very easy to tweak it to add any other levels or any other steps that you consider good for the team and even more, make it specific to each role, each team, and the level at the end. Yeah. Oh, that was really insightful, and I learned a lot. Again, I will go back and see how much time I did with test and the pair programming. We do that, how we can tweak it more to get the perfect fit, especially nowadays that, yeah, tech scene is moving a lot. Things change so fast, and we definitely want to have the perfect fit for our own candidates. Thanks so much for the insights today, Charitas.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Summit 2022React Summit 2022
27 min
Impact: Growing as an Engineer
Becoming a web engineer is not easy, but there are tons of resources out there to help you on your journey. But where do you go from there? What do you do to keep growing, and to keep expanding the value you bring to your company? In this talk we’ll look at the different kinds of impact you can have as a web engineer. We’ll walk through what it means to take on bigger, more complex projects, and how to scale yourself, and grow the community around you. By driving our own development we can all grow our impact, and in this talk, we’ll discuss how to go about this.
TechLead Conference 2023TechLead Conference 2023
25 min
On Becoming a Tech Lead
Tech lead sounds like a lot of work. And not the fun coding kind either. Why would you ever want that? What does it feel like when you get it?In this talk Swizec explains why he took the step towards technical leadership, how his priorities changed, and why it means he’s doing more engineering than ever. A whole new world where writing code is the easy part.
10 min
Emma Bostian: I landed my dream job by sharing my blogs on Twitter
Featured Article
Software engineer, lecturer, podcast host, author — is there something Emma Bostian hasn't done? She moved from America to Sweden, started working at Spotify, and took up a few challenges along the way. And now she has some career tips to share.

What led you to software engineering? 
I was raised in the ecosphere of tech because my dad is a software engineer at IBM, and my mom was a designer there, too. My dad always encouraged me to join STEM and take a look at computer science — however, I was convinced I wanted to be a medical doctor. In my first year of college, I declared a biology major and quickly realized I was not too fond of it. In my second semester, I switched to an actuarial science major where I took Introduction to Computer Science, and the rest is history. In my second year of college, I declared a computer science major and began my journey from there.
What is the most impactful thing you ever did to boost your career?
Writing blog posts and documenting my learning journey on Twitter has far been the best career boost. I wrote purely for myself to reference the things I learned over time, and I even utilized my design skills in Figma to create custom graphics depicting difficult concepts like CSS specificity. By sharing my blogs on Twitter and engaging with the people reading them, I was able to grow an audience extremely quickly. I began receiving conference speaking opportunities, podcast requests, and course invitations to teach with LinkedIn Learning and Frontend Masters.
Ultimately, I landed my job at Spotify through Twitter, too, when a friend and follower of mine asked if I would be interested in interviewing. Now I live in Stockholm working my dream job. It still blows my mind how tweeting about my blog led me to some of the most amazing career opportunities.
What would be your three tips for engineers to level up their career? 
First, be patient. I often see posts on Twitter or LinkedIn about developers who were promoted to a senior position after a year. And while this is wonderful, I think we forget that each company has a different standard for what constitutes a senior developer, and everyone's journey will be different.
Second, don't be afraid to ask questions. If you try your best to solve a problem or answer a question you have, but you can't figure it out after a reasonable amount of time, ask a team member or mentor for help.
And lastly, invest in the right resources for learning. When I started my journey, I didn't know which platforms worked for me to learn. Now, I have a few trusted platforms such as Frontend Masters, Free Code Camp, or Level Up Tutorials that I go to when I need to learn a new skill.
You're currently working as a software engineer at Spotify. What does a typical day of yours look like there?
I begin my day answering emails. Then we have a team breakfast and a standup remotely as we're all still remote at Spotify. After that, we might have a web tech sync with the other squads in our business unit. The day usually includes some form of pair or mob programming, depending on the work stream. 
My team always has Fika, a traditional Swedish coffee break, scheduled every afternoon. Every couple of Fridays, we have team games planned to release some stress. 
Also, I tend to have a lot of free time to focus, which is nice but makes for a boring answer to this question!
Do you have some rituals or tools that keep you focused and goal-oriented?
I'll admit that I've been struggling with staying motivated in the time of remote work. I've been remote with Spotify since onboarding a year ago, but my team is wonderful, and they help me when I'm down.
Apart from that, I use Todoist to keep track of my tasks, and, naturally, I listen to Spotify while working. But other than that, not really. Maybe I should adopt some new tools to keep me on track!
My current favorite Spotify playlist is Brand New Chill: https://open.spotify.com/playlist/37i9dQZF1DX6uQnoHESB3u?si=380263b3c853442e
I also love Chillout Daily: https://open.spotify.com/playlist/7ozIozDp260fjNOZy1yzRG?si=66d6c839ec9b458a
You wrote a book called De-coding the Technical Interview. What was the impulse to do it?
I wanted to give the community a manual of the essentials of computer science knowledge to ace the technical interviews. The book covers data structures like stacks, queues, or linked lists, tackles algorithms, and deals with systems design. You'll also learn about the interview process from start to finish, get tips on how to submit an amazing take-home project, or understand how to problem solve. You'll also gain knowledge on the frontend coding skills needed to excel at a frontend interview.

If you could stress one piece of advice on surviving a technical interview, which would it be?
Do not lie your way through an interview. If you don't know the answer to something, just admit it. There's no shame in admitting you don't know the answer to something. There is shame in faking it and pretending like you do know the answer.
What's the single best practice everyone who writes code should follow?
Remember that while you are technically writing code for computers, you're also writing it for humans. Your code should be readable and have as little complexity as possible without sacrificing accessibility or performance.
In addition to the book, you co-host the Ladybug Podcast. What inspired you to enter this field, and what are the podcast's main topics?
We talk about everything tech and career on the podcast, from Java and GraphQL to how to start a business and cross-cultural communication. The podcast is a way for me and my co-hosts to share our experiences in tech, having taken different paths. And I'm really glad for doing it — it has allowed me to meet so many incredible people, learn many new things, and support my dream of teaching.
What pieces of your work are you most proud of?
My technical interview book was a huge feat for me as well as my courses with LinkedIn Learning on building a tech resume. I enjoy creating things that help other people advance their careers, so I'm also proud of my courses with Frontend Masters on design systems and CSS.
Follow Emma on Twitter
14 min
Kent C. Dodds: Consume, build, and teach — and level up your career
Featured Article
Even though his bio offers quite a hefty reading, he only applied for one job in his career. The rest came along as he was building his name as a renowned speaker, teacher, and a prolific figure of the open-source community. How did Kent do it? “Commit to creating high-quality content,” he says.

What led you to programming?
I had a friend when I was a teenager who was really into it, and he tried to teach me. But I just couldn't get it — it didn't make any sense to me. So I never really thought I'd get into programming, but I liked computers a lot, and I ended up going to school for electrical engineering. 
Well, that didn't work because I'm not good at math. But right when I started the program, I got a job at a company uploading videos to YouTube and that sort of thing. The work was tedious, so I decided to write a computer program to automate lots of the work I was doing with the knowledge I had about programming. And that was the first spark of things for me to use programming to solve real-world problems. 
What is the most impactful thing you ever did to boost your career? 
Committing to creating high-quality content. That might sound obvious because I'm a full-time educator now, but I would not have gotten my job at PayPal if I hadn't been so active with my blog. In fact, lots of my jobs came out of me being involved in the community around meetups, conferences, or open-source projects. 
How do you choose topics for the content you create, be it for your blog or podcast?
I don't think too much about the content other people are creating. And I don't often consume it. My ideas come from the things that I'm working on, things that I'm learning myself, or — when I was working with a team of developers — the things that I had to remind people of in code reviews regularly. Anytime that I would have a code review comment that was pretty long to describe my position, that was an excellent opportunity for a blog post. Also, if people ask me about a topic regularly, I'll make a blog post rather than answer that question multiple times.

What would be your three tips for engineers to level up their career? 
The number one thing I tell people is to be a nice person. I know that sounds fluffy or silly, but it cannot be overstated. You will get so much further in your career and just in life in general if you're a nice person. That doesn't mean that you take people being jerks lying down, but how you interact with others is out of kindness. You could be the best engineer in the entire world, but if you're not a nice person, you will not reach your full potential or accomplish your goals, whatever they may be.
Second, it's just as important to decide what you are not going to learn as it is to decide what you are going to learn. You could jump into countless things — and there are successful people who are polyglot programmers, but I can't speak to that a whole lot. All I can tell you is that in my experience, focusing on specific things that I want to be truly good at has worked out great for my career. That doesn't mean that I closed myself off to other things. With my website rewrite, I have been doing a lot of dev ops-related work and a lot of back-end stuff that I've typically not been involved in. You want to keep your head up on what's going on outside of what you're doing so that you know what direction to go in when you come across problems you need to solve. However, finding a focus on what you want to be good at has helped me a lot. That way, you feel a little less stressed.
And the third one? 
Learn how to learn effectively. It's a three-step process: you consume, build, and teach. The consumption of newsletters and Twitter and whatever inspires you, but you don't want to spend too much time doing that — implementing it into actually building something matters. This happens naturally if you work at a company, but maybe you're not making the things you want to learn, so you may want to start a side project. The building phase is where you get experience, but you also want to solidify that experience. How? You start teaching. You don't necessarily have to teach it to people, it could be stuffed animals. The goal of the teaching is to retain in your mind what you've learned through the building process.
What are you working on right now? 
The big thing I'm working on right now is a rewrite of my website. It'll be much more than just a developer portfolio — I'll have user accounts, and there'll be fun things that you can do with it. And because it's more than just a website, I'm using Remix, a new cool framework in the React ecosystem. I'm also working on updating my material on TestingJavaScript.com and a TypeScript course as well. 
So, whatever I'm working on, it ends up resulting in lots of opportunities for content.

Do you have some rituals that keep you focused and goal-oriented? 
I have a notepad where I keep all of my notes of what I'm going to do for the day so that when I'm checking things off, I'm not distracted notifications. I've tried apps for that, and that does not work well for me. 
I also am a firm believer in inbox zero. I have my work inbox and my personal inbox, and I keep them both at zero. And I kind of use that as a to-do list. 
And if I'm not feeling excited about working for some reason, I will often hop on my Onewheel, which is an electric skateboard that only has one giant wheel in the middle. It's just a total blast, and I'll hop on that with my backpack and a charger, and I'll go to a Starbucks or a park just to declutter my mind.
What things in the React universe are you excited about right now?
React version 18 is coming out soon. The experimental version is out there, and it's fun to play with. I'm just really thrilled that it's no longer a concurrent mode but concurrent features that you can opt into. Cool things like that will enable React server components in the future. 
But the biggest thing I'm excited about is Remix. That's huge. It eliminates a lot of problems that are solved well other tools, but when I'm using Remix, I don't have those problems, so I don't need those clusters.
You already said that teaching is an integral part of the learning process, and you stand your word since you're also a full-time educator. What inspired you to enter this field?
I have been a teacher for as long as I can remember. I grew up in a church where you talk in front of your peers from a very young age, and my mom was an elementary school teacher, so teaching has just always been a part of me. 
I really just enjoy sharing what I'm learning with others. As far as teaching technical topics, I gave my first workshop when I was still a student at Brigham Young University. With my fellow, we taught how to use AngularJS, and I got Firebase to sponsor pizza so they would show up, and that was pretty fun.
Then I started teaching on the side at egghead.io right after I'd graduated. That was when I first got a paycheck for teaching. And I realized that teaching could be quite lucrative and support my family and me as a full-time endeavor. So I did it — I quit my job. I'm a very risk-averse person, so I'd done teaching as a side hustle for four years just to verify that I could make this work.
When TestingJavaScript was released, and I got that paycheck, I realized that I didn't need my PayPal salary anymore. I could just focus my daytime on teaching and give my evenings back to my family, which was a nice trait.

Apart from that, how has teaching impacted your career? 
Earlier I mentioned that pretty much all of my jobs came because I was perceived as an expert. After the first job, where I was an intern and then converted into full-time, I never applied to another. I worked for four different companies, and they wouldn't have recruited me if they didn't know who I was and what I was doing. My content is how they knew who I was — I just made it easy for them to find me. Teaching made that impact. It made my career. 
We talked about React and Remix. Are there any other open-source projects that you'd recommend keeping an eye on or contributing to?
I have some myself. React Testing Library is probably the biggest one that people are familiar with. And if React isn't your jam, then other framework versions of the testing library. 
React Query is also really popular. If you're using Remix, you don't need it, but if you're not, I strongly advise using React Query cause it's a stellar, fantastic library, and Tanner Linsley, the creator, is a stellar and fantastic person. 
What pieces of your work are you most proud of? 
Probably the biggest thing I've ever done is EpicReact.Dev. It has helped tens of thousands of people get really good at React, improve their careers and make the world a better place with the skills that they develop. My whole mission is to make the world a better place through quality software, and I feel like I've done that best with Epic React. 
There are things that I've built at other companies that are still in use, and I'm proud of those cause they've stood the test of time, at least these last few years. But of everything, I think Epic React has made the biggest impact.
Follow Kent on Twitter and listen to his favorite Spotify playlist
TechLead Conference 2023TechLead Conference 2023
36 min
Effective Communication for Engineers
Your communication skills affect your career prospects, the value you bring to your company, and the likelihood of your promotion. This session helps you communicate better in a variety of professional situations, including meetings, email messages, pitches, and presentations.
React Advanced Conference 2022React Advanced Conference 2022
24 min
A Career As Software Engineer
Typically I talk a lot about deeply technical concepts like TypeScript, type systems, (im)mutability, MobX, Immer etc. But this time it's going to be personal and I'll share lessons, good and bad, about growing as an engineer. I've been leading open source projects, short lived projects as a freelancer and I went through the transition of engineer to tech lead twice. Both at a young startup and at Meta. This talk will be about personal experiences, unpopular opinions and even actions, and anything else that might be counterintuitive. Join for some take-aways for anyone aiming at an engineering focused career. Probably I will be wrong about most things, so don’t miss the opportunity to follow up afterwards!

Workshops on related topic

React Summit 2022React Summit 2022
75 min
How To Design A Sustainable Freelance/Contracting Career + Speedcoding Challenge
Ready to kickstart your freelance career or just getting started on your freelance journey? You’re in the right spot. Learn from the world’s largest fully distributed workforce in the world.
The independent talent movement is the future of work. If you’re considering leaving full-time employment for a career as a freelancer, now is the time to find your successful space in the independent talent workforce. More people are working freelance today than ever before, with the freelance marketplace now contributing $1.2 trillion to the US economy. Some of the most in-demand roles for freelancers right now are senior developers with professional experience in React, Python, Blockchain, QA, and Node.js.
This workshop will help you design a sustainable and profitable full-time (or part-time) freelancing/contracting career. We will give you tools, tips, best practices, and help you avoid common pitfalls.
At the end of the workshop there will be a Q&A session with a Freelance Developer who can answer your questions and provide insights and tips into their own success.
During the Workshop break, we will be running a speed-coding challenge! At the end of the workshop, we will award a prize for the winner and display the leaderboard.
We will have you login to our portal and complete the challenge as fast as you can to earn points. Points are assigned based on difficulty and the speed at which you solve the tasks. In case you complete all tasks, you get extra points for the remaining time. You’ll see your score, ranking, and the leaderboard once you complete the challenge.
We will be giving away three Amazon Gift Cards ($200, $100, $75) for the top three winners.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Designing A Sustainable Freelance Career
Would you like to pursue your passions and have more control over your career? Would you like schedule and location flexibility and project variety? Would you like the stability of working full-time and getting paid consistently? Thousands of companies have embraced remote work and realize that they have access to a global talent pool. This is advantageous for anyone who has considered or is currently considering freelance work.>> Submit your interest on becoming a freelance engineer with Toptal and get a call with Talent Acquisition specialist <<

Freelancing is no longer an unstable career choice.

This workshop will help you design a sustainable and profitable full-time (or part-time) freelancing career. We will give you tools, tips, best practices, and help you avoid common pitfalls.
Table of contents

Module 1: Dispelling common myths about freelancing
Module 2: What does freelancing look like in 2021 and beyond
Module 3: Freelancing choices and what to look for (and what to avoid)
Module 4: Benefits of freelancing from a freelancer + case study
Module 6: How to get started freelancing (experience, resume, preparation)
Module 7: Common paths to full-time freelancing
Module 8: Essentials: setting your rate and getting work
Module 9: Next steps: networking with peers, upskilling, changing the world
Module 10: Freelancer AMA
React Summit Remote Edition 2021React Summit Remote Edition 2021
121 min
Landing Your Next Developer Job
Renaud Bressant (Head of Product), Nathanael Lamellière (Head of Customer Success and Solution Engineer), Nouha Chhih (Developer Experience Manager) will be looking at the different developer jobs that you can accounter when looking for your next developer role. We'll be explaining the specifics of each role, to help you identify which one could be your next move. We'll also be sharing tips to help you navigate the recruitment process, based on the different roles we interviewed for as recruiters, but also as candidates. This will be more of an Ask Us Anything session, so don't hesitate to share your thoughts and questions during the session.