Bestinet AI Builders Challenge 2026 · Demonstration
The ticketing system that already runs.
BestDesk is an AI-augmented support operations platform built inside Bestinet, by the people who answer the calls. It is not a proposal, not a prototype, and not a slide. It is in production at bestdesk.my right now — and we will drive it live in this session.
Presented 27 August 2026 · Bestinet Sdn Bhd
Team BestDesk
Iffah · 60 seconds · opening
"Assalamualaikum dan selamat pagi. Terima kasih kerana beri kami masa pagi ini. Saya Iffah, dan ini team BestDesk."
"Empat orang. Satu sistem. Dan sistem ini bukan cadangan — ia sudah berjalan. Live, hari ini, di bestdesk.my, dipakai untuk operasi FWCMS. Nanti Azam akan buka portal tu depan encik-encik dan drive dia live."
"Tapi sebelum kami tunjuk apa yang kami bina, kami nak cerita dulu apa yang kami belajar sebelum membina — sebab tahun lepas, industri ini bagi kita dua amaran besar."
Do not
- Don't list features here. The only job of this slide is: four people, one live system, and the promise of a live demo.
- Don't apologise for the team being small. Small is the argument.
Stage
- All four stand for this slide, then Iffah stays and the rest sit.
- Second browser tab: bestdesk.my already loaded and logged in BEFORE the session starts.
Industry context · why now
Traders have a name for this year: the SaaSpocalypse.
In one trading session this January, US$285 billion was wiped off enterprise software stocks when AI agents moved directly into CRM and support territory. The per-seat software model — the model Bestinet pays for today — is the one under attack.
“We were more confident about what the AI could do than we were prepared for what it couldn't.” Senior Salesforce executive — three months after cutting 4,000 support staff, and shortly before hiring people back
support staff cut by Salesforce, announced as an AI success. Three months later they were redeploying and rehiring.September–December 2025
of Agentforce enterprise deployments failed to reach successful deployment.Valoir research
showcased customers were actually using the AI when Bloomberg called them. The official answer: the adverts were “future-oriented”.Bloomberg, May 2026
of Salesforce revenue is what the AI bet actually generates, behind the bundled headline figure.Q1 2026 filings
Iffah · 75 seconds · we did the research
"Trader di Wall Street ada satu nama untuk tahun ini — the SaaSpocalypse. Dalam satu sesi dagangan bulan Januari, 285 bilion dolar hilang dari saham enterprise software, bila AI agent mula masuk wilayah CRM dan support."
"Dan tengok apa jadi pada syarikat paling besar dalam industri tu. Salesforce buang 4,000 orang support, umum sebagai kejayaan AI. Tiga bulan kemudian — panggil balik. Bloomberg call tiga customer yang mereka tunjuk dalam iklan AI — tiada satu pun yang guna. Jawapan rasmi: iklan tu 'future-oriented'."
"Kenapa kami mula dengan cerita ini? Sebab sebelum kami tulis satu baris kod pun, kami study kenapa projek AI gagal. Team ini buat kerja rumah dulu."
Tone warning
Do not sneer — the room may include people who bought vendor AI. Frame it as an industry-wide lesson the team studied, not other people being stupid. The point is readiness, not mockery.
The connection to land
Per-seat SaaS is exactly what Bestinet pays ManageEngine for today, and exactly what breaks at 400 operators. This slide quietly sets up the whole cost case in Act 4.
Industry context · the second warning
The other trap: the vibe-coding backfire.
AI made building software fast. It did not make software understood. Teams shipped AI-generated systems nobody could maintain — the industry calls it the day-two problem: the demo works, then the billing system changes, and no one knows how the code actually flows.
“Almost right, but not quite.” The #1 developer complaint about AI-generated code — Stack Overflow survey, 2025. Almost-right code is worse than broken code: it fails after you trust it.
of business leaders made staff redundant after deploying AI.OrgVue, 2025
of those same leaders later admitted the decision was wrong.OrgVue, 2025
agents' worth of work Klarna claimed its AI was doing — before quality collapsed and they rebuilt human support.Klarna, 2025
risk in one finding: developers using AI assistants wrote less secure code while feeling more confident it was safe.Security research, 2025
Iffah · 60 seconds · then the turn
"Amaran kedua datang dari cara software dibina. AI buat coding jadi laju — orang panggil 'vibe coding'. Tapi laju bukan sama dengan faham."
"Industri ada istilah untuk apa yang jadi lepas tu: the day-two problem. Hari pertama, demo jalan cantik. Hari kedua, sistem sebelah berubah, dan tiada siapa faham macam mana kod tu mengalir. Survey developer 2025, komplen nombor satu tentang kod AI: almost right, but not quite. Dan kod yang hampir betul lagi bahaya dari kod yang rosak — sebab dia gagal selepas kita percaya dia."
"Jadi dua perangkap: AI yang dijual sebelum diukur, dan kod yang dibina tanpa disiplin. Kami reka BestDesk untuk elak kedua-duanya — dengan sengaja. Ini caranya."
Why this slide earns its place
It pre-answers the hardest question of the day — "was this vibe-coded with AI?" — before anyone asks it. Hidayat's Act 3 then pays it off with the discipline slide.
Our answer, point by point
What we did instead.
Iffah · reads only rows four and five, then hands over
This slide is a reference wall. Do not read all six aloud — that kills the pace.
"Baris keempat yang paling penting untuk hari ini. Semua dalam slide ini bukan mockup. Sekejap lagi kami tukar tab dan drive portal production tu live depan encik."
"Dan satu lagi — kami tak jual pengurangan kakitangan. BestDesk buang minit-minit menyalin data antara tiga portal. Bukan buang operator. Sekarang, Norizan — masalah sebenar kita."
Cut line
At a 10-minute slot: slides 02–03 compress into 30 seconds of Iffah speaking over THIS slide ("industri panggil dia SaaSpocalypse… vibe-coding backfire…"), then straight to Norizan.
One call. A dead, empty form. Three portals before anyone starts solving anything.
The operator opens a ticket — and gets a dead, empty form. It knows nothing about the caller, the application, or the module. Every field starts blank.
Second tab. Search the employer by name or ROC. Find the application. Read the status. Copy the details out by hand.
Third tab. Cross-check the immigration status. Then paste everything back into the dead form in tab one — and hope nothing was mistyped.
of copying between portals before a single word of the actual problem gets addressed — per ticket, every ticket. At 2,000 interactions a day that is roughly 200 operator-hours a day moved between windows by hand.
Norizan · 90 seconds · open with a real call
"Saya nak encik bayangkan satu call biasa. Majikan telefon — pekerja dia punya ePLKS tak boleh login, OTP tak masuk, lapan permohonan tergantung."
"Operator saya buka ManageEngine. Apa yang dia dapat? Borang kosong yang mati. Tak kenal majikan ni. Tak tahu apa itu ePLKS. Setiap field bermula kosong. Jadi dia buka tab kedua — FWCMS portal, cari majikan, cari application. Tab ketiga — MyIMMs, check status imigresen. Lepas tu salin semula semua benda tu balik ke dalam borang mati tadi."
"Enam hingga lapan minit. Sebelum kami mula selesaikan masalah dia. Setiap ticket. Setiap hari."
Make it land
- Hold up three fingers when you say "tiga portal". Physical beats verbal.
- Pause after "sebelum kami mula selesaikan masalah dia." Two full seconds.
- Use a real scenario you actually handled. Change the employer name; keep the details true.
If asked
"Where does 6–8 minutes come from?" → "Operational observation on our own floor, not a vendor benchmark. We're happy to run a timed sample with the pilot team in Phase 1 and report the measured figure."
Current state · until today, this is how we operate
The parts nobody outside operations ever sees.
ManageEngine has no reference data and no link to FWCMS. Connecting it via API has been raised more than once — the answer is always the same: platform limitations, and the famous financial limit. A custom integration is a vendor project with a vendor price.
No cockpit, no auto-acknowledgement, nothing. An operator reads the inbox, creates the ticket by hand, replies by hand — and at the end of the day counts by hand how many emails they handled, because nothing counts it for them.
"Process these fifty workers" lives in a mailbox. No ticket, no line items, no owner — and because there is no ticket, no SLA can even be counted. Zero percent tracked, by construction.
ManageEngine tracks one clock. The team-level response targets our operation actually runs on cannot be represented in the tool, so they live in spreadsheets and memory instead.
Procedures sit as files in a team folder. An operator on a live call digs through documents with no real search — and none of it is connected to the ticket in front of them. Imagine the KB living inside the ticketing system instead.
ManageEngine has a dashboard — did anyone understand it? did anyone use it? Every week the CS meeting reviews performance retrospective-style, from a report that still has to be generated manually from raw data.
Norizan · 90 seconds · this is the lived-experience slide
"Slide ni bahagian yang orang luar operations tak pernah nampak. Saya bagi tiga contoh sahaja — yang lain encik boleh baca."
"Satu — email. Sampai hari ini, kami operate email secara manual sepenuhnya. Operator baca inbox, buka ticket manual, reply manual. Bila user email kami, tiada auto-reply pun. Dan hujung hari, operator kira sendiri berapa email yang dia handle hari tu — sebab tiada apa yang kira untuk dia. Bayangkan hassle tu, setiap hari."
"Dua — kami dah cadang lebih dari sekali untuk sambungkan ManageEngine ke FWCMS melalui API. Jawapan sentiasa sama: limitation platform, dan yang paling famous — limit kewangan. Projek integrasi vendor, dengan harga vendor."
"Tiga — reporting. ManageEngine ada dashboard. Soalan saya: ada sesiapa faham dashboard tu? Ada sesiapa guna? Setiap minggu kita ada CS meeting, review prestasi minggu lepas — dan laporan untuk meeting tu sendiri kena generate manual dari raw data."
Delivery
- The email-counting detail is the strongest line on this slide — it is absurd, true, and instantly understood. Do not rush it.
- "Did anyone understand it? Did anyone use it?" — ask it to the room rhetorically and let it hang. Several people in that room have sat in the CS meeting.
- Pick the three examples above; leave the other cards for reading. Six read aloud is a list; three told well is a story.
We did look at the alternatives
Four category leaders. The same missing piece in all four.
JIRA
A developer tool repurposed as a service desk. Its workflow model is built for code sprints, not call-centre queues.
Configuration needs IT expertise. No concept of a requester linked to a live government record.
Zendesk
A real support tool — but designed for e-commerce and SaaS. Every customisation for a government operations centre is billable.
Per-agent pricing. The KB is generic and cannot be seeded with FWCMS content or linked to live application data.
Salesforce
Enterprise-grade and genuinely powerful — and it needs a dedicated administrator, months of configuration, and a consultant ecosystem.
The licensing model prices out a Malaysian centre scaling from 25 to 400 operators. And its AI story is the one from slide two.
ManageEngine
The closest operational fit — and what we use today. Ticket types, SLA rules, escalation paths, a knowledge base.
But it knows nothing about FWCMS, cannot model our OLA, and the API integration we asked for repeatedly was never feasible — limitations, and the financial limit.
None of them can be told what ePLKS is. None of them know the difference between a BULK_SR and an SR to a Bestinet operator. And if a feature isn't on the vendor's roadmap, you wait — or you pay. So we stopped waiting.
Norizan · 45 seconds · then hand to Azam
"Kami bukan tak cuba tool lain. Kami dah tengok semua."
"ManageEngine yang paling dekat — memang itu yang kami guna sekarang. Tapi dia tak kenal FWCMS, dia tak boleh model OLA kita, dan API yang kami minta berkali-kali tu tak pernah jadi — sebab limitation, dan sebab kos."
"Dan satu benda yang tak boleh dibeli dengan duit: tiada satu pun daripada mereka boleh diajar apa itu ePLKS. Kalau feature tu tiada dalam roadmap vendor, kita tunggu — atau kita bayar. Jadi kami berhenti tunggu. Azam."
Careful
Bestinet pays for ManageEngine today. Stay respectful — "the closest fit, and we use it" — then make the gap structural, not a quality complaint.
If asked
"Could ManageEngine be integrated with FWCMS instead?" → "We proposed exactly that, more than once. It is a vendor-quoted custom project, on the vendor's schedule, still per-seat on top. We built the integration and the ticketing together — and we own both."
One workspace that already knows who is calling and what they applied for.
BestDesk is an AI-augmented support operations platform, built inside Bestinet for FWCMS operations, and running in production today.
- Connected to 340,000+ FWCMS application records and 43,000+ requesters
- Claude Haiku classifies, drafts, summarises and suggests — the operator always decides
- SLA and OLA calculated automatically, working-hours and Malaysian public-holiday aware
- Inbound email becomes a triaged ticket with a full audit trail
- Every configuration table is editable by an admin at runtime — no deployment to change an SLA
Azam · 45 seconds · take the room back
"Terima kasih Norizan. Jadi apa yang kami bina."
"BestDesk adalah satu workspace. Operator taip nama majikan atau nombor permohonan — sistem terus cari dalam 340,000 rekod FWCMS dan 43,000 requester, dan isi context tu sendiri. AI cadang category, priority, dan draft jawapan. Operator yang tekan confirm."
"Dan yang encik tengok ni — ini bukan mockup. Ini screenshot dari production. Lepas ni saya login depan encik."
Emphasis
- "Operator yang tekan confirm" — say it slowly. It is the whole ethical position of the product and it answers the Salesforce video directly.
- Point at the screen when you say "ini screenshot dari production".
What is shipped and running
Eight capabilities. All of them in production.
These are the same eight the login page cycles through — the product introduces itself before anyone signs in.
Every incident and service request — logged, routed and resolved in one workspace. Five ticket types: INC, SR, INT, ISR and Bulk.
Claude classifies, drafts and pre-fills. Operators decide instead of typing. Nothing is applied without a human click.
Live FWCMS, ePLKS, VDR, eQuota and PLKS status inside every ticket — including a live call to Bestinet's own SST API.
Deadlines, pause/resume, breach detection and escalation paths that run themselves — working hours and public holidays included.
An IMAP poller turns inbound mail into a triage queue. One click converts to a ticket with the requester matched and a confirmation sent.
The batch work that used to live in email chains — now a parent ticket with tracked line items, promotable to child tickets.
FWCMS-specific articles — ePLKS, eVDR, eCOM, eQuota, Levy, PLKS Card — surfaced at the moment an operator needs them, and cited by the AI.
Queue health, SLA compliance, FCR and time analysis for the whole floor — a dashboard export instead of a Friday spreadsheet.
Azam · 40 seconds · don't read eight boxes
"Lapan capability. Semua sudah live. Saya tak akan baca satu-satu — encik boleh baca sendiri."
"Saya nak tunjuk empat je hari ini, yang paling ubah cara kerja kami: reference-first ticket creation, AI panel, email cockpit, dan bulk request. Yang lain ada dalam appendix."
Nice detail to drop
"Lapan kotak ni sebenarnya sama dengan yang berputar kat login page tadi. Sistem ini perkenalkan diri sendiri sebelum orang login."
Cut line
At 10 minutes: skip this slide, go straight from 09 to the live demo.
▶ Switching to the live portal
Live demo · bestdesk.my
Six stops, four minutes — the production system, on the production domain, with production-shaped data.
Sign in to the production system on the real domain — no staging, no mockup.
The operator queue — team views, live counts, and one P1 already flagged by the breach engine.
Type one employer name — watch 340,000+ FWCMS records answer in under three seconds and the ticket fill itself.
AI Solve on an open ticket — a KB-grounded suggestion that cites its articles, which the operator can accept or reject.
The Email Tray — an inbound email with its age badge, converted to a ticket in one click, confirmation sent automatically.
The live dashboard — the floor's health in one screen, updating itself.
What the room should watch for
- One search field replacing three portals
- 340,000+ FWCMS records answering in under three seconds
- The AI suggesting — and the operator deciding
- An SLA clock that was set by the system, not a spreadsheet
Everything shown is the production system at bestdesk.my with production-shaped data. If the room wants to see anything again, ask — we will happily go back.
Azam · the transition line
"Sekarang saya nak keluar dari slide. Sebab tadi kita tengok Salesforce buat iklan pasal feature yang tak wujud. Saya tak nak buat benda yang sama."
"Ini bestdesk.my. Domain sebenar. Server sebenar. Data sebenar. Saya login sekarang."
Discipline
- Four minutes. Six moves. Nothing else. The temptation to show one more thing is how demos die.
- Narrate what you are about to do before you click, so a slow load is filled by your voice instead of silence.
- Iffah watches the clock and gives you a hand signal at 3:30.
The single best line in the whole presentation
On step 3, as the fields populate: "Enam minit tadi. Tiga saat sekarang." Then stop talking and let them look at it.
If it breaks (do not show this to the room)
- Render cold start — the free-tier service sleeps. Load bestdesk.my five minutes before you walk in and leave the tab open.
- Slow network — say "this is running on a seven-ringgit-a-month server; that is the point of the cost slide" and keep going. Turn the weakness into the argument.
- Anything genuinely fails — come back to this deck and press →. The next seven slides are the same walkthrough in screenshots. Never debug in front of the room.
Pre-flight, the night before
- Reseed the demo tickets on production — the current seed makes the dashboard read 85.7% SLA breach rate. Do not let the CEO see that number.
- Confirm the email channel has at least one pending draft
- Log in on the actual demo laptop, on the actual venue wifi
- Set browser zoom so text is readable from the back row
- Close every other tab, notification and chat app
▶ Live demo · stop 1 of 7 — show reference-first creation in the portal tab
The form isn't a form. It's a search that fills itself in.
- Operator types an employer name, ROC or application reference — one field
- Matches against 340,000+ FWCMS records and 43,000+ requesters in under three seconds
- Requester, module, status, contact and prior ticket history populate themselves
- Multiple reference records can be linked to one ticket, with a designated primary
- Ticket numbers are sequence-generated per type: INC-100001, SR-200001, BR-500001
Azam · 40 seconds · this is the core claim
"Ini skrin yang paling penting dalam seluruh sistem. Norizan tadi cerita pasal tiga tab dan enam minit. Semua tu jadi satu field."
"Operator taip nama majikan. Sistem cari dalam 340 ribu rekod. Requester keluar, module keluar, status keluar, history ticket lama keluar. Operator tak taip semula apa-apa."
If asked — the important one
"Where does the 340k data come from and how fresh is it?" → Be straight: "Daily and monthly Excel extracts today, plus a live API call to Bestinet's own SST service for ePLKS and VDR — Hidayat will cover that. The full live feed is Phase 10, and the admin UI for it is already built."
▶ Live demo · stop 2 of 7 — show ticket detail & the SLA strip in the portal tab
The clock is part of the ticket, not part of a spreadsheet.
- Response · OLA · SLA · Paused · FCR always visible at the top of every ticket
- Deadlines calculated on working hours, with the Malaysian public-holiday calendar seeded
- SLA pauses when a ticket is waiting on the customer and resumes on update — paused minutes accumulate and extend the deadline
- Breach detection and escalation paths are configurable per category and priority
- Every field change is written to ticket history — who, when, from what, to what
Azam · 35 seconds
"Setiap ticket ada jam di atas. Response, OLA, SLA, dan FCR. Operator nampak baki masa dia sepanjang masa — bukan tunggu supervisor cakap dah breach."
"Dan jam ini faham waktu kerja dan cuti umum Malaysia. Kalau ticket tunggu jawapan dari customer, jam berhenti. Bila customer jawab, jam jalan balik."
Governance angle — say this to the CEO, not the judges
"Ini bermakna KPI reporting untuk kerajaan jadi export, bukan kerja manual seminggu sekali."
▶ Live demo · stop 3 of 7 — show the Intelligence panel in the portal tab
AI that shows its working — and can be rejected.
- Classify · category, subcategory, priority and language, with a confidence score
- Solve · a KB-grounded resolution that cites the article IDs it used
- Draft · a reply in Bahasa Melayu or English, matched to the requester's language
- Summarise · a three-line handover summary for long threads
- Sentiment · flags an angry or urgent requester before it becomes an escalation
Azam · 50 seconds · the answer to both videos
"Ini bahagian yang saya paling bangga, dan bukan sebab AI-nya pandai."
"Tengok — bila AI cadang jawapan, dia sebut artikel mana dia guna. Operator boleh buka artikel tu dan check. Dan kalau AI salah, operator tekan reject — dan reject tu direkod."
"Video Salesforce tadi cakap: 'we were more confident about what the AI could do than we were prepared for what it couldn't.' Kami reka sistem ini supaya kami sentiasa tahu apa AI tak boleh buat. Setiap interaction AI ada dalam database. Setiap accept, setiap reject."
The killer follow-up if a judge pushes on AI reliability
"AI dalam BestDesk tak pernah auto-apply apa-apa kepada customer. Dia cadang. Manusia hantar. Itu keputusan reka bentuk, bukan limitation."
▶ Live demo · stop 4 of 7 — show the email cockpit in the portal tab
The support inbox becomes a queue with a clock on it.
- An IMAP poller pulls the support mailbox on a schedule; the nav rail carries an unread badge
- Age badges make waiting visible: green < 2h amber 2–8h red ≥ 8h
- One click converts to INC or SR with the requester matched and the original mail preserved in the thread
- A confirmation email goes back to the requester automatically, from a configurable template
- Rejection is a first-class action — five categories, an optional remark, and no auto-reply
Azam · 35 seconds
"Email support kita dulu — operator baca, faham, buka ticket manual. Lima hingga sepuluh minit satu email. Dan kalau operator tu cuti, email tu duduk kat inbox tanpa owner."
"Sekarang email masuk terus jadi queue. Ada badge umur — hijau, kuning, merah. Satu klik jadi ticket, requester dah matched, dan customer terus dapat confirmation email."
If asked about credentials
"Mailbox credentials disimpan dalam database, dalam admin portal — tak pernah masuk git. Itu salah satu rule kami sejak awal."
▶ Live demo · stop 5 of 7 — show bulk requests in the portal tab
“Process these fifty workers” is now a ticket, not a thread.
- Each application reference in a batch becomes a tracked line item with its own status
- Any item can be promoted to a child ticket in one click, inheriting the parent's type
- A new ticket matching the same employer and module auto-links to the open bulk item
- SLA applies to the parent; progress is visible as a counter on the ticket
- A bulk status check hits Bestinet's SST API once for the whole batch instead of once per item
Azam · 35 seconds · aim this at the COO
"Bulk request — 'tolong proses lima puluh pekerja untuk majikan ni'. Dulu semua dalam email. Tiada ticket, tiada SLA, tiada history. Kalau ada orang tanya 'macam mana status?', kita kena scroll email."
"Sekarang setiap rujukan jadi line item. Boleh promote jadi ticket sendiri. Boleh check status semua sekali gus melalui API Bestinet. Dan ada SLA kat parent ticket."
Why this matters to management specifically
Zero to one hundred percent visibility on a whole category of work. That is a governance win, not a productivity win — frame it that way for the CEO.
▶ Live demo · stop 6 of 7 — show the admin panel in the portal tab
Changing an SLA takes a minute, not a release.
- Classification tree, SLA and OLA rules, working hours, public holidays, teams, roles
- Escalation paths, canned responses, email templates, workflow rules, notification rules
- Email channels, statuses, user types, ticket sources, feature access
- Zero hardcoded values — a locked project rule since the first session
- Every admin action is written to the activity log with the old and new value
Azam · 30 seconds
"Norizan tadi cakap: kalau feature tiada dalam roadmap vendor, kita tunggu."
"Dalam BestDesk, tiada satu pun nilai yang hardcoded. Category, SLA, waktu kerja, cuti umum, escalation path, email template — semua dalam admin panel. Nak ubah SLA P2 dari lapan jam ke enam jam? Satu minit. Tak payah deploy."
"Dan setiap perubahan admin direkod — siapa, bila, dari apa, ke apa."
Cut line
At a 15-minute slot, drop this slide and slide 18. Mention "seventeen admin screens, zero hardcoding" in one sentence on slide 12 instead.
▶ Live demo · stop 7 of 7 — show queue & dashboard in the portal tab
The queue on the left. Friday’s report on the right.
Azam · 30 seconds
"Reporting mingguan kami sekarang dua hingga empat jam kerja manual — export dari ManageEngine, susun dalam Excel."
"Dalam BestDesk ia satu page. SLA compliance ikut team, ikut category. Aging. FCR. Semua boleh export CSV. Dan ada kiosk mode untuk skrin di ops centre."
Small flourish worth 5 seconds
Press Ctrl+K live. It is the kind of detail that signals "this was built by someone who uses it daily," and judges notice it.
The same call, both ways
What actually changes for the person on the phone.
| Today — manual | With BestDesk | |
|---|---|---|
| 1 | Opens ManageEngine, the FWCMS portal and the MyIMMs checker in three tabs. Searches the employer manually across all three. 3–5 min | Types the employer name or application number in one field. Requester and FWCMS records return from 340k+ entries in under three seconds. |
| 2 | Copies name, ROC, contact, module and status into the ticket form by hand. Typo and wrong-code risk. 3–4 min | Every field populated from the matched record, with prior ticket history attached. Zero re-entry. |
| 3 | Picks a category from memory, sets priority by instinct, writes into a blank box. No guidance, no knowledge base. 2–3 min | AI suggests category, priority and a KB-grounded note citing the FWCMS procedure. Operator reviews and confirms. Under 30 seconds. |
| 4 | Bulk requests handled by email outside the system — no ticket, no SLA, no visibility. | A bulk ticket with tracked line items, promotable child tickets, and SLA on the parent. 100% in-system. |
| 5 | SLA tracked in a spreadsheet. Breaches discovered after the fact. | Deadlines set automatically, working-hours aware, with pause/resume and breach alerts before the deadline. |
Azam · 30 seconds · then hand to Hidayat
"Ringkasnya — empat angka."
"Buka ticket: enam hingga lapan minit jadi bawah dua minit. Email jadi ticket: sepuluh minit jadi bawah satu minit. Bulk request: sifar peratus jadi seratus peratus. Reporting mingguan: empat jam jadi lima minit."
"Sekarang, macam mana benda ni dibina supaya ia tak jadi macam cerita dalam video tadi. Hidayat."
Framing reminder
Say "capacity" not "headcount". Every one of these numbers is time given back to an operator, not an operator removed.
Five layers. Nothing exotic. Everything owned by Bestinet.
interfaces
& retrieval
(FWCMS)
Hidayat · 60 seconds · establish credibility, not complexity
"Saya nak jelaskan seni bina ini ringkas, sebab yang penting bukan ia canggih — yang penting ia boleh difahami dan boleh diselenggara."
"Lima lapisan. React dan FastAPI di atas. Claude Haiku untuk AI. Knowledge base FWCMS untuk grounding. Dan di bawah sekali, PostgreSQL dengan 58 table, 340 ribu rekod rujukan FWCMS, dan API SST Bestinet yang live."
"Tiada vendor lock-in di mana-mana lapisan. Kalau kita nak tukar model AI esok, satu fail. Kalau kita nak pindah dari cloud ke server Bestinet sendiri, tiada perubahan seni bina."
Offer the live proof
"Dan seni bina ni bukan gambarajah sahaja — kalau encik nak tengok, semua boleh ditunjuk live sekarang: /docs untuk keseluruhan API, panel admin untuk 17 skrin konfigurasi, dan sejarah commit penuh di GitHub."
Anticipate — the CTO question
"Why keyword retrieval and not embeddings/vector search?" → "Deliberate. FWCMS terminology is a closed, controlled vocabulary — module codes, reference formats, procedure names. Keyword retrieval over a curated KB is faster, cheaper, fully explainable, and adds no external vector database to secure. Embeddings are an upgrade path, not a gap."
Anticipate — the risk question
"What happens if Anthropic goes down or changes pricing?" → "The AI layer is behind one service module with an Ollama fallback already wired for local use. Ticketing, SLA and email all continue working with the AI layer off — AI never blocks ticket creation. That is an explicit design rule."
Counted from the repository, August 2026
This is a system, not a script.
What is live in production today
A note on the submitted proposal
The proposal submitted in June said 32 tables and 73 endpoints. Both figures are now out of date — the current repository has 58 tables and 256 endpoints.
We are correcting our own numbers upward, and we can show you where every one of them lives.
Hidayat · 45 seconds
"Untuk bagi sense berapa besar benda ni: 58 table dalam database, 256 API endpoint, 88 komponen React, lebih 75 ribu baris kod."
"Dan satu benda yang kami nak sebut sendiri sebelum orang lain jumpa — proposal yang kami hantar bulan Jun tulis 32 table dan 73 endpoint. Angka tu dah lapuk. Sekarang 58 dan 256. Kami betulkan angka kami sendiri ke atas, dan kami boleh tunjuk setiap satu."
Why this slide exists
It does two jobs at once: it establishes scale, and it demonstrates that the team corrects its own record without being caught. That second job is worth more than the first with a sceptical panel.
If asked "did AI write this code?"
Answer honestly and confidently: "Yes, with AI assistance throughout — and that is exactly why the review discipline on the next slide exists. The first video was about teams that skipped that part." Do not be defensive. Owning it is stronger than dodging it.
Integration · built inside Bestinet, by Bestinet
BestDesk already reads live Bestinet data — not a copy of it.
- The live Bestinet SST API was extended in-house to serve BestDesk — ePLKS and VDR/BPA are read live, per reference
- A bulk status endpoint checks a whole batch in one call instead of one call per item
- MyIMMs status is checked separately and shown as its own badge
- The two sources are never merged — an operator must be able to see when they disagree
- Daily and monthly extracts still back the fuzzy search across all modules
Hidayat · 60 seconds · this is YOUR slide
"Bahagian ini saya terlibat secara langsung. API SST Bestinet — yang kita dah ada — saya extend untuk BestDesk. Sekarang ePLKS dan VDR boleh dibaca live, terus dari sumber."
"Dan satu keputusan reka bentuk yang saya nak highlight: kami ada dua sumber status — SST dan MyIMMs. Kami tak gabungkan jadi satu. Kami tunjuk dua-dua sebagai badge berasingan. Sebab kalau dua sumber tak sama, operator kena nampak. Kalau kita gabung, kita sembunyikan masalah."
"Ini yang boleh dibuat bila sistem dibina dalam syarikat sendiri. API dan sistem yang guna API tu di-extend serentak, minggu yang sama. Tak payah raise ticket dengan vendor. Tak payah tunggu quotation."
Make the disagreement point loudly
Showing two possibly-conflicting sources instead of hiding one is a governance decision, and it is the sort of thing an audit-minded CEO remembers. Spend an extra ten seconds on it.
If asked about the remaining modules
Be precise: "ePLKS and VDR normal-sector are live. VDR PRA/BPR is excluded — different production tables. eCom, eQuota, eRun, WFW and FWe Approval have no live equivalent yet; those still run off the extract. That is scoped work, not an unknown."
Answering the first video, directly
The day-two problem is a process failure. So we built a process.
Written decisions
An append-only programme history records every commit, decision and phase — 48 dated entries. A separate locked-decisions register lists what may not be changed without approval, and why.
A three-tier QA gate
API smoke tests, a Playwright visual suite across light, dark and mobile, and a mobile contact sheet that walks every route. All three must pass before any push.
CI on every push
GitHub Actions runs a lint pass, an import check and a database initialisation on every commit to main. A colour guard fails the build on any raw hex outside the token file.
Sentry in production
Errors are reported from the live service, and the health endpoint reports the actual deployed commit — so “what is running right now” is never a guess.
Audit by default
Every ticket field change writes to ticket history. Every admin action writes to the activity log with old and new values, user and timestamp. Not a feature — a rule.
A known-bugs register
Fixed defects are recorded with their root cause and a “do not reintroduce” note. Open items sit in dated bug documents with an owner and a status, indexed from one place.
Hidayat · 70 seconds · the most important slide in Act 3
"Video pertama tadi guna satu istilah: the day two problem. AI tulis kod cepat, tapi enam bulan lepas tu tiada siapa faham kod tu, dan setiap pembetulan pecahkan benda lain."
"Kami tak boleh cakap kami elak masalah tu sebab kami bijak. Kami elak sebab kami ada proses."
"Setiap keputusan seni bina ditulis — 48 entri bertarikh dalam satu fail sejarah yang tak boleh diubah, cuma boleh ditambah. Ada senarai keputusan yang terkunci — tak boleh ubah tanpa kelulusan, dan setiap satu ada sebab bertulis."
"Ada tiga lapisan QA yang mesti lulus sebelum push. Ada CI yang jalan setiap commit. Ada Sentry di production. Dan setiap perubahan ada audit trail."
"Ini bukan sebab kami suka birokrasi. Ini sebab kami baca cerita macam dalam video tu, dan kami tak nak jadi salah satu daripadanya."
Deliver this one slowly
This is the slide that converts a sceptic. If the panel has an IT governance person in it, this is the moment they decide whether to back you. Do not rush it, and do not oversell — the register is real, so describe it plainly.
Answering the second video, directly
The AI is a colleague on probation. Permanently.
Five functions, all live
| Function | What it does | Temp |
|---|---|---|
| Classify | Category, subcategory, priority, language — with a confidence score | 0.3 |
| Solve | KB-grounded resolution guidance, citing the article IDs used | 0.3 |
| Draft reply | A reply in BM or EN, grounded in retrieved KB articles | 0.7 |
| Summarise | A short handover summary of a long conversation thread | 0.3 |
| Sentiment | Flags an angry or urgent requester for early attention | 0.3 |
Fields are pre-filled for the operator to review. Nothing is submitted.
The AI suggests and stops. The operator classifies it themselves.
A reply to a requester is never sent by the AI. A human presses send. Always.
Every AI call — the prompt, the response, the model, the latency, the KB articles used, the confidence, and the operator's accept or reject — is written to the ai_interactions table. If the AI gets worse, we will see it in the data before a customer does. AI never blocks ticket creation: if the model is slow or down, the ticket is still created.
Hidayat · 50 seconds
"Lima fungsi AI, semua live. Tapi yang lebih penting adalah peraturan di sekelilingnya."
"Kalau confidence tinggi, AI isi field — operator review. Kalau rendah, AI cadang je, operator buat sendiri. Dan untuk jawapan kepada customer — AI tak pernah hantar. Manusia yang tekan send. Selalu."
"Setiap panggilan AI direkod. Prompt, jawapan, model, berapa lama, artikel mana yang dia guna, dan operator terima atau tolak. Maksudnya kalau AI jadi lemah, kami nampak dalam data sebelum customer nampak."
The line that closes the Salesforce loop
"Salesforce kata mereka lebih yakin dengan apa AI boleh buat berbanding bersedia untuk apa dia tak boleh buat. Kami ukur kedua-duanya, setiap hari, dalam satu table."
If asked about hallucination
"Grounding + citation + human approval + logged rejection rate. Four layers. And because AI Solve cites article IDs, an operator can verify the source in one click — a hallucinated citation is immediately visible."
Measured, not projected
The AI bill for June 2026 was nine ringgit and forty-six sen.
Projected from that real baseline
| Scale | Tickets / day | AI cost / month | Per ticket |
|---|---|---|---|
| Current demo | ~50 | RM 7 | ≈ RM 0.005 |
| Phase 1 rollout | 1,000 | RM 146 | ≈ RM 0.005 |
| Operational target | 2,000 | RM 291 | ≈ RM 0.005 |
| Mid-scale | 5,000 | RM 729 | ≈ RM 0.005 |
| Full scale | 10,000 | RM 1,457 | ≈ RM 0.005 |
Hidayat · 40 seconds · then hand back to Azam
"Angka ini bukan anggaran. Ini bil sebenar dari Anthropic untuk bulan Jun."
"Dua ringgit AS. Sembilan ringgit empat puluh enam sen. Untuk satu bulan penuh AI — termasuk hari-hari kami test dan develop."
"Dan bila kita scale ke sepuluh ribu ticket sehari, lapisan AI jadi lebih kurang seribu empat ratus ringgit sebulan. Azam akan bandingkan angka tu dengan apa yang kita bayar sekarang."
Have the statement ready
Bring the actual Anthropic billing statement — on the laptop, one keystroke away. If anyone questions the RM 9.46, showing the invoice ends the conversation instantly and permanently.
Be precise about what's projected
June is measured. The scale table is projected from that measured baseline. Say "projected" out loud for the table. Getting caught overclaiming here would undo the credibility that slide 23 just built.
Monthly running cost at 300 operators.
Sources — ManageEngine Professional Cloud at USD $27/technician/month (published, 2026) × 300 technicians × RM 4.70. BestDesk figures = Render hosting plus measured Anthropic Haiku usage projected to scale. Full workings on the following slide.
Azam · 45 seconds · let the bars do the talking
"Ini kos bulanan untuk 300 operator."
"Bar pertama tu ManageEngine. Tiga puluh lapan ribu ringgit sebulan. Dan itu tanpa AI."
"Bar-bar kecil di bawah tu BestDesk. Yang paling teruk sekali pun — sepuluh ribu ticket sehari, atas cloud — dua ribu empat puluh lima ringgit. Dengan AI."
"Seratus dua puluh tujuh ringgit satu operator, berbanding enam ringgit lapan puluh dua sen."
Delivery
- Do not narrate all five bars. Say the first, say the worst-case BestDesk one, and stop. The picture is the argument.
- Pause after "dan itu tanpa AI." That clause is the whole slide.
If challenged on the ManageEngine figure
"It is the published Professional Cloud list rate against our own technician count. If Bestinet holds a negotiated enterprise discount, substitute the real contracted figure — the ratio still holds by an order of magnitude, and we would genuinely like to know the real number."
Everything on this slide is PER YEAR
The yearly maths.
Where the RM 20k–37k a year goes
| Cost item · RM per year | A · Cloud | B · Bestinet server |
|---|---|---|
| Hosting / infrastructure | 7,056 | 4,800 |
| AI (Claude Haiku) — at 2,000 tickets/day | 3,492 | 3,492 |
| Maintenance — 1 internal developer | 12,000 | 12,000 |
| Total per year · at 2,000 tickets/day | 22,548 | 20,292 |
| …and if volume grows 5× to 10,000 tickets/day, only the AI line grows | 36,540 | 34,284 |
All figures RM per year · AI line projected from the measured June 2026 bill (previous slide).
What comes back, per year
| ManageEngine licensing eliminated hard, verifiable — published rate × 300 operators | RM 446,000 |
| Operator time recovered modelled — 300 ops × 30 min/day × 250 days × RM 15/hr | RM 562,500 |
One month of ManageEngine licensing (RM 38,070) already exceeds BestDesk's entire cost for a full year.
Azam · 50 seconds · say "setahun" every time
"Semua angka dalam slide ini adalah setahun. Saya akan sebut 'setahun' setiap kali supaya tak keliru."
"Kos bina: sifar. Sistem dah siap, dah live — kami tak minta bajet pembangunan."
"Kos operasi BestDesk: antara dua puluh hingga tiga puluh tujuh ribu ringgit setahun — hosting, AI, dan seorang penyelenggara. Lesen yang dia gantikan: empat ratus empat puluh enam ribu ringgit setahun."
"Payback: kurang sebulan. Satu bulan lesen ManageEngine sahaja — tiga puluh lapan ribu — dah lebih mahal dari kos BestDesk untuk setahun penuh."
Be honest about the productivity number
If pressed: "The RM 562,500 is a modelled figure — time returned to operators, which becomes capacity, not a cheque. The RM 446,000 licensing line is the hard one. Judge us on that." Volunteering this distinction is worth more than the number.
What we would ask about, if we were you
The honest risk register.
| Risk | Impact | Likelihood | What we are doing |
|---|---|---|---|
| Key-person dependency | HIGH | MED | The most real risk on this list. Mitigation is already running: the team is now four, the decision history and locked-decisions register are in the repository, and the operating manual is written. A second maintainer is part of the ask. |
| Scale performance | HIGH | MED | Schema designed for 10,000 tickets/day; 340k reference records already live. Scaling is a hosting plan change, not an architecture rewrite. Load testing before pilot rollout. |
| FWCMS data freshness | HIGH | MED | ePLKS and VDR already read live from the Bestinet SST API. Remaining modules run on periodic extracts. The admin Data Sources UI for a full live feed is built and waiting on the connection. |
| Security hardening incomplete | HIGH | LOW | JWT with role enforcement on every endpoint, bcrypt, full activity logging and Sentry are live today. 2FA/OTP, rate limiting and CSP headers are scoped as the next phase and were deliberately deferred until after this submission. |
| Operator adoption | MED | MED | Designed by an operations manager alongside the team that uses it. Adoption has natural pull because it is faster than the current process. Pilot with five operators before the wider rollout. |
| AI model dependency | MED | LOW | The AI layer sits behind a single service module with a local fallback wired. AI never blocks ticket creation — with the model unavailable, the system keeps working without it. |
Azam · 60 seconds · lead with the risk you'd rather hide
"Saya nak mula dengan risiko yang paling besar, dan itu risiko saya sendiri."
"Sistem ini dibina terutamanya oleh seorang. Kalau saya keluar esok, apa jadi? Itu soalan yang betul, dan kami tak nak sembunyikan."
"Jawapan kami: team sekarang empat orang. Setiap keputusan seni bina ada dalam repository, bertulis, bertarikh. Manual operasi dah ditulis. Dan salah satu perkara yang kami minta hari ini ialah seorang lagi developer — supaya risiko ini hilang sepenuhnya."
Why lead with this
Somebody in that room is going to ask it. Asking it yourself, first, and answering it with a concrete mitigation is the single strongest credibility move available to you today. It also makes the other five risks read as equally honest.
Do not
Do not claim the security phase is done. Say plainly that it was deliberately deferred until after submission, and that it is next.
The timeline if the answer is yes
From “yes” to system of record in four months.
Decision day
Executive sponsor named. Funding and FWCMS data-feed access approved. Nothing needs to be built to start — the system is already live.
Milestone · approvalValidation & sign-off
Success KPIs agreed — SLA %, tickets per operator, resolution time, FCR. Five-operator pilot team assigned. Existing ManageEngine ticket data mapped for migration.
Milestone · KPIs locked, pilot team namedProduction hardening
Security phase ships — 2FA/OTP, rate limiting, CSP headers, audit log viewer. Server upgraded. Load-tested at a 10,000 tickets/day simulation. Email channels connected for all support inboxes. Admin training done.
Milestone · security phase live, server upgradedFull pilot live
All 25 operators live. Supervisor wallboard on the ops-centre screen. First real SLA compliance dataset replaces the spreadsheet estimate. FCR baseline established.
Milestone · first management report NOT built from ExcelScale to system of record
Rollout toward 400 operators. Self-service portal for employers and agents. Live FWCMS API feed replaces periodic extracts. Call-centre trigger opens a ticket as the phone is answered. Reuse assessment for MiFPS and overseas operations.
Milestone · single system of record for Bestinet supportAzam · 40 seconds · walk the line top to bottom
"Kalau jawapan hari ini 'ya', ini timeline dia."
"Hari pertama bukan pembinaan — sistem dah ada. Tiga puluh hari pertama: persetujuan dan KPI. Hari 31 hingga 60: security hardening dan naik taraf server. Hari 61 hingga 90: semua 25 operator guna sepenuhnya — dan buat pertama kali, kita dapat data SLA sebenar."
"Dan milestone yang saya paling suka ada kat hari 90: laporan pengurusan pertama yang bukan dibina dari Excel."
"Lepas tu baru bulan keempat: 400 operator, portal self-service, dan feed FWCMS live."
Decision required
We are not asking you to fund a build. We are asking you to adopt one.
RM 20,000 – 37,000 per year — hosting, AI API and maintenance at 300-operator scale. This replaces roughly RM 446,000 per year in ManageEngine licensing.
One additional developer alongside the existing team — this is the mitigation for the key-person risk, and we would rather have it than not.
A formal FWCMS data feed to replace periodic extracts, and support in extending the SST API to the remaining modules.
Approval to begin security hardening and the server upgrade: immediate. Full rollout by month four.
An executive sponsor — COO or Head of IT — to authorise the infrastructure upgrade and coordinate operator onboarding across departments.
Our recommendation
Proceed. The risk of building it has already been taken — by us, on our own time, and it worked. What remains is a decision to resource something that is already running.
Three things we are not asking for
- Not a headcount reduction. BestDesk gives operators time back; it does not remove them.
- Not a greenfield budget. The build is done and paid for.
- Not a leap of faith. You watched it run ten minutes ago, and you can log in yourself after this session.
Azam · 60 seconds · the close
"Jadi apa yang kami minta."
"Dua puluh hingga tiga puluh tujuh ribu ringgit setahun. Seorang developer tambahan. Akses kepada data feed FWCMS yang rasmi. Dan seorang sponsor di peringkat eksekutif."
"Dan biar saya jelas tentang tiga perkara yang kami tidak minta."
"Kami tak minta pengurangan kakitangan. Kami tak minta bajet untuk bina benda baru — benda tu dah siap. Dan kami tak minta encik percaya sesuatu tanpa bukti. Encik dah tengok sendiri sepuluh minit tadi, dan encik boleh login sendiri lepas sesi ni."
Then stop
End on "boleh login sendiri lepas sesi ni." Do not add a summary. Do not thank them again yet. Let the silence sit — it invites the first question, which is exactly what you want.
Question & answer · agreed in advance
Four people, four lanes. Nobody answers outside their lane.
The five questions you will definitely get
| “What if Azam leaves?” Azam. Team of four, written decision history, operating manual, second developer in the ask — and Azam raised it first on the risk slide. |
| “Is this secure enough for foreign-worker data?” Hidayat. JWT + per-endpoint roles + bcrypt + activity log live today; 2FA, rate limiting, CSP are the next phase. Data stays on Bestinet-controlled infrastructure. |
| “Why not just buy a product?” Azam. We looked at four. None can be told what ePLKS is, and all of them charge per seat as we go from 25 to 400. |
| “How do we know the AI is accurate?” Hidayat. Confidence gating, KB grounding with citations, human approval on everything customer-facing, and an accept/reject rate we measure in the database. |
| “Will operators actually use it?” Norizan. It is faster than what they do now — and a five-operator pilot proves it first. |
Rules for the four of you
- One answer per question. Two people answering the same question reads as an unrehearsed team.
- If you don't know, say so. “We don't have that measured yet — we'd have it after the pilot” is a strong answer. Guessing is not.
- Never contradict a teammate in the room. Add, don't correct. Sort it out afterwards.
- Bring it back to the live system. When a question drifts abstract, offer to show it live.
- Label estimates as estimates — the 6–8 min, the ~72% SLA, the productivity value — before anyone else does.
Iffah · opens Q&A
"Kami ada masa untuk soalan. Dan kami dah bahagi — soalan teknikal kepada Hidayat, soalan operasi kepada Norizan, dan selebihnya Azam."
Rehearse this the day before
Sit the four of you down and run the five questions cold, out loud, twice. The goal is not perfect wording — it is that nobody hesitates over who answers. Hesitation about ownership is what makes a team look assembled rather than real.
If a question lands badly
Iffah steps in: "Boleh kami ambil soalan tu dan kembali kepada encik dengan angka sebenar?" Taking a question away with a commitment to answer is always better than an improvised number that turns out wrong.
Team BestDesk · Bestinet AI Builders Challenge 2026
It's not a proposal. It's a login.
Everything in this session is running right now. The screenshots came from production. The demo was production. The numbers came from a real invoice and a real repository.
Terima kasih.
Iffah · closing, all four standing
"Terima kasih atas masa encik-encik dan puan-puan."
"Satu benda terakhir. Semua yang kami tunjuk hari ini — screenshot, demo, angka — semuanya dari sistem yang sedang berjalan sekarang. Kalau encik nak sahkan sendiri, bukak bestdesk.my."
"Ia bukan cadangan. Ia satu login."
Afterwards, within 24 hours
- Send the deck link and a one-page summary to everyone in the room.
- Send read-only demo credentials to anyone who asked for them — while the session is still fresh.
- Write down every question you could not answer, and answer them in writing within the week. That follow-through is often what decides it.