35+ Years Experience Netherlands Based ⚡ Fast Response Times Ruby on Rails Experts AI-Powered Development Fixed Pricing Available Senior Architects Dutch & English 35+ Years Experience Netherlands Based ⚡ Fast Response Times Ruby on Rails Experts AI-Powered Development Fixed Pricing Available Senior Architects Dutch & English
Senior Rails Engineer Interview: A Fractional CTO's Hiring Rubric for 2026

Senior Rails Engineer Interview: A Fractional CTO's Hiring Rubric for 2026

Roger Heykoop
Fractional CTO, Hiring
Senior Rails Engineer Interview rubric from a fractional CTO with 19 years of Rails. The questions, scoring, signals and red flags I use to hire seniors.

A founder I work with as fractional CTO asked me last quarter to help him hire ten senior Rails engineers in twelve weeks. Five-person team scaling to fifteen, Series B closing, every hire on the critical path for the next release. We screened sixty-two CVs, ran eighteen full loops, and made four offers. The other fourteen were not bad engineers. They just were not senior Rails engineers, no matter what their CV said.

After nineteen years of Rails I have done a lot of these loops, and the single biggest mistake teams make in a senior Rails engineer interview is treating “senior” as a function of years. It is not. Senior is a function of judgment, debugging instincts, production scars, and the ability to say “I do not know” without flinching. This is the rubric I use, the questions I actually ask, the signals I score on, and the red flags that get someone moved to “no” before lunch.

What a Senior Rails Engineer Interview Is Actually Measuring

Before any structure, you have to be honest about what “senior” means for the role you are filling. In my fractional CTO work I draw a hard line: a senior Rails engineer can own a feature end to end, including the boring parts — the migration, the background job, the rollout plan, the metric they will watch after deploy, and the rollback if it goes sideways. They do not need a tech lead to tell them what to do. They tell the tech lead what they are doing.

That sounds obvious, and yet most senior Rails engineer interview loops I see test for none of it. They test leetcode. They test trivia. They test “do you know the latest gem.” None of those predict whether the person will ship. The four things I actually want to measure in a loop are: production judgment, debugging method, code taste, and communication under pressure. Everything in my rubric maps back to one of those four.

The other thing the rubric has to do is be cheap. Every extra round is a tax on candidates, on your team, and on your hiring velocity. I run a four-round loop that takes four hours of candidate time and about six hours of interviewer time per finalist. Anything more is self-indulgent.

The Four-Round Senior Rails Engineer Interview Loop

The structure is fixed. The content rotates so candidates cannot cheat from Glassdoor.

Round one — phone screen (30 minutes). Hiring manager. Goals: confirm the CV is real, confirm motivation, calibrate level, set expectations. I ask three questions: walk me through your last shipped project, what did you own end-to-end, what is one production incident you caused. The third question filters more candidates than the other two combined.

Round two — coding round (60 minutes). Pair on a realistic Rails task. Not leetcode. The task is open-ended, has at least three reasonable solutions, and rewards asking questions. Senior engineers ask questions. Mid engineers start typing.

Round three — architecture round (75 minutes). Whiteboard or shared doc. We design a system together. The point is not the design. The point is how they reason about tradeoffs, what they ask before they answer, and whether they can defend a choice without getting defensive.

Round four — war stories (45 minutes). Two engineers, one structured conversation. Three questions: tell me about a time you broke production, tell me about the worst Rails code you have ever written, tell me about a technical decision you regret. If they cannot answer any of these, they are not senior.

Total: 3.5 hours of candidate time, plus a take-home for finalists if the role requires it. I rarely use take-homes — they bias against senior candidates with families. If you must, cap them at two hours and pay for the time.

The Coding Round: Questions That Reveal Real Seniority

The single best coding-round task I have used in the last two years is this: here is a Rails model with too many responsibilities, fix it. I give the candidate a User model with twelve callbacks, three concerns, a method that hits Stripe, a method that enqueues a job, validations that depend on environment, and one method that does an HTTP call inline. I ask: what would you change first, and why?

class User < ApplicationRecord
  include Notifiable
  include Searchable
  include Auditable

  has_many :subscriptions
  has_many :invoices

  validates :email, presence: true, uniqueness: true
  validate :email_must_be_business_domain, if: -> { Rails.env.production? }

  before_validation :normalize_email
  before_create :assign_referral_code
  after_create :create_stripe_customer
  after_create :send_welcome_email
  after_update :resync_with_crm, if: :saved_change_to_email?
  after_destroy :purge_external_data
  after_save :reindex_search

  def upgrade_to_pro!(plan_id)
    Stripe::Subscription.create(customer: stripe_customer_id, plan: plan_id)
    update!(plan: "pro")
    AnalyticsTracker.new.track(self, :upgraded)
  end
