The barrier wasn't jobs.
It was vocabulary.
Every job platform opens with a version of the same question: What are your skills? For a young jobseeker navigating formal hiring for the first time, that question is unanswerable — not because the skills are missing, but because nobody ever taught them the nouns their skills are filed under. They have run a sari-sari store's stock. They have talked a price down at the palengke. They have been the one the family asks for advice. None of it arrives with a label attached.
So the résumé comes back blank, and the blankness gets read as having nothing to offer. The gap wasn't listings. It was somewhere to ask "what am I even qualified for?" without embarrassment.
In 2018, Messenger answered the third barrier almost by itself — already installed, already trusted, and often free-rated on Philippine mobile plans. The channel was the easy part. The interesting problem was what had to happen inside it.
Trust comes before the first data request.
End to end, the conversation does four things in order. Each stage has to earn the next one.
Everything in this section is stage one, because in 2018 it was the stage nobody was building. A career bot asks for your name, your birthdate, your address, your phone number and your email — from an audience with every reason to be careful about handing those over. So the flow spends its entire opening on permission and literacy, before a single résumé field.
The interface teaches itself before it asks for anything. The pencil is given a name, then a meaning, then a rehearsal — three turns spent on a convention most products assume you already know.
The practice rep runs on a nonsense phrase on purpose, so the first real typed answer is never also the first typed answer ever. A user who has only ever tapped buttons in Messenger gets to fail somewhere that costs nothing.
Recreated in this site's own system from my test conversation.
One line in the personal-information stage is the whole philosophy compressed: "Kung hindi mo alam kung kailan ka ipinanganak, pwede mo itong i-skip." If you don't know when you were born, you can skip this. Late birth registration is ordinary in the communities Plan International works in. A form would have marked that field required and lost the user at question three. The conversation treats the gap as normal and keeps going.
The questionnaire never asks “What are your skills?”
It asks which of three ordinary sentences sounds most like you. The sentences are deliberately domestic and unglamorous — haggling at the market, being the one people come to for advice, keeping a list and actually following it. Nothing in them sounds like a résumé. That is the point: they're answerable.
Articulating · Persuading
Nobody is asked to rate themselves. No scale, no "how would you describe your leadership style?" Every option is a circumstance the user can simply recognise or not.
That is the whole trick: self-assessment requires the exact vocabulary the user came here to get. Asking for it first would fail the people the product exists for.
The last bubble is the translation. Sharing a story with friends and family became Communication Skills · Articulating · Persuading — language they can put in front of an employer, derived from a life they already had.
Recreated in this site's own system. Production dialogue belongs to the client.
Four rounds of that, and the system performs the move the entire product exists for. It hands the answers back translated:
Left: what the user recognised about their own life. Right: what the résumé now says. The user never had to know the right-hand column existed.
A person who can't name their skills doesn't have fewer skills. They have fewer nouns.The reframe the engine is built on
I built this as a portable module, not a script. The questionnaire is a container with three replaceable parts: a bank of circumstantial statements, a mapping table from statement to skill, and a synthesis step that assembles the result. Swap the statement bank and the same machine profiles a different population — a different region, a different language, a different sector. It was designed to be lifted out of TESSA and injected somewhere else, which is what happened to it.
It ends with something you can take with you.
The conversation terminates in a real document — a résumé PDF, emailed and attached in the chat window, assembled from everything the user confirmed along the way. It is portable. It works on employers who have never heard of TESSA. A coaching product that hands you a file you can walk away with is refusing to be the destination, and that refusal is the right call for an audience whose data plan may not survive the week.
You have not added a work experience yet.
The empty state is printed, not hidden. A user with no work history sees a gap they can go and fill — which is a task — rather than a section that silently vanished, which is a verdict.
The file survives the conversation. It is emailed and attached in the thread, so it survives the session, the data plan, and the app — and works with employers who have never heard of TESSA.
The job board is the other half.
It is also the part I'd defend hardest. At the time, the partnership meant to feed it real listings wasn't live yet. The flow says so, out loud.
Instead of an empty list or a fabricated one, a listing hands the user to a real government employment office with everything needed to actually arrive there: address, Facebook page, email, phone number. The dead end becomes a referral. And the content model carries one field most job boards still don't ship — the language the interview will be conducted in. In a country with dozens of them, that field is the difference between showing up and showing up prepared.
Designing the degraded state as a genuine handoff, rather than hiding it, is what keeps the whole thing honest. The bot doesn't pretend to have jobs it doesn't have.
Content model of a single job posting, reproduced from the shipped flow.
The bot asked for the same phone number three times.
Here is the flow failing, in my own test conversation. The prompt wants an international format. My first two attempts didn't match it. The bot re-sent the identical message, twice, without ever saying what was wrong — and the repetition is the part a static screenshot can't convey.
⚠️ Pakigamit ang +63 bilang country code ng Philippines. Isulat gaya nito: +639279999999
⚠️ Pakigamit ang +63 bilang country code ng Philippines. Isulat gaya nito: +639279999999
⚠️ Pakigamit ang +63 bilang country code ng Philippines. Isulat gaya nito: +639279999999
The bot's message never changes. Three attempts, three identical replies. Nothing names what was wrong, so the user is left to reverse-engineer the rule from an example.
The repetition is the failure, and it is the part a screenshot cannot carry — one frame of this looks like a normal prompt. You have to watch it happen.
This is my own work, failing. The architecture was right and the error state was an afterthought, which is the usual order in which these things go wrong.
Shipped, unedited. Digits masked. Leaving this out would make the page a brochure.
The user is left to reverse-engineer the rule from the example. In a flow that spends its entire opening teaching people that the system is on their side — that "I don't know" is allowed, that a missing birthdate is fine — a silent rejection is the one moment it stops being on their side. The architecture was right and the failure state was an afterthought, which is the usual order in which these things go wrong.
The outcome data isn't mine to publish.
Conversation volumes, beneficiary counts, employment results — that belongs to Plan International, and releasing it isn't a decision I get to make. So there are no numbers on this page. The public evidence I can offer is that I was invited to teach the work.
One clarification, because the public record is inconsistent: TESSA was showcased during WEF Davos in January 2018, while still in pilot. It was not a session or a results announcement. Plan International Philippines has published one testimonial video from a user who found work. That is the full public record; I would rather state its limits than let it look larger.
The conversation shown here runs from September 2018 to February 2019. This is legacy work; the engine reasoning is what aged well.
The model generating the words matters less than the architecture deciding where the conversation is allowed to go.Djoaniel Hernandez · System note № 02