| | |

Interview Freelance/Offshore Programmer as NonTechnical Founder

Let’s assume that you are a startup founder. You did everything you supposed to do: verified big idea by getting feedback from potential customers, did mockups of all screens of the application, built a simple prototype with non-programming tools and now you are ready to build the app. Unfortunately, neither you nor your cofounder (if you have one) knows how to code.

Don’t assume that you can look to your software vendor for help. If vendors have the necessary design talent, most of them are doing a great job of hiding it.

Quote from the Web

You spent several months looking for technical cofounder and even considered to learn to code yourself. Eventually, you come to the idea that maybe for the initial release you can just hire a freelancer to build an MVP so then you can secure funds to hire a team of great developers.

Disclaimer: In this post, I will refer to developer candidate as he. There are good female developers out there, but I needed to choose a gender for simplicity.

The problem is that you don’t know how to hire a developer. I will review a process of searching for talent in another post, and in this post, I will only review the best way to interview a developer. After all, interviewing is not easy either. And any non-technical interviewer will have other questions:

  • What does a technical interview consist of?
  • How to know if the developer is not bluffing and he really knows what he’s talking about?

and so on.

Every time I start a new project, I begin by eliminating unnecessary risks. Such risks usually include new unproven technologies, new libraries, new operating systems, etc.

In case if the project requires special hardware, I try to get it even before the project starts. If we need a specific hosting platform then I get access to it as soon as possible. If the application needs to integrate with a third-party application then it’s a huge risk – I minimize it by proactively connecting with the vendor and asking them for a testing environment.

I cannot guarantee that you will always hire a good developer if you follow the steps below. In fact, nobody can. Even best CTOs occasionally make mistakes and hire bad employees.

What I am teaching here is how to minimize risks of hiring bad developers and increase the chances of hiring ones to build what you need.

And let’s be clear, you will not be able to hire Google-level engineers. They are already happily working at Google, Facebook, Amazon and other cool companies. They are very unlikely to join your startup, especially as first hires.

At the same time, there are a lot of capable developers who will be happy to work with on your big idea and there are even more bad developers who cannot code anything, and they will be happy to join as well. The trick is to separate bad and good guys and this post is about learning how to tell the difference between them.

Four parts of any technical interview

  • Preparation
  • Screening questions
  • Resume review
  • Technical test

Preparation

Before hiring a developer, you have to know which skills you are looking for. In most cases, you are looking for so-called Full-Stack Developers.

The full-stack developer is the one who can build the entire application from start to finish. For instance, a full-stack web developer knows a little bit of HTML/CSS/Javascript so he can build the front end, some PHP/Ruby/Java/.NET/Node.JS or whatever so can build the back end part and a little bit about databases to store the user data.

There are hundreds of technologies available for web or mobile development. So, which one to choose?

Unfortunately, this question can only be answered by the technical founder/CTO, the person you don’t have on your team. The answer depends on various factors, but the main factor is usually familiarity of CTO with a particular technology.

For a long time, another main factor for selecting technology was the ability to hire enough people with expertise locally, but since we are learning about using remote resources this factor is not important as it was earlier.

What will happen if you pick the wrong technology?

If you are not building something that requires special programming languages or libraries like a search engine or blockchains chances are that any technology will work for you. And if you are building a search engine then you should find a brilliant CTO first and he will decide anything technical.

So, look for a Full-Stack developer with a minimum of 5 years’ experience in developing applications like the one you need. Why 5 years? Since you are looking for your first hire you need an experienced developer and a developer with 5 years under the belt more likely to be able to build the entire application by himself.

Screening Questions

I start each interview with the same set of questions. Sometimes I ask them during a phone screening interview when the candidate is local and before I invite the candidate onsite. If the candidate is remote, then I can ask them during a Skype interview.

After each answer, I like to ask a follow-up question, such as Why or Tell me more.

1. Can you tell me about yourself?

This is a standard warm-up question. All candidates expect it to be asked and most of them prepare a short intro, so the question is not really important. But since you need to start somewhere this question is no worse than others. You can actually learn by asking a follow up: Why or Tell me more.

2. Can you list your top 3 technical skills?

When you initially filter out candidates based on their resumes you were looking for some specific skills, such as iOS development or PHP.

The order of skills in the answer is important because the candidate will start with the skill, he is most confident about.

And you want to hear the skill you think is most important for your project listed first. If you are looking for iOS developer then he should start with iOS, not HTML or SQL.

3. On a scale from 1 to 10 (where 10 is a highest), how would you rate yourself in those 3 skills?

If the candidate answered C#, ASP.NET and SQL Server to the previous question he should rate himself on those skills. The trick is to know that when interviewing programmers the average on 10 point scale is 7, not 5.

If the programmer rates himself as 7 he means that he sees himself as an average compared to other programmers. Most programmers think they are smarter than other people including you. Anything below 7 for a programmer is below average, so I am looking for 8 and 9.