end

A senior Rails engineer does not start refactoring. They start asking. What is calling upgrade_to_pro!? Is it the controller or a job? What happens when Stripe times out — do we end up with plan: "pro" and no subscription? What test coverage exists? Are the after_create callbacks already causing the kind of callback chaos I have written about before?

A mid engineer starts extracting concerns. A senior engineer realises the upgrade_to_pro! method is the bug, not the callback list. They will reach for a service object, talk about idempotency, raise the question of what the controller actually wants to return, and only then touch the callbacks. The order of operations is the signal.

The second task I rotate in is N+1. I show them a controller that loads three hundred records and renders JSON, and I ask them to make it fast. The trick is the answer is not always includes. Sometimes it is preload, sometimes it is eager_load, sometimes it is a subquery, sometimes it is a select that drops twelve columns nobody uses. A senior Rails engineer can explain when to use which and why.

# Naive
@orders = current_account.orders.recent.limit(300)
# In the view: order.customer.name, order.line_items.sum(&:total)

# Senior fix — knows includes joins differ from preload
@orders = current_account.orders.recent.limit(300)
  .preload(:customer, :line_items)
  .select(:id, :customer_id, :total, :created_at)

# Senior also asks: do we even need 300? Is this a list view that paginates?
# Senior also asks: is total denormalised, or are we summing line items per order?

The candidate who pastes .includes(:customer, :line_items) and stops is not senior. The candidate who explains the difference between preload (two queries), eager_load (one big LEFT OUTER JOIN), and includes (Rails decides) and picks the right one for this case — that one is senior.

The Architecture Round: Questions That Separate Senior from Staff

This is the round I run myself. The prompt is always concrete and always pulled from a real problem I have worked on. My current favourite: design a multi-tenant Rails app for a B2B SaaS where each tenant has between one and ten thousand users, tenants must not see each other’s data ever, and we expect a hundred tenants in year one and a thousand in year two.

The candidate has 75 minutes to walk me through how they would build it. There is no right answer. There are wrong answers. The wrong answers all come from candidates who pick a pattern before they understand the problem.

The senior engineer asks first: what is the data isolation requirement legally? What is the read-write ratio per tenant? What is the largest tenant likely to be? Are tenants ever migrated between regions? Only after that do they start drawing schemas. They will weigh row-level scoping versus separate schemas versus separate databases, and they will pick one and defend it. They will name the failure modes of the choice they made. They will say “the thing I am giving up here is X.”

The staff-level engineer goes further. They will mention things you did not ask about — backups per tenant, deletion under GDPR, tenant-aware feature flags, observability that does not leak across tenants. They will ask about the team. “How experienced is the team that will operate this? Because that changes my answer.” That single question is one of the strongest staff signals I know.

Other architecture prompts I rotate: design a webhook ingestion pipeline that survives a ten-times spike. Design a job queue that has to handle both ten-millisecond emails and ten-minute exports without one starving the other. Design a feature-flag service for a four-team monolith. None of them are about Rails the framework — they are about whether the candidate can think about systems.

Production War Stories: The Signal That Matters Most

If I had to keep one round and drop the others, it would be this one. Every senior Rails engineer I have ever worked with has scars. They have broken production. They have shipped a migration that locked the table. They have written code that paged them at 3 a.m. They remember it. They can tell you the shape of the incident in a way that shows they learned.

The questions are simple. “Tell me about a time you broke production. Walk me through how you found it, how you fixed it, what you changed afterwards.” I am listening for four things: how fast did they detect, how did they form a hypothesis, did they isolate before they fixed, and what process change came out of it. A candidate who says “I rolled back and we moved on” is not senior. A candidate who says “we added a smoke test, a query timeout, and a runbook step that catches this class of bug” is.

The second war-story question is my favourite. “What is the worst Rails code you have ever written, and why was it the worst?” Senior engineers laugh and have one ready. They tell me about the god model they wrote in 2019, the metaprogramming spike they regret, the Sidekiq retry storm they shipped on a Friday. Junior engineers freeze. Mid engineers tell me about something that is not actually that bad. Senior engineers will pick something genuinely awful and explain what they would do differently now.

The third question is the calibration check. “Tell me about a technical decision you regret.” Same listening criteria, but it surfaces taste rather than firefighting. The best answer I ever got: “We picked Mongo for a transactional system because the lead engineer wanted to learn it. I knew it was wrong and I did not push back hard enough. Two years later we migrated everything to Postgres and I owned the migration.” That candidate I hired the same week.

Red Flags in a Senior Rails Engineer Interview

These are the patterns that move a candidate from maybe to no, fast.

They cannot explain N+1 in plain English. Not the term — the underlying mechanic, why ORMs are prone to it, why count versus size versus length matters. If they cannot teach it to a junior in two minutes, they have not lived it.

