Back to work

Terydin · 2026 · Product Engineer

Initiate onboarding flow

An onboarding sequence that could not finish, because the order was written into the product instead of being chosen per placement.

The contradiction, stated by the product. One date field for the entire onboarding, under a recommendation that it complete at least three business days before the 21 September start date, for a sequence containing an in-person check that cannot happen until the employee arrives on the 21st.

The problem

Terydin places people with client companies. Onboarding ran as a five-step wizard: candidate summary, Terydin onboarding tasks, client onboarding tasks, timeline, confirm. Two task steps, hardcoded in that order, one template chosen from a dropdown on each side.

Day 1 verification is an in-person identity check against a Ghana Card, carried out at the client site once the employee physically turns up. It sat inside Terydin onboarding as mandatory step five, described in the product's own words as Method: In-person (Accra). Not yet scheduled.

Client onboarding waited on Terydin onboarding. The step said so plainly: these tasks will be locked until Terydin system steps and template tasks are complete. So the phase that had to finish first contained a task that could not happen until after the employee started, and the phase that would follow was locked behind it.

Nobody had to be told there was a deadlock. The wizard specified one, in four separate places, in copy written by the product itself.

  1. 01

    The wizard specified a deadlock

    Day 1 verification was mandatory step five inside Terydin onboarding, and it is an in-person check at the client site. Client onboarding was locked until Terydin onboarding completed. The first phase could not finish until after a milestone that the second phase gated.

  2. 02

    Onboarding was due before the employee arrived

    The timeline step was a single date field for the whole onboarding, under a recommendation that target completion should be at least three business days before the start date so the employee is fully cleared before day one. Against a 21 September start, that asked for completion by mid-September, of a sequence containing a check that could not happen until the 21st at the earliest.

  3. 03

    There was nowhere else to put Day 1

    The wizard's step structure only expressed two task phases, Terydin then client. There was no third slot. Moving Day 1 out of Terydin onboarding was not a change anyone could make from inside that design, because it had no place to move it to.

  4. 04

    Customisation was a disabled radio button

    The template modal offered two choices. Use template as is, selected. Personalize template, greyed out and labelled Coming soon, with the subtext that edit access will be granted to customize this template. The need was understood and the capability was not there.

Design thinking

The work here was not interface work, it was dependency work. The existing wizard was coherent and well built, and it made one reasonable assumption, that onboarding is Terydin's part followed by the client's part. Everything that went wrong follows from that assumption meeting an in-person check at a client site.

So the pre-work was mapping the phases and their prerequisites and walking real placements through them, looking for the cases that break. That is what established the deadlock as structural rather than incidental: the sequence cannot be fixed by moving a task, because the step structure itself only has two places to put one.

Which led to the conclusion the whole redesign rests on. No fixed order survives every placement, so the target stopped being the right sequence and became a way for operations to express whatever sequence a placement actually needs.

What changed

Before

Template Selection. One dropdown, one template for this phase, and a choice between Use template as is, selected, and Personalize template, disabled and labelled Coming soon.

After

Add templates. Search, filter by type, and add as many phases as the placement needs, each showing its task count and how many are required. Day 1 Verification is now a template in its own right, typed Day 1, described as on-site verification with a Ghana Card on the employee's first day at the client.

The clearest argument that the redesign answered a real need is that the product already admitted to it. Customisation was not a missing feature nobody had thought about, it was a disabled radio button with a promise attached. But the more important change is in what the picker can express. The old modal chose one template for one phase, so the phase count was fixed at two before anyone opened it. The new one adds phases to a stack, which is why Day 1 can exist here as its own entry with its own type rather than being wedged in as step five of somebody else's list.

Assembling an onboarding