If a programmer rates all his skills as 7 or lower than he is either extremely insecure or he understands that he is a junior. In either case, I’m less likely to hire him.

Sometimes a programmer can rate himself as 10. This means his ego overinflated even compared to his peers and he will be very hard to work with.

4. Are you a front end or back end developer?

When interviewing a Full-Stack developer you would assume that he is equally good in both UI and business logic. In reality, all developers know a little of everything but prefer to work on either front or back end.

Front end developers are visual. They can build nice looking screens, but the application itself may not be of the highest quality internally.

Back end developers are analytical, they like implementing algorithms, develop business logic, but the screens they build are usually pretty basic or ugly.

If I hire a team of engineers, I prefer to have one front end developer and several back end ones. In most applications, the bulk of work is done in the back end. For instance, with Facebook, the mobile app is a tip of iceberg whereas processing billions of messages happening on the background and invisible for end users is taking most of Facebook resources.

If all you can afford is one developer then you should decide what is more important for you now – good UI or complex business logic.

Again, do not forget to follow up and ask why the candidate prefers front or back end.

5. Better to be perfect but late or good enough but on time?

Either answer does not disqualify the candidate. In good times, when I have a long term project, I like to take time and invest in quality. But if time to market is more important then having a programmer who refuses to cut corners may delay the project delivery.

When I am hiring a team I assign Mr. Perfect to work on main features and a responsive guy to take escalation cases.

6. How much time can you commit to my project?

If the freelancer has a day job as most developers in high demand do make sure that the number of hours he can commit is enough for you to get the project off the ground.

Other questions

You should ask other questions as well, but do not ask any illegal ones. Those include anything related to race, religion, gender, nationality, age, etc. Even if the freelancer lives in another country get used to avoiding those questions during interviews.

Resume Review

After asking screening questions it’s time to review candidate’s resumes.

Things I am looking for in resumes:

  • Lack of grammatical errors. There are many free spell-check tools and there is no excuse for anyone to have spelling mistakes on a resume.
  • Education. Computer Science or other Engineering degree is preferable.
  • Career growth. If a developer worked for more than 5 years, I expect him to grow from Junior to Senior level role.

Some developers have never worked for any companies. While some people hate to work for someone and prefer to work for themselves, there is a huge benefit in being around other developers. First 5 years of anyone’s career are crucial and the best way to learn anything well is to have a mentor, usually at work.

If you have never interviewed anyone before I would suggest reading a book or two about hiring. One book I recommend is “Topgrading“. While I found this book useful mostly for hiring executives and not very helpful with hiring introverted programmers, I was able to find some interesting tips which I used in my own interviews.

One of the techniques described in the book is TORC – Threat Of Reference Check. I know some companies do not even call references because the candidates will never name someone who wouldn’t give stellar reviews. With TORC you just ask to provide his former manager’s information (not necessarily on reference list), but you don’t even need to call all of them. Very often this technique makes the candidate lie less.

Once I interviewed a DBA. She worked with 4 managers for 8 years in the same company and she managed to tell bad things about each manager. She even said that the manager who was constantly praising her and promoted her was acting unethically in some cases. Needless to say, I didn’t hire her because I just imagined what she might tell about me when she leaves the company.

When reviewing resumes, I like to ask questions about projects the candidate worked on. Most people would say “we worked on such and such project for some customer and we did the following”. When I hear the word “we” I follow up and ask to tell me more about his role. Ideally, I want to hear a story of how he led some parts of the project. I ask if it is possible to see the code.

Unfortunately, there is no way to know if the programmer really did what he claimed. He may say he wrote an entire back end for Uber and I have no way to verify this. At this point, I can only flag candidates that cannot tell exactly what they did besides following orders from others.

I understand that not every developer had a chance to work on cool projects and we all must follow orders if we want to be paid. But this is not what passionate developers do. When a passionate developer only fixes bugs at work he will do something cool on the side. So, ask if he is contributing to an open source project or building his own thing.

By asking about the projects he did in the past you learn if the candidate can explain things in plain English. You are going to work with him for a long time and I would advise going with someone less technically able but who can explain what he is doing and why. Bad communication is the main source of failed software projects.

Technical Test

Now we are getting to the fun part.

Even if you like the freelancer, even if his resume is impressive and the guy seems to know his stuff, you still have to conduct the technical test.

I met many people who seemed to be good on paper, who had jobs in other companies but still not being able to code simple things. How is it possible? They were able to obtain a job by BSing on the interview and later when the hiring manager recognized the mistake, they would be moved to positions that do not require actual programming.

many candidates who show up for programming job interviews can’t program. At all.

The Non-Programming Programmer
https://blog.codinghorror.com/the-nonprogramming-programmer/

I knew an engineer whose job was to maintain a build server, but in his resume, he wrote that he single-handedly built a solution done by another team.

