A green light only proves the door opened.

Server Health Monitor watches seven learning platforms for HCL Software. This case study covers one narrow problem inside it: knowing whether a course page and its videos actually load — not just whether the server replied.

ScopeSynthetic Journeys module
RoleResearch, IA, interaction, UI
Surfaces7 monitored endpoints
CadenceCron-scheduled browser runs
HCLSoftware U — past 24 hours, as the uptime check saw it92.0% uptime

Two red blocks. Ninety-four green. The green blocks include the window where the course catalogue rendered empty — because the homepage still returned in 393 ms, and that is all the check was ever asked to measure.

01

The problem worth solving

Uptime monitoring answers one question: is the front door open? Support gets asked a different one: can a learner finish a course?

Server Health Monitor checks seven endpoints every fifteen minutes. A check passes when the host responds and responds quickly. That is a genuine signal — it catches hard outages, expired certificates, and DNS failures. It is also blind to the entire class of failure that produces the most tickets in a learning platform, because in every one of those cases the server answers perfectly.

Where it breaksWhat the learner getsUptime check
Catalogue API times outHomepage loads, course grid is emptyWorking · 200
Media host rejects the tokenCourse opens, every video fails to playWorking · 200
SSO redirect loopCannot sign in at allWorking · 200
Search index unbuilt after releaseZero results for any courseWorking · 200
Origin downNothing loadsNot loading

Only the last row is caught today. The four above it are the ones that reach a human first — and the human is usually a learner, not an operator.

The contradiction is visible on the product's own screen

The Overview headline reads “All 7 sites are working fine.” The uptime card reads 100.00%. Four rows further down the same page, HCLSoftware U sits at 92.0% with two red blocks in its 24-hour strip, and iSuccess responds in 1,939 ms under a green “Working” badge.

The summary and the evidence beneath it disagree, and both are computed from the same shallow signal. That is not a copy bug to patch. It is the symptom that defined the brief.

Scope discipline. This case study deliberately does not redesign alerting, reporting, incident management, or the link-monitoring table. It addresses one question — is the learning experience working? — and stops.
02

Research approach

Five inputs, chosen to separate what people say goes wrong from what the record shows goes wrong.

MethodSampleWhat it was for
Semi-structured interviews9 participants · 30–45 min5 LMS platform operations, 2 support desk leads, 2 on-call engineers. How an incident is currently noticed, confirmed, and communicated.
Support ticket review90 days, LMS-taggedCoded by failure class and by who reported it first, to test whether monitoring or people detect problems.
Diary study3 operators · 2 weeksEvery manual "is it actually up?" check logged with trigger, duration, and outcome.
Competitive teardown6 synthetic-monitoring toolsScored on authoring effort, LMS-specific assertions, scheduling, and failure evidence.
Instrumentation reviewExisting check definitionDocumented exactly what the current check asserts — and everything it does not.

Research questions

  • When a learning platform degrades, who finds out first and how?
  • What does an operator do between suspecting a problem and confirming it?
  • Which failures are worth waking someone for, and which are noise?
  • What stops this team from writing browser-based tests today?
On the numbers in this document. The interface screens in section 13 are the real product. The research findings, quotes, personas, and metrics that follow are written as a study framework with representative results — they show what was asked and how it was analysed. Replace them with the recorded study data before this is circulated as evidence.
03

What we heard

Six findings survived triangulation across interviews, tickets, and diaries. Quotes are composites drawn from the interview set, not verbatim attributions.

F1

Learners are the monitoring system. The first signal of a degraded platform is almost always a message from someone trying to use it — not an alert.

“I find out we have a problem when three people ask me the same question in ten minutes.”

F2

Confirmation is the expensive part. Before anyone can escalate, an operator opens the platform themselves, signs in, finds a course, and tries to play something. That reproduction loop is manual, repeated per platform, and repeated again for every person who asks.

F3

Nobody trusts the green. Operators re-checked manually even when the dashboard was fully green, because they had been burned by a green dashboard during a real outage.

“The dashboard tells me the site is up. It has never once told me a course won't open.”

F4

Partial failure hurts most. Whole-platform outages are rare, loud, and quickly owned. The damaging failures are narrow: one course, one media host, one region, one browser.

F5

Test authoring was the blocker, not test running. The team knew what to check. Nobody on it wrote Playwright or Selenium, and there was no route to a test that did not go through an engineering request.

“I can tell you exactly what to click. I can't tell a script how to find it.”

F6

Noisy alerts get muted within a week. Every participant who had used alerting before had silenced a channel. Any new alert had to be provably quiet before it would be trusted.

04

Who this is for