The redesigned flow drops from five steps to four, because the two fixed task steps collapse into one configurable stack. It is judged on whether the per-person decisions become obvious without becoming tedious.

  1. 01

    Candidate summary

    A read-only summary sourced from the Talent Community after offer acceptance. Who this is, the client, the role and the start date, confirmed before anything is assembled.

  2. 02

    Build the stack

    This is the step the whole redesign turns on. Phases are dragged into position, and separately from that, each one carries its prerequisites as chips. Every chip has a remove control and every phase has an Add beside it, so a phase can wait on several others or on nothing at all. Removing a chip is how a phase stops blocking. Behind each row, Tasks opens the editor for removing, editing and adding tasks, setting requiredness, and giving individual tasks their own due dates. Only the first phase is fixed, and it says why: runs first, no prerequisites possible.

  3. 03

    Set the timeline

    The stack renders back as a schedule, one due date per phase with each prerequisite printed underneath so the graph is legible as a timeline. The client phase, named here for the client as Research Co Assignment, unlocks after Terydin pre-onboarding, and Day 1 unlocks after that. The rule the step enforces is that a phase falls due after everything it waits on, so the dates cascade instead of collapsing onto one deadline, and Day 1 lands the week after the employee arrives rather than three days before.

  4. 04

    Confirm and initiate

    The assembled sequence is reviewed once and sent. Nothing is decided at this step, which is the point of doing the thinking in the three before it.

Why not just move Day 1?

The obvious fix is to move Day 1 verification to the end of the sequence. That fix is not wrong so much as insufficient, because it swaps one order baked into the product for a different order baked into the product. The next placement that does not fit the new order has exactly as little recourse as this one had.

So the sequence stopped being something the product knows and became something operations declares. What a phase waits on is an input now, set per placement, and it is allowed to be nothing at all.

Order and dependency are separate concerns, and both are editable. Phases are numbered and dragged into position independently of what they wait on, which means Day 1 sitting third is an arrangement rather than a rule. It can be dragged to second, and the phases after it can have their prerequisites cleared so nothing waits on it. Only the first phase is fixed, because there is nothing ahead of it to wait on.

Timing follows the same principle. A due date per phase in the timeline step, and due dates per task in the editor behind each phase, rather than one date covering the whole onboarding.

Templates are snapshotted when they are assigned, so editing a template later never disturbs somebody already halfway through their onboarding.

Step two of the shipped wizard, and the whole problem in one screen. This is not inference from a progress bar, it is the product stating its own sequencing rule and then breaking it three lines later.
  1. 1

    Terydin first, client second

    Why

    The step header states the rule the whole design rests on: these steps are defined by Terydin and will be the first onboarding steps before client-side onboarding.

    What it changed

    Everything in this phase must therefore be completable before the client phase begins, which is a promise the list below cannot keep.

  2. 2

    Day 1 verification, mandatory, step five

    Why

    Method: In-person (Accra). Not yet scheduled. A physical identity check, sitting fifth in a phase that must complete before the client phase can start.

    What it changed

    This single row was the deadlock. It cannot be done until the employee turns up, and the employee turning up was downstream of the phase it blocked.

  3. 3

    And again at step fourteen

    Why

    Day 1 verification appears a second time in the same phase, as a confirmation task assigned to Operations, described as an in-person identity check at the client site.

    What it changed

    The same impossible dependency is encoded twice in one phase, which is what a structural problem looks like when it is patched rather than solved.

Tradeoffs

Configurability was bought with consistency. When operations assembles a stack per person, two people hired into the same role on the same day can end up onboarded differently, and there is no longer a single template to point at and say this is how we do it. That is a real cost and it was accepted deliberately, because a fixed template that deadlocks is worse than a flexible one that drifts.

It also moved work onto the onboarding specialist. The old flow asked them to pick two templates from two dropdowns. The new one asks them to make decisions per person, which is more thinking at the moment of assignment in exchange for placements that actually progress.

And the design it replaced was not careless. It was a coherent wizard built on an assumption that holds for most onboarding, that the employer's part comes first and the client's part follows. It only fails where a task needs the employee physically present at the client, which is exactly Terydin's model and nobody else's.

