Our recruiting team has been working really hard to scale out our Engineering teams in Madrid and Barcelona. This is a major challenge - as we’re committed to maintaining a very high standard of quality in our team as we grow. A big obstacle our recruiters face is that many candidates who appear to have significant, applicable work experience don’t end up performing very well in our selection process. We’ve identified that a lot of the skills we look for, while taught at top universities, aren’t used that commonly in work at many European companies. As such, candidates who have been out of university for a long time often are out of practice in many of these areas. In this article, I’ll briefly describe a number of topics that will be covered throughout the process.
Algorithms and Data Structures - sorting, searching, trees, lists, hash tables, etc. You should have a basic understanding of each such that you can apply them in solving different problems, and discuss costs/trade-offs imposed. If you’re interested in working on more low-level stuff, it’s good to be familiar with the implementation of common open source projects that apply these concepts. Most of the problem-solving type questions we’ll ask will involve applying these concepts to a practical problem to reach an efficient solution.
OOP design - design principles, encapsulation, divisions of responsibility, common patterns, etc. This is one of the big things we look for in the code test - that you know how to structure clean, clear code using inheritance, abstract classes, encapsulation to support your design. Expect that you’ll be asked to sketch out how you would structure code to implement a particular feature or solve a problem.
Security - common attack vectors against web applications and tactics for combating them. This probably isn’t something you learned in school; if you’re working at a good web company right now, hopefully they require you to be mindful about these vectors and you know the various pitfalls. We’re pretty skeptical of pen-testing and audits as a way to prevent security problems, and our release cycle (twice per week) is too quick to allow for exhaustive use of such measures. Our engineers need to be able to think critically about code written by themselves and others to ensure it does not introduce vulnerabilities into our applications.
Database concepts - concurrency control, indexes, logical-to-physical mappings, query execution. Tuenti’s a very data intensive application: our users create a ton of content and we present dynamic, unique views of that content to each visitor to the site. Doing this efficiently requires us to be very careful about how things are stored, cached, and accessed within our systems. A strong conceptual understanding of information management systems, as well as familiarity with a variety of implementations of such systems (eg MySQL, MemcacheD, Postgres, etc), is extremely helpful in understanding the design decisions we’ve made already and proving to us that you’ll make good decisions once you’re here.
Several points of the above will be evaluated in a code test. In particular, for a code test you must present an efficient, correct solution implemented with good OOP design in a manner that is readable (using documentation, if needed). To pass, your solution needn’t be bug-free or have perfect style/syntax - but you shouldn’t show unusual carelessness either. We care mostly about how you think, how you can express that in a well-structured solution, and what you can produce in the allotted time.
If you make it through the code test, you can expect to face questions about each of these in the interviews. Generally speaking, we try to pose questions that are pretty broad and open-ended - especially as you progress farther in the interview process. Clearly and concisely explaining your solution is important - don’t be afraid to sketch out something illustrating your solution and, of course, write code.
I hope that gives you an understanding of some of the broad technical areas we’ll cover. Frequently, to be well-prepared across all of them requires that you are passionate about building web apps and spend a lot of time reading blogs and books related to these. Such independence and self-motivation is also something we’re looking for throughout the process, as we try to ensure you’ll succeed in our culture.
If you’re ready, submit your CV at jobs.tuenti.com If not, I’ll be posting more articles about the recruiting process here at Tuenti in coming weeks, so check back.