More and more companies seem to be into required programming tests before even interviewing developers. While the assignment usually seems moderately easy, there can be some caveats along the way.

I am a C# software developer for an IT services provider in the Benelux and used to be against programming skill tests because I thought they measure a very one-sided view of certain developer’s skills and more often than not, there is more than meets the eye.

I have been on all sides of this equation. I have taken a couple of tests, I have co-developed a programming skill test, I have interviewed candidates using tests on a lot of occasions, and last but not least I have prepped and coached quite a few developers as well.
Lately, I am beginning to realize that there is also more than meets the eye to these tests and they can provide a lot of valuable insights and talking points for the interview.

There seem to be a couple of types of tests:

Trivia tests
There are trivia tests asking about differences between data types, statements, programming paradigms. These tests are usually pretty straightforward, but self-thought developers sometimes miss the boat here. They tend to use non-technical terms for the patterns and paradigms they use and when asking for the text-book terms, they sometimes draw a blank.

Code questions
These tests consist of multiple code snippets with one or more questions about the code. For example: given this code snippet, how many SQL queries will be executed against the database, or given this code snippet, what will be the value of the variable X?
Sometimes there are extreme time constraints preventing the candidate to do google searches or ask someone else for help. These time constraints also tend to make these kinds of tests pretty stressful and not every developer thrives well under these circumstances. This does not make the developer a bad developer and more often than not these types of developers finish their work well before the deadline, simply because they do not like stress.

Coding assignment
The last category is the coding assignment. It is the kind of test we see most of the time, at least in our part of the world. This will no doubt differ per region.

With the first two tests there usually is a clear question with a clear cut answer. While there is some room for discussion and debate, most of the time there is a right answer and everything else is wrong on some level. The coding assignment is somewhat more deceitful.

The prime objective is, making the client understand you know your way around software development

FIVE tips to pass your programming skill test

1. Always triple-check the client’s acceptance criteria
Usually the client provides some additional acceptance criteria in which techniques to use or avoid, a minimal level of unit test code coverage, or some additional requirements.

Always triple-check if these requirements are indeed reflected in your codebase. Whenever possible have some colleague, with preferably more experience, review your code and criteria. Asking feedback, just as with a regular pull request, is not cheating the test as this is one of our procedural foundations in our software development process. In the end, always make sure it is your solution to the problem and you understand every nook and cranny.

2. It is not only about solving the puzzle
Most of the time the assignments are pretty clever and fun and sometimes it feels like solving a puzzle. While making-it-work is essential in passing the coding challenge, it is not your only objective.
Even when the assignment does not say anything about security, unit tests, documentation, coding guidelines, source control, logging, or deployment scripts, the prime objective is to show you are an excellent developer and therefore you should at least show you have considered many of these aspects. You could implement features, write documentation, you can state intent with code, or make it transparent in some other way or fashion.

3. Choose frameworks and architecture which make sense
Every developer, whether they are green as they come, or is a seasoned veteran, has over-engineered the crap out of some piece of code. You should always choose frameworks and architecture that fit the essence of the coding challenge, the client’s current architectural landscape, but also reflects your primary toolbox.

4. While it is a puzzle, it is not a game
The solution you create for solving the coding challenge should reflect the best of your abilities and this will of course differ based on your seniority. It should show

  • you understand a proper project structure
  • you commit to a paradigm and execute upon it consistently
  • unit test code coverage matters
  • you understand how to write readable/maintainable code
  • security is important to you when writing code
  • CI/CD readiness

It is not important this code will never see the light of day, this is your chance to show you understand these topics and that this client should definitely hire you on the spot.

5. First make it passable, then go for gold
Never forget the prime objective is making the client understand you know your way around software development. ‘Passable’ should in no way imply setting the bar low, but goes further than just making it work. The test is not about learning new techniques or using cutting-edge new technologies so stick with what you know and feel comfortable with. This will get you to a passable level reasonably fast and you can go nuts when having achieved that milestone.

Conclusion
I can not stress how important the prime objective is: make the client understand you know your way around software development. Learn new techniques on your own time, or even better, learn them on the job after, but do everything in your power to pass to test.

Judgment day
If you have executed the programming skill test to the best of your abilities usually you will pass the test with flying colors.
If for some reason the client is not convinced, consider it a valuable learning experience. If possible, ask the client why they were not convinced and what parts you should work on to improve.

As software developers we never stop learning…