What we test for
Typical work
- A Rails upgrade across two major versions, without a feature freeze
- The endpoints that got slow as the tables grew past what the ORM assumed
- Background jobs that are safe to retry, and the ones that are not
- Carving a service out of a monolith only where it pays for itself
The coding test
An index page makes 400 queries. Fix it, then explain the difference between what includes, preload and eager_load did to the SQL. Then add a migration that changes a column on a table with ten million rows, and tell us what it locks and for how long. Scored on the migration more than on the N+1.
Five interview questions you can reuse
We use questions like these in our soft-skills and technical rounds. Steal them for your own interviews.
includes, preload or eager_load?
A strong answer covers: preload runs a second query and cannot be used in a WHERE on the association; eager_load does a LEFT JOIN and can, at the cost of a wide result set; includes picks one of the two depending on what the rest of the chain asks for, which is why it surprises people. The senior answer is to look at the log and know which one you got.
Why do callbacks get a bad reputation?
A strong answer covers: Because they fire for every path that touches the model, including the seed script, the console and the test factory, and the ones with side effects outside the database make a save unpredictable. They are fine for keeping the record itself consistent. An email, a webhook or a job belongs where the decision was made, not in after_save.
How do you make a Sidekiq job safe to retry?
A strong answer covers: Assume it will run twice, because it will: a deploy, a timeout, a retry on a job that actually finished. That means a natural idempotency key, a check before an external call, and a transaction that does not enclose the HTTP request. Passing a whole object instead of an id is the related bug, since the job runs against a snapshot that is already stale.
A migration locked the table for eleven minutes. What should it have been?
A strong answer covers: Adding an index concurrently, adding a column without a default and backfilling in batches, and never adding a NOT NULL constraint and the data change in one step. The general rule is that a migration should be safe to run while the old code is still serving requests, because for the length of a deploy it is.
When does a service object earn its place?
A strong answer covers: When a piece of behaviour spans more than one model and has a name a product person would recognise. Not as a rule that every controller gets one, which produces a directory of classes with a call method and no shared idea. The fat-model problem is usually a missing concept, not a missing folder.
One invoice a month.
The shortlist is free. Pick the contract that suits you: monthly, six months or twelve.
What every seat includes
- Contracts, payroll and compliance handled
- Vetting: coding test, soft skills, English and a level check
- Free replacements: unlimited on 12+ months, 2 on 6 months, 1 on monthly
- A direct line to our CEO
Terms in plain words
- Monthly, six months or twelve, your choice
- Your rate is locked for the whole contract on 6 and 12+ months
- Monthly ends with 30 days’ notice
- Want to hire the developer full-time? The buyout is set in the contract from day one
Questions tech leads ask us
How senior are your Rails developers?
6+ years of professional Ruby, with recent production Rails. We ask about the last upgrade they ran and what broke, because that is the work most teams actually need.
Can they take over an application written by someone else?
That is the usual brief, and the coding test is built from it: the exercise is somebody else's code, not a greenfield model.
Skip the sales rep. Talk to the CEO.
Tell us what you're building, your stack and when you need people. Three vetted profiles per role within 48 hours of the call, and a straight answer on whether we're the right fit.