They hand-wave at testing. “We have tests” is not an answer. I want to know what kind, what coverage philosophy, what they do when a test is flaky, whether they have ever deleted a test and why. The candidate who tells me they deleted a hundred snapshot tests because the team had stopped reading the failures is the candidate I hire.

They reach for AI for everything. I have nothing against AI in the dev loop — I run a Ruby MCP Server in production and I use Claude every day. But a senior engineer who cannot reason about a piece of code without asking the model is not yet senior. The model is a tool. The judgment about whether the model’s answer is right has to come from the engineer.

They cannot name a Postgres extension they actually use, or a Postgres-specific feature they care about. After nineteen years I am tired of the “I just use what Active Record gives me” answer. Senior engineers know about advisory locks, about partial indexes, about pg_stat_statements, about EXPLAIN ANALYZE. If the candidate has never read a query plan, they are not yet senior on a Rails team that runs Postgres.

They cannot debug without the debugger. Pry and binding.pry are great. But the senior engineer can also reason about a stack trace from a log line, can find a slow query from pg_stat_statements, can correlate a memory spike with a deploy without needing to attach a debugger. Working through one of those scenarios is the fastest way to spot it — see also the patterns I cover in debugging memory leaks in Ruby on Rails production.

The Scoring Rubric I Actually Use

I score on five dimensions, one to four. No threes. Forcing yourself off the middle is the whole point.

Production judgment — would I let them deploy on Friday afternoon. Debugging method — do they form hypotheses or do they guess. Code taste — would I want to maintain the code they wrote in the loop. Communication under pressure — when I push back, do they argue the idea or take it personally. Domain learning — how fast do they pick up something they have not seen.

A four is “strongly yes, would actively want them on the team.” A two is “no, would not hire.” A one is “no, and would push back if anyone else wanted to hire them.” Three is banned because it is a hiding place. Every interviewer scores independently before we debrief, and we do not show scores until everyone has written them.

The “bring back” verdict exists but I keep it rare. About one in twenty candidates ends up in bring-back, usually because the loop hit them at a bad moment or one round was unrepresentative. If a candidate goes to bring-back twice, they are a no — the signal that we cannot get conviction is itself conviction.

The thing nobody talks about: calibration matters more than the rubric. Two interviewers using the same rubric will produce different scores until they have done thirty loops together. Build that calibration on purpose. Debrief every loop, even the easy ones. The rubric is a forcing function, not a substitute for judgment.

FAQ

How long should a senior Rails engineer interview process take?

Four rounds, 3.5 hours of candidate time, two weeks calendar. Anything longer and your best candidates accept somewhere else. Anything shorter and you cannot get conviction. If your senior Rails engineer interview process is taking more than three weeks end-to-end, the bottleneck is your scheduling, not the rubric.

Should you give senior Rails engineers a take-home assignment?

By default, no. Take-homes bias hard against candidates with families, second jobs, or visa situations. They also do not test what you think they test — most candidates either over-engineer to look senior or use AI to generate the answer. If you must, keep it under two hours, pay for the time, and use it as a conversation starter in a follow-up round rather than a pass/fail gate.

How do you screen for fractional or contract senior Rails engineers differently from full-time?

Fractional and contract loops are shorter — usually two rounds — but the war-stories round is non-negotiable. You are buying judgment, not training potential. I also weight the architecture round more heavily because contractors land in the middle of an existing system and have to read it fast. The same rubric, but the bar on “production judgment” goes up a full point.

What is the most underrated senior Rails engineer interview question?

“What is the smallest pull request you have shipped that you are most proud of?” It surfaces taste, restraint, and the engineer’s sense of what good looks like at micro scale. Junior and mid engineers default to the biggest project they shipped. Senior engineers tell you about a fifteen-line change that fixed a class of bugs forever, or a one-line revert that saved the launch.


Hiring senior Rails engineers and tired of loops that produce false positives? TTB Software helps founders run interview rubrics and technical due diligence as part of fractional CTO engagements. Nineteen years of Rails, dozens of loops, and a deeply-held opinion that the war-stories round is the one you cannot skip.

#senior-rails-engineer-interview #rails-developer-hiring #fractional-cto #ruby-on-rails-jobs #senior-engineer-interview-questions #technical-interview-rubric #ruby-on-rails
R

About the Author

Roger Heykoop is a senior Ruby on Rails developer with 19+ years of Rails experience and 35+ years in software development. He specializes in Rails modernization, performance optimization, and AI-assisted development.

Get in Touch

Share this article

Need Expert Rails Development?

Let's discuss how we can help you build or modernize your Rails application with 19+ years of expertise

Schedule a Free Consultation