What we test for
Typical work
- Long-lived business applications with real domain rules
- Migrations from Symfony 4 or 5, and legacy code pulled in behind a bundle
- Doctrine work: mappings, performance, and models that outgrew the ORM
- Message-driven work: asynchronous handlers, retries and failure transports
The coding test
Add a use case with a controller, a service wired by the container, a Doctrine entity and a Messenger handler, with tests. Then explain why an entity that was clearly changed never reached the database. Scored on service design and on what they know about the unit of work.
Five interview questions you can reuse
We use questions like these in our soft-skills and technical rounds. Steal them for your own interviews.
You changed an entity and nothing was written. Why?
A strong answer covers: The unit of work did not see it: nothing flushed, the object was never managed or had been detached, the change was on something the mapping does not track, or it happened after the flush in the same request. The answer we want explains managed and detached, not just add a flush.
Doctrine hydrates objects you never asked for. How do you keep it fast?
A strong answer covers: Fetch joins and DQL for what the page needs in one go, array or scalar hydration on read paths, a dedicated read model for anything report-shaped, and clear() inside a long batch loop before memory goes. Objects are the write side; reports are not.
How do you wire services when autowiring is not enough?
A strong answer covers: Named arguments and explicit definitions, an alias when an interface has more than one implementation, a tagged iterator for a set of strategies, and a compiler pass only when nothing else reaches. Autowiring is a sensible default, not an architecture.
A message handler throws. What should happen next?
A strong answer covers: Retry with backoff, then a failure transport where a human can see it, rather than a loop that re-delivers forever. Handlers are written for redelivery because it is normal, and the transaction boundary sits outside the handler so a half-finished unit is never committed.
Where do you draw the line between the framework and the domain?
A strong answer covers: The rules of the business live in objects that do not import the framework, and the controller calls an application service rather than orchestrating anything itself. It costs a little indirection now and it is the reason the code survives the next major version.
One monthly price per developer. Everything in it.
No deposit, no minimum term, no placement fee. You pay one invoice a month for each developer on your team.
Per developer, all-in. Your quote arrives by email with your exact number after you send the brief.
- Developer pay, local payroll and taxes
- Vetting: coding test, soft skills, English
- Free replacement within 90 days
- A direct line to our CEO
What changes the price
- Seniority and role. Senior engineer, tech lead or architect.
- Stack. Some stacks and niche tools cost more to staff.
- Team size. Larger teams get a better monthly rate per seat.
- White-label. Agencies reselling under their brand get partner pricing.
Terms in plain words
- First 2 weeks risk-free: if it isn't working, you don't pay for them
- Month to month, 30 days' notice to end
- No deposit and no minimum number of seats
- Want to hire the developer full-time? Buyout of 3 months' fee in year one, 2 months' after
Questions tech leads ask us
How senior are your Symfony developers?
6+ years of professional Symfony work, with recent production experience.
Can I see the coding test results?
Yes. Every profile card includes the score and the reviewer's notes.
What does it cost?
$6,900 per developer per month, all-in, and flat: the same rate whatever the stack. Your exact quote arrives by email after you send the brief.
Skip the sales rep. Talk to the CEO.
Tell us what you're building, your stack and when you need people. Three matched profiles within 48 hours, and a straight answer on whether we're the right fit.