Let’s start with something obvious. To recognize a good programmer, you must be a good programmer.

Since you are not a programmer, you have 2 options.

First, you can hire a Technical Advisor (part-time CTO) or Senior Developer on a freelance site. But since you are not a good programmer how do you know that the guy hired to interview others is good himself? In this case, you can hire 2 Senior Developers, have them conduct technical interviews and see who’s better.

In the case when the first option is not available then the second option is to conduct the test yourself.

I usually make candidates do one (or combination) of the following things:

  • Ask them to solve a simple problem
  • Send them a small task to complete before the interview and on the interview ask to explain the code
  • Give them a bad code and ask to find problems

Solving a simple problem

Since the interview is not supposed to be longer than an hour, I ask the programmer to solve a simple problem using one of those playground tools where developers can run their code. Examples are LeetCode and HackerRank. A developer can write code in the browser while you are watching him.

Generally, most people suggest against so-called whiteboard interviews. I am not a fan of those either because I know how intimidating the interview process is for some people. That’s why the questions should be fairly simple, something that anybody can do even under stress.

You are looking for 2 things in this exercise:

  • The developer must be able to complete the task with the correct result
  • Watch how long does it take for him to finish

If the developer cannot finish, then he is a non-programming programmer. And then from multiple candidates, you can choose the ones who work faster.

Sample questions:

  • Write a function to reverse a string. When the function is finished ask to run it with a string “Hello”, the function should print “olleH”.
  • Write a function to compute Nth Fibonacci number. If the developer does not know what Fibonacci numbers are, show them a Wiki page. When the function is finished ask to run it for N = 5 and N = 6.
  • Write a function to print the odd numbers from 1 to 99. The result is obvious.
  • A math Olympiad task for 5th graders. Suppose 4a12B is divisible by 99. Find all different values for 4A12B. The answer is 47124.

When comparing solutions from different programmers don’t be surprised that they all will look different. There is always more than one way to solve a programming interview problem. With tasks above you only care about the correct results.

Send them a small task to complete before the interview

When I was interviewed several years ago, I was given a small task which I now ask others to complete a day before the interview. I found that this approach allows me to quickly tell if the developer is decent, good enough or will be a 10x developer one day. Interesting fact, the best solution was submitted by a female recently graduated from college.

If you go with this approach, then ask the applicant to share his screen so he can run the app (make sure the results are correct) and ask him to explain how it works.

Here is a text of the task.

You have a character matrix and a word dictionary. Your task is to create a code that searches the matrix and finds the words from the dictionary. Words may appear horizontally, from left to right, or vertically, from top to bottom. In the example below the dictionary contains six words, and the matrix contains only three words (“WATER”, “PEER” and “STOCK”):

The “Find” method has two input parameters: dictionary and matrix. The number of items in the dictionary does not exceed 512. The character matrix is a set of strings. The matrix size does not exceed 32×32. All strings contain the same number of characters.

The “Find” method should return a set of words found in the input in any order. If no words found, the “Find” method should return an empty set of strings. Duplicate search results should be removed: if any word is found more than once within the matrix (like word PEER in the example), search results should include it only once. 

Example:

var dictionary = new string[] { "PEER", "WATER", "STOCK", "BEER"}; 
var matrix = new string[] { "FTESPA", "YWATER", "SKOOES", "CLGCRD", "JQPEER" }; 
var result = Find( dictionary , matrix ); 

The result variable should contain three strings: “WATER, “STOCK” and “PEER”. Order is not important.

Give them a bad code

I always say that developers cannot test their own code. We instinctively avoid passing bad input parameters to our code so that tests we write do not crash our applications. But guess what any programmer can do? Find bugs in someone else’s code.

For this task, you may ask a Senior Developer to write some inefficient/buggy code and during the interview ask the candidate to find as many issues as he can.

You can google such examples for the language you are testing.
Here is a link for C# interview.

Closing

At the end I always following questions:

  • When are you able to start?
  • Is there anything I haven’t told you about the job or company that you would like to know?
  • What are your salary/rate expectations?
  • Anything else you want to tell about yourself?
  • Any questions to me?

Conclusion

If have some doubts, no hire. If you keep having doubts either you have problems, or the pool is not right. Don’t be afraid that you’re going to reject too many people and you won’t be able to find anyone to hire

The Guerrilla Guide to Interviewing (version 3.0)
https://www.joelonsoftware.com/2006/10/25/the-guerrilla-guide-to-interviewing-version-30/

I know that many startup founders hesitate to hire developers because they don’t know how to interview them. Heck, most first-time founders never interviewed or hired anyone in the first place. So, I hope my interview tips will help someone to avoid minimize risks of hiring a bad freelancer.

Images used: Ethan “Interview?”. May 4, 2011. Online image. Flickr. Mar 13, 2019. https://www.flickr.com/photos/42353480@N02/5768808772/

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *

ten + 5 =