ALL CASE STUDIES

AI Workflows

HR Workflow Automation & 360 Feedback

Quarterly 360 feedback that runs itself, and turns free-text comments into themes a manager can act on.

01

Why 360 cycles quietly stop happening

Not because anyone objects to them. Because someone has to pick reviewers, send forms, chase the 40% who forget, strip identifying detail from the responses, and synthesise the rest — and that person has a day job. The cycle survives two rounds and then slips. Automating the mechanical parts is the difference between a quarterly rhythm and an annual scramble.

02

Anonymity has to be real, not promised

People write what they actually think only if they believe the process. That means aggregating below a minimum response count rather than showing individual comments, stripping identifying phrasing before a manager ever sees the text, and never exposing raw responses through the tooling — not even to admins. If someone can reconstruct who said what, the next round gets you nothing but platitudes.

# never surface a theme that can be traced to one person
MIN_RESPONSES = 4
if len(responses) < MIN_RESPONSES:
    return {"status": "withheld", "reason": "below anonymity threshold"}

A hard floor, checked before summarisation rather than after. Three responses about a two-person team is not anonymous no matter how it's phrased.

03

Themes, not sentiment scores

Reducing a paragraph to 'sentiment: 0.62' throws away the only useful part. The model clusters comments into recurring themes and quotes representative lines verbatim, so the manager reads what was said rather than a number derived from it. The synthesis is a reading aid, not a verdict.

04

The human stays in the loop

Nothing generated goes to an employee unreviewed. The output is a draft for the manager — themes, quotes, suggested areas — that they edit and own. Automating the delivery of performance feedback would be a way to make a sensitive process worse, quickly.

# n8n: schedule -> collect -> threshold -> summarise -> DRAFT to manager
#                                                     └─ never auto-send

The workflow deliberately terminates at a draft. Every path that could send generated feedback directly to a person is absent by design, not disabled by config.

Tools, and why these ones

  • Self-hosted workflow automation: cron triggers, form distribution, reminder chasing, and the branching logic between collection and synthesis.

    Why: Self-hosting is the requirement, not a preference — this pipeline handles unanonymised feedback in transit and that should never leave infrastructure you control.

  • Structured LLM output

    DOCS ↗

    Themes returned as validated JSON against a schema rather than prose, so downstream steps can enforce the anonymity threshold programmatically.

    Why: Free-text output would have to be parsed to check whether a theme is traceable to one person. A schema makes that check mechanical instead of best-effort.

What it took

Feedback cycles fail on logistics, not intent: someone has to chase the responses, collate them, anonymise them, and read three hundred comments before writing anything useful. Automating the mechanical parts means the cycle actually happens every quarter instead of twice a year when someone remembers.

  • n8n
  • LLM gateway
  • Google Workspace
  • Python
  • Slack

Outcome

quarterly
cadence
automated
chasing

Next case study

Zero-Trust Access Migration