Three roles came out of the interviews with meaningfully different needs. The module is designed for the first; the other two consume its output.

Priya R.

LMS Platform Operations Lead · primary
Owns
Day-to-day health of seven learning and enablement platforms.
Goal
Know a course is broken before a learner tells her.
Frustrations
  • Green dashboard during a live incident
  • Re-checking seven platforms by hand
  • Cannot write browser tests herself
Decides by
Whether she can reproduce the failure in one click.

Matthew J.

Learning Technology Manager · decision maker
Owns
Vendor relationships, renewals, and the availability story told upward.
Goal
Evidence for SLA conversations that is stronger than "it responded."
Frustrations
  • Uptime percentages nobody believes
  • No record of what learners actually experienced
Decides by
Whether the report holds up in a vendor review.

Arun K.

Support Desk Lead · secondary
Owns
First response to every "the course won't open" ticket.
Goal
Answer "is it us or is it you?" in under a minute.
Frustrations
  • Repeating the same manual reproduction per ticket
  • Closing tickets with no root cause
Decides by
Whether he can see a known failure without asking engineering.
05

From findings to principles

Each principle answers a specific finding and constrains a specific design decision.

#PrincipleFromHow it shows up in the design
P1Assert the outcome, not the response codeF1, F3A journey passes only when the thing a learner needs is present — the course grid rendered, the video element playable. HTTP status is not a pass condition.
P2Anyone who can describe a test can build oneF5AI Auto-Pilot accepts plain English and generates the steps. Manual Steps stays for people who want exact control. Neither requires code.
P3Alert on confirmed failure, never on a blipF6One failure triggers a retry, not an email. Two consecutive failures make it an incident.
P4A summary may never contradict its evidenceF3The Overview headline is derived from the worst journey result, not from an average of response times.
P5Every failure ships with its reproductionF2, F4A failed run stores the step that broke, a screenshot at that moment, the URL, and the timestamp — so confirmation is reading, not re-doing.
P6Authoring is a two-minute taskF5Name, prompt, Save & Run. Scheduling is a default, not a required step.
06

Information architecture

Synthetic Journeys sits beside Link Monitoring rather than inside it. The two answer different questions and should never be mistaken for each other — that mistake is the original problem.

Server Health Monitor Overview Link Monitoring Synthetic Journeys Logs Settings Plain-language verdict line Status tiles — uptime, working, slow, not loading Active monitors · 24h / 7d / 30d URL monitoring — add a single endpoint Bulk monitoring — import many at once Core endpoints table — status, speed, TTFB, SSL Journey Builder — Manual Steps / AI Auto-Pilot Journey list — last result, schedule, next run Run detail — step trace, screenshot, timing Endpoint check history Journey run log Filter and export Email alerts and recipients Schedules — cron expression per journey Stored test credentials Teal branch is the scope of this case study.
Navigation is unchanged apart from one new top-level item. Journeys inherit the existing Logs and Settings surfaces rather than creating parallel ones.

Why not put journeys inside Link Monitoring

It was the cheaper build, and it was rejected. A link check and a journey produce results that look identical in a table and mean completely different things. Collapsing them would have reproduced the exact confusion the project exists to remove — a row that says “Working” when the learner sees nothing.

07

Flows and automation

Authoring a journey

Journeys isempty Create Journeyname it Can you listthe steps? yes no Manual Stepsclick · type · assert AI Auto-Pilotdescribe it in English Save & Runverify now Setschedule
Both authoring paths converge on the same object. Save & Run is the default action because an unverified test is worse than no test — it produces false confidence, which is the failure mode this project is correcting.

A scheduled run, end to end

Run pipeline Cron fireshourly Browser opensheadless, clean Sign instored credential Assert cataloguecourses rendered Open a courseby name Assert videoplayer loads media Verdictpass or fail Verdict handling First failureno alert yet Retry onceafter 60 seconds Failsagain? no yes Recorded as a blipvisible in Logs, nobody paged Confirmed failuretwo consecutive runs Email alertfailing step, screenshot,URL, timestamp
The two-strike rule exists because of F6. A single failed run is information; two consecutive failed runs are an incident. Only the second one is allowed to send email.

Scheduling

Link checks already run every fifteen minutes. Journeys are heavier — a real browser, a real sign-in — so they run less often and are staggered so that seven platforms never start at the same minute.

# proposed default schedule — one line per journey
*/15 * * * *   link checks, all 7 endpoints        (existing)
7 * * * *      HCLSoftware U · catalogue loads
22 * * * *     HCLSoftware U · course video plays
37 * * * *     iSuccess · sign-in and learning home
52 */2 * * *   Percipio · course launch
15 6,13 * * 1-5 full regression across all platforms
Illustrative configuration. These cron expressions show the intended cadence and staggering pattern. Confirm real intervals against platform rate limits and test-account policy before deploying.
08

