What we test for
Typical work
- Product features and APIs on Django REST Framework
- Upgrades from Django 2 or 3, one long-term release at a time
- Query and migration work on tables too big to lock
- Internal tooling on the admin that saves an operations team a hire
The coding test
Add an endpoint to an existing project with permissions, serializer validation and tests, then fix a list view that runs one query per row it renders. Scored on where the logic lands, how the migration is written, and whether the fix survives the next field somebody adds.
Five interview questions you can reuse
We use questions like these in our soft-skills and technical rounds. Steal them for your own interviews.
A list endpoint fires hundreds of queries. What do you reach for?
A strong answer covers: select_related for the forward keys, prefetch_related for the reverse and many-to-many ones, only or defer when the rows are wide, and an annotation instead of counting in Python. Then a test asserting the query count, so the next change cannot quietly undo it.
How do you ship a migration against a table nobody can lock?
A strong answer covers: In pieces: add the column nullable, backfill in batches outside the migration, then add the constraint. Schema and data stay in separate deploys, the code works against both shapes while they land, and they know which operations rewrite the whole table on their database version.
Where does business logic belong in a Django project?
A strong answer covers: Not in the view and not in a signal. Views translate HTTP, models and a service layer hold the rules. Signals are the ones that hurt: implicit, awkward to test, fired by fixtures, and skipped entirely by bulk operations, so half the writes never run them.
Where do permissions actually get enforced in a REST API here?
A strong answer covers: In the queryset, not only in the permission class. A view that fetches by primary key and then checks a rule has already told the caller the row exists, and object-level permissions only ever run on the objects you looked up. Filter to what this user may see first, then authorise, and never leave the permissive class as the default.
When is the admin the right answer, and when does it bite?
A strong answer covers: It is excellent for an internal team that understands the data model, and it is free. It bites when it becomes the product: no workflow, permissions only as fine as the model, and a bulk action that bypasses every rule you put in save(). At that point build the screen.
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 Django developers?
6+ years of professional Django 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.