Outcomes

The outcome is not that Day 1 verification moved. It is that nothing in the sequence has a fixed position any more. The default stack runs Terydin pre-onboarding, then client assignment, then Day 1, which is right for an ordinary placement and is why the deadlock is gone. But a placement that needs Day 1 early, or needs two phases running with nothing between them, is now a configuration an operator makes rather than a change request an engineer takes. Placements move.

The assign flow drops from five steps to four, because two fixed task steps collapse into one configurable stack. On an employee's detail view the phases read in the order they were given, so an operations lead can see that Terydin pre-onboarding is complete, client assignment is in progress, and Day 1 is waiting behind it.

Terydin pre-onboarding complete, client assignment in progress, Day 1 verification last and locked behind it. The phase that used to hold the sequence up now sits at the end of it.

Every pain point, answered

The wizard specified a deadlock

Day 1 verification was mandatory step five inside Terydin onboarding, and it is an in-person check at the client site. Client onboarding was locked until Terydin onboarding completed. The first phase could not finish until after a milestone that the second phase gated.

Day 1 became a phase in its own right, with configurable prerequisites rather than a fixed position. In the default arrangement it waits on the client phase instead of blocking it, and that relationship is a chip an operator can remove.

Onboarding was due before the employee arrived

The timeline step was a single date field for the whole onboarding, under a recommendation that target completion should be at least three business days before the start date so the employee is fully cleared before day one. Against a 21 September start, that asked for completion by mid-September, of a sequence containing a check that could not happen until the 21st at the earliest.

Dates became granular: one per phase in the timeline step, and one per task inside the task editor. The phases that genuinely should clear before arrival still can, while Day 1 is scheduled after it.

There was nowhere else to put Day 1

The wizard's step structure only expressed two task phases, Terydin then client. There was no third slot. Moving Day 1 out of Terydin onboarding was not a change anyone could make from inside that design, because it had no place to move it to.

The second step became a configurable stack rather than two fixed slots. The number of phases, their order, and what each one waits on are all inputs now, so a third phase is not a special case, it is one more entry.

Customisation was a disabled radio button

The template modal offered two choices. Use template as is, selected. Personalize template, greyed out and labelled Coming soon, with the subtext that edit access will be granted to customize this template. The need was understood and the capability was not there.

Templates became editable at the point of assignment: remove or edit tasks, add ad-hoc ones, set requiredness task by task. Templates are snapshotted when assigned, so editing one later never disturbs somebody already halfway through.

The handover

A pull request is raised with the full prototype and detailed documentation covering the entire feature. Every phase, every state, every edge case is documented so a developer picking it up has no ambiguity about what was built or why.

The docs spell out limitations, what the prototype fakes versus what comes from real endpoints, and where the boundaries are between frontend state and backend responsibility. Open questions are listed plainly rather than guessed at, and next steps are scoped so the backend team knows exactly what to build first.

How it was built

The interesting part of this one was not the fix, it was proving the fix was right. I had the deadlock from having lived it, so I went back to the shipped flow and walked it step by step until the product said it out loud: Day 1 mandatory inside Terydin onboarding, client tasks locked behind that phase, and a timeline asking for completion three business days before the start date. Evidence beats recollection, and here the evidence was sitting in the interface the whole time.

That is the habit rather than a one-off. A comment in the templates file credits a meeting with moving onboarding to a modular set of phase templates, which describes the shape of the solution and says nothing about why it was needed. Taking it as the rationale is the easy mistake, and it hides the actual cause. Once the real reason was pinned down I wrote it into the project record, so the next person to open that file gets the deadlock rather than the comment.

Get to know more about my workflow

Thank you for reading all the way through. I appreciate the time. If this sounds like the kind of work you need, do get in touch. I’d love to hear what you’re building.

Get in touch

React, TypeScript, Tailwind