TL;DR: Odoo Community's recruitment app tracks the pipeline very well, and stops right before the evaluation itself. We wrote the missing part: interview scorecards per role with weighted criteria, a rating each panel member submits blind, a portal where the applicant sees their decision and leaves with the book of their interviews, a retention period that ends in an actual deletion, and a cost per hire that owns up to the hours it could not price. Nothing ranks anyone automatically, and that is a choice, not an oversight.
In this article
- The scorecard is set before you meet anyone: the structured interview predicts performance best (0.42 in Sackett 2022), and a published scorecard never changes again.
- Blind submission, or what separates a panel from an echo chamber: everyone submits their rating before seeing the others', and the gap between assessors becomes the debrief agenda.
- What the applicant has a right to know: section 27 gives applicants access to interview notes within 30 days, hence a book handed over without assessors' names.
- Delete for real, and still keep the measure: an anonymous aggregate per scorecard, opening and year is written before any deletion, and the code enforces that order.
- The real price of a hire: panel hours are computed with no data entry, and the cost per hire says how many hours it could not price.
- The blind spots: the module ranks nobody, detects no discrimination and counts visits, not people.
- How we put it together: nine modules installable separately, the job offer wired into our own e-signature module, and a public demo.
- What we take from it: three non-technological moves: decide the scorecard first, have everyone write before reading, accept that it will be read.
Three people walk out of an interview room. The first one says "I liked her". The other two nod. Someone types two lines into the file, the next candidate walks in, and six months later nobody can say why the person who got hired beat the other two.
That is not a tooling problem, not at first. It is a record-keeping problem. Odoo Community's recruitment app does exactly what it says: the opening, the person, the application, the stages, the refusal reasons, the public job page. All of it is there, it is solid, and it is free. Where the core stops is the interview itself: one free-text note on the application, and a per-opening questionnaire that at best adds up points per answer, weights no criterion, compares nothing, and has no idea a panel exists.
We spent the tail end of summer writing the missing part.
The scorecard is set before you meet anyone
Unstructured interviews have had a poor reputation among researchers for a long time, but the evidence moved recently and deserves to be quoted properly. In 2022, a team led by Paul Sackett revisited the major meta-analyses of personnel selection to correct a systematic overestimation caused by range restriction. The result: most methods are worth less than we thought, by 0.10 to 0.20 of a correlation point, and the ranking has a new leader. The structured interview comes first, at 0.42, ahead of cognitive ability tests at 0.31.
In other words, the best predictor of job performance is not a paid test: it is an interview somebody took the time to prepare. And "prepare" has a precise meaning here, one that has nothing to do with skimming the CV five minutes beforehand.
What a scorecard holds
A scorecard, in our module, belongs to a role and to a round. It carries criteria, each with its own weight: framing the need can count twice as much as written French, and that is decided before anyone walks in. Some criteria are knockouts, and they are announced as such.
Above all, each criterion carries anchors: a description, in observable behaviours, of what a 1, a 3 or a 5 looks like. That is the difference between "seemed well organised to me" and "names the real problem and backs it with something they lived". Two assessors reading the same anchor score the same thing. Two assessors improvising score their own mood.
A published scorecard stops moving
Once published, a scorecard cannot be modified, neither it nor its criteria. To evolve it, you draw a new version, which is a separate record. Last year's session therefore stays readable exactly as it was scored, against the scorecard that existed that day.
Without that freeze, an interview file proves nothing: anyone could touch up the scorecard afterwards and make the decision look coherent in hindsight. Which is precisely what you will be asked to disprove the day somebody challenges it.
Blind submission, or what separates a panel from an echo chamber
Back to the three people leaving the room. The problem is not that they agree. The problem is the order of operations: the first score spoken out loud becomes an anchor, and the others drift toward it without anyone noticing. You paid for three opinions and received one.
The module reverses the order. Until you have submitted your own rating, you see neither the scores nor the comments of the rest of the panel. Once submitted, every rating appears, gaps included. And a gap is not an accident to smooth over: two people diverging on the same criterion is the most useful thing on the debrief agenda.
Under the hood it is an access rule resting on a computed field that remembers who has submitted. We wrote it with a mutation test, meaning a test that deliberately breaks the rule to confirm that the rule is what hides the data, and not some happy accident of the interface. A confidentiality guarantee you have never tried to break yourself is not a guarantee.
What the applicant has a right to know
Quebec law is more demanding on this point than most employers assume.
Section 27 of the Act respecting the protection of personal information in the private sector requires any business holding personal information about someone to confirm its existence, communicate it to them and let them obtain a copy. Assessments written during an interview are personal information about the person being assessed. They fall squarely under section 27.
Section 32 gives 30 days to answer, and states that silence counts as a refusal. Section 33 adds that access is free, apart from reasonable transcription, reproduction or transmission fees. An access request lands by email on a Tuesday, nobody knows where the interview notes live, and a month later the company is in breach without ever having decided to be.
The book we hand over, and the one we keep
So we wrote two versions of the same document. The internal book shows everything: the criteria, the scores, the comments, who assessed and who decided. The book handed to the candidate shows the same criteria and the same comments, but without the assessors' names, with the panel reduced to a headcount and without the name of the person who made the call.
Why remove them? Section 40 of the same Act requires refusing to communicate information when doing so would reveal personal information about a third party and that disclosure would be likely to seriously harm that third party. Both conditions matter, and the second one will not always be met: this is not a blanket ban on naming your assessors. It is our cautious default, and it can be changed.
The portal delivers the same thing without anyone lifting a finger. Before the decision, the person sees the status of their file: the role, the date they applied, the number of interviews held, nothing else. Showing assessments while the process is still running would poison the process. After the decision, they see the decision, its written reason, and they download their book.
The price of that door
From the moment the portal exists, every written assessment is effectively handed to its subject. The right of access stops being a request handled by hand and becomes automatic and permanent.
It is deliberate, and it needs saying to your panels before the module goes live, not after. The rating form says so on screen anyway: write it knowing that the person being assessed has the right to read it. In practice, it improves the comments. You get fewer "not the right fit" and more things that can actually be checked.
Four rules to set before the next posting:
- write the scorecard and its weights before the job goes up;
- have every assessor submit before they see the others;
- require a written reason for any refusal after an interview has been held;
- set the retention period for an application file, and honour it.
The first three cost nothing and need no software. The fourth one is a legal obligation.
Delete for real, and still keep the measure
Section 23 is explicit: once the purposes for which personal information was collected have been fulfilled, the business must destroy or anonymise it. The Commission d'accès à l'information page on recruitment puts it bluntly: employers "cannot keep the personal information of unsuccessful candidates indefinitely", and once the objectives are met "it must be destroyed securely".
An application file that has been sitting in an ERP for four years is therefore not an asset. It is a breach taking up disk space.
Except that a proper deletion carries something useful away with it. The ratings are what tell you whether a scorecard actually separates candidates, or whether a criterion discriminates nothing and merely fills a line. Once destroyed, they cannot be rebuilt, and the company loses the measure of its own tools along with the personal data.
Yet the measure is all it needs. So before any deletion, the module writes an aggregate per scorecard, per opening and per year: number of sessions, number of people assessed, mean score, standard deviation, and the detail per criterion including the spread between assessors. No names, neither candidates nor assessors. And the order is enforced in code: a deletion campaign aiming at a year that has not been aggregated yet raises an error instead of going through. Aggregate first, delete second. It is the only order that works, because the other one is irreversible.
The real price of a hire
SHRM reports an average cost of roughly US$4,700 per hire, and a talent management consultant quoted in the same article offers the split that explains why the number always surprises people: 30 to 40 percent hard costs, and 60 percent soft costs. Hard costs are the invoices: the posting, the agency, the background check. Soft costs are the time your people spend screening, scheduling, meeting and deciding, instead of doing their job.
Tools usually count the invoices and skip the rest, because invoices are easy. We already had the raw material: an interview session carries its duration and the list of its panel. Multiply the two and you get person-hours, with no extra data entry at all. Multiply that by the employee's hourly cost where it exists, or by a fallback rate set on the company, and you get a real panel cost.
And when the number does not know
A panel member is not necessarily an employee. A director, an outside consultant or a board member can sit on a panel without an employee record, and therefore without an hourly cost. Those hours cannot be priced.
A cost per hire that counts zero for what it does not know understates itself, and the more people the opening pulled in, the worse it gets. The module never does that: it counts the person-hours no rate covers, it flags the figure as partial, and it writes the sentence saying how many hours are missing and why. In the same spirit, an opening with no hire does not show a cost per hire of zero: it shows none at all, and says that the money spent is still running.
Which job board earns its price
Same logic on the posting side. Odoo already knows where an application came from when it arrives through the job page. What it does not know is how many people read the posting without applying, and that is exactly the half you need to judge a job board.
So we connected two core modules that were not talking to each other: recruitment sources and the tracked link shortener. Each board gets its own short link, the one you paste into the ad. Visits are counted, applications are attached, and you get a conversion rate per board, a cost per application, and a cost per hire.
The unknown gets the same treatment: an application with no source cannot be credited to anyone, so the opening counts those separately and says so, because the conversion rate only covers the share that carries a source. And spend that belongs to no board is shown in plain words, in dollars, right next to the rest.
The blind spots
A recruitment module does not recruit. Neither does this one.
It will not improve a badly written scorecard. If your criteria are vague, weighting them only lends an air of rigour to an impression. The quality of the anchors is human work, and it is the real work.
It does not detect discrimination. It makes a decision traceable, which helps you review it, but a panel that consistently rules out the same profiles will do so with a scorecard as well as without one. On that ground, the useful reading is still the Commission des droits de la personne, and we covered it in our article on interview norms from one country to the next.
It ranks nobody. The score helps a person decide, it rules no application out. That is deliberate, and it is also what the law encourages: section 12.1 requires informing a person when a decision concerning them is based exclusively on automated processing, and giving them the chance to submit observations. Our answer to that requirement is simple: we never make that kind of decision.
Tracked links count visits, not people. One candidate opening the ad three times counts three times. The conversion rate is a way to compare boards against each other, not an audience measurement.
It holds to what Odoo holds. The module grafts onto the core recruitment app and copies none of its fields. If you are not using Odoo's pipeline yet, start there; it is free and it is enough for a lot of organisations.
How we put it together
Nine modules, each installable on its own. The interview book works alone, and the others show up when the need does: the applicant portal, a rewrite of the four emails the core sends, the retention bridge, the job offer on the company letterhead, sending it out for signature, expenses, statistics per job board, and cost per job board.
Two details that matter if you run Odoo Community. First, the job offer: Community produces no offer document at all, and Odoo's own signature module is Enterprise only. So we wired the offer into our own electronic signature module, the one that seals the PDF and keeps the proof. Second, the offer goes out for signature with its letterhead, not as bare body text: what the candidate signs is exactly the document they read.
And one rule we set for ourselves: the module refuses to draft an offer when the application carries no salary terms. A document announcing a salary of zero because a field was empty is worse than no document.
All of it runs on a public demo, with sample data: the opening, its three job boards, two sessions scored by two assessors each, and the applicant portal. It sits on the same foundation as Symbifox, our all-inclusive ERP. Ask us for the address and we will walk you through it.
What we take from it
Hiring is one of the rare processes where a company writes things about people, decides on that basis, then forgets all of it. The three moves that fix this are not technological: decide the scorecard first, have everyone write before they read the others, and accept that what gets written will be read by the person concerned.
Software only makes those three moves easier to perform than their opposite. What it adds is what a human cannot hold by hand: the retention period that comes due, the anonymised measure that survives the deletion, and the cost that says what it does not cover.
If you hire a few times a year and your interviews live in scattered documents, let's talk about your next posting. We will look at your process before talking about software.
Sources
- Act respecting the protection of personal information in the private sector (CQLR c. P-39.1): sections 12.1 (automated decision), 23 (destruction or anonymisation), 27 (right of access), 32 (30-day deadline), 33 (free of charge) and 40 (information about a third party).
- Commission d'accès à l'information du Québec, recruitment section: necessity of the collection, and the ban on keeping unsuccessful candidates' files indefinitely.
- Sackett, Zhang, Berry and Lievens (2022), Journal of Applied Psychology: revisited meta-analytic estimates of validity in personnel selection, structured interview first at 0.42 ahead of cognitive tests at 0.31.
- SHRM, The Real Costs of Recruitment: average cost of roughly US$4,700 per hire from SHRM benchmarking data, and a 30 to 40 percent hard cost against 60 percent soft cost split offered by the consultant quoted in the article.
- Odoo, edition comparison: what Community includes, and what is reserved for Enterprise.
- Odoo documentation, Recruitment app: the pipeline, the stages and the refusal reasons the core provides.