Priya's incident, mapped

The current-state journey for a partial failure — a course catalogue that renders empty while the homepage responds normally.

Phase Normal operation Something breaks First report Confirm & diagnose Fix & communicate Doing Thinking Feeling Pain With SyntheticJourneys Glances at Overviewonce in the morning.All tiles green. Catalogue API startstiming out. Homepagestill returns 393 ms. Three learners messagewithin ten minutes:"no courses showing." Opens the platform,signs in, reproducesby hand. Checks others. Raises a vendor ticket,posts an update, waitswithout a timeline. "Nothing to dohere today." — no awareness —the check still passes "Is this real or is ittheir browser?" "How long has thisbeen broken?" "I can't tell anyonewhen it started." calm unaware caught out under pressure exposed Verdict line reflectsthe last journey result,not response time. Hourly journey opensthe catalogue andfails the assertion. Second failed runsends the alert beforethe first message. Run detail already hasthe step, screenshotand timestamp. Exact start time andreproduction attachto the vendor ticket. Teal band shows where the module intervenes in the existing journey.
The intervention is deliberately early. Everything to the right of "First report" is downstream cost; the design is aimed at removing the phase rather than optimising it.
09

What to build, and in what order

Effort → Impact → Do first Plan properly Fill gaps Defer AIAuto-Pilot Courseassertions Cronschedule Two-strikealerting Failureevidence Manualstep editor Videoplayback Multi-region Journeytags Slackalerts Video QoEscoring Mobile appjourneys Release 1 Release 2 Backlog Not now
AI Auto-Pilot ranks highest because F5 identified authoring — not execution — as the blocker. Building a perfect runner that nobody can write tests for would have shipped nothing.

Release 1 scope

FeatureBehaviourServes
AI Auto-Pilot authoringA journey name and a plain-English prompt produce a runnable browser test. No selectors, no code.P2, P6
Learning-specific assertionsCourse grid is populated · a named course opens · the video player loads its media · search returns results.P1
Cron schedulingPer-journey interval, staggered across platforms, editable as a plain expression.P1
Two-strike alertingRetry once after 60 seconds. Email only on a second consecutive failure.P3
Failure evidence packFailing step, screenshot at failure, URL, duration, timestamp — attached to the run.P5
Honest Overview verdictThe headline is derived from the worst current journey result, never from average response time.P4

Explicitly out of scope

Slack and Teams routing, per-journey escalation policies, synthetic checks for non-learning systems, video quality-of-experience scoring, and mobile-app journeys. Each is defensible; none of them close the gap between “responded” and “worked”, which is the only thing release 1 is measured on.

10

Sketches

Three screens carry the whole module: an empty state that teaches, a builder that accepts a sentence, and a result that proves what happened. These were drawn to settle the shape before any of it was worth refining.

Sketch 1 — the empty state has a job Synthetic Journeys browser tests that check courses actually open + Create No journeys yet Start with one: does the course list load? Empty ≠ blank. It names the first useful test so the user isn't asked to invent one. Sketch 2 — describe it, don't script it Journey Builder Manual steps AI Auto-Pilot Name Describe the test Go to hclsoftwareu, open Agentic AI Basics, check all videos load Save & Run The prompt box is the widest element on the screen because it is the whole product. Sketch 3 — a failure that explains itself Run · 14:22 · failed Opened homepage · 0.4s Signed in · 1.2s Course grid empty · 0 found screenshot at the moment it failed Confirmation should be reading, not re-doing. The screenshot is the whole point of the row.
Annotations in amber are the design decisions the sketches were made to test.
11

Low-fidelity wireframes

Structure and hierarchy resolved at greyscale, so that layout decisions were argued on their merits rather than on colour.

Journeys · populated list Create next run 14:22 Each row: name · last result · 24h strip · next run Strip reuses the pattern from Link Monitoring. Journey Builder · AI Auto-Pilot Manual Auto-Pilot Journey name Describe what to check Save Run Run detail · failed failed at step 3 0.4s 1.2s timeout screenshot at failure + URL + timestamp, copyable Evidence is on the page, not behind a click.
Two structural decisions came out of this round: the 24-hour strip was carried over from Link Monitoring so both modules read the same way, and the evidence block was moved out of a modal onto the page itself.
12

High-fidelity wireframes

Colour applied last, and only where it carries meaning: teal for the module in focus, and the status semantics — teal, amber, red — reserved exclusively for run results.

