The Octura Solutions Challenge

You found the hidden challenge

You read the source of the sites you visit. That is exactly how we think. Below is a real Odoo engineering problem. Solve it, send it, and skip straight past our usual screening.

  • Senior Odoo Engineer
  • Remote, US / Canada
  • Full-time

Why this challenge exists

We build Odoo for a living, and we hire engineers who open the hood before they ask for the manual. A CV says little about how you write correct, performant ORM code. A patch says a lot. So here is a patch to write.

The brief

A client handed us the computed field below, from a custom Odoo 19 module. It works on a single record, but in production it is slow on order lists and some point totals are wrong. Three defects are hiding in it.

# models/sale_order.py  (Odoo 19)
from odoo import api, fields, models


class SaleOrder(models.Model):
    _inherit = 'sale.order'

    loyalty_points = fields.Integer(
        string='Loyalty Points',
        compute='_compute_loyalty_points',
        store=True,
    )

    @api.depends('order_line.price_subtotal', 'partner_id')
    def _compute_loyalty_points(self):
        for order in self:
            points = 0
            for line in order.order_line:
                product = self.env['product.product'].browse(line.product_id.id)
                if product.loyalty_eligible:
                    points += int(line.price_subtotal / 10)
            order.loyalty_points = points + order.partner_id.bonus_points

Your task

  1. Identify the three defects: one performance, two correctness. Explain precisely why each one is a problem.
  2. Rewrite the method so it is correct and processes a recordset in batches (no per-record access).
  3. Explain in a few sentences why your version stays correct under multi-company rules and with negative lines (credit notes).

No hidden traps beyond the three defects. We grade correctness, ORM reasoning, and clarity, not length.

How to submit

  1. Push your solution to a public repo or gist (the corrected method plus your written explanation).
  2. Open the application form below. Paste the link in the portfolio field and your reasoning in the cover letter.
  3. A strong solution skips screening and goes straight to a technical conversation with our senior team.
Submit my solution

Prefer email? Write to career@octurasolutions.com