Journeys · list with results Monitor Overview Links Journeys Logs Synthetic Journeys 5 journeys · next run in 6 minutes + Create HCLSoftware U · catalogue loads Passinghourly · last 14:07 HCLSoftware U · course video plays Failed twicevideo host returned 403 iSuccess · sign-in and learning home Passinghourly · last 13:37 Amber card, not a red banner: one journey is failing, the platform itself is still answering. Journey Builder · AI Auto-Pilot Journey Builder Manual Steps AI Auto-Pilot Journey name HCLSoftware U · course video plays Describe what a learner should be able to do Go to hclsoftwareu.hcl-software.com, open the Agentic AI Basics course, and verify that every video on the page loads. Cancel Save Save & Run
Save & Run is the only filled primary button on the screen. Save alone stays available but visually secondary, because a saved-and-never-run journey is the false-confidence problem in a new costume.
13

The shipped interface

Seven screens from the running product, in the order a new operator meets them.

Sign inThe subtitle states the scope in the user's words: monitor your LMS platforms in real time.
Server Health Monitor sign-in screen with email and password fields
OverviewStatus tiles, and the seven monitored endpoints with their 24-hour strips.
Overview dashboard showing uptime tiles and a table of seven monitored sites

This screen is the argument for the whole module. The headline reads “All 7 sites are working fine” and the uptime card reads 100.00%, while HCLSoftware U shows 92.0% with two red blocks and iSuccess responds in 1,939 ms under a green badge. Nothing here is a lie — every number is correctly computed from what the check measures. The check simply measures the wrong thing.

Principle P4 targets exactly this line: once journeys are running, the verdict is derived from the worst current journey result rather than from an average response time, so the sentence and the table can no longer disagree.

Link MonitoringWhere endpoints are added, singly or in bulk, with speed, TTFB and SSL columns.
Link Monitoring screen with URL and bulk monitoring tabs and a core endpoints table

Deliberately left alone. This module does its job well — it just answers a narrower question than its results imply. Journeys were added beside it rather than folded into it.

Synthetic Journeys, emptyThe entry point, before anything has been created.
Synthetic Journeys screen showing an empty state with a Create Journey button

The subtitle carries the definition — automated browser tests that verify user experience flows such as logins and course loads — because this is a concept most operators are meeting for the first time. The sketch round proposed naming a concrete first journey here; that refinement is still open.

Journey BuilderTwo authoring modes. AI Auto-Pilot is selected by default.
Journey Builder with Manual Steps and AI Auto-Pilot tabs and an empty prompt field

Save is disabled until there is something to save, and Save & Run is the emphasised action. The placeholder text teaches the prompt format by example rather than through help copy.

Journey one — does the catalogue load?The check that would have caught the failure in section 08.
Journey Builder filled in with a prompt to verify all courses are loading on the homepage
Journey two — do the videos play?One level deeper: open a named course and verify its media.
Journey Builder filled in with a prompt to open the Agentic AI Basics course and verify all videos load

These two prompts are the entire thesis in plain English. Neither mentions a status code, a selector, or a timeout. Both assert something a learner would notice — and both are written by the person who already knew what to check but previously had no way to express it.

14

Where it stands

Authoring and scheduling are shipped. Result surfacing is the open work.

The builder proves the authoring hypothesis: a platform operator with no browser-automation background can create a working test by describing it. That was the blocker identified in F5, and it is gone.

Still to land

GapWhy it matters
Run detail with evidenceWithout the failing step and a screenshot, P5 is unmet and an alert still triggers the manual reproduction loop it was meant to replace.
Journey results on OverviewThe verdict line is still computed from response time. Until it reads from journeys, the contradiction in section 13 remains on the screen.
Visible schedule and next runCron is configured outside the interface today. Operators cannot see when a journey last ran or when it runs next, which undermines trust in it.
Two-strike rule in the UIThe retry behaviour needs to be stated on the journey, or a first failure will be read as an outage.

How this gets measured

Four measures, all baselined before release so the comparison means something. None of them is uptime.

  • Detection source. Share of LMS incidents first detected by a journey rather than by a person. Baseline from the 90-day ticket review.
  • Time to confirm. Minutes between first signal and confirmed reproduction. Baselined from the diary study.
  • Alert trust. Proportion of alerts that turn out to be real, tracked weekly. If it falls, the two-strike rule needs tightening before anything else is added.
  • Authoring reach. Number of distinct people who have created a journey without engineering help. The direct test of P2.
Open question for the next round. AI-generated steps are readable but not yet reviewable — an operator cannot see which selectors the prompt resolved to, so a journey that silently starts asserting the wrong element would pass forever. A generated-steps preview before Save is the most likely answer, and it needs testing with the operations group before it is built.