SLA Breaches While the NOC Sleeps: Overnight Glass Proof

Also published on the product site: sla-breaches-while-noc-sleeps-citratest-apm.aspx

CitraTest APM continuous overnight watch – when WaitForImage timers breach SLA after hours, alerts and failure screenshots become the morning handoff, not another green Director tile.

Direct answer: CitraTest APM® keeps scoring on-the-glass SLA limits overnight with the same WaitForImage + StartTimer/StopTimer path daytime ops trust. When a Monitor/Timer breaches while the NOC is asleep, the page carries failure screenshots of where the business screen stopped – so morning handoff starts from glass proof. Playback uses real mouse and keyboard on Citrix, Microsoft RDS, Azure Virtual Desktop, browsers, and thick Windows clients. No CitraTest agents on production session hosts for the glass path. Green overnight Director is not usable glass.

At 03:41 an SLA limit tripped. Login-to-shell crossed the band the shift already agreed to. Nobody was live in the NOC chair – and that is normal for overnight coverage. The morning question is not whether someone watched a chart turn red in real time. The question is whether the alert pack already holds on-glass proof of where the path stopped, so the day shift does not reopen a green workbook and stop there.

That is the overnight SLA problem: breaches still happen when eyes are elsewhere, so the watch has to page with evidence, not optimism.

Green Director overnight ≠ usable glass

Control-plane health overnight is useful – and incomplete. Brokers can answer. Hosts can report calm CPU. Gateways can return 200. None of that times whether the published app, shell, or in-session transaction still appeared on screen inside the SLA. Related: Director Watches Brokers. APM Watches the Screen.

After hours the temptation is to treat green infrastructure as "quiet success." Overnight SLA breaches on the glass reject that shortcut. Success is still a timed screen state – even when the floor is dark.

Control plane green overnight versus on-the-glass CitraTest APM SLA timing

Illustrative / method diagram – not Tevron customer results. Overnight green brokers do not prove usable glass.

Same glass contract – SLA bands that survive the quiet shift

CitraTest APM does not invent a midnight measurement model. Per User Guide / Quick Start guidance, overnight SLA watches use the same contract as any continuous watch:

  1. Scripts encode the workflow on a Windows desktop.
  2. Playback sees the UI with bitmap images (and OCR when text is dynamic).
  3. Playback acts with real mouse and keyboard.
  4. WaitForImage synchronizes and verifies expected screen state before the next step.
  5. StartTimer / StopTimer capture on-screen response: StartTimer immediately after the initiating action; StopTimer immediately after WaitForImage confirms completion.

Prefer static bitmaps for sync cues that do not change. Reserve OCR for values that are unknown ahead of time. OCR is not a wait/sync – confirm readiness with image functions first, then read or assert dynamic text if needed. Keep baseline images small and unique; match display properties between capture and playback machines so overnight "image not found" is a real delay, not theme drift that only shows up on the quiet shift.

See Wait Act Measure pipeline with WaitForImage and StartTimer StopTimer for overnight SLA watches

Illustrative method diagram – not customer results. That pipeline is what overnight SLA limits actually score.

Publish the path so overnight breaches are actionable

An SLA limit only helps if the Scenario that scores it is the known published version – not a laptop copy someone forgot before the weekend. Apply the same Publish → Scenario → SLA lifecycle used for continuous watches, with overnight breach handoff in mind:

Piece Overnight SLA / morning-handoff focus
Publish Send the exe and baseline images to the APM Web Console so agents run a known version when a 03:00 timer trips.
Scenario schedule Prove the path on the interval the quiet hours actually need – successive overnight iterations, not a single 09:00 check that discovers last night's breach too late.
Groups / monitors Attach the timers morning ops will ask about first: login-to-shell, app first paint, and the one or two in-session steps that cannot be invented at standup.
Playback endpoints CitraTestAPMAgent machines with access to the real client path – Citrix Workspace, RDS/AVD client, thick client, browser – ready before the NOC thins out.
SLA + alerts Score up to four response-time limits per Monitor/Timer. Page when a glass step breaches or an iteration fails; attach failure screenshots as the first evidence pack for whoever opens the ticket at dawn.

Availability for summary reporting can still track successful iterations (Monitor Required Availability) separately from response-time bands. Failover agents can stand by when a primary is silent; they still need Group/Scenario membership so an overnight breach does not depend on a single quiet desktop.

For the full fleet lifecycle, see Publish → Scenario → SLA: Running CitraTest APM as a Continuous Watch. For the unattended-eyes operational question, see Overnight Shift Watch: When Nobody's Looking at the Dashboard. This article is the breach-and-handoff question those posts set up: when the quiet-hour timer exceeds SLA, morning must inherit proof.

CitraTest APM Publish to Scenario to SLA flow used for overnight SLA breach watches

Illustrative fleet flow based on the Quick Start APM Web Console chapter – not customer results.

Design the overnight alert as the morning handoff

When the NOC sleeps, the alert is the ticket starter. Design it that way:

  • Name timers after moments of truth – first useful pixel / login-to-shell, app or workspace ready, key transaction ready – not after protocol hop labels the day shift will not reopen.
  • Set SLA bands from agreed operational limits – what the shift already treats as too slow – then let overnight iterations report whether the path still meets them.
  • Treat failure screenshots as first evidence – on-glass proof of where WaitForImage stopped, so dawn triage does not begin with a green Director screenshot and a shrug.
  • Page for glass breach, not only for host red – overnight infrastructure calm and overnight glass late can coexist; the alert must say which one happened.
  • Do not invent accuracy percentages or fictional ROI – the value of overnight SLA watches is honesty across successive iterations and a clean handoff pack.
CitraTest APM overnight SLA breach alert path with on-glass proof for morning handoff

Illustrative method diagram – not customer results. Geo shapes are example scenario layouts, not benchmarks.

Hygiene so 03:00 breaches are real

Quiet-shift "breaches" that are really environment debt waste the morning. Keep the overnight SLA watch trustworthy:

  • Restore a clean desktop between iterations so leftover windows do not poison the 03:00 run.
  • Publish cleanup scripts as standalone monitors when residue would strand the next schedule.
  • Use script versioning for phased rollout – avoid assigning conflicting versions of the same script to one agent before a long weekend.
  • Match display contracts – resolution, color depth, theme, font smoothing – between capture and playback so night-only "image not found" noise stays rare.

If you already sized concurrency with CitraTest VU, reuse the same visual definition of success in APM. VU answers "how many?" under load; APM answers "did tonight's path still meet SLA – and did the alert pack survive until morning?" Related method posts: Control Plane ≠ Farm, What is on-the-glass APM?.

Closing: let overnight breaches arrive with proof

SLA Breaches While the NOC Sleeps is not a different product mode. It is CitraTest APM continuous monitoring under the assumption that quiet-hour timer breaches still need a morning-ready evidence pack – encode the path with WaitForImage and timers, publish it, schedule it across playback endpoints, score SLA limits, and page with failure screenshots when the glass path is late. Infrastructure metrics still matter for hosts and brokers. They do not replace overnight glass proof that the business screen appeared on time – or the screenshot that shows it did not.

FAQ

What does an overnight SLA breach mean in CitraTest APM?
An overnight SLA breach is a published glass Monitor/Timer that exceeds the response-time limit your Scenario scores while the NOC is thin or asleep. CitraTest APM pages with the failure screenshot of where WaitForImage stopped – so morning handoff starts from on-glass proof, not from reopening a green control-plane workbook.

Why can Director stay green overnight while the glass path breaches SLA?
Director, Azure workbooks, and gateway checks report brokers, hosts, and front-door health. They do not time whether login-to-shell or a key in-session screen appeared inside the SLA. Overnight, that gap widens: control plane green is not usable glass.

How should timers be placed for overnight SLA watches?
Place StartTimer immediately after the initiating action. Confirm readiness with WaitForImage (prefer static bitmaps for sync). Place StopTimer after that wait succeeds. OCR may read or assert dynamic text afterward; OCR is not a wait/sync.

Do overnight SLA watches require agents on production session hosts?
No. For the glass path, CitraTestAPMAgent runs on playback machines with Windows access to the client path. No CitraTest agents are required on production session hosts.

How does this differ from Overnight Shift Watch and Publish → Scenario → SLA?
Publish → Scenario → SLA is the fleet lifecycle that turns a glass script into a continuous watch. Overnight Shift Watch is the unattended operational question – keep proving the path when nobody is staring at a dashboard. This article is the breach-and-handoff question: when an overnight timer exceeds SLA, the alert and screenshot must carry morning-ready proof.

When you need that glass path without agents on production session hosts — schedule a demo. Product pages: CitraTest VU, CitraTest APM, and the Tevron.com blog.

Citrix, HDX, ICA, StoreFront, Workspace, Microsoft, Remote Desktop Services, RemoteApp, Azure Virtual Desktop, and related marks are trademarks of their respective owners. Tevron is not affiliated with those vendors. Names are used for identification only.

Autoscale Can Hide a Bad Sessions-per-Host Number

Also published on the product site: autoscale-hides-sessions-per-host-citratest-vu.aspx

CitraTest VU density testing for Citrix Virtual Apps and Desktops and Citrix DaaS – prove sessions-per-host with Autoscale OFF first, then measure scale-out lag on the glass so scale-out cannot mask a bad host SKU.

Direct answer: Autoscale can hide a bad sessions-per-host number. If every density run lets Citrix Autoscale (on-prem or Citrix DaaS) keep adding session hosts, each machine may never reach the pack you claim to support – while Workspace, StoreFront, Gateway, and the broker stay green. CitraTest VU® load-tests from the glass: run density with Autoscale OFF (or pinned) first, size the host from WaitForImage / StartTimer/StopTimer moments of truth, then run a second test that measures scale-out lag. Do not let scale-out mask a bad sessions-per-host.

Teams that only ever "ramp until Autoscale catches up" often leave Monday morning with a false capacity story. New hosts absorb overflow; Director and the control plane look fine; nobody measured what a full session host feels like on screen when the catalog stops growing. That is not SKU truth. That is scale-out covering for density debt.

This post is the Autoscale-specific density method for CitraTest VU on Citrix Virtual Apps and Desktops and Citrix DaaS. It builds on The Control Plane Is Not the Farm and Logon storm vs density. It is not a how-to for splitting automated regression scripts (Control Plane ≠ Farm for automated testing), not APM continuous watch (Publish → Scenario → SLA), and not the general profile-then-scale sequencing article (Profile the User Journey, Then Scale the VUs). Same glass contract; this article is the order of operations when Autoscale is in the picture.

By Jay Labadini, Tevron

Why Autoscale can hide a bad sessions-per-host

Autoscale is useful operations. It is a poor substitute for density proof.

  • Scale-out dilutes pack. When new session hosts keep joining under load, concurrency spreads across more machines. You never force the sessions-per-host number your SKU and image are supposed to carry.
  • Broker green is not glass ready. Delivery Controllers / cloud brokers can place sessions and report healthy capacity while published-app first paint and in-session click-to-ready stretch on a packed host.
  • Front door ≠ farm. Workspace, StoreFront, and Gateway are the control-plane front door. Session hosts are the farm. A green launch path does not prove density on the host.
  • Storm-only runs miss sustain. A steep login storm may pass because Autoscale spun hosts in time – then mid-day density still hurts when everyone is already connected and working.
  • Unnamed timers hide the host. If you only clock "session connected" or a single stopwatch, you cannot tell whether scale-out lag or packed-host glass latency broke first.

Size the host from the glass, not the broker. Prove what one (or a fixed set of) session host(s) can sustain under honest on-screen work – then decide what Autoscale is allowed to buy you.

Control plane and Autoscale can stay healthy while glass latency rises on packed session hosts

Illustrative / method diagram – not Tevron customer results. Control-plane indices can remain "healthy" while glass-level response climbs when density is never isolated.

Control plane ≠ farm (reminder)

Keep the vocabulary tight for Citrix Virtual Apps and Desktops / Citrix DaaS:

Layer Examples What a green check proves
Front door / control plane Workspace, StoreFront, Gateway, broker / Delivery Controller Auth, launch reachability, session placement – not packed-host glass latency
Farm / session hosts VDAs / session hosts running published apps and desktops Where HDX pixels, published-app work, and sessions-per-host density live

URL and broker checks stay necessary. They are not density. For the deeper framing under load, see The Control Plane Is Not the Farm.

Workspace StoreFront Gateway control plane versus HDX glass stack on session hosts

Illustrative method diagram – not customer results. The front door is not the farm.

Method: density with Autoscale OFF first

Before you celebrate scale-out, pin the farm (or turn Autoscale OFF / hold a fixed host count) and run a density / sustain phase with CitraTest VU:

  1. Encode the on-the-glass journey users cannot skip – Workspace / StoreFront / Gateway launch into the published app or desktop, then multi-step in-session work.
  2. Sync with WaitForImage on static bitmaps; place StartTimer immediately after each initiating action and StopTimer after WaitForImage confirms the screen state users care about.
  3. Hold concurrency at the sessions-per-host target you intend to claim – on that fixed host count – and exercise sustained work (not only logon).
  4. Read density from glass timers – published-app first paint, chart/grid ready, save/post confirmation – not from "ICA connected" or broker session count alone.

Prefer static bitmaps for sync cues that do not change (icons, window chrome, confirmation glyphs). Reserve OCR for dynamic text (IDs, order numbers, timestamps). OCR is not a wait/sync – confirm readiness with image functions first (WaitForImage, ClickOnImage), then OCR. Under VU, OCR calls have no timeout for wait/sync.

That first run answers: can this host SKU and image carry N concurrent users through real glass work? If it cannot, Autoscale will only spread the pain – or hide it until the catalog cannot grow fast enough.

See Wait Act Measure pipeline with WaitForImage and StartTimer StopTimer for Citrix density proof

Illustrative method diagram – not customer results. That pipeline is the measurement contract inside the density run Autoscale must not dilute.

Second run: measure scale-out lag

After density is honest on a fixed farm, turn Autoscale back on (or un-pin) and run a second test aimed at scale-out behavior – not at redefining sessions-per-host:

  • What you change: allow capacity to grow under the same glass scripts and the same moments of truth.
  • What you learn: how long until new hosts deliver usable glass (logon-to-shell / published-app ready) during the rush – scale-out lag – without pretending that lag is a substitute for density proof.
  • What you do not do: treat a pass that only worked because hosts kept joining as proof of the old sessions-per-host number.

Login storm and density/sustain remain distinct ramp shapes on both runs. Storm stresses steep concurrent logons through the front door and broker. Density holds concurrency and works inside the session. Autoscale OFF belongs on the density proof; Autoscale ON belongs on the scale-out lag measurement. Mixing them into one "ramp forever" curve hides which story failed. See Logon storm vs density.

Login storm vs density sustain - Autoscale OFF for density proof then scale-out lag run

Illustrative method diagram – not customer results. Apply storm vs density on a pinned farm first; then measure Autoscale scale-out lag separately.

CitraTest VU on the glass (architecture, brief)

Per the CitraTest User Guide (Chapter 11) and Quick Start VU overview:

  1. A dedicated VU load server hosts many localhost RDP "CitraTest VU Sessions."
  2. Each session runs the profiled CitraTest script and opens its own client connection to the Citrix environment under test – Workspace / StoreFront / Gateway into session hosts – just as real users would.
  3. Scripts drive the remoted GUI with real mouse and keyboard, sync with bitmaps, and optionally use OCR for dynamic text after image sync.
  4. Separate measurement machines record response timers under load.

Nothing invasive is required on the session hosts for the glass path: the load is client-side. You change ramp, concurrency, think time, and whether Autoscale may grow the farm – not the definition of success. Success remains: the image-confirmed UI state appeared within the timer threshold under the load you claim to support.

CitraTest VU architecture flow - load server driving Citrix session hosts under density and Autoscale tests

Illustrative architecture based on User Guide Ch 11 / Quick Start VU overview – not a performance result chart.

Profile glass journey then ramp CitraTest VU - density with Autoscale off then scale-out lag

Illustrative method diagram – not customer results. Encode the journey, prove density on a pinned farm, then measure scale-out lag.

Size the host from the glass, not the broker

Broker session counts, CPU averages, and Autoscale rules answer capacity placement. They do not answer whether the published app was ready on screen at the density you sell to operations. Pin the host count, hold concurrency, time WaitForImage moments of truth, and only then interpret Autoscale as a way to buy more of a host size you already trust – or as a lag you must budget for during storms.

Related method hubs: How to load test Citrix, Best Citrix Load Testing Tools, What is CitraTest VU?.

How this sits next to related posts (brief)

Closing: prove density, then trust scale-out

Autoscale can hide a bad sessions-per-host number. Run density with Autoscale OFF (or pinned) first – WaitForImage sync, StartTimer/StopTimer on the glass, bitmaps for static cues, OCR only for dynamic text (OCR is not a wait). Size the host from what users see, not from the broker. Then run a second test that measures scale-out lag. Login storm and density/sustain stay distinct. Control plane ≠ farm: Workspace / StoreFront / Gateway are the front door; session hosts are the farm. Capacity stories that only worked because hosts kept joining are not SKU truth.

FAQ

How can Citrix Autoscale hide a bad sessions-per-host number?
When Autoscale keeps adding session hosts under load, each host may never reach the sessions-per-host density you claim to support. Broker and front-door metrics can stay green while glass latency on a packed host is never measured. Prove density with Autoscale OFF (or pinned) first; run a second test that isolates scale-out lag.

What is the CitraTest VU method for Citrix density vs scale-out?
First run: hold concurrency on a fixed host count with Autoscale OFF and exercise multi-step on-the-glass work with WaitForImage and StartTimer/StopTimer. That run sizes sessions-per-host from the glass. Second run: allow Autoscale and measure scale-out lag – how long until new capacity delivers usable glass – without letting scale-out mask a bad density number.

Is Workspace or StoreFront green enough to prove session-host density?
No. Workspace, StoreFront, and Gateway are the front door (control plane). Session hosts are the farm. Control-plane green is not farm proof. Size the host from the glass, not the broker.

Can OCR be used as a wait or sync under CitraTest VU?
No. VU OCR calls have no timeout for wait/sync. Confirm readiness with image functions first (WaitForImage, ClickOnImage), then OCR. Prefer bitmaps for static UI cues; reserve OCR for dynamic text.

How does this post differ from The Control Plane Is Not the Farm and Logon Storm vs Density?
Those articles establish control plane vs farm and the login-storm vs density split. This article is the Autoscale-specific density method: prove sessions-per-host with Autoscale OFF first, then measure scale-out lag on a second run so scale-out cannot mask a bad sessions-per-host number.

When you need that glass path without agents on production session hosts — schedule a demo. Product pages: CitraTest VU, CitraTest APM, and the Tevron.com blog.

Citrix, HDX, ICA, StoreFront, Workspace, Microsoft, Remote Desktop Services, RemoteApp, Azure Virtual Desktop, and related marks are trademarks of their respective owners. Tevron is not affiliated with those vendors. Names are used for identification only.

Profile the RDS Journey, Then Scale the VUs

Also published on the product site: profile-rds-journey-then-scale-citratest-vu.aspx

CitraTest VU load testing for Microsoft RDP / RDS / Remote Desktop – encode the on-the-glass journey (mstsc, RD Web, Session Hosts, RemoteApp) with WaitForImage and StartTimer/StopTimer first, then scale concurrent virtual users.

Direct answer: Do not ramp concurrency against a vague Microsoft RDS script. CitraTest VU® load-tests Remote Desktop Services from the glass – but the honest sequence is profile the RDS user journey first, then scale the VUs. Walk the real client path (mstsc, Remote Desktop app, RD Web / Gateway into a Session Host or RemoteApp), encode mouse and keyboard steps, sync with WaitForImage, time moments of truth with StartTimer / StopTimer, prefer static bitmaps, reserve OCR for dynamic text (OCR is not a wait). Only after that definition of success is stable do you raise concurrent virtual users.

Teams that start with "how many RDP sessions can we push?" often skip the harder question: what does a single successful RDS journey look like on screen? If the script stops at "RDP connected," hammers RD Web over HTTP, checks Connection Broker health, or sleeps for five seconds after credentials, concurrency only amplifies the wrong clock. A thousand virtual users with a bad RDS journey is not Session Host capacity planning – it is noise at scale.

This post is the RDP/RDS-specific sequencing method for CitraTest VU load testing: encode the Microsoft Remote Desktop journey on the glass, then scale. It is distinct from the general VU article Profile the User Journey, Then Scale the VUs (Citrix, RDS, and cloud together). It is not a production continuous-watch guide (that is CitraTest APM Publish → Scenario → SLA), not an after-hours APM watch (Overnight Shift Watch), and not a how-to for splitting automated regression scripts into login-storm vs sustained-path builds (Control Plane ≠ Farm for automated testing). For why control-plane / broker green is not farm proof under load, see The Control Plane Is Not the Farm. Same glass contract; this article is the order of operations for Microsoft RDS.

By Jay Labadini, Tevron

Why ramp-first fails on Microsoft RDS

Concurrency is a multiplier. It multiplies whatever your RDS script already treats as "done."

  • RDP connected is not shell ready. The remoting channel can be up while profile attach, GPO, FSLogix (or equivalent), and the desktop or RemoteApp are still painting.
  • RD Web HTTP is the front door, not the farm. Soaking the portal times the website – not Session Host density or in-session click-to-ready.
  • Broker / host counters are not the wait the user feels. Connection Broker health and Session Host CPU can look fine while logon-to-shell and RemoteApp first paint stretch.
  • Fixed sleeps hide variance. A pause that works for one calm mstsc session collapses under a Monday morning rush – or falsely passes when the glass was ready sooner.
  • Unnamed timers cannot guide SKU decisions. If every step dumps into one stopwatch, you cannot tell whether broker spin-up, profile attach, or in-session work broke first.

Profile the RDS journey until a single VU (or a small interactive playback) proves the same moments of truth a real Remote Desktop user would recognize. Then scale.

RD Web and broker can stay green while glass latency rises - profile the RDS journey before scaling VUs

Illustrative / method diagram – not Tevron customer results. Control-plane and broker indices can remain "healthy" while glass-level RDS response climbs with concurrency.

Profile the RDS journey on the glass

Per CitraTest User Guide / Quick Start measurement guidance, an on-the-glass Microsoft RDS journey uses one contract:

  1. Scripts encode the workflow on a Windows desktop – including the real RDP client path.
  2. Playback sees the remoted UI with bitmap images (and OCR when text is dynamic).
  3. Playback acts with real mouse and keyboard into mstsc / Remote Desktop / RD Web launch and the Session Host session.
  4. WaitForImage synchronizes and verifies expected screen state before the next step.
  5. StartTimer / StopTimer capture on-screen response: StartTimer immediately after the initiating action; StopTimer immediately after WaitForImage confirms completion.

Walk the path a shift cannot skip on your farm:

  • Logon-to-shell – credentials (or RD Web / Gateway launch) until a usable desktop or RemoteApp window is ready: shell, icons, no logon animation. Not "the broker returned a session."
  • RemoteApp / published app launch – icon or Start-menu click until first paint of the business app. Not "the process started on the Session Host."
  • In-session transactions – click or key until the ready state: open record, save, print, switch RemoteApps. The wait behind "the desktop is slow" tickets after everyone is already connected.

Name each timer after what the user sees on the glass, not after an RDP round-trip or broker hop label. Pin the Session Host image, collection, client (mstsc / Remote Desktop app), and RD Web or Gateway build. Keep baseline images small and unique; match display properties (resolution, color depth, theme, font smoothing) between capture and playback so "image not found" failures are real application delays, not environment drift.

See Wait Act Measure pipeline with WaitForImage and StartTimer StopTimer for RDS journey profiling

Illustrative method diagram – not customer results. That pipeline is the measurement contract inside the RDS journey you will later scale.

Bitmaps for sync; OCR only for dynamic text

While you profile – and later under VU concurrency on RDP pixels – keep OCR in its lane:

  • Prefer static bitmaps for sync cues that do not change (shell icons, RemoteApp window chrome, toolbar glyphs, confirmation marks).
  • Reserve OCR for values that are unknown ahead of time (IDs, MRNs, order numbers, timestamps on the remoted app).
  • OCR is not a wait/sync. Confirm readiness with image functions first (WaitForImage, ClickOnImage), then OCR. Under VU, OCR calls have no timeout for wait/sync; flaky "OCR problems" on RDS are usually sync problems in disguise.

Related: Advanced OCR for Automated Testing.

Then scale: CitraTest VU concurrency on RDS

Once the RDS journey is honest in interactive playback, scale it with CitraTest VU. Per the CitraTest User Guide (Chapter 11) and Quick Start VU overview:

  1. A dedicated VU load server (Windows Server with Remote Desktop Services) hosts many localhost RDP "CitraTest VU Sessions."
  2. Each session runs the profiled CitraTest script and opens its own client connection to the Microsoft RDS farm under test – mstsc / Remote Desktop / RD Web path into Session Hosts or RemoteApp – just as a group of real users would.
  3. Scripts continue to drive the remoted desktop with real mouse and keyboard, sync with bitmaps, and optionally use OCR for dynamic text.
  4. Separate measurement machines record response timers under load; results land in a results database and VU Results Console.

Nothing invasive is required on the Session Hosts or brokers for the glass path: the load is client-side. You change ramp, concurrency, and think time – not the definition of success. Success remains: the image-confirmed UI state (shell, RemoteApp, in-session ready) appeared within the timer threshold under the load you claim to support.

CitraTest VU architecture flow - load server, VU sessions driving Microsoft RDS, measurement machines

Illustrative architecture based on User Guide Ch 11 / Quick Start VU overview – not a performance result chart.

Profile Microsoft RDS glass journey then ramp CitraTest VU concurrency pipeline

Illustrative method diagram – not customer results. Encode the RDS journey, then raise concurrent VUs against the same WaitForImage timers.

After the RDS journey is honest: storm vs density (brief)

Scaling is not one blunt ramp. Once the glass journey is profiled for Microsoft RDS, Tevron’s 2026 method guidance still separates two load phases – with the same scripts and the same moments of truth:

Phase What you change What you learn
Login storm Steep concurrent logons (broker, profile, Session Host spin-up) Can the farm absorb the rush to first useful glass (logon-to-shell / RemoteApp)?
Density / sustain Hold concurrency; exercise the profiled multi-step RemoteApp / in-session work Sessions-per-host, glass latency, SKU and autoscale truth

Do not invent a second definition of success for each phase. Change how many VUs arrive and how long they stay busy on the Session Hosts. For the deeper control-plane-vs-farm framing under load, see The Control Plane Is Not the Farm and Logon storm vs density. For the broader Microsoft RDS method hub, see Microsoft RDS Load Testing.

Login storm vs density sustain after profiling the Microsoft RDS glass journey for CitraTest VU

Illustrative method diagram – not customer results. Apply the same split after the RDS journey is profiled for Session Hosts and RemoteApp collections.

Sizing note (after the journey, before the big run)

Current User Guide Chapter 1 and Quick Start align on:

8 GB baseline + 8 GB additional RAM per 200 VU sessions, quad CPU minimum, 200 GB disk minimum, RDS configured per Chapter 11.

Also operational: do not minimize VU RDP windows during a run – RDP can blank the display, and scripts need a visible desktop to see. Profile with a visible desktop; scale with a visible desktop. If the generator desktop is pegged, you are measuring the lab, not the Session Host farm.

How this sits next to APM, automated testing, and the general VU post (brief)

One glass definition of success travels across Tevron products without turning this article into those playbooks:

Related: What is CitraTest VU?, Microsoft RDS Load Testing, How to load test Citrix.

Closing: encode the RDS journey, then raise concurrency

Profile the Microsoft RDP / RDS user journey on the glass until WaitForImage and StartTimer/StopTimer name the moments a real Remote Desktop shift would recognize – logon-to-shell, RemoteApp launch, in-session ready. Prefer bitmaps for static sync; reserve OCR for dynamic text; never treat OCR as a wait. Then scale CitraTest VU concurrent sessions against that same definition of success – login storm and density/sustain as ramp shapes, not as new guesses about what "ready" means on a Session Host. Capacity numbers only earn trust when the RDS journey they multiply was honest at one user.

FAQ

Why profile the Microsoft RDS journey before scaling CitraTest VU concurrent users?
Concurrency amplifies whatever the script already measures. If the RDS journey is vague – RDP connected, RD Web HTTP 200, broker green, or fixed sleeps instead of on-screen shell and RemoteApp readiness – a thousand VUs only produce a louder wrong answer. Encode WaitForImage sync and StartTimer/StopTimer for logon-to-shell, RemoteApp launch, and in-session moments of truth first, then ramp.

What does profiling an on-the-glass RDS journey mean in CitraTest VU?
A CitraTest script walks the real Microsoft RDP path – mstsc, Remote Desktop app, RD Web / Gateway launch into a Session Host or RemoteApp – drives the remoted GUI with mouse and keyboard, syncs with WaitForImage on static bitmaps, optionally uses OCR for dynamic text after image sync, and places StartTimer immediately after each initiating action and StopTimer after WaitForImage confirms the screen state users care about.

Can OCR be used as a wait or sync under CitraTest VU for RDS?
No. VU OCR calls have no timeout for wait/sync. Confirm readiness with image functions first (WaitForImage, ClickOnImage), then OCR. Prefer bitmaps for static UI cues; reserve OCR for dynamic text.

How does this post differ from Profile the User Journey, Then Scale the VUs?
That article is the general CitraTest VU sequencing method across Citrix, RDS, and cloud VDI. This article is RDP/RDS-specific: mstsc and RD Web paths, Session Hosts, RemoteApp collections, RDP connected versus shell ready, and the same profile-then-scale order applied to Microsoft Remote Desktop Services.

Do you need agents on Session Hosts for CitraTest VU RDS load testing?
No. For the glass path, load is client-side from VU sessions on a dedicated load server. Each virtual user opens a real Remote Desktop connection to the environment under test. Nothing invasive is required on the Session Hosts or brokers themselves.

When you need that glass path without agents on production session hosts — schedule a demo. Product pages: CitraTest VU, CitraTest APM, and the Tevron.com blog.

Citrix, HDX, ICA, StoreFront, Workspace, Microsoft, Remote Desktop Services, RemoteApp, Azure Virtual Desktop, and related marks are trademarks of their respective owners. Tevron is not affiliated with those vendors. Names are used for identification only.

Overnight Shift Watch: When Nobody’s Looking at the Dashboard

Also published on the product site: overnight-shift-watch-citratest-apm.aspx

CitraTest APM continuous monitoring for after-hours and unattended shifts – same WaitForImage contract, SLA alerts when the glass path slips and the NOC is empty.

Direct answer: CitraTest APM® keeps an on-the-glass watch running overnight and across unattended shifts by scheduling the same WaitForImage + StartTimer/StopTimer path that daytime ops already trust – then paging when an SLA limit breaches or an iteration fails. Playback uses real mouse and keyboard on Citrix, Microsoft RDS, Azure Virtual Desktop, browsers, and thick Windows clients. No CitraTest agents on production session hosts for the glass path. The dashboard can be empty; the watch still has to be honest.

At 02:17 the workbook is still green. Host CPU is calm. The gateway answered. Nobody is staring at those tiles – and that is normal for overnight, weekend, and thin-NOC coverage. The question is not whether a chart was watched. The question is whether tonight’s login-to-shell, published-app first paint, or in-session transaction still landed on screen inside the SLA your shift already agreed to.

An overnight shift watch answers that without inventing a second definition of success. Same glass path. Same timers. Different operational assumption: eyes may be elsewhere, so the alert has to carry the proof.

Daytime eyes vs overnight witnesses

Daytime monitoring often leans on people: someone notices a pie chart turn, opens a report, correlates a ticket. After hours that habit breaks. Batch windows, maintenance, quiet hours, and follow-the-sun handoffs all leave stretches where the only reliable witness is a scheduled synthetic that still drives the client the way a person would.

Control-plane green does not fill that gap. Director, Azure workbooks, and gateway HTTP checks remain useful for brokers and hosts – they do not time whether the business screen appeared. Related: Director Watches Brokers. APM Watches the Screen.

Control plane green versus on-the-glass CitraTest APM timing for overnight watches

Illustrative / method diagram – not Tevron customer results. Overnight coverage still needs glass timing, not only broker health.

Same glass contract – even when the floor is dark

CitraTest APM does not switch measurement models at midnight. Per User Guide / Quick Start guidance, the overnight Scenario uses the same contract as any continuous watch:

  1. Scripts encode the workflow on a Windows desktop.
  2. Playback sees the UI with bitmap images (and OCR when text is dynamic).
  3. Playback acts with real mouse and keyboard.
  4. WaitForImage synchronizes and verifies expected screen state before the next step.
  5. StartTimer / StopTimer capture on-screen response: StartTimer immediately after the initiating action; StopTimer immediately after WaitForImage confirms completion.

Prefer static bitmaps for sync cues that do not change. Reserve OCR for values that are unknown ahead of time. OCR is not a wait/sync – confirm readiness with image functions first, then read or assert dynamic text if needed. Keep baseline images small and unique; match display properties between capture and playback machines so "image not found" is a real delay, not theme drift that only shows up on the quiet shift.

See Wait Act Measure pipeline with WaitForImage and StartTimer StopTimer for overnight APM

Illustrative method diagram – not customer results. That pipeline is the measurement contract inside every published overnight monitor.

Schedule the watch for unattended hours

Building the script is not enough. After-hours coverage needs operational shape in the APM Web Console – the same Publish → Scenario → SLA lifecycle described in the continuous-watch guide, applied to overnight cadence:

Piece Overnight / unattended focus
Publish Send the exe and baseline images to the APM Web Console so agents run a known version – not a laptop copy someone forgot to update before the weekend.
Scenario schedule Prove the path on the interval the shift actually needs (batch window, every N minutes overnight, tighter for critical transactions). Quiet hours still need successive iterations – not a single 09:00 check.
Groups / monitors Attach the timers that matter after hours: login-to-shell, app first paint, and the one or two in-session steps the next morning cannot invent.
Playback endpoints CitraTestAPMAgent machines with access to the real client path – Citrix Workspace, RDS/AVD client, thick client, browser – ready before the floor empties.
SLA + alerts Score up to four response-time limits per Monitor/Timer. Page when a glass step breaches or an iteration fails; attach failure screenshots as the first evidence pack for whoever is on call.

Availability for summary reporting can still track successful iterations (Monitor Required Availability) separately from response-time bands. Failover agents can stand by when a primary is silent for an extended period; they still need Group/Scenario membership so the overnight watch does not depend on a single quiet desktop.

For the full fleet lifecycle – Publish, Scenario membership, SLA scoring – see Publish → Scenario → SLA: Running CitraTest APM as a Continuous Watch. This article is the after-hours operational question that lifecycle answers when nobody is looking.

CitraTest APM Publish to Scenario to SLA flow used for overnight continuous watches

Illustrative fleet flow based on the Quick Start APM Web Console chapter – not customer results.

Alerts replace eyes – screenshots replace guesswork

When the dashboard is empty, the alert is the handoff. Design it that way:

  • Name timers after moments of truth – first useful pixel / login-to-shell, app or workspace ready, key transaction ready – not after protocol hop labels.
  • Set SLA bands from agreed operational limits – what the shift already treats as too slow – then let overnight iterations report whether the path still meets them.
  • Treat failure screenshots as first evidence – on-glass proof of where the path stopped, so on-call does not reopen a green workbook and stop there.
  • Do not invent accuracy percentages or fictional ROI – the value of the overnight watch is honesty across successive iterations.
CitraTest APM SLA breach alert path for overnight and unattended glass watches

Illustrative method diagram – not customer results. Geo shapes are example scenario layouts, not benchmarks.

Hygiene for unattended iterations

Quiet-shift failures are often environment debt, not mysterious outages. Keep the overnight watch trustworthy:

  • Restore a clean desktop between iterations so leftover windows do not poison the 03:00 run.
  • Publish cleanup scripts as standalone monitors when residue would strand the next schedule.
  • Use script versioning for phased rollout – avoid assigning conflicting versions of the same script to one agent before a long weekend.
  • Match display contracts – resolution, color depth, theme, font smoothing – between capture and playback so night-only "image not found" noise stays rare.

If you already sized concurrency with CitraTest VU, reuse the same visual definition of success in APM. VU answers "how many?" under load; APM answers "is it still true this hour – including the hours nobody is watching?" Related method posts: Control Plane ≠ Farm (how to build the automated tests), Profile the User Journey, Then Scale the VUs, What is on-the-glass APM?.

Closing: keep the quiet hours honest on the glass

Overnight Shift Watch is not a different product mode. It is CitraTest APM continuous monitoring under the assumption that the dashboard may be empty – encode the path with WaitForImage and timers, publish it, schedule it across playback endpoints, and page when the steps users feel breach SLA. Infrastructure metrics still matter for hosts and brokers. They do not replace a scheduled proof that the business screen appeared on time while nobody was looking.

FAQ

What is an overnight shift watch in CitraTest APM?
An overnight shift watch is a scheduled glass-level Scenario that keeps proving login-to-shell and key in-session steps while the NOC is thin or empty. CitraTestAPMAgent playback machines run WaitForImage-timed paths on a schedule; SLA limits and failure screenshots alert when the business screen is late – without requiring someone to stare at a dashboard.

How do overnight APM watches differ from daytime dashboard monitoring?
Daytime often assumes eyes on charts. Overnight and unattended shifts need the watch itself to be the first witness: scheduled iterations, SLA response-time bands, and alerts with on-glass proof. The measurement contract does not change – WaitForImage sync and StartTimer/StopTimer – only the operational assumption that nobody may be looking.

How should timers be placed for after-hours glass scenarios?
Place StartTimer immediately after the initiating action. Confirm readiness with WaitForImage (prefer static bitmaps for sync). Place StopTimer after that wait succeeds. OCR may read or assert dynamic text afterward; OCR is not a wait/sync.

Do overnight watches require agents on production session hosts?
No. For the glass path, CitraTestAPMAgent runs on playback machines with Windows access to the client path. No CitraTest agents are required on production session hosts.

How does this relate to Publish → Scenario → SLA?
Publish → Scenario → SLA is the fleet lifecycle that turns a glass script into a continuous watch. This overnight article is the operational question that lifecycle answers after hours: keep proving the path and page someone when the screen is late, even when the dashboard is empty.

When you need that glass path without agents on production session hosts — schedule a demo. Product pages: CitraTest VU, CitraTest APM, and the Tevron.com blog.

Citrix, HDX, ICA, StoreFront, Workspace, Microsoft, Remote Desktop Services, RemoteApp, Azure Virtual Desktop, and related marks are trademarks of their respective owners. Tevron is not affiliated with those vendors. Names are used for identification only.

Profile the User Journey, Then Scale the VUs

Also published on the product site: profile-user-journey-then-scale-citratest-vu.aspx

CitraTest VU load testing for Citrix, RDS, and cloud VDI – encode the on-the-glass journey with WaitForImage and StartTimer/StopTimer first, then scale concurrent virtual users.

Direct answer: Do not ramp concurrency against a vague script. CitraTest VU® load-tests Citrix, Microsoft RDS, AVD, and cloud multi-user sessions from the glass – but the honest sequence is profile the user journey first, then scale the VUs. Encode real mouse and keyboard steps, sync with WaitForImage, time moments of truth with StartTimer / StopTimer, prefer static bitmaps, reserve OCR for dynamic text (OCR is not a wait). Only after that definition of success is stable do you raise concurrent virtual users.

Teams that start with "how many users can we push?" often skip the harder question: what does a single successful user journey look like on screen? If the script sleeps for three seconds, checks a Workspace URL, or stops at "ICA connected," concurrency only amplifies the wrong clock. A thousand virtual users with a bad journey is not capacity planning – it is noise at scale.

This post is about that sequencing for CitraTest VU load testing: encode the journey on the glass, then scale. It is not a production continuous-watch guide (that is CitraTest APM Publish → Scenario → SLA) and not a how-to for splitting automated regression scripts into login-storm vs sustained-path builds (that is Control Plane ≠ Farm for automated testing). For why control-plane green is not farm proof under load – and how login storm differs from density/sustain as ramp phases – see The Control Plane Is Not the Farm. Same glass contract; this article is the order of operations.

Why ramp-first fails

Concurrency is a multiplier. It multiplies whatever your script already treats as "done."

  • Protocol-ready is not user-ready. HDX and RDP can be up while the published app, chart, or order line is still painting.
  • Fixed sleeps hide variance. A three-second pause that works for one calm session collapses under a Monday morning rush – or falsely passes when the glass was ready in half a second.
  • URL / control-plane checks stop at the front door. They do not prove the business step completed on screen under load.
  • Unnamed timers cannot guide SKU decisions. If every step dumps into one stopwatch, you cannot tell whether broker spin-up or in-session work broke first.

Profile the journey until a single VU (or a small interactive playback) proves the same moments of truth a real user would recognize. Then scale.

Control plane can stay green while glass latency rises - profile the journey before scaling VUs

Illustrative / method diagram – not Tevron customer results. Control-plane indices can remain "healthy" while glass-level response climbs with concurrency.

Profile the journey on the glass

Per CitraTest User Guide / Quick Start measurement guidance, an on-the-glass journey uses one contract:

  1. Scripts encode the workflow on a Windows desktop.
  2. Playback sees the UI with bitmap images (and OCR when text is dynamic).
  3. Playback acts with real mouse and keyboard.
  4. WaitForImage synchronizes and verifies expected screen state before the next step.
  5. StartTimer / StopTimer capture on-screen response: StartTimer immediately after the initiating action; StopTimer immediately after WaitForImage confirms completion.

Walk the path a shift cannot skip – for example login-to-shell, published-app first paint, then one or two in-session steps (open chart, submit order, post invoice). Name each timer after what the user sees, not after a protocol hop label. Keep baseline images small and unique; match display properties (resolution, color depth, theme, font smoothing) between capture and playback so "image not found" failures are real application delays, not environment drift.

See Wait Act Measure pipeline with WaitForImage and StartTimer StopTimer for VU journey profiling

Illustrative method diagram – not customer results. That pipeline is the measurement contract inside the journey you will later scale.

Bitmaps for sync; OCR only for dynamic text

While you profile – and later under VU concurrency – keep OCR in its lane:

  • Prefer static bitmaps for sync cues that do not change (toolbar icons, window chrome, confirmation glyphs).
  • Reserve OCR for values that are unknown ahead of time (IDs, MRNs, order numbers, timestamps).
  • OCR is not a wait/sync. Confirm readiness with image functions first (WaitForImage, ClickOnImage), then OCR. Under VU, OCR calls have no timeout for wait/sync; flaky "OCR problems" are usually sync problems in disguise.

Related: Advanced OCR for Automated Testing.

Then scale: CitraTest VU concurrency

Once the journey is honest in interactive playback, scale it with CitraTest VU. Per the CitraTest User Guide (Chapter 11) and Quick Start VU overview:

  1. A dedicated VU load server (Windows Server with Remote Desktop Services) hosts many localhost RDP "CitraTest VU Sessions."
  2. Each session runs the profiled CitraTest script and opens its own client connection to the environment under test – Citrix, RDS, or cloud – just as a group of real users would.
  3. Scripts continue to drive the desktop with real mouse and keyboard, sync with bitmaps, and optionally use OCR for dynamic text.
  4. Separate measurement machines record response timers under load; results land in a results database and VU Results Console.

Nothing invasive is required on the session hosts for the glass path: the load is client-side. You change ramp, concurrency, and think time – not the definition of success. Success remains: the image-confirmed UI state appeared within the timer threshold under the load you claim to support.

CitraTest VU architecture flow - load server, VU sessions, measurement machines

Illustrative architecture based on User Guide Ch 11 / Quick Start VU overview – not a performance result chart.

Profile glass journey then ramp CitraTest VU concurrency pipeline

Illustrative method diagram – not customer results. Encode the journey, then raise concurrent VUs against the same WaitForImage timers.

After the journey is honest: storm vs density (brief)

Scaling is not one blunt ramp. Once the glass journey is profiled, Tevron’s 2026 Citrix / RDS / cloud method guidance still separates two load phases – with the same scripts and the same moments of truth:

Phase What you change What you learn
Login storm Steep concurrent logons (broker, profile, session spin-up) Can the farm absorb the rush to first useful glass?
Density / sustain Hold concurrency; exercise the profiled multi-step work Sessions-per-host, glass latency, SKU and autoscale truth

Do not invent a second definition of success for each phase. Change how many VUs arrive and how long they stay busy. For the deeper control-plane-vs-farm framing under load, see The Control Plane Is Not the Farm and Logon storm vs density.

Login storm vs density sustain after profiling the glass journey for CitraTest VU

Illustrative method diagram – not customer results. Apply the same split after the journey is profiled for Citrix, Microsoft RDS, and cloud VDI / DaaS.

Sizing note (after the journey, before the big run)

Current User Guide Chapter 1 and Quick Start align on:

8 GB baseline + 8 GB additional RAM per 200 VU sessions, quad CPU minimum, 200 GB disk minimum, RDS configured per Chapter 11.

Also operational: do not minimize VU RDP windows during a run – RDP can blank the display, and scripts need a visible desktop to see. Profile with a visible desktop; scale with a visible desktop.

How this sits next to APM and automated testing (brief)

One glass definition of success travels across Tevron products without turning this article into those playbooks:

  • CitraTest VU – profile the journey, then size it under concurrency (this post).
  • CitraTest – build regression scripts with the same WaitForImage / timer contract; see Control Plane ≠ Farm (automated testing) when login-storm and sustained-path need separate encodings.
  • CitraTest APM – schedule the same class of glass transaction in production (Publish → Scenario → SLA).

Related: What is CitraTest VU?, How to load test Citrix.

Closing: encode truth, then raise concurrency

Profile the user journey on the glass until WaitForImage and StartTimer/StopTimer name the moments a real shift would recognize. Prefer bitmaps for static sync; reserve OCR for dynamic text; never treat OCR as a wait. Then scale CitraTest VU concurrent sessions against that same definition of success – login storm and density/sustain as ramp shapes, not as new guesses about what "ready" means. Capacity numbers only earn trust when the journey they multiply was honest at one user.

FAQ

Why profile the user journey before scaling CitraTest VU concurrent users?
Concurrency amplifies whatever the script already measures. If the journey is vague – protocol hops, sleeps, or URL checks instead of on-screen readiness – a thousand VUs only produce a louder wrong answer. Encode WaitForImage sync and StartTimer/StopTimer for moments of truth first, then ramp.

What does profiling an on-the-glass journey mean in CitraTest VU?
A CitraTest script drives the real client GUI with mouse and keyboard, syncs with WaitForImage on static bitmaps, optionally uses OCR for dynamic text after image sync, and places StartTimer immediately after each initiating action and StopTimer after WaitForImage confirms the screen state users care about.

Can OCR be used as a wait or sync under CitraTest VU?
No. VU OCR calls have no timeout for wait/sync. Confirm readiness with image functions first (WaitForImage, ClickOnImage), then OCR. Prefer bitmaps for static UI cues; reserve OCR for dynamic text.

How does this post differ from the control-plane-is-not-the-farm VU article?
The front-door / control-plane article explains why Workspace green is not farm proof and how login storm differs from density/sustain under load. This article is the sequencing method: profile and encode the glass journey first, then scale concurrent VUs with that honest definition of success.

Do you need agents on session hosts for CitraTest VU?
No. For the glass path, load is client-side from VU sessions on a dedicated load server. Nothing invasive is required on the session hosts themselves.

When you need that glass path without agents on production session hosts — schedule a demo. Product pages: CitraTest VU, CitraTest APM, and the Tevron.com blog.

Citrix, HDX, ICA, StoreFront, Workspace, Microsoft, Remote Desktop Services, RemoteApp, Azure Virtual Desktop, and related marks are trademarks of their respective owners. Tevron is not affiliated with those vendors. Names are used for identification only.

Control Plane ≠ Farm: Automate Login Storm and Sustained Path Differently

Also published on the product site: control-plane-farm-citratest-automated-testing.aspx

CitraTest automated testing on the glass – encode control-plane login storm and farm / sustained-path density as separate scripts with the same WaitForImage timer contract.

Direct answer: A green Workspace, Gateway, StoreFront, or RD Web check is not proof that the published app or business step is ready on screen. CitraTest® automated testing encodes two different paths on the glass: a login-storm / control-plane script that proves logon-to-shell (or first useful desktop), and a sustained-path / farm script that holds the session and exercises multi-step work users actually do. Sync with WaitForImage, time with StartTimer / StopTimer, prefer static bitmaps, reserve OCR for dynamic text – and never treat OCR as a wait.

Teams that collapse every regression into "log on, click around, hope" mix two failure modes. The control plane can absorb a rush of logons while the farm still paints a blank chart. The farm can look fine under a single calm session while Monday morning’s login storm still stalls on profile or broker spin-up. Control plane ≠ farm – and the automated tests should say so out loud.

This post is about CitraTest automated testing: how to build those scripts. It is not a concurrency sizing guide (that is CitraTest VU glass-level load testing) and not a production continuous-watch guide (that is CitraTest APM Publish → Scenario → SLA). Same glass definition of success; different operational question.

URL control-plane test versus HDX RDP glass stack for automated testing

Illustrative method diagram – not customer results. The control plane is not the farm.

Two scripts, two questions

Separate the automation the same way operations separates the pain:

Automation focus What you encode What a pass means
Login storm / control plane Auth → broker/gateway → profile → session spin-up → desktop or client chrome ready Logon-to-shell (or first useful pixel) appeared on the glass inside the timer you set
Sustained path / farm Already-in-session multi-step work: open chart, submit order, post invoice, run payroll step Each business screen state appeared under WaitForImage; timers name moments of truth, not protocol hops

Reuse visual components where the UI is the same. Do not force one giant script to answer both questions every run. When login fails, you want a login-storm failure – not a vague "test red." When the chart never paints, you want a sustained-path failure – not another re-logon that hides density pain.

Login storm vs density sustained path method split for CitraTest automated testing

Illustrative method diagram – not customer results. Apply the same split when you automate Citrix, Microsoft RDS, AVD, browsers, and thick clients.

Automate the login storm (control plane) on the glass

Control-plane URL checks stay useful for HTTPS health and launch reachability. They do not prove the desktop is usable. A CitraTest login-storm automation script should:

  • Drive the real client – Citrix Workspace, RDS / AVD client, thick client, or browser – with real mouse and keyboard.
  • Define success as on-screen readiness – shell icons, start menu chrome, published-app tile that means work can start – not merely "ICA connected" or "HTTP 200."
  • Sync with WaitForImage on static cues that survive theme and branding (prefer small, unique bitmaps).
  • Time login-to-shell with StartTimer immediately after the initiating logon action and StopTimer after WaitForImage confirms the ready state.
  • Keep the path short – prove the rush path, then hand off or stop. Do not bury three business transactions inside the same storm script.

When you later scale the same glass path under concurrency with CitraTest VU, the login-storm script is already honest about what "logged on" means. For automated testing today, honesty means the regression suite fails on the control-plane step that actually broke.

Automate the sustained path (farm) on the glass

Farm / density automation assumes a session is already usable – or starts from a known-good shell – then exercises the work that fills session hosts:

  • Multi-step business flows – open chart, add line, submit, post, print, or whatever the shift cannot skip.
  • One timer per moment of truth – app first paint, grid ready, confirmation screen – named after what the user sees.
  • Stable sync cues – static toolbar icons and window chrome as bitmaps; dynamic IDs, MRNs, and order numbers via OCR after image sync.
  • Clean desktop hygiene – close leftover windows so the next iteration does not inherit yesterday’s failure mode.

This is where "the farm" shows up for automated testing: inside the session, under the published app, on the pixels HDX and RDP deliver. URL green on the front door does not substitute for WaitForImage on the chart.

Control plane can stay green while glass latency rises - automate both paths

Illustrative / method diagram – not Tevron customer results. Control-plane indices can remain "healthy" while glass-level response climbs.

One measurement contract: see, wait, act, measure

Whether the script is login storm or sustained path, CitraTest keeps the same on-the-glass contract (User Guide / Quick Start guidance):

  1. Scripts encode the workflow on a Windows desktop.
  2. Playback sees the UI with bitmap images (and OCR when text is dynamic).
  3. Playback acts with real mouse and keyboard.
  4. WaitForImage synchronizes and verifies expected screen state before the next step.
  5. StartTimer / StopTimer capture on-screen response: StartTimer immediately after the initiating action; StopTimer immediately after WaitForImage confirms completion.

Prefer static bitmaps for sync cues that do not change. Reserve OCR for values that are unknown ahead of time. OCR is not a wait/sync – confirm readiness with image functions first, then read or assert dynamic text if needed. Keep baseline images small and unique; match display properties (resolution, color depth, theme, font smoothing) between capture and playback so "image not found" failures are real application delays, not environment drift.

See Wait Act Measure pipeline with WaitForImage and StartTimer StopTimer

Illustrative method diagram – not customer results. That pipeline is the measurement contract inside every automated test.

How this sits next to VU and APM (brief)

One glass definition of success travels across Tevron products without turning this article into a load or APM playbook:

  • CitraTest – build and run the automated tests: login-storm scripts and sustained-path scripts as separate, honest paths.
  • CitraTest VU – size those same paths under concurrency (login storm ramp, then density/sustain). See also Logon storm vs density.
  • CitraTest APM – schedule the same class of glass transaction in production (Publish → Scenario → SLA).

Related reading: Advanced OCR for Automated Testing, The Control Plane Is Not the Farm (VU load testing), Publish → Scenario → SLA.

Closing: automate what the user feels – twice

Control plane ≠ farm. Automate the login storm so logon-to-shell failures stand alone. Automate the sustained path so density work inside the session stands alone. Keep WaitForImage as the sync, StartTimer/StopTimer as the clock, bitmaps for static cues, and OCR only for dynamic text. Then the suite tells you which path broke – before you confuse a green front door with a ready farm.

FAQ

Why should login-storm automation differ from sustained-path automation?
Login storm stresses steep concurrent or repeated logons through the control plane (broker, profile, session spin-up, first useful desktop). Sustained-path automation holds a session and exercises multi-step business work on the glass. Mixing them into one brittle script hides which failure mode broke.

What does CitraTest on-the-glass automated testing measure?
CitraTest drives the real client GUI with mouse and keyboard, syncs with WaitForImage (prefer static bitmaps), optionally uses OCR for dynamic text, and captures StartTimer/StopTimer for on-screen moments of truth such as login-to-shell, published-app first paint, or key transaction ready.

Can OCR be used as a wait or sync in CitraTest scripts?
No. Confirm readiness with image functions first (WaitForImage, ClickOnImage). Prefer bitmaps for static UI cues; reserve OCR for dynamic text. OCR is not a wait/sync.

How does this automated-testing post differ from CitraTest VU load testing and CitraTest APM?
This article is about building CitraTest automated tests for control-plane login storm vs farm sustained path. CitraTest VU sizes those paths under concurrency. CitraTest APM schedules the same class of glass path as a continuous production watch. Same WaitForImage and timer contract; different operational question.

Do CitraTest agents need to run on production session hosts?
No. For the glass path, CitraTest plays back from Windows machines with access to the client path. Nothing invasive is required on production session hosts for on-the-glass automation.

When you need that glass path without agents on production session hosts — schedule a demo. Product pages: CitraTest VU, CitraTest APM, and the Tevron.com blog.

Citrix, HDX, ICA, StoreFront, Workspace, Microsoft, Remote Desktop Services, RemoteApp, Azure Virtual Desktop, and related marks are trademarks of their respective owners. Tevron is not affiliated with those vendors. Names are used for identification only.

Publish → Scenario → SLA: Running CitraTest APM as a Continuous Watch

Also published on the product site: publish-scenario-sla-citratest-apm-continuous-watch.aspx

How a glass-level script becomes scheduled monitoring with SLA limits on the steps users actually feel.

Direct answer: CitraTest APM® turns an on-the-glass scenario into a continuous watch by publishing the script to the APM Web Console, attaching it to a Scenario (schedule + groups + monitors), and scoring WaitForImage timer steps against SLA response-time limits. Playback uses real mouse and keyboard on Citrix, Microsoft RDS, Azure Virtual Desktop, browsers, and thick Windows clients – with no CitraTest agents on production session hosts for the glass path.

Host CPU looks calm. The gateway answered. The workbook is green. None of that proves that today’s login-to-shell, published-app first paint, or in-session transaction still lands on screen inside the SLA your shift agreed to.

A continuous watch answers a different question than a one-off lab run: is the end-user path still true under the limits we published? That is the operational lifecycle behind CitraTest APM – Publish → Scenario → SLA – described in the CitraTest Quick Start APM Web Console chapter and User Guide timer guidance.

What Publish → Scenario → SLA means

Building the script is necessary. Operations still needs a fleet path. In CitraTest APM the path is concrete:

Step What happens
Publish Tools → Publish Script sends the executable and baseline images to the APM Web Console (optional versioned publish and parameter files).
Scenario A Scenario = Schedule + Group(s) + Monitor(s). CitraTestAPMAgent playback machines pick up work on the next check-in.
SLA Dashboards and reports score up to four SLA response-time limits per Monitor/Timer. Alerts fire when a glass step breaches the band you set.

Availability for summary reporting can track successful iterations (Monitor Required Availability) separately from response-time bands. Screenshots on failure give ops on-glass proof instead of another abstract counter. Failover agents can stand by when a primary is silent for an extended period; they still need Group/Scenario membership.

CitraTest APM Publish to Scenario to SLA continuous watch flow

Illustrative fleet flow based on the Quick Start APM Web Console chapter – not customer results.

Build the glass scenario first

Before you publish, define success the way a user would recognize it. A practical APM scenario usually covers:

  • Login-to-shell (or equivalent first useful desktop / client chrome)
  • Published-app or thick-client first paint – the window or workspace that means work can start
  • One or two key in-session steps – open chart, submit order, post invoice, run payroll step – whatever the shift cannot skip

Per User Guide / Quick Start measurement guidance:

  1. Scripts encode the workflow on a Windows desktop.
  2. Playback sees the UI with bitmap images (and OCR when text is dynamic).
  3. Playback acts with real mouse and keyboard.
  4. WaitForImage synchronizes and verifies expected screen state before the next step.
  5. StartTimer / StopTimer capture on-screen response: StartTimer immediately after the initiating action; StopTimer immediately after WaitForImage confirms completion.

Prefer static bitmaps for sync cues that do not change. Reserve OCR for values that are unknown ahead of time. OCR is not a wait/sync – confirm readiness with image functions first, then read or assert dynamic text if needed. Keep baseline images small and unique; match display properties (resolution, color depth, theme, font smoothing) between capture and playback machines so "image not found" failures are real application delays, not environment drift.

See Wait Act Measure pipeline with WaitForImage and StartTimer StopTimer

Illustrative method diagram – not customer results. That pipeline is the measurement contract inside every published monitor.

Turn the scenario into a continuous watch

Once the glass path is honest in interactive playback, publish it and attach operational shape:

  • Schedule – how often the path must prove itself (shift cadence, overnight, or tighter intervals for critical transactions).
  • Groups and monitors – which published script (and which timers) each agent runs.
  • Playback endpoints – Windows machines running CitraTestAPMAgent with access to the real client path (Citrix Workspace, RDS/AVD client, thick client, browser).
  • SLA limits – response-time bands per Monitor/Timer (up to four limits) that match what the business already treats as acceptable.
  • Alerting – notify when a glass step breaches or iterations fail; use failure screenshots as the first evidence pack.

Operational hygiene keeps the watch trustworthy: restore a clean desktop between iterations, use script versioning for phased rollout (avoid assigning conflicting versions of the same script to one agent), and publish cleanup scripts as standalone monitors when leftover windows would poison the next run.

CitraTest APM SLA breach alert path for continuous glass watches

Illustrative method diagram – not customer results. Geo shapes are example scenario layouts, not benchmarks.

What to measure (without inventing numbers)

Name timers after moments of truth, not after protocol hop labels:

  • First useful pixel / login-to-shell – when the desktop or client chrome is actually usable
  • App or workspace ready – published app or thick client first paint
  • Key transaction ready – the screen state that means the business step completed for the user

Set SLA bands from agreed operational limits – what the shift already treats as too slow – then let the watches report whether today’s path still meets them. Do not invent accuracy percentages or fictional ROI. The value of the watch is honesty: successive iterations either prove the glass path or surface the screenshot that shows where it stopped.

If you already sized concurrency with CitraTest VU, reuse the same visual definition of success in APM. VU answers "how many?" under load; APM answers "is it still true this hour?" Related: Director Watches Brokers. APM Watches the Screen., What is on-the-glass APM?, Advanced OCR for Automated Testing.

Closing: keep production honest on the glass

Publish → Scenario → SLA is how CitraTest APM becomes a continuous watch rather than a script that only runs when someone remembers. Encode the path with WaitForImage and timers, publish it, schedule it across playback endpoints, and score the steps users feel. Infrastructure metrics still matter for hosts and brokers – they do not replace a scheduled proof that the business screen appeared on time.

FAQ

What does Publish → Scenario → SLA mean in CitraTest APM?
Publish sends the script exe and images to the APM Web Console. A Scenario combines schedule, groups, and monitors so CitraTestAPMAgent playback machines run the glass path. SLA response-time limits score each Monitor/Timer against thresholds you define.

How should timers be placed in an APM glass scenario?
Place StartTimer immediately after the initiating action. Confirm readiness with WaitForImage (prefer static bitmaps for sync). Place StopTimer after that wait succeeds. OCR may read or assert dynamic text afterward; OCR is not a wait/sync.

What should a continuous APM watch measure?
Time moments of truth on the glass: login-to-shell or first useful pixel, published-app first paint, and the key in-session transactions your shift depends on. Score those timers against SLA limits; availability can be tracked separately via successful iterations.

Do CitraTest APM agents run on production session hosts?
No. For the glass path, CitraTestAPMAgent runs on playback machines with Windows access to the client path. No CitraTest agents are required on production session hosts.

How does APM relate to CitraTest VU for the same path?
VU can size the path under concurrency in the lab. APM watches the same glass definition of success on a schedule against production SLAs. Same WaitForImage and timer contract; different operational question.

When you need that glass path without agents on production session hosts — schedule a demo. Product pages: CitraTest VU, CitraTest APM, and the Tevron.com blog.

Citrix, HDX, ICA, StoreFront, Workspace, Microsoft, Remote Desktop Services, RemoteApp, Azure Virtual Desktop, and related marks are trademarks of their respective owners. Tevron is not affiliated with those vendors. Names are used for identification only.

A Thousand Sessions. One Pixel Clock.

A Thousand Sessions. One Pixel Clock.
Tevron illustration: A Thousand Sessions. One Pixel Clock. - CitraTest VU on-the-glass load testing.

A thousand sessions can look healthy on a protocol dashboard and still fail the morning. Connected is not ready. ICA RTT green is not a published app painted. An HTTP soak of Workspace or the RD Web portal times the front door, not the farm. For Citrix, Microsoft RDS / RemoteApp, and cloud VDI, load that matters is load that waits for pixels.

Direct answer: CitraTest VU is Tevron’s on-the-glass load testing product. Virtual users connect like real clients. Image recognition waits for what appears on screen (WaitForImage). There are no agents on production session hosts. Concurrency and ramp measure readiness from the glass – not HTTP-only or ICA/RDP-only counters.

This post is the product and method piece: why VU load testing that waits for pixels beats protocol-only load tools for EUC. Sister how-tos cover the walk-throughs – how to load test Citrix, Microsoft RDS, cloud VDI – and the response-time series times one session on the glass. Entity page: what is CitraTest VU. Blog home: Tevron Blog.

Why a thousand green sessions can still miss the morning

EUC remotes desktops and published apps as bitmaps. Users wait for a shell, a published-app first paint, and an in-session ready state. Protocol tools are good at answering “did the channel stay up?” They are weak at answering “did the UI become usable at concurrency N?”

An HTTP generator that hammers StoreFront, Gateway, or RD Web can finish green while HDX or RDP never paints a usable desktop. A session-count or ICA/RDP counter can stay green while the published app spins. Host CPU at 40 percent does not close the ticket when click-to-ready stretches under ramp. That is the gap CitraTest VU is built for.

A thousand sessions. One pixel clock. Capacity you can defend is concurrency that paints ready – not concurrency that only connects.

Schematic: protocol and HTTP load health versus on-the-glass CitraTest VU load with WaitForImage readiness.
Schematic from this article: protocol/HTTP load versus on-the-glass VU load. Not a customer dashboard and not a measured farm.

Left column is what protocol and portal soaks see. Right column is what CitraTest VU times under concurrency. Only the glass column is EUC readiness as people experience the farm.

What CitraTest VU actually does

CitraTest VU drives real client paths – Citrix Workspace / HDX, Microsoft RDS / RemoteApp, and cloud VDI sessions – with virtual users that behave like people at the glass. Each VU:

  • Connects like a real client – not a synthetic HTTP hit against the store URL alone.
  • Waits for pixels – WaitForImage (and OCR when the ready state is text) until shell, published app, or in-session chrome matches a baseline.
  • Records the interval – StartTimer at the user action, StopTimer when the ready image matches.
  • Needs no agent on production hosts – measurement stays on the glass side of the remoting path.

That is load testing for EUC as EUC behaves. Product overview: CitraTest VU load testing. Checklist-style Citrix walk: how to load test Citrix.

Ramp, concurrency, and the pixel clock

Write the load shape before you pick a pass/fail. Two shapes stay separate:

  • Logon storm – many users arriving together. Stresses login-to-shell and the front-door launch path.
  • Density / sustain – many users already in session doing work. Stresses published-app and in-session click-to-ready on hosts that already have load.

Blending them hides which interval broke. Run them as separate tests. Under either shape, the acceptance line is glass time at a written percentile – not “sessions connected” or “ICA RTT stayed green.” See also logon storm vs density.

Four-step CitraTest VU pipeline: connect, ramp concurrency, WaitForImage, stop at glass budget.
Schematic of the VU load pattern in this article. Not a CitraTest screenshot and not a customer dataset.

The pipeline is the same idea across platforms. Change the client path and the ready image. Keep the timer. That is how one product covers Citrix Virtual Apps and Desktops / DaaS, Microsoft RDS / RemoteApp, and cloud VDI without rewriting the meaning of “ready.”

Where protocol-only tools stop short

  • They can pass an HTTP soak while HDX or RDP never paints a usable shell.
  • They can report session-up while the published app is still spinning.
  • They can show healthy RTT while in-session click-to-ready fails at density.
  • They cannot attach a screenshot of the failed ready state the way a glass timer can.

Keep protocol tools for the remoting path. Keep portal HTTP checks for the front door. Put capacity decisions on glass time under ramp. That split is the same product language as Citrix HDX vs real user experience and Tevron vs common load testing tools.

Load test versus continuous watch

On-the-glass is a method. Two jobs share the path:

  • CitraTest VU – load and change validation. Freeze the image, walk the client path, ramp concurrency, stop at the written glass budget. Product: CitraTest VU.
  • CitraTest APM – continuous synthetic watch in production. Same glass steps on a schedule, with alerts when click-to-ready slips. Product: CitraTest APM.

Do not use a load-test generator as your only production monitor. The lab answers how many good concurrent workflows fit. The watch answers whether today’s path is still inside the line. Stack timing sister post: First Useful Pixel: Timing the Citrix Stack.

What this is not

  • It is not an HTTP soak of Workspace, StoreFront, Gateway, or RD Web alone.
  • It is not “sessions connected, so capacity is proven.”
  • It is not a replacement for Director, Monitor, or RD session host counters – keep those for the remoting path.
  • It is not the Citrix / RDS / cloud how-to walk-through (see the sister load-test guides).
  • It is not a response-time article for one ERP or EHR GUI – those live in the measure series.
  • It is not a claim about proprietary broker internals – only delivered UI readiness under concurrency.

Defend the number the morning can survive

CitraTest VU load testing measures EUC capacity from the glass: real client sessions, WaitForImage readiness, ramp and concurrency without agents on production hosts. A thousand sessions only count when the pixel clock says ready. Protocol green is useful. It is not the CAB number.

When you need that path for Citrix, RDS, or cloud VDI – schedule a demo. Start here: CitraTest VU, what is CitraTest VU, and the Tevron blog.

Citrix, HDX, ICA, StoreFront, Workspace, Microsoft, Remote Desktop Services, RemoteApp, and related marks are trademarks of their respective owners. Tevron is not affiliated with Citrix or Microsoft. Names are used for identification only.

First Useful Pixel: Timing the Citrix Stack

First Useful Pixel: Timing the Citrix Stack
Tevron editorial illustration: First Useful Pixel: Timing the Citrix Stack

Director is green. Workspace returned 200. The HDX session is connected. The published app is still spinning. That is the Citrix stack problem in one sentence: protocol health and a loaded Workspace URL are not the wait people feel on screen. HDX delivers pixels, not pages – so measuring the stack like a website misses the farm.

Direct answer: Measure the Citrix stack the way Citrix behaves – StoreFront / Gateway / Workspace, then the ICA/HDX session, then a usable shell, then published-app first paint, then in-session click-to-ready – from what users see on the glass. Time each interval with StartTimer – WaitForImage – StopTimer. Do not treat an HTTP check of the Workspace URL, or Director tiles alone, as “Citrix is ready.”

Citrix Virtual Apps and Desktops / DaaS remotes desktops and published apps over HDX (the ICA family). Tevron is not affiliated with Citrix; Citrix and related marks are trademarks of their respective owners. Sister posts: HDX Green Isn’t a Usable Desktop (timing the wait), how to load test Citrix, what is on-the-glass APM, plus RDS and cloud VDI. Method and products: on-the-glass APM, CitraTest VU, and CitraTest APM.

Why a green Director tile is not “the stack is ready”

The Citrix path is a stack, not a single HTTP transaction. Users walk StoreFront or Gateway (or Workspace), negotiate an HDX session, wait for profile and shell, launch a published app, then do work inside that app. Director, Monitor, and HDX Insights are good at session health and channel quality. They are not a stopwatch for “the published app painted” or “the in-session step is ready.”

A Workspace URL can return 200 while HDX has not painted a usable desktop. A session can stream a logon animation or a spinning published-app window and still look connected. Profile attach, GPO, and the line-of-business client sit after HDX is already up. An HTTP generator that hammers the store times the front door, not the farm – because HDX delivers pixels, not pages.

Director green is useful. It is not the same as “the published app is ready.”

The product-language split is the same as Citrix HDX vs real user experience. Host CPU can sit at 40 percent while login-to-shell stretches and the published app paints late. Green protocol tiles do not close that ticket.

Schematic: Citrix Director and Workspace HTTP health versus on-the-glass stack steps for Workspace, HDX shell, published app, and in-session ready.
Schematic from this article: Director/HTTP health versus glass stack time. Not a customer dashboard and not a measured farm.

Left stack is what Director and Workspace HTTP see. Right stack is what users wait on across the full path. Only the glass stack is Citrix response time as a person experiences the stack.

Which stack steps to time

Write the steps before you pick a tool. Four intervals cover the Citrix stack as it behaves:

  1. Workspace / Gateway / StoreFront launch path – from credentials submitted (or the Workspace launch) until the store or session-start path is ready on glass. Not “the Workspace URL returned 200.”
  2. HDX session to usable shell – from session connected until a usable desktop or published-app frame is ready: shell, icons, no logon animation. Not “the broker returned a session” or “ICA RTT is green.”
  3. Published app first paint – from the icon or Start-menu click until first paint of the business app. Not “the process started on the VDA.”
  4. In-session click-to-ready – from the click or key that starts the work until the ready state: open record, save, search, switch apps. This is the wait that generates “the app is slow” tickets after everyone is already in session.

Pin the image, VDA, Workspace app, StoreFront or Gateway build, and the published resource. A timer on a moving image is a story, not a measurement.

For capacity work, run a logon storm separately from density. Storm stresses login-to-shell (and the front-door launch path). Density stresses in-session published-app work on hosts that already have users. Blending them hides which interval broke – and hides whether Director stayed green while glass time failed.

Time it like a script, not a feeling

On HDX there is no DOM event that means “done.” The practical signal is the bitmap. The measurement pattern is the same one CitraTest uses on published apps:

  • StartTimer when the user action happens – submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: Workspace step, shell, published-app chrome, or in-session ready.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that stack step. Image recognition – and OCR when the ready state is text – is how you know the glass painted, without an agent on the VDA. That is the core of on-the-glass APM.

Four-step Citrix stack pipeline: StartTimer, WaitForImage, and StopTimer for Workspace, HDX shell, published app, and in-session click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for Workspace launch, HDX shell, published-app open, and in-session work. Change the start action and the ready image. Keep the timer. The narrower sister post on timing the wait uses the same glass method; this post keeps the whole stack in frame.

Stopwatch versus synthetic

A person with a stopwatch can time one published-app open on a quiet morning. That is a demo, not a measurement program. A one-off cannot give a tail, run at the morning rush, hold concurrent sessions while timing an in-session step, or attach a screenshot of the failed state. Means hide the damage until the service desk is already taking calls.

A synthetic does the same StartTimer – WaitForImage – StopTimer path as a real Workspace client, on a schedule or under load, with the same ready baselines across the stack – continuous on-the-glass monitoring, or a Citrix load test when it ramps virtual users.

If you only have a stopwatch, use it to write the acceptance line – then automate it. Example language (schematic only – not a customer dataset or Citrix SLA): Workspace/launch path inside budget at p95; logon-to-shell at p95; published-app open at p95; in-session click-to-ready at p95; fewer than 1 percent of runs hang or miss the ready image.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity and change. Freeze the image, walk Workspace / Gateway, then HDX shell, published app, and in-session steps; run storm and sustain as separate shapes; stop at the written budget. See CitraTest VU load testing and the Citrix load-test guide.
  • CitraTest APM watches production. The same stack steps, every N minutes, with alerts and screenshots when glass time slips. See CitraTest APM.

The lab answers how many good concurrent stack workflows fit before click-to-ready breaks. The watch answers whether today’s Workspace-to-shell-to-app path is still inside the line. Do not use a load-test generator as your only production monitor. No agents on the VDAs or brokers are required for that path – each virtual user is another Workspace session driving the UI like a person.

What this is not

  • It is not a replacement for Director, Monitor, or HDX Insights. Keep those for the remoting path.
  • It is not an HTTP soak of the Workspace, StoreFront, or Gateway URL. Keep that for the front door.
  • It is not “Director is green, so the published app is covered.” HDX GUIs are pixels users wait on.
  • It is not “we have full-stack APM, so Citrix is covered.” Published HDX apps are not only traces.
  • It is not a claim about Citrix proprietary internals or unpublished SLAs – only delivered UI readiness on the glass across the stack.
  • It is not a promise that last quarter’s number survives a new VDA, FSLogix policy, Workspace build, or a move to Citrix DaaS. Re-time the glass when the image changes.

Take the interval users already wait

Citrix stack response time is click-to-ready on the glass across Workspace / Gateway, HDX shell, published-app paint, and in-session work – not a green Director tile or an HTTP 200 on the Workspace URL. HDX delivers pixels, not pages. Separate logon storm from density. Use a stopwatch only to write the line; use a synthetic to keep it: CitraTest VU under load or change, CitraTest APM on a continuous watch.

When you need that path without agents on the farm – real Workspace client, image and OCR, StartTimer to StopTimer across the stack – schedule a demo. Product pages: on-the-glass APM, CitraTest VU, and CitraTest APM.

Citrix, HDX, ICA, StoreFront, Workspace, and related marks are trademarks of their respective owners. Tevron is not affiliated with Citrix. Names are used for identification only.

The Production Order Still Isn’t Ready.

The Production Order Still Isn’t Ready.
Tevron editorial illustration: The Production Order Still Isn't Ready.

HTTPS returned 200. The MRPeasy portal loaded. MRP status can look green while the production order (or BOM, inventory pick, or shop-floor confirmation) is still spinning. Status pages and URL checks look healthy. Planners, buyers, warehouse, and shop-floor leads are still waiting for MRPeasy – cloud MRP / manufacturing software for SMEs – to paint. That is the MRPeasy response-time problem: “up” is not the wait people feel on screen.

Direct answer: Measure MRPeasy response time from what users see on screen (on the glass) – not only from MRP/plant status tiles, CDN or API 200s, or “the portal loaded.” Time the interval from a click or key until the expected MRPeasy UI is visible: sign-in to usable home/chrome, BOM or inventory step to ready confirmation, production-order step to ready, and report / shop confirmation to ready. That interval is click-to-ready – the number an ops lead, manufacturing IT team, and help desk can share.

MRPeasy is cloud MRP / manufacturing software for SMEs – BOMs, production orders, inventory, purchasing, and shop floor – delivered as a browser UI (product context: MRPeasy manufacturing software). Tevron is not affiliated with MRPeasy; MRPeasy is a trademark of its respective owners. Sister glass methods: Epicor, Paylocity, Wave, Deloitte, Sage, Remedly, Oracle Health / Cerner, Epic EHR, Citrix, RDS, and cloud VDI. Method framing: on-the-glass APM, CitraTest VU, and CitraTest APM.

Why green MRP status is not “MRPeasy is ready”

MRPeasy sits behind HTTPS, CDNs, identity, and browsers – and sometimes a remoted desktop if someone opens manufacturing screens inside Citrix, Microsoft RDS, or AVD. Uptime pages, URL checks, API latency, and “the portal finished loading” tell you the service is reachable and the document arrived. They are not a stopwatch for “the home chrome painted,” “the BOM tree confirmed,” “the production order saved,” or “the shop confirmation is ready.”

A tab can show a spinner, a skeleton BOM tree, a half-hydrated inventory panel, or a toast that never confirms – and still count as a successful page load or HTTP 200. Client-side rendering and heavier production or purchasing views sit after the network already said OK. An HTTP generator that hammers login times the front door, not the manufacturing workflow.

A green MRP status card is useful. It is not the same as “the production order is ready.”

If MRPeasy is opened inside Citrix, Microsoft RDS, AVD, or other cloud VDI, the split doubles: protocol green still is not MRPeasy UI ready. ICA/HDX or RDP can stream a spinning browser while BOMs or production orders are still hydrating. Host CPU and broker tiles do not close a “MRPeasy is slow” ticket on the floor. Use the Citrix, RDS, and cloud VDI posts above for remoting.

Schematic: MRPeasy MRP status, HTTPS 200, and portal loaded do not equal on-the-glass ready states for home, BOM/inventory, production order, and report or shop confirmation.
Schematic from this article: MRP status and HTTP health versus glass time. Not a customer dashboard and not a measured MRPeasy tenant.

Left stack is what MRP status, HTTPS, and the browser document path see. Right stack is what planners and the shop floor wait on. Only the glass stack is MRPeasy response time as a person experiences it.

Which MRPeasy steps to time

Write the steps before you pick a tool. Four intervals cover most UX arguments on MRPeasy BOMs, production orders, inventory, purchasing, and shop floor:

  1. Sign-in to usable MRPeasy home / chrome – from credentials submitted (or SSO return) until usable MRPeasy navigation is ready – menus, company or plant context, no full-screen spinner. Not “the IdP redirected” or “the portal loaded.”
  2. BOM / inventory step to ready confirmation – from starting a BOM, stock, or inventory action until that step’s ready state on glass – BOM tree accepted, or stock confirmation painted. Not “the route changed.”
  3. Production-order step to ready – from the click that starts or releases a production order until that order’s ready confirmation on glass. Pin the ready image for your MRPeasy build and branding.
  4. Report / shop confirmation to ready – from the click that starts a manufacturing report, purchasing view, or shop-floor confirmation until results or confirmation paint – the step that often generates “still waiting” tickets around rush builds and material shortages.

Pin the browser (or published-app / Workspace image if remoted), display scale, tenant branding, and ready baselines. A timer on a moving theme is a story, not a measurement. When MRPeasy runs inside Citrix or other VDI, run a logon storm separately from density. Storm stresses login-to-shell; density stresses in-session MRPeasy work on hosts that already have users.

Time it like a script, not a feeling

On a modern MRPeasy web UI there is often no reliable DOM event that means “done” – and inside a remoted browser none you can trust from outside the glass. The practical signal is the bitmap:

  • StartTimer when the user action happens – submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: home chrome, BOM/inventory confirmation, production-order ready, report / shop confirmation.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition – and OCR when the ready state is text – is how you know the glass painted, without an agent inside the MRPeasy tenant. That is the core of on-the-glass APM.

Four-step MRPeasy pipeline: StartTimer, WaitForImage, and StopTimer for home/chrome, BOM/inventory, production order, and report or shop confirmation click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for home, BOM/inventory, production order, and report / shop confirmation steps. Change the start action and the ready image. Keep the timer. Sister posts use the identical glass method for ERP, HCM, finance suites, EHR, consulting apps, and remoted desktops.

Stopwatch versus synthetic

A person with a stopwatch can time one production-order open on a quiet morning. That is a demo, not a measurement program. A one-off cannot give a tail, run at build rush, hold concurrent planner-like sessions while timing a BOM or shop confirmation step, or attach a screenshot of the failed state. Means hide the damage until ops is already saying “MRPeasy is slow.”

A synthetic does the same StartTimer – WaitForImage – StopTimer path as a real browser (or remoted client), on a schedule or under load, with the same home, BOM/inventory, production-order, and report / shop confirmation ready baselines – continuous on-the-glass monitoring, or a load/change test when it ramps virtual users.

If you only have a stopwatch, use it to write the acceptance line – then automate it. Example language (schematic only – not a customer dataset or MRPeasy SLA): sign-in to usable home at p95 inside budget; BOM / inventory ready at p95; production order inside budget at p95; report / shop confirmation ready at p95; fewer than 1 percent of runs hang or miss the ready image.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity and change. Freeze the image, walk home – BOM/inventory – production order – report / shop confirmation, ramp concurrent planner-like users, stop at the written budget. When remoted, run storm and sustain separately. See CitraTest VU load testing.
  • CitraTest APM watches production. The same steps, every N minutes, with alerts and screenshots when glass time slips. See CitraTest APM.

The lab answers how many good concurrent MRPeasy workflows fit before click-to-ready breaks. The watch answers whether today’s BOM, inventory, production-order, and shop confirmation steps are still inside the line. Do not use a load-test generator as your only production monitor. No agents inside the MRPeasy tenant – each virtual user is another browser (or remoted session) driving the UI like a person.

What this is not

  • It is not an MRPeasy SLA claim, uptime scorecard, or substitute for MRPeasy status pages. Keep those for service reachability.
  • It is not a replacement for CDN, API, uptime, or browser RUM graphs. Keep those for the network and document path.
  • It is not an HTTP soak of the login URL or a health endpoint. Keep that for the front door.
  • It is not “we have full-stack APM, so MRPeasy is covered.” BOM, production-order, inventory, and shop GUIs are pixels users wait on, not only traces.
  • It is not a claim about MRPeasy proprietary internals, unpublished SLAs, or mobile-app private APIs – only delivered UI readiness on the glass.
  • It is not a promise that last month’s number survives a UI redesign, new branding, browser update, or a move into Citrix / RDS / AVD. Re-time the glass when the image changes.

Take the interval users already wait

MRPeasy response time is click-to-ready on the glass: home, BOM / inventory, production order, and report / shop confirmation ready – not a green MRP status tile or HTTP 200. Time the steps that generate tickets when MRPeasy is “up” but the production order is not ready. When remoted, separate logon storm from density. Use a stopwatch only to write the line; use a synthetic to keep it: CitraTest VU under load or change, CitraTest APM on a continuous watch.

When you need that path without agents in the MRPeasy tenant – real browser or remoted client, image and OCR, StartTimer to StopTimer for MRPeasy – schedule a demo. Product pages: on-the-glass APM, CitraTest VU, and CitraTest APM.

MRPeasy is a trademark of its respective owners. Citrix and related marks are trademarks of their respective owners. Tevron is not affiliated with MRPeasy or those vendors. Names are used for identification only.

Epicor Looked Fine. The Line Stayed Blank.

Epicor Looked Fine. The Line Stayed Blank.
Tevron editorial illustration: ERP status is green. The order line still isn't ready.

ERP status is green. HTTPS returned 200. The Epicor portal loaded. The order line (or inventory grid, or shop-floor step) is still spinning. Status pages and URL checks look healthy. Planners, buyers, warehouse, and shop-floor leads are still waiting for Epicor – Kinetic-class cloud or on-prem ERP for manufacturing and distribution – to paint. That is the Epicor response-time problem: “up” is not the wait people feel on screen.

Direct answer: Measure Epicor response time from what users see on screen (on the glass) – not only from ERP/plant status tiles, CDN or API 200s, or “the portal loaded.” Time the interval from a click or key until the expected Epicor UI is visible: sign-in to usable home/chrome, order or inventory step to ready confirmation, shop-floor / MES-class step to ready, and report / posting confirmation to ready. That interval is click-to-ready – the number an ops lead, ERP team, and help desk can share.

Epicor is industry ERP for manufacturing, distribution, and related supply-chain work – orders, inventory, shop floor, and financials – delivered as Kinetic-class cloud or on-prem UIs (product context: Epicor). Tevron is not affiliated with Epicor; Epicor is a trademark of its respective owners. Sister glass methods: Paylocity, Wave, Deloitte, Sage, Remedly, Oracle Health / Cerner, Epic EHR, Citrix, RDS, and cloud VDI. Method framing: on-the-glass APM, CitraTest VU, and CitraTest APM.

Why green ERP status is not “Epicor is ready”

Epicor sits behind HTTPS, CDNs, identity, and browsers – and often a remoted desktop if someone opens Kinetic-class screens inside Citrix, Microsoft RDS, or AVD. Uptime pages, URL checks, API latency, and “the portal finished loading” tell you the service is reachable and the document arrived. They are not a stopwatch for “the home chrome painted,” “the order line confirmed,” “the shop-floor step saved,” or “the posting is ready.”

A tab can show a spinner, a skeleton order grid, a half-hydrated inventory panel, or a toast that never confirms – and still count as a successful page load or HTTP 200. Client-side rendering and heavier report or posting views sit after the network already said OK. An HTTP generator that hammers login times the front door, not the manufacturing or distribution workflow.

A green ERP status card is useful. It is not the same as “the order line is ready.”

If Epicor is opened inside Citrix, Microsoft RDS, AVD, or other cloud VDI, the split doubles: protocol green still is not Epicor UI ready. ICA/HDX or RDP can stream a spinning browser while orders or shop-floor steps are still hydrating. Host CPU and broker tiles do not close a “Epicor is slow” ticket on the floor. Use the Citrix, RDS, and cloud VDI posts above for remoting.

Schematic: Epicor ERP status, HTTPS 200, and portal loaded do not equal on-the-glass ready states for home, order/inventory, shop floor, and report or posting.
Schematic from this article: ERP status and HTTP health versus glass time. Not a customer dashboard and not a measured Epicor tenant.

Left stack is what ERP status, HTTPS, and the browser document path see. Right stack is what planners and the shop floor wait on. Only the glass stack is Epicor response time as a person experiences it.

Which Epicor steps to time

Write the steps before you pick a tool. Four intervals cover most UX arguments on Epicor orders, inventory, shop floor, and financials:

  1. Sign-in to usable Epicor home / chrome – from credentials submitted (or SSO return) until usable Epicor navigation is ready – menus, company or plant context, no full-screen spinner. Not “the IdP redirected” or “the portal loaded.”
  2. Order / inventory step to ready confirmation – from starting an order-line, pick, or inventory action until that step’s ready state on glass – line accepted, or grid confirmation painted. Not “the route changed.”
  3. Shop-floor / MES-class step to ready – from the click that starts a job, clock, or other shop-floor step until that step’s ready confirmation on glass. Pin the ready image for your Kinetic-class (or on-prem) build and branding.
  4. Report / posting confirmation to ready – from the click that starts a report, journal, or posting until results or confirmation paint – the step that often generates “still waiting” tickets around period close and high-volume shipping days.

Pin the browser (or published-app / Workspace image if remoted), display scale, tenant branding, and ready baselines. A timer on a moving theme is a story, not a measurement. When Epicor runs inside Citrix or other VDI, run a logon storm separately from density. Storm stresses login-to-shell; density stresses in-session Epicor work on hosts that already have users.

Time it like a script, not a feeling

On a modern Epicor web UI there is often no reliable DOM event that means “done” – and inside a remoted thick or Kinetic-class client none you can trust from outside the glass. The practical signal is the bitmap:

  • StartTimer when the user action happens – submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: home chrome, order/inventory confirmation, shop-floor / MES ready, report / posting confirmation.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition – and OCR when the ready state is text – is how you know the glass painted, without an agent inside the Epicor tenant. That is the core of on-the-glass APM.

Four-step Epicor pipeline: StartTimer, WaitForImage, and StopTimer for home, order/inventory, shop-floor/MES, and report or posting click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for home, order/inventory, shop-floor / MES, and report / posting steps. Change the start action and the ready image. Keep the timer. Sister posts use the identical glass method for HCM, finance suites, EHR, consulting apps, and remoted desktops.

Stopwatch versus synthetic

A person with a stopwatch can time one order-line open on a quiet morning. That is a demo, not a measurement program. A one-off cannot give a tail, run at shipping rush, hold concurrent planner-like sessions while timing a shop-floor or posting step, or attach a screenshot of the failed state. Means hide the damage until ops is already saying “Epicor is slow.”

A synthetic does the same StartTimer – WaitForImage – StopTimer path as a real browser (or remoted client), on a schedule or under load, with the same home, order/inventory, shop-floor / MES, and report / posting ready baselines – continuous on-the-glass monitoring, or a load/change test when it ramps virtual users.

If you only have a stopwatch, use it to write the acceptance line – then automate it. Example language (schematic only – not a customer dataset or Epicor SLA): sign-in to usable home at p95 inside budget; order / inventory ready at p95; shop-floor / MES inside budget at p95; report / posting ready at p95; fewer than 1 percent of runs hang or miss the ready image.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity and change. Freeze the image, walk home – order/inventory – shop-floor / MES – report / posting, ramp concurrent planner-like users, stop at the written budget. When remoted, run storm and sustain separately. See CitraTest VU load testing.
  • CitraTest APM watches production. The same steps, every N minutes, with alerts and screenshots when glass time slips. See CitraTest APM.

The lab answers how many good concurrent Epicor workflows fit before click-to-ready breaks. The watch answers whether today’s order, inventory, shop-floor, and posting steps are still inside the line. Do not use a load-test generator as your only production monitor. No agents inside the Epicor tenant – each virtual user is another browser (or remoted session) driving the UI like a person.

What this is not

  • It is not an Epicor SLA claim, uptime scorecard, or substitute for Epicor status pages. Keep those for service reachability.
  • It is not a replacement for CDN, API, uptime, or browser RUM graphs. Keep those for the network and document path.
  • It is not an HTTP soak of the login URL or a health endpoint. Keep that for the front door.
  • It is not “we have full-stack APM, so Epicor is covered.” Order, inventory, shop-floor, and posting GUIs are pixels users wait on, not only traces.
  • It is not a claim about Epicor proprietary internals, unpublished SLAs, or mobile-app private APIs – only delivered UI readiness on the glass.
  • It is not a promise that last month’s number survives a UI redesign, new branding, browser update, or a move into Citrix / RDS / AVD. Re-time the glass when the image changes.

Take the interval users already wait

Epicor response time is click-to-ready on the glass: home, order / inventory, shop-floor / MES, and report / posting ready – not a green ERP status tile or HTTP 200. Time the steps that generate tickets when Epicor is “up” but the order line is not ready. When remoted, separate logon storm from density. Use a stopwatch only to write the line; use a synthetic to keep it: CitraTest VU under load or change, CitraTest APM on a continuous watch.

When you need that path without agents in the Epicor tenant – real browser or remoted client, image and OCR, StartTimer to StopTimer for Epicor – schedule a demo. Product pages: on-the-glass APM, CitraTest VU, and CitraTest APM.

Epicor and Kinetic are trademarks of their respective owners. Citrix and related marks are trademarks of their respective owners. Tevron is not affiliated with Epicor or those vendors. Names are used for identification only.

Paylocity Opened. The Stub Still Hadn’t Drawn.

Paylocity Opened. The Stub Still Hadn’t Drawn.
Tevron editorial illustration: Payroll status is green. The pay stub still isn't ready.

Payroll status is green. HTTPS returned 200. The Paylocity portal loaded. The pay stub (or time entry, or benefits step) is still spinning. Status pages and URL checks look healthy. Payroll admins, HR, and employees are still waiting for Paylocity HCM – payroll, time and attendance, benefits, or self-service – to paint. That is the Paylocity response-time problem: “up” is not the wait people feel on screen.

Direct answer: Measure Paylocity response time from what users see on screen (on the glass) – not only from payroll/HR status tiles, CDN or API 200s, or “the portal loaded.” Time the interval from a click or key until the expected Paylocity UI is visible: sign-in to usable home/chrome, payroll or pay-run step to ready confirmation, time entry or employee self-service step to ready, and report / pay stub / benefits confirmation to ready. That interval is click-to-ready – the number a payroll lead, HRIS team, and help desk can share.

Paylocity is cloud HCM / payroll / HR software for mid-market organizations – payroll, time and attendance, benefits, talent, employee self-service, onboarding, and reporting – delivered on web and mobile (product context: Paylocity). Tevron is not affiliated with Paylocity; Paylocity is a trademark of its respective owners. Sister glass methods: Citrix, RDS, cloud VDI, Epic, Oracle Health / Cerner, Remedly, Sage, Deloitte, and Wave. Method framing: on-the-glass APM, CitraTest VU, and CitraTest APM.

Why green payroll / HR status is not “Paylocity is ready”

Paylocity sits behind HTTPS, CDNs, identity, and browsers – and sometimes a remoted desktop if someone opens it inside Citrix, Microsoft RDS, or AVD. Uptime pages, URL checks, API latency, and “the portal finished loading” tell you the service is reachable and the document arrived. They are not a stopwatch for “the home chrome painted,” “the pay run confirmed,” “time entry saved,” or “the pay stub is ready.”

A tab can show a spinner, a skeleton payroll grid, a half-hydrated benefits panel, or a toast that never confirms – and still count as a successful page load or HTTP 200. Client-side rendering and heavier report or pay-stub views sit after the network already said OK. An HTTP generator that hammers login times the front door, not the payroll or HR workflow.

A green payroll status card is useful. It is not the same as “the pay stub is ready.”

If Paylocity is opened inside Citrix, Microsoft RDS, AVD, or other cloud VDI, the split doubles: protocol green still is not Paylocity UI ready. ICA/HDX or RDP can stream a spinning browser while payroll or self-service is still hydrating. Host CPU and broker tiles do not close a “Paylocity is slow” ticket on payday. Use the Citrix, RDS, and cloud VDI posts above for remoting.

Schematic: Paylocity payroll/HR status, HTTPS 200, and portal loaded do not equal on-the-glass ready states for home, payroll step, time entry, and pay stub or benefits.
Schematic from this article: payroll/HR status and HTTP health versus glass time. Not a customer dashboard and not a measured Paylocity tenant.

Left stack is what payroll/HR status, HTTPS, and the browser document path see. Right stack is what admins and employees wait on. Only the glass stack is Paylocity response time as a person experiences it.

Which Paylocity steps to time

Write the steps before you pick a tool. Four intervals cover most UX arguments on Paylocity payroll, time, benefits, and self-service:

  1. Sign-in to usable Paylocity home / chrome – from credentials submitted (or SSO return) until usable Paylocity navigation is ready – menus, company context, no full-screen spinner. Not “the IdP redirected” or “the portal loaded.”
  2. Payroll / pay run step to ready confirmation – from starting a payroll or pay-run action until that step’s ready state on glass – run progress done, or confirmation painted. Not “the route changed.”
  3. Time entry or employee self-service step to ready – from the click that starts time entry, punch correction, or another ESS step until that step’s ready confirmation on glass. Pin the ready image for your Paylocity build and branding.
  4. Report / pay stub / benefits confirmation to ready – from the click that starts a report, pay-stub view, or benefits confirmation until results or confirmation paint – the step that often generates “still waiting” tickets around payday and open enrollment.

Pin the browser (or published-app / Workspace image if remoted), display scale, tenant branding, and ready baselines. A timer on a moving theme is a story, not a measurement. When Paylocity runs inside Citrix or other VDI, run a logon storm separately from density. Storm stresses login-to-shell; density stresses in-session Paylocity work on hosts that already have users.

Time it like a script, not a feeling

On a modern Paylocity web UI there is often no reliable DOM event that means “done” – and inside a remoted browser none you can trust from outside the glass. The practical signal is the bitmap:

  • StartTimer when the user action happens – submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: home chrome, payroll confirmation, time entry or ESS ready, report / pay stub / benefits confirmation.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition – and OCR when the ready state is text – is how you know the glass painted, without an agent inside the Paylocity tenant. That is the core of on-the-glass APM.

Four-step Paylocity pipeline: StartTimer, WaitForImage, and StopTimer for home, payroll, time entry or ESS, and report or pay stub click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for home, payroll, time entry / ESS, and report / pay stub / benefits steps. Change the start action and the ready image. Keep the timer. Sister posts use the identical glass method for EHR, finance suites, consulting apps, and remoted desktops.

Stopwatch versus synthetic

A person with a stopwatch can time one pay-stub open on a quiet morning. That is a demo, not a measurement program. A one-off cannot give a tail, run at payday rush, hold concurrent employee-like sessions while timing a payroll or time-entry step, or attach a screenshot of the failed state. Means hide the damage until HR is already saying “Paylocity is slow.”

A synthetic does the same StartTimer – WaitForImage – StopTimer path as a real browser (or remoted client), on a schedule or under load, with the same home, payroll, time entry / ESS, and report / pay stub ready baselines – continuous on-the-glass monitoring, or a load/change test when it ramps virtual users.

If you only have a stopwatch, use it to write the acceptance line – then automate it. Example language (schematic only – not a customer dataset or Paylocity SLA): sign-in to usable home at p95 inside budget; payroll / pay-run ready at p95; time entry / ESS inside budget at p95; report / pay stub / benefits ready at p95; fewer than 1 percent of runs hang or miss the ready image.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity and change. Freeze the image, walk home – payroll – time entry / ESS – report / pay stub, ramp concurrent employee-like users, stop at the written budget. When remoted, run storm and sustain separately. See CitraTest VU load testing.
  • CitraTest APM watches production. The same steps, every N minutes, with alerts and screenshots when glass time slips. See CitraTest APM.

The lab answers how many good concurrent Paylocity workflows fit before click-to-ready breaks. The watch answers whether today’s payroll and self-service steps are still inside the line. Do not use a load-test generator as your only production monitor. No agents inside the Paylocity tenant – each virtual user is another browser (or remoted session) driving the UI like a person.

What this is not

  • It is not a Paylocity SLA claim, uptime scorecard, or substitute for Paylocity status pages. Keep those for service reachability.
  • It is not a replacement for CDN, API, uptime, or browser RUM graphs. Keep those for the network and document path.
  • It is not an HTTP soak of the login URL or a health endpoint. Keep that for the front door.
  • It is not “we have full-stack APM, so Paylocity is covered.” Payroll, time, benefits, and self-service GUIs are pixels users wait on, not only traces.
  • It is not a claim about Paylocity proprietary internals, unpublished SLAs, or mobile-app private APIs – only delivered UI readiness on the glass.
  • It is not a promise that last month’s number survives a UI redesign, new branding, browser update, or a move into Citrix / RDS / AVD. Re-time the glass when the image changes.

Take the interval users already wait

Paylocity response time is click-to-ready on the glass: home, payroll / pay run, time entry / ESS, and report / pay stub / benefits ready – not a green payroll status tile or HTTP 200. Time the steps that generate tickets when Paylocity is “up” but the pay stub is not ready. When remoted, separate logon storm from density. Use a stopwatch only to write the line; use a synthetic to keep it: CitraTest VU under load or change, CitraTest APM on a continuous watch.

When you need that path without agents in the Paylocity tenant – real browser or remoted client, image and OCR, StartTimer to StopTimer for Paylocity – schedule a demo. Product pages: on-the-glass APM, CitraTest VU, and CitraTest APM.

Paylocity is a trademark of its respective owners. Citrix and related marks are trademarks of their respective owners. Tevron is not affiliated with Paylocity or those vendors. Names are used for identification only.

When Wave Is Up but the Invoice Isn’t Ready

When Wave Is Up but the Invoice Isn’t Ready
Tevron editorial illustration: Wave status is green. The invoice UI is still spinning.

Wave status is green. HTTPS returned 200. The browser tab loaded. The invoice (or payroll) UI is still spinning. Status pages and URL checks look healthy. Freelancers, solopreneurs, and contractors are still waiting for Wave accounting, invoicing, payments, or payroll to paint. That is the Wave response-time problem: “up” is not the wait the business feels on screen.

Direct answer: Measure Wave response time from what users see on screen (on the glass) – not only from uptime tiles, CDN or API 200s, or “the document loaded.” Time the interval from a click or key until the expected Wave UI is visible: sign-in to usable dashboard/chrome, create or send invoice (or estimate) to ready confirmation, payment/receive or online pay step to ready, and report/books/payroll step to ready. That interval is click-to-ready – the number an owner, bookkeeper, and help desk can share.

Wave is small-business software for web-based accounting, invoicing, payments, payroll, and reports – no install for the online tools, with a mobile app companion – built for freelancers, solopreneurs, and contractors (product context: Wave). Tevron is not affiliated with Wave; Wave is a trademark of its respective owners. Sister glass methods: Citrix, RDS, cloud VDI, Epic, Oracle Health / Cerner, Remedly, Sage, and Deloitte. Method framing: on-the-glass APM, CitraTest VU, and CitraTest APM.

Why green uptime is not “Wave is ready”

Wave sits behind HTTPS, CDNs, identity, and browsers – and sometimes a remoted desktop if someone opens it inside Citrix, Microsoft RDS, or AVD. Uptime pages, URL checks, API latency, and “the tab finished loading” tell you the service is reachable and the document arrived. They are not a stopwatch for “the dashboard chrome painted,” “the invoice sent confirmation showed,” or “payroll confirmed.”

A tab can show a spinner, a skeleton invoice form, a half-hydrated payment panel, or a toast that never confirms – and still count as a successful page load or HTTP 200. Client-side rendering and heavier report or payroll grids sit after the network already said OK. An HTTP generator that hammers login times the front door, not the freelancer workflow.

A green Wave status page is useful. It is not the same as “the invoice is ready.”

If Wave is opened inside Citrix, Microsoft RDS, AVD, or other cloud VDI, the split doubles: protocol green still is not Wave UI ready. ICA/HDX or RDP can stream a spinning browser while invoicing or payroll is still hydrating. Host CPU and broker tiles do not close a “Wave is slow” ticket. Use the Citrix, RDS, and cloud VDI posts above for remoting.

Schematic: Wave uptime, HTTPS 200, and browser loaded do not equal on-the-glass ready states for dashboard, invoice, payment, and report or payroll.
Schematic from this article: uptime/HTTP health versus glass time. Not a customer dashboard and not a measured Wave tenant.

Left stack is what uptime, HTTPS, and the browser document path see. Right stack is what freelancers and bookkeepers wait on. Only the glass stack is Wave response time as a person experiences it.

Which Wave steps to time

Write the steps before you pick a tool. Four intervals cover most UX arguments on Wave accounting, invoicing, payments, and payroll:

  1. Sign-in to usable Wave dashboard / chrome – from credentials submitted (or SSO return) until usable Wave navigation is ready – menus, company context, no full-screen spinner. Not “the IdP redirected” or “the document loaded.”
  2. Create / send invoice (or estimate) to ready confirmation – from starting a new invoice or estimate (or Send) until that step’s ready state on glass – form usable, or sent/confirmation painted. Not “the route changed.”
  3. Payment / receive or online pay step to ready – from the click that starts record payment, receive, or online pay until that step’s ready confirmation on glass. Pin the ready image for your Wave build and branding.
  4. Report / books / payroll step to ready – from the click that starts a report, books view, or payroll step until results or confirmation paint – the step that often generates “still waiting” tickets at month-end or payday.

Pin the browser (or published-app / Workspace image if remoted), display scale, account branding, and ready baselines. A timer on a moving theme is a story, not a measurement. When Wave runs inside Citrix or other VDI, run a logon storm separately from density. Storm stresses login-to-shell; density stresses in-session Wave work on hosts that already have users.

Time it like a script, not a feeling

On a modern Wave web UI there is often no reliable DOM event that means “done” – and inside a remoted browser none you can trust from outside the glass. The practical signal is the bitmap:

  • StartTimer when the user action happens – submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: dashboard chrome, invoice or estimate confirmation, payment ready, report or payroll confirmation.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition – and OCR when the ready state is text – is how you know the glass painted, without an agent inside the Wave tenant. That is the core of on-the-glass APM.

Four-step Wave pipeline: StartTimer, WaitForImage, and StopTimer for dashboard, invoice, payment, and report or payroll click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for dashboard, invoice, payment, and report/payroll steps. Change the start action and the ready image. Keep the timer. Sister posts use the identical glass method for EHR, finance suites, consulting apps, and remoted desktops.

Stopwatch versus synthetic

A person with a stopwatch can time one invoice send on a quiet morning. That is a demo, not a measurement program. A one-off cannot give a tail, run at month-end or payday rush, hold concurrent freelancer-like sessions while timing a payment or payroll step, or attach a screenshot of the failed state. Means hide the damage until owners are already saying “Wave is slow.”

A synthetic does the same StartTimer – WaitForImage – StopTimer path as a real browser (or remoted client), on a schedule or under load, with the same dashboard, invoice, payment, and report/payroll ready baselines – continuous on-the-glass monitoring, or a load/change test when it ramps virtual users.

If you only have a stopwatch, use it to write the acceptance line – then automate it. Example language (schematic only – not a customer dataset or Wave SLA): sign-in to usable dashboard at p95 inside budget; create/send invoice ready at p95; payment/receive inside budget at p95; report/books/payroll ready at p95; fewer than 1 percent of runs hang or miss the ready image.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity and change. Freeze the image, walk dashboard – invoice – payment – report/payroll, ramp concurrent freelancer-like users, stop at the written budget. When remoted, run storm and sustain separately. See CitraTest VU load testing.
  • CitraTest APM watches production. The same steps, every N minutes, with alerts and screenshots when glass time slips. See CitraTest APM.

The lab answers how many good concurrent Wave workflows fit before click-to-ready breaks. The watch answers whether today’s invoice and payroll steps are still inside the line. Do not use a load-test generator as your only production monitor. No agents inside the Wave tenant – each virtual user is another browser (or remoted session) driving the UI like a person.

What this is not

  • It is not a Wave SLA claim, uptime scorecard, or substitute for Wave status pages. Keep those for service reachability.
  • It is not a replacement for CDN, API, uptime, or browser RUM graphs. Keep those for the network and document path.
  • It is not an HTTP soak of the login URL or a health endpoint. Keep that for the front door.
  • It is not “we have full-stack APM, so Wave is covered.” Accounting, invoice, payment, and payroll GUIs are pixels users wait on, not only traces.
  • It is not a claim about Wave proprietary internals, unpublished SLAs, or mobile-app private APIs – only delivered UI readiness on the glass.
  • It is not a promise that last month’s number survives a UI redesign, new branding, browser update, or a move into Citrix / RDS / AVD. Re-time the glass when the image changes.

Take the interval users already wait

Wave response time is click-to-ready on the glass: dashboard, invoice, payment, and report/books/payroll ready – not a green status tile or HTTP 200. Time the steps that generate tickets when Wave is “up” but the invoice is not ready. When remoted, separate logon storm from density. Use a stopwatch only to write the line; use a synthetic to keep it: CitraTest VU under load or change, CitraTest APM on a continuous watch.

When you need that path without agents in the Wave tenant – real browser or remoted client, image and OCR, StartTimer to StopTimer for Wave – schedule a demo. Product pages: on-the-glass APM, CitraTest VU, and CitraTest APM.

Wave is a trademark of its respective owners. Citrix and related marks are trademarks of their respective owners. Tevron is not affiliated with Wave or those vendors. Names are used for identification only.

Cutover Tickets Start Where PMO Dashboards Stop

Cutover Tickets Start Where PMO Dashboards Stop
Tevron editorial illustration: The program dashboard is green. The published app is still spinning.

The program dashboard is green. The published app is still spinning. PMO status says on track. CDN and API checks returned 200. Protocol tiles for Citrix or AVD look healthy. Consultants and client users are still waiting for SAP, Oracle, Workday, or a custom portal to paint. That is the Deloitte-related response-time problem: program and infra green is not the wait delivery teams feel on screen.

Direct answer: Measure response time for the applications and virtual desktops that matter in Deloitte-led transformations and day-to-day consulting delivery – from what users see on screen (on the glass) – not only from program dashboards, PMO status, CDN or API 200s, or protocol health tiles. Time the interval from a click or key until the expected UI is visible: login-to-usable shell or desktop, published-app or portal ready, key business transaction click-to-ready (for example an SAP, Oracle, or Workday step), and report/export or handoff ready. That interval is click-to-ready – the number a delivery lead, client IT, and help desk can share.

Deloitte is a global network of member firms spanning audit, tax, consulting, advisory, and digital (firm context: Deloitte / Deloitte US). Tevron is not affiliated with Deloitte; Deloitte is a trademark of its respective owners. This article is not about timing Deloitte as a product – it is about timing the enterprise apps and VDI sessions that matter when Deloitte leads or supports a transformation. Sister glass methods: Citrix, RDS, cloud VDI, Epic, Oracle Health / Cerner, and Remedly. Method framing: on-the-glass APM, CitraTest VU, and CitraTest APM.

Why a green program or protocol tile is not “ready”

Transformation programs report milestones, RAID items, and cutover checklists. SaaS and custom portals sit behind HTTPS, CDNs, identity providers, and browsers. Citrix and AVD publish apps and desktops behind ICA/HDX or RDP. Uptime pages, URL checks, API latency, PMO dashboards, and protocol tiles tell you the program is tracking and the service or session broker is up. They are not a stopwatch for “the published app painted,” “the Workday step confirmed,” or “the SAP transaction is usable.”

A Workspace window can stream a spinner, a skeleton portal, a half-hydrated Oracle form, or a toast that never confirms – and still count as a successful launch or HTTP 200. Client-side rendering and heavy ERP transactions sit after the network and broker already said OK. An HTTP generator that hammers login times the front door, not the consulting workflow.

A green program dashboard is useful. It is not the same as “the published app appeared.”

When SAP, Oracle, Workday, or a custom portal runs inside Citrix, Microsoft RDS, AVD, or other cloud VDI, the split doubles: protocol green still is not UI ready. HDX or RDP can stream a spinning shell while the business app is still hydrating. Host CPU and broker tiles do not close a “the app is slow” ticket during a Deloitte-led go-live. Use the Citrix, RDS, and cloud VDI posts above for remoting.

Schematic: green PMO, CDN/API 200, and Citrix/AVD protocol tiles do not equal on-the-glass ready states for shell, published app, SAP/Oracle/Workday transaction, and handoff.
Schematic from this article: program/protocol health versus glass time. Not a customer dashboard and not a measured engagement.

Left stack is what PMO, CDN/API, and remoting health see. Right stack is what consultants and client users wait on. Only the glass stack is response time as a person experiences it in Deloitte-related delivery.

Which steps to time in Deloitte-led work

Write the steps before you pick a tool. Four intervals cover most UX arguments on published apps, portals, and remoted desktops in transformation and consulting delivery:

  1. Sign-in to usable shell / desktop – from credentials submitted (or SSO return) until a usable Workspace, desktop, or portal chrome is ready – menus, no full-screen spinner. Not “the IdP redirected” or “the broker session started.”
  2. Published app / portal ready – from launching the published SAP, Oracle, Workday, or custom portal until that app’s home or landing UI is interactive. Not “the icon flashed” or “the process started.”
  3. Key business transaction – from the click that starts a representative SAP, Oracle, or Workday step (or a custom portal transaction) until that step’s ready state on glass. Pin the ready image for the engagement’s build.
  4. Report / export / handoff – from the click that starts a report, export, or handoff step until results or confirmation paint – the step that often generates “still waiting” tickets at cutover.

Pin the browser or published-app / Workspace image, display scale, tenant branding, and ready baselines. A timer on a moving theme is a story, not a measurement. When work runs inside Citrix or other VDI, run a logon storm separately from density. Storm stresses login-to-shell; density stresses in-session SAP / Oracle / Workday work on hosts that already have users.

Time it like a script, not a feeling

On modern ERP and HCM UIs there is often no reliable DOM event that means “done” – and inside a remoted published app none you can trust from outside the glass. The practical signal is the bitmap:

  • StartTimer when the user action happens – submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: shell chrome, published-app home, transaction confirmation, report or export result.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition – and OCR when the ready state is text – is how you know the glass painted, without an agent inside SAP, Oracle, Workday, or the portal. That is the core of on-the-glass APM.

Four-step consulting transformation pipeline: StartTimer, WaitForImage, and StopTimer for shell, published app, SAP/Oracle/Workday transaction, and report or handoff click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for shell, published app, key transaction, and handoff steps. Change the start action and the ready image. Keep the timer. Sister posts use the identical glass method for EHR and remoted desktops.

Stopwatch versus synthetic

A person with a stopwatch can time one published-app launch on a quiet morning. That is a demo, not a measurement program. A one-off cannot give a tail, run at cutover rush, hold concurrent consultant-like sessions while timing a Workday or SAP step, or attach a screenshot of the failed state. Means hide the damage until delivery is already saying “the app is slow.”

A synthetic does the same StartTimer → WaitForImage → StopTimer path as a real browser or remoted Workspace / Remote Desktop client, on a schedule or under load, with the same shell, published-app, transaction, and handoff-ready baselines – continuous on-the-glass monitoring, or a load/change test when it ramps virtual users.

If you only have a stopwatch, use it to write the acceptance line – then automate it. Example go-live language (schematic only – not a customer dataset or Deloitte SLA): sign-in to usable shell at p95 inside budget; published app ready at p95; key SAP / Oracle / Workday transaction inside budget at p95; fewer than 1 percent of runs hang or miss the ready image.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity and change. Freeze the image, walk shell → published app → key transaction → handoff, ramp concurrent consultant-like users, stop at the written budget. When remoted, run storm and sustain separately. See CitraTest VU load testing.
  • CitraTest APM watches production. The same steps, every N minutes, with alerts and screenshots when glass time slips. See CitraTest APM.

The lab answers how many good concurrent transformation workflows fit before click-to-ready breaks. The watch answers whether today’s published app and transaction steps are still inside the line. Do not use a load-test generator as your only production monitor. No agents inside the client’s SAP, Oracle, Workday, or portal tenant – each virtual user is another consultant or client browser (or remoted session) driving the UI like a person.

What this is not

  • It is not a Deloitte SLA claim, engagement scorecard, or substitute for PMO program metrics. Keep RAID, milestones, and status for the program office.
  • It is not a replacement for CDN, API, uptime, or browser RUM graphs. Keep those for the network and document path.
  • It is not an HTTP soak of the login URL or a health endpoint. Keep that for the front door.
  • It is not “we have full-stack APM, so the engagement apps are covered.” Published-app and ERP GUIs are pixels users wait on, not only traces.
  • It is not a claim about Deloitte proprietary methods, unpublished client contracts, or SAP / Oracle / Workday internals – only delivered UI readiness on the glass.
  • It is not a promise that last month’s number survives a UI redesign, new published-app image, browser update, or a move into Citrix / RDS / AVD. Re-time the glass when the image changes.

Take the interval users already wait

Deloitte-related response time – for the apps and desktops that matter in Deloitte-led work – is click-to-ready on the glass: shell, published app, key transaction, and handoff ready – not a green program dashboard or protocol tile. Time the steps that generate tickets at cutover and in day-to-day consulting delivery. When remoted, separate logon storm from density. Use a stopwatch only to write the line; use a synthetic to keep it: CitraTest VU under load or change, CitraTest APM on a continuous watch.

When you need that path without agents in the client tenant – real browser or remoted client, image and OCR, StartTimer to StopTimer for the apps that matter in Deloitte engagements – schedule a demo. Product pages: on-the-glass APM, CitraTest VU, and CitraTest APM.

Deloitte is a trademark of its respective owners. SAP, Oracle, Workday, Citrix, and related marks are trademarks of their respective owners. Tevron is not affiliated with Deloitte or those vendors. Names are used for identification only.

Sage Spinners Don’t Belong in Month-End Close

Sage Spinners Don’t Belong in Month-End Close
Tevron editorial illustration: The API returned 200. The invoice screen is still spinning.

The API returned 200. The invoice screen is still spinning. CDN cache is warm. Browser RUM says the document loaded. Finance and ops staff are still waiting for the ledger to paint and payroll to confirm. That is the Sage response-time problem: SaaS or protocol health is not the wait the business feels.

Direct answer: Measure Sage – accounting, ERP, and payroll products including Sage Intacct, Sage X3, and Sage 50cloud / 200-class desktop and cloud accounting – response time from what finance and ops staff see on screen – on the glass – not only from browser RUM, CDN or API latency, synthetic HTTP checks, or “the page returned 200.” Time the interval from a click or key until the expected Sage UI is visible: login-to-home, ledger / GL ready, AP / AR invoice or payment step, report / dashboard / payroll run ready. That interval is click-to-ready – the number a controller, help desk, and IT vendor can share.

Sage is business management software for accounting, people, payroll, and payments (product context: Sage). Browser Intacct / cloud suites and thick-client or remoted desktop apps still paint a GUI. Sister glass methods: Remedly, Epic, Oracle Health / Cerner, plus Citrix, RDS, and cloud VDI. Method framing: on-the-glass APM. This article times Sage itself.

Why a green SaaS tile is not “Sage is ready”

Cloud and hybrid finance suites sit behind HTTPS, CDNs, identity providers, browsers, and often Citrix, Microsoft RDS, or AVD. Uptime pages, URL checks, API latency, and Real User Monitoring (RUM) tell you the service is reachable and the document finished. They are not a stopwatch for “the company home painted,” “the journal entry opened,” or “payroll confirmed.”

A tab can show a spinner, a skeleton ledger, a half-hydrated AP form, or a toast that never confirms – and still count as a successful page load. Client-side rendering and heavy report grids sit after the network already said OK. An HTTP generator that hammers login times the front door, not the workflow.

A 200 from the API is useful. It is not the same as “the invoice screen appeared.”

If Sage is opened inside Citrix, Microsoft RDS, AVD, or other cloud VDI, the split doubles: protocol green still is not Sage UI ready. ICA/HDX or RDP can stream a spinning browser or thick client while the ledger is still hydrating. Host CPU and broker tiles do not close a “Sage is slow” ticket. Use the Citrix, RDS, and cloud VDI posts above for remoting.

Schematic: green CDN, API 200, RUM, and protocol tiles do not equal Sage UI-ready states for home, GL, AP/AR, and payroll on the glass.
Schematic from this article: network/HTTP/SaaS health versus glass time. Not a customer dashboard and not a measured finance org.

Top row is what network, CDN, API, RUM, and remoting health see. Bottom strip is what finance and ops staff wait on. Only the glass strip is Sage response time as a person experiences it.

Which Sage steps to time

Write the steps before you pick a tool. Four intervals cover most finance UX arguments on browser Intacct / cloud and thick-client or remoted desktop sessions:

  1. Sign-in to usable home / company – from credentials submitted (or SSO return) until usable Sage navigation is ready – company context, menus, no full-screen spinner. Not “the IdP redirected” or “the document loaded.”
  2. GL / ledger / journal entry ready – from opening the general ledger or starting a journal entry until the form and controls are usable. Not “the route changed.”
  3. AP / AR invoice or payment step – from open invoice, vendor bill, customer invoice, or payment action until that step’s ready state on glass. Pin the ready image for your product (Intacct, X3, 50cloud / 200-class).
  4. Report / dashboard / payroll run – from the click that starts a financial report, dashboard refresh, or payroll run step until results or confirmation paint.

Pin the browser or thick-client build (or published-app / Workspace image if remoted), display scale, company branding, and ready baselines. A timer on a moving theme is a story, not a measurement. When Sage runs inside Citrix or other VDI, run a logon storm separately from density. Storm stresses login-to-shell; density stresses in-session Sage work on hosts that already have users.

Time it like a script, not a feeling

On a modern cloud finance UI there is often no reliable DOM event that means “done” – and inside a remoted browser or thick client none you can trust from outside the glass. The practical signal is the bitmap:

  • StartTimer when the user action happens – submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: home chrome, ledger, invoice step, report or payroll confirmation.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition – and OCR when the ready state is text – is how you know the glass painted, without an agent inside Sage. That is the core of on-the-glass APM.

Four-step finance waterfall: StartTimer, WaitForImage, and StopTimer for Sage sign-in, GL, AP/AR, and payroll or report click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for sign-in, GL, AP/AR, and report / payroll steps. Change the start action and the ready image. Keep the timer. Sister posts use the identical glass method for EHR and remoted desktops.

Stopwatch versus synthetic

A person with a stopwatch can time one Sage invoice open on a quiet morning. That is a demo, not a measurement program. A one-off cannot give a tail, run at month-end close, hold concurrent sessions while timing payroll, or attach a screenshot of the failed state. Means hide the damage until finance is already saying “Sage is slow.”

A synthetic does the same StartTimer → WaitForImage → StopTimer path as a real browser or remoted Workspace / Remote Desktop client, on a schedule or under load, with the same home, ledger, invoice, and payroll-ready baselines – continuous on-the-glass monitoring, or a Sage load/change test when it ramps virtual users.

If you only have a stopwatch, use it to write the acceptance line – then automate it. Example go-live language (schematic only – not a customer dataset or Sage SLA): sign-in to usable home at p95 inside budget; GL ready at p95; open AP invoice and payroll step inside budget at p95; fewer than 1 percent of runs hang or miss the ready image.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity and change. Freeze the image, walk sign-in → GL → AP/AR → report / payroll, ramp concurrent staff-like users, stop at the written budget. When remoted, run storm and sustain separately. See CitraTest VU load testing.
  • CitraTest APM watches production. The same Sage steps, every N minutes, with alerts and screenshots when glass time slips. See CitraTest APM.

The lab answers how many good concurrent Sage workflows fit before click-to-ready breaks. The watch answers whether today’s ledger and invoice steps are still inside the line. Do not use a load-test generator as your only production monitor. No agents inside Sage’s cloud or desktop binaries – each virtual user is another staff browser or remoted session driving the UI like a person.

What this is not

  • It is not a replacement for CDN, API, uptime, or browser RUM graphs. Keep those for the network and document path.
  • It is not an HTTP soak of the login URL or a health endpoint. Keep that for the front door.
  • It is not “we have full-stack APM, so Sage is covered.” Ledger and invoice GUIs are pixels staff wait on, not only traces.
  • It is not a claim about Sage proprietary internals, unpublished SLAs, or customer contracts – only delivered UI readiness on the glass.
  • It is not a promise that last month’s number survives a UI redesign, new company theme, browser or thick-client update, or a move into Citrix / RDS / AVD. Re-time the glass when the image changes.

Take the interval staff already wait

Sage response time is click-to-ready on the glass – home, ledger, AP/AR, and report / payroll ready – not a green CDN or protocol tile. Time sign-in, GL, invoice / payment, and payroll steps that generate tickets. When remoted, separate logon storm from density. Use a stopwatch only to write the line; use a synthetic to keep it: CitraTest VU under load or change, CitraTest APM on a continuous watch.

When you need that path without agents in the Sage tenant or desktop install – real browser or remoted client, image and OCR, StartTimer to StopTimer for Sage – schedule a demo. Product pages: on-the-glass APM, CitraTest VU, and CitraTest APM.

Sage, Sage Intacct, Sage X3, Sage 50cloud, and related marks are trademarks of The Sage Group plc or its affiliates. Tevron is not affiliated with Sage. Product names are used for identification only.

Remedly Visit Speed: Click-to-Ready for Clinics

Remedly Visit Speed: Click-to-Ready for Clinics
Tevron editorial illustration: The page can return 200. Remedly is still waiting.

CDN cache is warm. The API returned 200. Browser RUM says the document loaded. Front-desk staff are still waiting for the schedule to paint and the encounter note to save. That is the Remedly response-time problem: SaaS health is not the wait the practice feels.

Direct answer: Measure Remedly – cloud EHR, practice management, and RCM for medical practices – response time from what staff see on screen – on the glass – not only from browser RUM, CDN or API latency, synthetic HTTP checks, or “the page returned 200.” Time the interval from a click or key until the expected Remedly UI is visible: schedule ready, chart or encounter open, note saved, claims or payment step complete. That interval is click-to-ready – the number a practice manager, help desk, and IT vendor can share.

Remedly is a cloud-based, customizable EHR plus RCM and practice-management suite (product context: Remedly) – notably for plastic surgery, med spa, and mental health – with practice management, patient portal, analytics, marketing, AI assistant, e-prescribing, eLabs, eFax, and payments, on PC, phone, or laptop. It still paints a GUI. Sister glass methods: Epic and Oracle Health / Cerner (same timer pattern), plus Citrix, RDS, and cloud VDI. EHR framing: Epic / EHR on the glass. This article times Remedly itself.

Why a green SaaS tile is not “Remedly is ready”

Cloud EHRs sit behind HTTPS, CDNs, identity providers, and browsers. Uptime pages, URL checks, API latency, and Real User Monitoring (RUM) tell you the service is reachable and the document finished. They are not a stopwatch for “the schedule painted,” “the encounter opened,” or “the note saved.”

A tab can show a spinner, a skeleton layout, a half-hydrated calendar, or a toast that never confirms – and still count as a successful page load. Client-side rendering and heavy encounter forms sit after the network already said OK. An HTTP generator that hammers login times the front door, not the workflow.

A 200 from the CDN is useful. It is not the same as “the schedule appeared.”

If Remedly is opened inside Citrix, Microsoft RDS, AVD, or other cloud VDI, the split doubles: protocol green still is not Remedly UI ready. ICA/HDX or RDP can stream a spinning browser while the EHR is still hydrating. Host CPU and broker tiles do not close a “Remedly is slow” ticket. Use the Citrix, RDS, and cloud VDI posts above for remoting.

Two-column schematic: network, HTTP, CDN, and SaaS health timers versus on-the-glass Remedly UI-ready click-to-ready for the same staff workflow.
Schematic from this article: network/HTTP/SaaS health versus glass time. Not a customer dashboard and not a measured practice.

Left column is what network, CDN, API, and SaaS health see. Right column is what front desk, clinical, and billing staff wait on. Only the right column is Remedly response time as a person experiences it.

Which Remedly steps to time

Write the steps before you pick a tool. Four intervals cover most practice UX arguments on browser and remoted-browser sessions:

  1. Sign-in to usable home – from credentials submitted (or SSO return) until usable Remedly navigation is ready – menus, no full-screen spinner. Not “the IdP redirected” or “the document loaded.”
  2. Schedule / practice-management ready – from opening the calendar or front-desk view until appointments and controls are usable. Not “the route changed.”
  3. Chart / encounter / note – from open patient, open encounter, or save note until ready: chart visible, form interactive, save confirmed. Customizable notes and consents make the ready image practice-specific – pin it.
  4. RCM / claims / payments / portal staff steps – from the click that starts billing, claims, payment, eFax, eLabs, e-prescribe, or a staff-side portal task until that step’s ready state.

Pin the browser build (or published-browser / Workspace image if remoted), display scale, tenant branding, and ready baselines. A timer on a moving theme is a story, not a measurement. When Remedly runs inside Citrix or other VDI, run a logon storm separately from density. Storm stresses login-to-shell; density stresses in-session Remedly work on hosts that already have users.

Time it like a script, not a feeling

On a modern SaaS EHR there is often no reliable DOM event that means “done” – and inside a remoted browser none you can trust from outside the glass. The practical signal is the bitmap:

  • StartTimer when the user action happens – submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: home chrome, schedule, encounter, save confirmation.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition – and OCR when the ready state is text – is how you know the glass painted, without an agent inside Remedly. That is the core of on-the-glass APM.

Three-row schematic of StartTimer, WaitForImage, and StopTimer for Remedly sign-in, schedule ready, and encounter or RCM click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for sign-in, schedule, encounter/note, and RCM steps. Change the start action and the ready image. Keep the timer. The Epic sister post uses the identical glass method for hospital EHR plus ambulatory SaaS.

Stopwatch versus synthetic

A person with a stopwatch can time one Remedly schedule open on a quiet morning. That is a demo, not a measurement program. A one-off cannot give a tail, run at Monday check-in rush, hold concurrent sessions while timing save-note, or attach a screenshot of the failed state. Means hide the damage until the front desk is already saying “Remedly is slow.”

A synthetic does the same StartTimer -> WaitForImage -> StopTimer path as a real browser (or remoted Workspace / Remote Desktop browser), on a schedule or under load, with the same schedule, encounter, and claims-ready baselines – continuous on-the-glass monitoring, or a Remedly load/change test when it ramps virtual users.

If you only have a stopwatch, use it to write the acceptance line – then automate it. Example go-live language (schematic only – not a customer dataset or Remedly SLA): sign-in to usable home at p95 inside budget; schedule ready at p95; open encounter and save note inside budget at p95; fewer than 1 percent of runs hang or miss the ready image.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity and change. Freeze the image, walk sign-in -> schedule -> encounter -> RCM, ramp concurrent staff-like users, stop at the written budget. When remoted, run storm and sustain separately. See CitraTest VU load testing.
  • CitraTest APM watches production. The same Remedly steps, every N minutes, with alerts and screenshots when glass time slips. See CitraTest APM.

The lab answers how many good concurrent Remedly workflows fit before click-to-ready breaks. The watch answers whether today’s schedule and note-save are still inside the line. Do not use a load-test generator as your only production monitor. No agents inside Remedly’s cloud – each virtual user is another staff browser (or remoted session) driving the UI like a person.

What this is not

  • It is not a replacement for CDN, API, uptime, or browser RUM graphs. Keep those for the network and document path.
  • It is not an HTTP soak of the login URL or a health endpoint. Keep that for the front door.
  • It is not “we have full-stack APM, so Remedly is covered.” Schedule and encounter GUIs are pixels staff wait on, not only traces.
  • It is not a claim about Remedly proprietary internals, unpublished SLAs, or customer contracts – only delivered UI readiness on the glass.
  • It is not a promise that last month’s number survives a UI redesign, new encounter template, browser update, or a move into Citrix / RDS / AVD. Re-time the glass when the image changes.

Take the interval staff already wait

Remedly response time is click-to-ready on the glass – schedule, chart, note, and RCM ready – not a green CDN or protocol tile. Time sign-in, schedule, encounter/note, and billing steps that generate tickets. When remoted, separate logon storm from density. Use a stopwatch only to write the line; use a synthetic to keep it: CitraTest VU under load or change, CitraTest APM on a continuous watch.

When you need that path without agents in the SaaS tenant – real browser or remoted client, image and OCR, StartTimer to StopTimer for Remedly – schedule a demo. Product pages: on-the-glass APM, CitraTest VU, and CitraTest APM.

PowerChart Ready Beats Protocol Ready

PowerChart Ready Beats Protocol Ready
Tevron editorial illustration: Director can look fine. PowerChart is still waiting.

Director says ICA RTT is fine. StoreFront returned 200. The VDA is green. The nurse is still waiting for the chart. That is the Oracle Health (Cerner) response-time problem: remoting health is not the wait the clinician feels.

Direct answer: Measure Oracle Health / Cerner – for example PowerChart or other Millennium clinical GUI – response time from what the clinician sees on screen – on the glass – not only from Citrix HDX/ICA counters, RDP latency, Workspace or portal HTTP, or host CPU. Time the interval from a click or key until the expected EHR screen state is visible. That interval is click-to-ready – the number a CAB, help desk, and clinical informatics can share.

Oracle Health (the former Cerner business) is the EHR and application layer – product context: Oracle Health. Citrix, Microsoft RDS, AVD, and other VDI stacks deliver the pixels. Hospitals often run Epic and Oracle Health side by side; the glass method is the same. Sibling page: Epic / EHR on the glass. Sister posts: Epic, Citrix, RDS, and cloud VDI. Load-test method: How to load test Citrix and How to load test Citrix Virtual Apps and Desktops. This article times Oracle Health / Cerner itself.

Why a green Director tile is not “the chart appeared”

HDX, ICA, RDP, and cloud remoting move pixels out and keyboard and mouse in. Director, Monitor, broker health, and host CPU tell you the session is up and the channel is healthy. They are not a stopwatch for “PowerChart painted” or “the chart is ready.”

A session can stream a logon animation, a spinning cursor, or a half-drawn Millennium window and still look connected. Profile attach, GPO, FSLogix (or equivalent), and the EHR client sit after remoting is already up. StoreFront, Workspace, and hospital portals are websites – an HTTP generator times the store, not the chart.

A green Director tile is useful. It is not the same as “the chart appeared.”

Host CPU can sit at 40 percent while login-to-shell stretches and PowerChart paints late. Protocol RTT can look fine while open-chart stalls. Green remoting tiles do not close a “Cerner is slow” ticket.

Two-column schematic: broker, protocol, and host timers versus on-the-glass Oracle Health / Cerner chart-ready click-to-ready for the same session.
Schematic from this article: broker/protocol/host versus glass time. Not a customer dashboard and not a measured farm.

Left column is what broker, protocol, and host timers see. Right column is what the clinician waits on – Oracle Health / Cerner response time as a person experiences it.

Which Oracle Health / Cerner steps to time

Write the steps before you pick a tool. Three intervals cover most clinical UX arguments on published apps and remoted desktops:

  1. Logon-to-shell – from credentials submitted (or Workspace / StoreFront / Gateway / portal launch) until a usable desktop or published-app window is ready: shell, icons, no logon animation. Not “the broker returned a session.”
  2. Oracle Health / published-app launch – from the icon or Start-menu click until first usable paint of PowerChart or the Millennium clinical GUI you publish. Not “the process started on the VDA or Session Host.”
  3. In-session transactions – from the click or key that starts the work until ready: open chart or record, search, save, switch activity. This is the wait behind “Cerner is slow” tickets after clinicians are already in session.

Pin the image, VDA or Session Host SKU, Workspace or Remote Desktop client, StoreFront / Gateway / portal build, and the published Oracle Health / Cerner resource. A timer on a moving image is a story, not a measurement.

For capacity work, run a logon storm separately from density. Storm stresses login-to-shell; density stresses in-session chart and search on hosts that already have clinicians. Blending them hides which interval broke.

Time it like a script, not a feeling

On remoted Oracle Health / Cerner there is no DOM event that means “done.” The practical signal is the bitmap. The measurement pattern is the same one CitraTest has used for years on published EHR GUIs:

  • StartTimer when the user action happens – submit, Workspace launch, click, or key.
  • WaitForImage until a baseline of the ready state is visible: the shell, the PowerChart / Millennium window, the chart.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition – and OCR when the ready state is text – is how you know the glass painted, without an agent on the VDA. That is the core of on-the-glass APM.

Three-row schematic of StartTimer, WaitForImage, and StopTimer for Oracle Health / Cerner logon-to-shell, PowerChart / Millennium launch, and chart-ready click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for login, EHR launch, and in-session chart work. Change the start action and the ready image. Keep the timer. The Epic sister post uses the identical glass method for Hyperspace / Hyperdrive when the same team supports both EHRs.

Stopwatch versus synthetic

A person with a stopwatch can time one PowerChart logon on a quiet morning. That is a demo, not a measurement program. A one-off cannot give a tail, run at shift change every weekday, hold concurrent sessions while timing open-chart, or attach a screenshot of the failed state. Means hide the damage until the desk is taking “Cerner is slow” calls.

A synthetic does the same StartTimer -> WaitForImage -> StopTimer path as a real Workspace or Remote Desktop client, on a schedule or under load, with the same PowerChart / Millennium and chart-ready baselines. That is on-the-glass monitoring when it runs continuously, and an Oracle Health-on-Citrix (or RDS / AVD) load test when it ramps users.

If you only have a stopwatch, use it to write the acceptance line – then automate it. Example capacity-plan language (schematic only – not a customer dataset or Oracle/Cerner SLA): logon-to-shell 45 seconds at p95 and 60 at p99; EHR published-app open 8 seconds at p95; open-chart inside the written budget at p95; fewer than 1 percent of runs fail, disconnect, or hang.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity. Freeze the image, walk the real StoreFront / Workspace / Gateway path into published PowerChart or Millennium, run storm and sustain as separate shapes, stop at the written budget. See CitraTest VU load testing.
  • CitraTest APM watches production. The same login -> EHR -> open-chart steps, every N minutes, with alerts and screenshots when glass time slips. See CitraTest APM.

The lab answers how many good Oracle Health / Cerner sessions fit on this SKU. The watch answers whether today’s logon-to-shell and open-chart are still inside the SLA. Do not use a load-test generator as your only production monitor, or treat a single synthetic as a density number. No agents on VDAs, Session Hosts, or brokers – each virtual user or monitor is another Workspace or Remote Desktop session launching the EHR like a clinician.

What this is not

  • It is not a replacement for Director, Monitor, HDX Insights, RD Connection Broker health, or AVD host metrics. Keep those for the remoting path.
  • It is not an HTTP soak of StoreFront, Workspace, Gateway, or the hospital portal. Keep that for the front door.
  • It is not “we have full-stack APM, so Oracle Health is covered.” Published PowerChart and Millennium GUIs are pixels, not traces.
  • It is not a claim about Oracle Health or Cerner proprietary metrics, internal tooling, or customer SLAs – only delivered session UX on Citrix, RDS, AVD, and peers, on the glass.
  • It is not a promise that last quarter’s number survives a new VDA image, FSLogix policy, Millennium / PowerChart build, or a move to DaaS / AVD. Re-time the glass when the image changes.

Take the interval clinicians already wait

Oracle Health / Cerner response time is click-to-ready on the glass – PowerChart or Millennium chart ready, not a green protocol tile. Time logon-to-shell, EHR published-app launch, and the in-session steps that generate tickets. Separate logon storm from density. Use a stopwatch only to write the line; use a synthetic to keep it: CitraTest VU under load, CitraTest APM every shift.

When you need that path without agents on the farm – real client, image and OCR, StartTimer to StopTimer for Oracle Health / Cerner – schedule a demo. Product pages: Epic / EHR on the glass, on-the-glass APM, CitraTest VU, and CitraTest APM.

The Chart Has to Appear: Epic Response Time on the Glass

The Chart Has to Appear: Epic Response Time on the Glass
Tevron editorial illustration: HDX can look fine. The chart is still waiting.

Director says ICA RTT is fine. StoreFront returned 200. The VDA is green. The nurse is still waiting for the chart. That is the Epic response-time problem in one sentence: remoting health is not the wait the clinician feels.

Direct answer: Measure Epic — Hyperspace or Hyperdrive — response time from what the clinician sees on the screen — on the glass — not only from Citrix HDX/ICA counters, RDP latency, StoreFront or Workspace HTTP, or host CPU. Time the interval from a click or key until the expected Epic screen state is visible. That interval is click-to-ready. It is the number a CAB, a help desk, and clinical informatics can share.

Epic is the EHR and application layer. Citrix, Microsoft RDS, AVD, and other VDI stacks deliver the pixels. Product context: Epic / EHR on the glass. Sister posts on the same glass clock: Citrix, RDS, and cloud VDI response time. Load-test method: How to load test Citrix and How to load test Citrix Virtual Apps and Desktops. This article is narrower: how to time Epic itself.

Why a green Director tile is not “the chart appeared”

HDX, ICA, RDP, and cloud remoting protocols move pixels out and keyboard and mouse in. Director, Monitor, broker health, and host CPU are good at telling you the session is up and the channel is healthy. They are not a stopwatch for “Hyperspace painted” or “the chart is ready.”

A session can stream a logon animation, a spinning cursor, or a half-drawn Epic window and still look connected. Profile attach, GPO, FSLogix (or equivalent), and the EHR client itself sit after remoting is already up. StoreFront and Workspace are websites. Hammering them with an HTTP generator times the store, not the chart.

A green Director tile is useful. It is not the same as “the chart appeared.”

Host CPU can sit at 40 percent while login-to-shell stretches and Hyperdrive paints late. Protocol RTT can look fine while open-chart stalls. Green remoting tiles do not close an “Epic is slow” ticket.

Two-column schematic: broker, protocol, and host timers versus on-the-glass Epic chart-ready click-to-ready for the same session.
Schematic from this article: broker/protocol/host versus glass time. Not a customer dashboard and not a measured farm.

Left column is what broker, protocol, and host timers see. Right column is what the clinician waits on. Only the right column is Epic response time as a person experiences it.

Which Epic steps to time

Write the steps before you pick a tool. Three intervals cover most Epic UX arguments on published apps and remoted desktops:

  1. Logon-to-shell — from credentials submitted (or the Workspace / StoreFront / Gateway / portal launch) until a usable desktop or published-app window is ready: shell, icons, no logon animation. Not “the broker returned a session.”
  2. Epic / published-app launch — from the icon or Start-menu click until first usable paint of Hyperspace or Hyperdrive. Not “the process started on the VDA or Session Host.”
  3. In-session transactions — from the click or key that starts the work until the ready state: open chart, search, save, switch activity. This is the wait that generates “Epic is slow” tickets after everyone is already in session.

Pin the image, VDA or Session Host SKU, Workspace or Remote Desktop client, StoreFront / Gateway / portal build, and the published Epic resource. A timer on a moving image is a story, not a measurement.

For capacity work, run a logon storm separately from density. Storm stresses login-to-shell. Density stresses in-session chart and search work on hosts that already have clinicians. Blending them hides which interval broke.

Time it like a script, not a feeling

On remoted Epic there is no DOM event that means “done.” The practical signal is the bitmap. The measurement pattern is the same one CitraTest has used for years on published EHR GUIs:

  • StartTimer when the user action happens — submit, Workspace launch, click, or key.
  • WaitForImage until a baseline of the ready state is visible: the shell, the Hyperspace or Hyperdrive window, the chart.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition — and OCR when the ready state is text — is how you know the glass painted. You do not install an agent on the VDA to learn that. That is the core of on-the-glass APM.

Three-row schematic of StartTimer, WaitForImage, and StopTimer for Epic logon-to-shell, Hyperspace/Hyperdrive launch, and chart-ready click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for login, Epic launch, and in-session chart work. Change the start action and the ready image. Keep the timer.

Stopwatch versus synthetic

A person with a stopwatch can time one Epic logon on a quiet morning. That is a demo, not a measurement program.

A one-off cannot give you a tail, run at shift change every weekday, hold concurrent published-app sessions while timing open-chart, or attach a screenshot of the failed state. Means hide the damage until the service desk is already taking “Epic is slow” calls.

A synthetic does the same StartTimer → WaitForImage → StopTimer path as a real Workspace or Remote Desktop client, on a schedule or under load, with the same Hyperspace, Hyperdrive, and chart-ready baselines. That is on-the-glass monitoring when it runs continuously, and an Epic-on-Citrix (or RDS / AVD) load test when it ramps concurrent users.

If you only have a stopwatch, use it to write the acceptance line — then automate the line. Example language teams already put on capacity plans (schematic only, not a customer dataset): logon-to-shell 45 seconds at p95 and 60 seconds at p99; Epic published-app open 8 seconds at p95; open-chart inside the written budget at p95; fewer than 1 percent of runs fail, disconnect, or hang.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path for Epic:

  • CitraTest VU load-tests capacity. Freeze the image, walk the real StoreFront / Workspace / Gateway path into published Epic, run storm and sustain as separate shapes, stop at the written budget. That is the concurrent-clinician number a CAB can defend. See CitraTest VU load testing.
  • CitraTest APM watches production. The same login → Epic → open-chart steps, every N minutes, with alerts and screenshots when glass time slips. That is the morning watch after go-live or an image change. See CitraTest APM.

The lab answers “how many good Epic sessions fit on this SKU.” The watch answers “is today’s logon-to-shell and open-chart still inside the SLA.” Do not use a load-test generator as your only production monitor, and do not treat a single synthetic as a density number.

No agents on the VDAs, Session Hosts, or brokers are required for that path. Each virtual user or monitor is another Workspace or Remote Desktop session launching Epic like a clinician. If the generator desktop is pegged, you are measuring the lab, not the farm.

What this is not

  • It is not a replacement for Director, Monitor, HDX Insights, RD Connection Broker health, or AVD host metrics. Keep those for the remoting path.
  • It is not an HTTP soak of StoreFront, Workspace, or Gateway. Keep that for the front door.
  • It is not “we have full-stack APM, so Epic is covered.” Published Hyperspace and Hyperdrive GUIs are pixels, not traces.
  • It is not a claim about Epic’s internal tooling or proprietary metrics — only the delivered session UX on Citrix, RDS, AVD, and peers, on the glass.
  • It is not a promise that last quarter’s number survives a new VDA image, FSLogix policy, Hyperdrive build, or a move to DaaS / AVD. Re-time the glass when the image changes.

Take the interval clinicians already wait

Epic response time, as a clinician experiences it, is click-to-ready on the glass — Hyperspace or Hyperdrive chart ready, not a green protocol tile. Time logon-to-shell, Epic published-app launch, and the in-session steps that generate tickets. Separate logon storm from density. Use a stopwatch only to write the line. Use a synthetic to keep the line: CitraTest VU under load, CitraTest APM every shift.

When you need that path without agents on the farm — real Workspace or Remote Desktop client, image and OCR, StartTimer to StopTimer for Epic — schedule a demo. Product pages: Epic / EHR on the glass, CitraTest VU, and CitraTest APM.

Autoscale Hides Density Problems. Glass Time Doesn’t

Autoscale Hides Density Problems. Glass Time Doesn’t
Tevron editorial illustration: The broker can look fine. The glass is still waiting.

Cloud ops says the Workspace URL returned 200. The DaaS or AVD broker assigned a session. Protocol RTT looks fine. The nurse is still waiting for the chart. That is the cloud VDI response-time problem in one sentence: control-plane health is not the wait the user feels.

Direct answer: Measure Citrix DaaS, Azure Virtual Desktop (AVD), Windows 365, and other cloud-hosted virtual apps and desktops from what the user sees on the screen — on the glass — not only from Workspace URL HTTP, broker health, or protocol RTT. Time the interval from a click or key until the expected screen state is visible. That interval is click-to-ready — the number a CAB and a help desk can share.

The sibling method for walking a real cloud path under load is in How to load test cloud virtual apps and desktops. Tooling context: best cloud load testing tools. Sister posts on the same glass clock: Citrix response time and RDS response time. This article is narrower: how to time the wait when the broker is in the cloud and the pixels live in a resource location.

Why the control plane can look fine while users wait

In cloud VDI the front door and the pixels are not the same machine. Workspace (or the AVD / Windows 365 portal) is a website and a control plane. The broker assigns a session to a resource location — a host pool, a delivery group, a Cloud PC. Portal HTTP, broker assignment, and protocol RTT tell you the channel is up. They are not a stopwatch for “the published app painted.”

A session can stream a logon animation, a spinning cursor, or a half-drawn shell and still look connected. Profile attach, GPO, FSLogix (or equivalent), and the line-of-business app itself sit after remoting is already up. Hammering the Workspace URL with an HTTP generator times the store, not the session host.

Broker green is useful. It is not the same as “the shell appeared.”

Autoscale makes the split easier to miss. When hosts come and go, average density can look comfortable while some users sit on a hot host or wait through a cold start. Autoscale can hide density problems; it does not remove them. Green control-plane tiles do not close a “cloud desktop is slow” ticket.

Two-column schematic: cloud control-plane, broker, and network timers versus on-the-glass click-to-ready for the same cloud VDI session.
Schematic from this article: control plane versus glass time. Not a customer dashboard and not a measured farm.

Left column is what control-plane, broker, and network timers see. Right column is what the user waits on. Only the right column is cloud VDI response time as a person experiences it.

Which steps to time

Write the steps before you pick a tool. Three intervals cover most cloud VDI UX arguments — Citrix DaaS, AVD, Windows 365, or another hosted desktop:

  1. Logon-to-shell — from credentials submitted (or the Workspace / portal / Gateway launch) until a usable desktop or published-app window is ready: shell, icons, no logon animation. Not “the broker returned a session.”
  2. Published app / RemoteApp launch — from the icon or Start-menu click until first paint of the business app: Epic, SAP, Outlook, the line-of-business client. Not “the process started on the session host.”
  3. In-session transactions — from the click or key that starts the work until the ready state: search, open the record, save, print, switch published apps. This is the wait that generates “the cloud desktop is slow” tickets after everyone is already in session.

Pin the image, resource-location SKU, client (Workspace app, Remote Desktop client, or Windows 365), portal or Gateway build, and the published resource. A timer on a moving image is a story, not a measurement.

For capacity work, run a logon storm separately from density. Storm stresses login-to-shell — including cold starts when autoscale brings hosts online. Density stresses in-session transactions on hosts that already have users. Blending them hides which interval broke.

Time it like a script, not a feeling

On remoted cloud desktops there is no DOM event that means “done.” The practical signal is the bitmap. The measurement pattern is the same one CitraTest has used for years on published apps — and it applies whether the pixels come from DaaS, AVD, or Windows 365:

  • StartTimer when the user action happens — submit, Workspace launch, click, or key.
  • WaitForImage until a baseline of the ready state is visible: the shell, the published or RemoteApp window, the chart.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition — and OCR when the ready state is text — is how you know the glass painted. You do not install an agent on the session host or Cloud PC to learn that. That is the core of on-the-glass APM.

Three-row schematic of StartTimer, WaitForImage, and StopTimer for cloud VDI logon-to-shell, published/RemoteApp launch, and in-session click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for login, published/RemoteApp launch, and in-session work. Change the start action and the ready image. Keep the timer.

Stopwatch versus synthetic

A person with a stopwatch can time one Workspace logon on a quiet morning. That is a demo, not a measurement program. A one-off cannot give you a tail, run at 8:00 every weekday, hold concurrent sessions while autoscale adds hosts, or attach a screenshot of the failed state.

A synthetic does the same StartTimer → WaitForImage → StopTimer path as a real Workspace or Remote Desktop client, on a schedule or under load, with the same baseline images. That is on-the-glass monitoring when it runs continuously, and a cloud VDI load test when it ramps concurrent users.

If you only have a stopwatch, use it to write the acceptance line — then automate it. Example language (schematic only, not a customer dataset): logon-to-shell 45 seconds at p95 and 60 at p99; published-app open 8 seconds at p95; fewer than 1 percent of runs fail or hang. Re-check after an autoscale or image change.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity. Freeze the image, walk the real Workspace / portal / Gateway path into the resource location, run storm and sustain as separate shapes, stop at the written budget. That is the concurrent-user number a CAB can defend — including how autoscale behaves under a logon storm. See CitraTest VU load testing.
  • CitraTest APM watches production. The same login → published app → in-session steps, every N minutes, with alerts and screenshots when glass time slips. That is the morning watch after go-live to cloud. See CitraTest APM.

The lab answers “how many good sessions fit on this host-pool SKU.” The watch answers “is today’s logon-to-shell still inside the SLA.” Do not use a load-test generator as your only production monitor, and do not treat a single synthetic as a density number. No agents on session hosts or cloud brokers are required — each monitor is another Workspace or Remote Desktop session.

What this is not

  • It is not a replacement for Workspace health, DaaS / AVD / Windows 365 host metrics, or protocol Insights. Keep those for the control plane and remoting path.
  • It is not an HTTP soak of the Workspace URL or cloud portal. Keep that for the front door.
  • It is not “we have full-stack APM, so cloud VDI is covered.” Remoted GUIs are pixels, not traces.
  • It is not a promise that last quarter’s on-prem number survives a move to DaaS, AVD, or Windows 365 — or that last month’s number survives a new golden image or autoscale policy. Re-time the glass when the image or resource location changes.

Take the interval users already wait

Cloud VDI response time — Citrix DaaS, AVD, Windows 365, and peers — as a user experiences it, is click-to-ready on the glass. Separate the control plane from session pixels. Time logon-to-shell, published/RemoteApp launch, and the in-session steps that generate tickets. Use a stopwatch only to write the line. Use a synthetic to keep the line: CitraTest VU under load, CitraTest APM every shift.

When you need that path without agents on the resource location — real Workspace or Remote Desktop client, image and OCR, StartTimer to StopTimer — schedule a demo. Product pages: CitraTest VU and CitraTest APM.

Stop Timing RDP Latency. Start Timing the Shell

Stop Timing RDP Latency. Start Timing the Shell
Tevron editorial illustration: RDP can look fine. The glass is still waiting.

Ops says RDP latency is fine. The session is connected. RD Connection Broker handed out a Session Host. The clerk is still waiting for the desktop to finish painting. That is the Microsoft RDS response-time problem in one sentence: protocol health is not the wait the user feels.

Direct answer: Measure RDS response time from what the user sees on the screen — on the glass — not only from RDP round-trip, network latency, host CPU, or broker health. Time the interval from a click or key until the expected screen state is visible. That interval is click-to-ready. It is the number a CAB and a help desk can share.

This post is about Microsoft Remote Desktop Services (RDS) — Session Hosts, RemoteApp, RD Gateway / RD Web — not Amazon Relational Database Service. The sibling method for walking a real RDS path under load is in How to load test Microsoft RDS. Tooling context lives on best RDS load testing tools. This article is narrower: how to time the wait itself.

Why RDP can look fine while users wait

RDP is a remoting protocol. It moves pixels out and keyboard and mouse in. Performance Monitor counters, RD Connection Broker health, and “session connected” status are good at telling you the channel is up. They are not a stopwatch for “the published app painted.”

A session can stream a logon animation, a spinning cursor, or a half-drawn shell and still look connected. Profile attach, GPO, FSLogix (or equivalent), and the line-of-business app itself sit after RDP is already up. RD Web is a website. Hammering it with an HTTP generator times the portal, not the Session Host farm.

RDP round-trip is useful. It is not the same as “the shell appeared.”

The same glass-versus-protocol split shows up on Citrix farms — see the sister post How to measure Citrix response time. Host CPU can sit at 40 percent while login-to-shell stretches and the RemoteApp paints late. Green session tiles do not close that ticket.

Two-column schematic: RDP and session protocol timers versus on-the-glass click-to-ready for the same Microsoft RDS session.
Schematic from this article: protocol timers versus glass time. Not a customer dashboard and not a measured farm.

Left column is what protocol and host timers see. Right column is what the user waits on. Only the right column is RDS response time as a person experiences it.

Which steps to time

Write the steps before you pick a tool. Three intervals cover most RDS UX arguments:

  1. Logon-to-shell — from credentials submitted (or the RD Web / Gateway launch) until a usable desktop or RemoteApp window is ready: shell, icons, no logon animation. Not “the broker returned a session.”
  2. RemoteApp / published app launch — from the icon or Start-menu click until first paint of the business app: Epic, SAP, Outlook, the line-of-business client. Not “the process started on the Session Host.”
  3. In-session transactions — from the click or key that starts the work until the ready state: search, open the record, save, print, switch RemoteApps. This is the wait that generates “the desktop is slow” tickets after everyone is already in session.

Pin the image, Session Host SKU, client (mstsc / Remote Desktop app), RD Web or Gateway build, and the published collection. A timer on a moving image is a story, not a measurement.

For capacity work, run a logon storm separately from density. Storm stresses login-to-shell. Density stresses in-session transactions on hosts that already have users. Blending them hides which interval broke.

Time it like a script, not a feeling

On RDP there is no DOM event that means “done.” The practical signal is the bitmap. The measurement pattern is the same one CitraTest has used for years on remoted apps — including Citrix HDX farms — and it applies unchanged to Microsoft RDS:

  • StartTimer when the user action happens — submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: the shell, the RemoteApp window, the chart.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition — and OCR when the ready state is text — is how you know the glass painted. You do not install an agent on the Session Host to learn that. That is the core of on-the-glass APM.

Three-row schematic of StartTimer, WaitForImage, and StopTimer for RDS logon-to-shell, RemoteApp launch, and in-session click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for login, RemoteApp launch, and in-session work. Change the start action and the ready image. Keep the timer.

Stopwatch versus synthetic

A person with a stopwatch can time one logon on a quiet morning. That is a demo, not a measurement program.

A one-off cannot give you a tail. It cannot run at 8:00 every weekday. It cannot hold two hundred sessions and still time open-record. It cannot attach a screenshot of the failed state. Means hide the damage until the service desk is already taking calls.

A synthetic does the same StartTimer → WaitForImage → StopTimer path as a real Remote Desktop client, on a schedule or under load, with the same baseline images. That is on-the-glass monitoring when it runs continuously, and an RDS load test when it ramps concurrent users.

If you only have a stopwatch, use it to write the acceptance line — then automate the line. Example language teams already put on capacity plans (schematic only, not a customer dataset): logon-to-shell 45 seconds at p95 and 60 seconds at p99; RemoteApp open 8 seconds at p95; fewer than 1 percent of runs fail, disconnect, or hang.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity. Freeze the image, walk the real RD Web / Gateway / mstsc path, run storm and sustain as separate shapes, stop at the written budget. That is the concurrent-user number a CAB can defend. See CitraTest VU load testing.
  • CitraTest APM watches production. The same login → RemoteApp → in-session steps, every N minutes, with alerts and screenshots when glass time slips. That is the morning watch after go-live. See CitraTest APM.

The lab answers “how many good sessions fit on this Session Host SKU.” The watch answers “is today’s logon-to-shell and open-record still inside the SLA.” Do not use a load-test generator as your only production monitor, and do not treat a single synthetic as a density number.

No agents on the Session Hosts or brokers are required for that path. Each virtual user or monitor is another Remote Desktop session. If the generator desktop is pegged, you are measuring the lab, not the farm.

What this is not

  • It is not a replacement for Performance Monitor, RD Connection Broker health, or Azure Virtual Desktop / Windows 365 host metrics. Keep those for the remoting and host path.
  • It is not an HTTP soak of RD Web or Gateway. Keep that for the front door.
  • It is not “we have full-stack APM, so RDS is covered.” Remoted GUIs are pixels, not traces.
  • It is not a promise that last quarter’s number survives a new Session Host image, profile policy, or a move to AVD. Re-time the glass when the image changes.

Take the interval users already wait

Microsoft RDS response time, as a user experiences it, is click-to-ready on the glass. Time logon-to-shell, RemoteApp launch, and the in-session steps that generate tickets. Use a stopwatch only to write the line. Use a synthetic to keep the line: CitraTest VU under load, CitraTest APM every shift.

When you need that path without agents on the farm — real Remote Desktop client, image and OCR, StartTimer to StopTimer — schedule a demo. Product pages: CitraTest VU and CitraTest APM.

HDX Green Isn’t a Usable Desktop

HDX Green Isn’t a Usable Desktop
Tevron editorial illustration: HDX can look fine. The glass is still waiting.

Director says ICA RTT is fine. StoreFront returned 200. The session is connected. The nurse is still waiting for the chart. That is the Citrix response-time problem in one sentence: protocol health is not the wait the user feels.

Direct answer: Measure Citrix response time from what the user sees on the screen — on the glass — not only from ICA/HDX protocol counters or StoreFront HTTP. Time the interval from a click or key until the expected screen state is visible. That interval is click-to-ready. It is the number a CAB and a help desk can share.

The full method for walking StoreFront or Gateway, driving HDX, and stopping at a written experience budget is in How to load test Citrix. This post is narrower: how to time the wait itself.

Why HDX can look fine while users wait

HDX — the current name for the ICA protocol family — is a remoting protocol. It moves pixels out and keyboard and mouse in. Director, Monitor, and HDX Insights are good at telling you the session is up and the channel is healthy. They are not a stopwatch for “the published app painted.”

A session can stream a logon animation, a spinning cursor, or a half-drawn shell and still look connected. Profile attach (FSLogix or equivalent), GPO, and the line-of-business app itself sit after HDX is already up. StoreFront is a website. Hammering it with an HTTP generator times the store, not the farm.

ICA RTT is useful. It is not the same as “the chart appeared.”

The same split, in product language, is Citrix HDX vs real user experience. Host CPU can sit at 40 percent while login-to-shell stretches and Hyperspace paints late. Green protocol tiles do not close that ticket.

Two-column schematic: ICA and HDX protocol timers versus on-the-glass click-to-ready for the same Citrix session.
Schematic from this article: protocol timers versus glass time. Not a customer dashboard and not a measured farm.

Left column is what protocol timers see. Right column is what the user waits on. Only the right column is Citrix response time as a person experiences it.

Which steps to time

Write the steps before you pick a tool. Three intervals cover most Citrix UX arguments:

  1. Logon-to-shell — from credentials submitted (or the Workspace / Gateway launch) until a usable desktop or published-app window is ready: shell, icons, no logon animation. Not “the broker returned a session.”
  2. Published app launch — from the icon or Start-menu click until first paint of the business app: Epic, SAP, Outlook, the line-of-business client. Not “the process started on the VDA.”
  3. In-session transactions — from the click or key that starts the work until the ready state: search, open the record, save, print, switch published apps. This is the wait that generates “Epic is slow” tickets after everyone is already in session.

Pin the image, VDA, Workspace app, StoreFront or Gateway build, and the published resource. A timer on a moving image is a story, not a measurement.

For capacity work, run a logon storm separately from density. Storm stresses login-to-shell. Density stresses in-session transactions on hosts that already have users. Blending them hides which interval broke.

Time it like a script, not a feeling

On HDX there is no DOM event that means “done.” The practical signal is the bitmap. The measurement pattern is the same one CitraTest has used for years on published apps:

  • StartTimer when the user action happens — submit, click, or key.
  • WaitForImage until a baseline of the ready state is visible: the shell, the app window, the chart.
  • StopTimer when that image matches.

The recorded interval is click-to-ready for that step. Image recognition — and OCR when the ready state is text — is how you know the glass painted. You do not install an agent on the VDA to learn that. That is the core of on-the-glass APM.

Three-row schematic of StartTimer, WaitForImage, and StopTimer for Citrix logon-to-shell, published app launch, and in-session click-to-ready.
Schematic of the measurement pattern in this article. Not a CitraTest screenshot and not a customer dataset.

That pipeline is the same for login, app launch, and in-session work. Change the start action and the ready image. Keep the timer.

Stopwatch versus synthetic

A person with a stopwatch can time one logon on a quiet morning. That is a demo, not a measurement program.

A one-off cannot give you a tail. It cannot run at 8:00 every weekday. It cannot hold two hundred sessions and still time open-chart. It cannot attach a screenshot of the failed state. Means hide the damage until the service desk is already taking calls.

A synthetic does the same StartTimer → WaitForImage → StopTimer path as a real Workspace app client, on a schedule or under load, with the same baseline images. That is on-the-glass monitoring when it runs continuously, and a Citrix load test when it ramps concurrent users.

If you only have a stopwatch, use it to write the acceptance line — then automate the line. Example language teams already put on capacity plans (schematic only, not a customer dataset): logon-to-shell 45 seconds at p95 and 60 seconds at p99; published-app open 8 seconds at p95; fewer than 1 percent of runs fail, disconnect, or hang.

Continuous watch versus load test

On-the-glass is an idea, not a product SKU. Two jobs share the path:

  • CitraTest VU load-tests capacity. Freeze the image, walk the real StoreFront or Gateway path, run storm and sustain as separate shapes, stop at the written budget. That is the concurrent-user number a CAB can defend. See CitraTest VU load testing.
  • CitraTest APM watches production. The same login → app → in-session steps, every N minutes, with alerts and screenshots when glass time slips. That is the morning watch after go-live. See CitraTest APM.

The lab answers “how many good sessions fit on this SKU.” The watch answers “is today’s logon-to-shell and open-chart still inside the SLA.” Do not use a load-test generator as your only production monitor, and do not treat a single synthetic as a density number.

No agents on the VDAs or brokers are required for that path. Each virtual user or monitor is another Workspace app session. If the generator desktop is pegged, you are measuring the lab, not the farm.

What this is not

  • It is not a replacement for Director, Monitor, or HDX Insights. Keep those for the remoting path.
  • It is not an HTTP soak of StoreFront or Gateway. Keep that for the front door.
  • It is not “we have full-stack APM, so Citrix is covered.” Published HDX GUIs are pixels, not traces.
  • It is not a promise that last quarter’s number survives a new VDA, FSLogix policy, or a move to Citrix DaaS. Re-time the glass when the image changes.

Take the interval users already wait

Citrix response time, as a user experiences it, is click-to-ready on the glass. Time logon-to-shell, published-app launch, and the in-session steps that generate tickets. Use a stopwatch only to write the line. Use a synthetic to keep the line: CitraTest VU under load, CitraTest APM every shift.

When you need that path without agents on the farm — real Workspace client, image and OCR, StartTimer to StopTimer — schedule a demo. Product pages: CitraTest VU and CitraTest APM.

How to Load Test Cloud-Hosted Virtual Apps and Desktops

Tevron editorial illustration: The control plane is not the farm. Autoscale hides density problems.

Moving the broker to a cloud control plane does not turn a virtual desktop into a website. Citrix DaaS, cloud-hosted Citrix Virtual Apps and Desktops, Azure Virtual Desktop (AVD), and Windows 365 still deliver a session: HDX or RDP paints pixels, and the work happens on a session host in a resource location. Finance will still ask how many concurrent users that host SKU can carry. Autoscale is not the answer to that question.

This is a 2026 method for EUC and VDI admins sizing cloud session hosts and DaaS catalogs. A website test of the Workspace URL is not a farm test.

HDX and RDP still deliver pixels

A Workspace URL test is not a farm test.

The cloud did not change the protocol contract. Citrix Workspace, the AVD web client, and the Windows 365 portal are web applications. The session that follows is not. HDX — the current name for the ICA family — and RDP send a bitmap. There is no DOM and no REST payload that means “the chart appeared.”

If you only load-test the Workspace or RD Web URL, you have exercised the front door and the identity hop. You have not exercised the VDA, the session host, FSLogix, GPO, or the published application. The events users wait on — logon, shell, first paint of the app — exist on the glass. Treat HDX and RDP as remoting protocols with a human on the other end, not as another API to replay.

Control plane is not the resource location

In Citrix DaaS the control plane lives in Citrix Cloud. Session hosts live in a resource location: Azure, AWS, Google Cloud, or a remaining on-premises datacenter. Cloud Connectors (or Connector Appliances) are the bridge. They sit in the path for VDA registration, brokering, and many hybrid identity designs. They are not the farm.

Two-column schematic: Citrix Cloud or AVD control plane versus the resource location with session hosts and Cloud Connector.
Schematic of the split in this article: control plane versus resource location. Not a cloud architecture from a customer tenant.

AVD has the same split: Microsoft’s control plane versus your host pools and session hosts. Windows 365 Cloud PCs are one user per PC, but the path still includes the gateway, the Cloud PC SKU, profiles, and the app. A green control-plane dashboard means the broker answered. It does not mean forty task workers on a D4s_v5 multi-session host can open the line-of-business app in eight seconds.

Pin the path in the test record: client version, Cloud Connector count, region, host SKU, image hash, profile storage, Gateway or RDP Shortpath, and MFA. Skip the Connector because “it is just a proxy” and you will be surprised on go-live morning.

Autoscale and bursting hide density problems

Cloud catalogs are built to grow. Citrix Autoscale, AVD scaling plans, and similar bursting add session hosts when concurrency rises. That is useful in production. It is a trap in a capacity test. If the pool scales out as you ramp, you can “pass” 400 users while each host is actually miserable at 25. You learned that the subscription can provision VMs. You did not learn sessions-per-host on that SKU — the number that sets max sessions, buffer capacity, and the monthly compute bill.

Two-test schematic: density with autoscale off on a fixed host count versus scale-out lag with autoscale on.
Two tests from this article: density with autoscale off, scale-out with autoscale on. Schematic only — not a measured catalog and not a customer dataset.

Run density with autoscale off, or with a fixed host count, until the experience budget breaks on that SKU. Run a second test with autoscale on to measure scale-out lag and cold-boot time. Bursting can also hide a saturated profile share, a slow Cloud Connector, or a GPO that only hurts when twenty logons hit one host at once — until the region is out of quota at 8 a.m.

What a defensible cloud number actually is

A defensible number is not “the catalog launched N sessions before the cloud returned a quota error.” It is the highest concurrency at which defined user transactions still meet a defined experience budget, on a named host SKU and image, with autoscale behavior written down separately. Write the acceptance line before the first ramp:

  • Logon to a usable desktop: 45 seconds at p95, 60 seconds at p99.
  • Launch the published line-of-business app, search, open the record: 8 seconds at p95.
  • Fewer than 1% of sessions fail, disconnect, or hang during the sustain.
  • Per-host CPU, memory, and profile IOPS stay inside production alert bands — on that SKU, not averaged across a bursting pool.
  • If autoscale is in scope: a new host is ready and taking sessions inside a written budget (for example, six minutes from power-on to first successful logon).
Four example acceptance-line cards from the article: 45s p95 and 60s p99 logon, 8s p95 app open, under 1 percent fail, per-host CPU memory and profile IOPS in production bands.
Example acceptance line from this article. Schematic only — not a customer dataset and not a measured catalog.

When the run crosses that line, that concurrency per host is the number. ICA RTT, RDP round-trip, and a green Monitor or Azure workbook are useful. They are not “the chart appeared.”

Measure from the user’s screen

On HDX and RDP there are no client-side objects to bind to. The practical way to know a step finished is to watch the screen: image recognition and OCR against a baseline of what “done” looks like. Time the interval from the click or key until that image or text is visible.

GUI-level tools exist for this. CitraTest VU, for example, drives the real Workspace, AVD, or Remote Desktop client with keyboard and mouse, compares the live screen to baseline images, and does not install agents on the VDAs or session hosts.

Correlate the two views. When p95 “open chart” jumps from 6 seconds to 14 seconds at 28 users per host, you want host CPU, Cloud Connector health, and profile IOPS on the same timeline. The screen tells you it broke. The control plane and the resource location tell you which layer. Put generators where they represent a real site. If generator CPU is pegged, you are measuring the lab, not the catalog.

Login storm versus sustain

A login storm — two hundred users authenticating in two minutes — is a real cloud event: shift start, failback, or Autoscale powering a cold pool. It is not the same as two hundred users already in session doing work. Run both shapes. Storm: steep ramp; measure logon time, Cloud Connector and Workspace or Gateway CPU, broker latency, the profile store, and time waiting for hosts to boot. Steady state: slower ramp to target on a fixed host count, then a sustain long enough for memory growth, CPU ready time, profile I/O, and session reliability to show up. Thirty minutes is a demo. Two hours is closer to a shift.

Two-column schematic comparing a login storm (steep ramp, logon path) with a sustain (steady state, session hosts).
Two test shapes from this article: a login storm versus a sustain. Schematic only — not a load-generator screenshot and not a customer dataset.

If you only storm, you will size logon infrastructure and under-size the session hosts. If you only sustain, you will miss 8 a.m. If you only storm with autoscale on, you will size the cloud’s ability to boot VMs and still not know density.

A seven-step method you can take to a CAB

Numbered schematic of the article’s seven CAB steps: freeze the image, script the day, baseline, storm and sustain, tails, stop at the line, re-test.
Schematic of the CAB method in this article, in Citrix wording. Rebuild the connection script per stack — the same seven steps still fit AVD and DaaS catalogs. Not a customer dataset.
  1. Freeze the catalog, the SKU, and the autoscale policy. Record host SKU, image hash, client, Cloud Connector count, Gateway or RDP path, profile solution, and whether Autoscale is on. Change any of those mid-test and start over.
  2. Walk the path users actually take. Workspace, Gateway, or the AVD / Windows 365 front door, then Entra ID or Active Directory plus MFA, then launch, remoting session, profile and GPO, then the app. A Citrix result does not transfer to AVD. Rebuild the connection for each stack.
  3. Script the business day, not only a login. Logon is mandatory. It is not the workload. Script five to ten real-hour transactions: launch, search, open, save, print, idle. Put think time in.
  4. Take a single-user baseline, then a handful on one host. If one user already takes 40 seconds to a usable desktop, you have an image, profile, GPO, or Connector problem. Fix that before you add concurrency.
  5. Measure density with autoscale off; measure scale-out with it on; run the login storm as its own test. Do not fold all three into one ramp. The last density step that still passed is sessions per host — the number you take to the business.
  6. Watch the tail, the failures, and the scale-out lag. Report p95 and p99, plus fail, retry, disconnect, and “waited for a host” counts. Means hide the damage.
  7. Re-test when the catalog, SKU, image, Connector, region, or autoscale schedule changes. Last quarter’s on-prem number does not travel with the catalog.

FAQ

Can we web-test the Workspace URL and call it a cloud VDI load test?

You can load-test Workspace, StoreFront, or the AVD web client that way. You cannot size session hosts, HDX or RDP, profiles, Cloud Connectors, or the published application that way. The URL belongs in the path. It is not the farm.

Does autoscale mean we can skip density testing?

No. Autoscale answers “can the pool grow.” Density answers “how many good sessions fit on one host.” You need both. Skip density and you will overpay for compute or discover the limit when the region will not give you another VM.

Do AVD, Windows 365, and Citrix DaaS share a concurrency figure?

No. Reuse the transactions and the budgets. Rebuild the connection for each stack. A Citrix DaaS figure is not an AVD host-pool figure, and Windows 365 is one Cloud PC per user — test the SKU and the logon path, not multi-session density.

Take the number the bill and the users can both survive

A cloud VDI load test that a CAB will accept has five traits: it walks the real Workspace, Gateway, or AVD path; it drives HDX or RDP from a real client; it measures density with autoscale off and scale-out with autoscale on; it ramps and then sustains, with a separate login-storm run; and it stops at a pre-written experience budget measured on the user’s screen.

When you need that GUI-level path — real client, image and OCR, no agents on the session hosts — Tevron’s CitraTest VU is built for the job. See CitraTest VU load testing.

How to Load Test Citrix Virtual Apps and Desktops

Tevron editorial illustration: HDX is not HTTP. Load-test the session, not the portal.

Capacity conversations about Citrix still die in the same place: a vendor density spreadsheet on one side, last quarter’s peak from Director on the other, and no one who can say what the user actually saw on the glass. Finance and the CAB want a concurrent-user number they can defend. That number does not come from HTTP replay, and it does not come from a single login-storm screenshot.

This is a method for Citrix and VDI admins and QA who have to produce that number in 2026 — for Citrix DaaS, for Citrix Virtual Apps and Desktops, and for shops that also run Azure Virtual Desktop (AVD) or Windows RDS and need the same kind of answer. Citrix Virtual Apps and Desktops is the current name for the on-premises and hybrid platform many teams still remember as XenApp and XenDesktop.

HDX is not HTTP

Most load-testing practice grew up on websites. You record HTTP, correlate cookies, replay thousands of threads, and graph page time. That model does not describe a Citrix session.

If you only hammer StoreFront with a web generator, you have load-tested the store, not the farm.

StoreFront is a web application. Citrix Gateway is a web and SSL-VPN front door. The session that follows is HDX — the current name for the ICA protocol family. The published app or desktop does not send DOM or window handles to the endpoint. It sends pixels. The client sends keyboard and mouse.

A synthetic ICA stream that never paints a real Workspace app window can miss the events users wait on: the logon animation, the shell, the first paint of Epic or SAP, the modal after a click. Those events exist on the bitmap. Treat HDX as a remoting protocol with a human on the other end, not as another API to replay.

What a defensible concurrent-user number actually is

A defensible number is not the highest session count you can boot before the broker returns errors. It is the highest concurrency at which a defined set of user transactions still meets a defined experience budget, with a defined failure rate, on the image and hardware you intend to ship. Write the acceptance line before the first ramp:

  • Logon to a usable desktop: 45 seconds at p95, 60 seconds at p99.
  • Launch the published line-of-business app, search, open the record: 8 seconds at p95.
  • Fewer than 1% of sessions fail, disconnect, or hang during the sustain.
  • Session-host CPU, memory, and profile IOPS stay inside the same alert bands you already use in production.
Four example acceptance-line cards from the article: 45s p95 and 60s p99 logon, 8s p95 app open, under 1 percent fail, host CPU memory and profile IOPS in production bands.
Example acceptance line from this article. Schematic only — not a customer dataset and not a measured farm.

When the run crosses that line, that concurrency is the number. Averages, “it still launched,” and a green Director dashboard are not. ICA RTT is useful. It is not the same as “the chart appeared.”

Test the path users actually take

Users do not appear already inside an HDX session. They hit StoreFront (internal) or Gateway (external and most hybrid designs), then authentication — Active Directory, MFA, SAML, FAS, or a mix — then store enumeration, resource launch, HDX to the VDA, profile and GPO processing (FSLogix or equivalent), and only then the business application.

Schematic Citrix path: StoreFront or Gateway, Auth and MFA, enumerate, HDX, profile and GPO, then the published app. Caption notes skipping Gateway is the lab trap.
Schematic of the connection path in this article. Skipping Gateway because “it is just a proxy” is the lab trap. Not a network capture and not a customer dataset.

Skip Gateway in the lab because “it is just a proxy” and you will be surprised on go-live morning. Skip MFA because the tool cannot type an OTP and you have tested a path nobody uses. If production is Gateway plus SAML plus a published desktop, that is the script.

Pin VDA version, Citrix Workspace app version, StoreFront and Gateway builds, GPO, profile solution, and the published resource. A load test of a moving image is a story, not a measurement. AVD and RDS have their own brokers and gateways; a Citrix result does not transfer. Reuse the transactions and budgets, and rebuild the connection script for each stack if you are comparing platforms.

Measure from the user’s screen

On HDX there are no client-side objects to bind to. The practical way to know a step finished is to watch the screen: image recognition and OCR against a baseline of what “done” looks like. Time the interval from the click or key until that image or text is visible.

GUI-level tools exist for this. CitraTest VU, for example, drives the real Citrix client with keyboard and mouse, compares the live screen to baseline images, and does not install agents on the VDAs or brokers. Protocol replay and in-guest workload agents scale on cheaper generators, but they are not a substitute for “did the chart actually appear.”

Correlate the two views. When p95 “open chart” jumps from 6 seconds to 14 seconds at 280 users, you want host CPU, logon duration, and profile IOPS on the same timeline. The screen tells you it broke. The infrastructure tells you which layer.

In-guest agents that burn CPU and disk are a legitimate way to study raw host density. They are not how a nurse uses an EHR, and they can perturb the thing you are measuring. A client-side, image-and-OCR approach leaves the farm alone: each virtual user is a real Workspace app session from a generator desktop. You pay in generator hardware — those VMs must not become the bottleneck — and you gain fidelity. If generator CPU is pegged, you are measuring the lab, not the farm.

A seven-step method you can take to a CAB

Numbered schematic of the article’s seven CAB steps: freeze the image, script the day, baseline, storm and sustain, tails, stop at the line, re-test.
Schematic of the CAB method in this article, in Citrix wording. Rebuild the connection script per stack — the same seven steps still fit RDS and cloud catalogs. Not a customer dataset.
  1. Freeze the image and the client. Record the catalog, machine profile, VDA, Workspace app, StoreFront, Gateway, and Windows image hash. If you change any of those mid-test, start over. Capacity is always “on this build.”
  2. Script the business day, not only a login. Logon is mandatory. It is not the workload. Script the five to ten transactions that represent a real hour for the actual population: launch, search, open, save, print, switch published apps, idle. Put think time in. Do not test a knowledge-worker desktop if 80% of sessions are task workers on one published app.
  3. Take a single-user baseline, then a handful. One session, then five, on the same script. If one user already takes 40 seconds to a usable desktop, you do not have a capacity problem. You have an image, profile, or GPO problem. Fix that before you add concurrency.
  4. Ramp, then sustain — and run a login storm as its own test. A login storm — two hundred users authenticating in two minutes — is a real event: shift start, a DR test, Monday at 8:00. It is not the same as two hundred users already in session doing work. Run both shapes. Storm: steep ramp; measure logon time, broker and StoreFront or Gateway CPU, and the profile store. That is how you find the morning outage. Steady state: slower ramp to target, then a sustain long enough for memory growth, CPU ready time, profile I/O, and session reliability to show up. Thirty minutes is a demo. Two hours is closer to a shift. If you only storm, you will size the logon infrastructure and under-size the session hosts. If you only sustain, you will miss 8 a.m.
  5. Watch the tail and the failures. Means hide the damage. Report p95 and p99 for every transaction, plus fail, retry, and disconnect counts. One stuck GPO or one saturated CIFS share will not move the average until the service desk is already taking calls.
  6. Stop at the acceptance line. Add concurrency in steps — 25 or 50 users is typical — until a transaction budget or a reliability budget is breached. The last step that still passed is the number you take to the business. Write down hardware, image, client version, script name, and the exact pass/fail table. Launch without a usable desktop is not capacity. It is a queue.
  7. Re-test when density-changing things change. New VDA, new Workspace app, Windows feature update, FSLogix policy, an extra published app, a move from on-prem Virtual Apps and Desktops to Citrix DaaS, a Gateway or MFA change. Capacity is not a one-time project.
Two-column schematic comparing a login storm (steep ramp, logon path) with a sustain (steady state, session hosts).
Two test shapes from this article: a login storm versus a sustain. Schematic only — not a load-generator screenshot and not a customer dataset.

FAQ

Can we web-test StoreFront and call it a Citrix load test?

You can load-test StoreFront that way. You cannot size VDAs, HDX, profiles, or the published application that way. StoreFront and Gateway belong in the path. They are not the path.

How is Citrix DaaS different from on-prem Virtual Apps and Desktops for this?

The user path is the same idea: Workspace or Gateway, HDX, VDA, app. Cloud connectors and the shared control plane are extra moving parts. Include them. Do not assume a density number from the old resource location still holds after you move the catalog.

What about AVD and RDS in the same environment?

Reuse the transactions and the budgets. Rebuild the connection for each protocol. A Citrix concurrency figure is not an RDS or AVD figure.

When is protocol-level ICA replay enough?

For a quick broker or Gateway soak, sometimes. For a number you will print on a capacity plan and live with at 8 a.m., measure the screen.

Take the number you can stand behind

A Citrix load test that a CAB will accept has four traits: it walks the real StoreFront or Gateway path, it drives HDX from a real client, it ramps and then sustains (with a separate login-storm run), and it stops at a pre-written experience budget measured on the user’s screen.

When you need that GUI-level path — real client, image and OCR, no agents on the Citrix servers — Tevron’s CitraTest VU is built for the job. See CitraTest VU load testing.

How to Load Test Microsoft RDS (Remote Desktop Services) in 2026

Tevron editorial illustration: RDP is not HTTP. Size the session hosts, not RD Web.

This post is about load testing Microsoft Remote Desktop Services on Windows Server — concurrent RDP sessions on Remote Desktop Session Hosts — not Amazon RDS, the Relational Database Service. Search engines treat “RDS load testing” as a database topic. If you are here to soak a SQL instance, stop. If you need a concurrent-user number for Windows Server RDS that a CAB will accept, keep reading.

This is a 2026 method for VDI and RDS admins and QA. The stack is Windows Server Remote Desktop Services, Remote Desktop Session Host (RDSH) collections, RD Gateway, RD Web Access, and the real Remote Desktop client. Azure Virtual Desktop (AVD) is a cousin: same RDP family, different control plane. An AVD density figure is not an on-prem RDS figure.

RDP is not HTTP

Most load-testing practice grew up on websites. You record HTTP, replay thousands of threads, and graph page time. That model does not describe a Remote Desktop session.

Hammer RD Web Access with a web generator and you have load-tested the portal, not the session hosts.

RD Web Access is a web application. RD Gateway is an HTTPS front door that wraps RDP. The session that follows is Remote Desktop Protocol. The published desktop or RemoteApp does not send DOM or window handles to the endpoint. It sends pixels. The client sends keyboard and mouse.

A synthetic RDP stream that never paints a real Remote Desktop client window misses the events users wait on: the logon animation, the shell, the first paint of Epic or a line-of-business RemoteApp, the modal after a click. Those events exist on the bitmap. Treat RDP as a remoting protocol with a human on the other end, not as another API to replay.

What a defensible concurrent-user number actually is

A defensible number is not the highest session count you can boot before the Connection Broker returns errors. It is the highest concurrency at which a defined set of user transactions still meets a defined experience budget, with a defined failure rate, on the image and hardware you intend to ship. Write the acceptance line before the first ramp:

  • Logon to a usable desktop: 45 seconds at p95, 60 seconds at p99.
  • Launch the RemoteApp or in-session line-of-business app, search, open the record: 8 seconds at p95.
  • Fewer than 1% of sessions fail, disconnect, or hang during the sustain.
  • Session-host CPU, memory, and profile IOPS stay inside the same alert bands you already use in production.
Four example acceptance-line cards from the article: 45s p95 and 60s p99 logon, 8s p95 app open, under 1 percent fail, host CPU memory and profile IOPS in production bands.
Example acceptance line from this article. Schematic only — not a customer dataset and not a measured RDSH collection.

When the run crosses that line, that concurrency is the number. Averages, “it still launched,” and a green RDSH CPU chart are not. RDP round-trip time is useful. It is not the same as “the chart appeared.”

Test the path users actually take

Users do not appear already inside an RDP session. They hit RD Web Access (internal) or RD Gateway (external and most hybrid designs), then authentication — Active Directory, MFA, smart card, or a mix — then collection enumeration, resource launch, RDP to the Remote Desktop Session Host, profile and GPO processing (FSLogix or a roaming profile), and only then the business application.

Schematic RDS path: RD Web or RD Gateway, Auth and MFA, collection, RDP, profile and GPO, then RemoteApp or desktop. Caption notes skipping Gateway is the lab trap.
Schematic of the connection path in this article. Skipping RD Gateway because “it is just a proxy” is the lab trap. Not a network capture and not a customer dataset.

Skip RD Gateway in the lab because “it is just a proxy” and you will be surprised on go-live morning. Skip MFA because the tool cannot type an OTP and you have tested a path nobody uses. If production is Gateway plus MFA plus a published desktop collection, that is the script.

Pin Windows Server version, RDSH image, RDP client version, Connection Broker and Gateway builds, GPO, profile solution, and the published resource. A load test of a moving image is a story, not a measurement. AVD and Citrix have their own brokers and gateways; an RDS result does not transfer. Reuse the transactions and budgets; rebuild the connection script if you are comparing platforms.

Measure from the user’s screen

On RDP there are no client-side objects to bind to. The practical way to know a step finished is to watch the screen: image recognition and OCR against a baseline of what “done” looks like. Time the interval from the click or key until that image or text is visible.

GUI-level tools exist for this. CitraTest VU, for example, drives the real Remote Desktop client with keyboard and mouse, compares the live screen to baseline images, and does not install agents on the session hosts, the Connection Broker, or RD Gateway. Protocol replay and in-guest workload agents scale on cheaper generators, but they are not a substitute for “did the chart actually appear.”

Correlate the two views. When p95 “open chart” jumps from 6 seconds to 14 seconds at 180 users, you want RDSH CPU, logon duration, and profile IOPS on the same timeline. The screen tells you it broke. The infrastructure tells you which layer. If generator CPU is pegged, you are measuring the lab, not the session hosts.

FSLogix and profiles deserve their own watch. A session host that looks fine at 80 users can fall over at 81 if the profile store cannot keep up with concurrent logons. Measure container attach time, profile IOPS, and the delay from credentials accepted to a usable shell. That interval is often the real login-storm bottleneck, not RDSH CPU.

A seven-step method you can take to a CAB

Numbered schematic of the article’s seven CAB steps: freeze the image, script the day, baseline, storm and sustain, tails, stop at the line, re-test.
Schematic of the CAB method in this article. Citrix wording; rebuild the connection script for RDS — the same seven steps still fit. Not a customer dataset.
  1. Freeze the image and the client. Record the collection, machine profile, Windows Server build, RDP client, RD Web Access, RD Gateway, Connection Broker, and image hash. If you change any of those mid-test, start over. Capacity is always “on this build.”
  2. Script the business day, not only a login. Logon is mandatory. It is not the workload. Script the five to ten transactions that represent a real hour: launch, search, open, save, print, switch RemoteApps, idle. Put think time in. Do not test a knowledge-worker desktop if most sessions are task workers on one RemoteApp.
  3. Take a single-user baseline, then a handful. One session, then five, on the same script. If one user already takes 40 seconds to a usable desktop, you do not have a capacity problem. You have an image, profile, or GPO problem. Fix that before you add concurrency.
  4. Ramp, then sustain — and run a login storm as its own test. A login storm — two hundred users authenticating in two minutes — is a real event: shift start, a DR test, Monday at 8:00. It is not the same as two hundred users already in session doing work. Run both shapes. Storm: steep ramp; measure logon time, Connection Broker and RD Gateway CPU, and the profile store. Steady state: slower ramp to target, then a sustain long enough for memory growth, CPU ready time, profile I/O, and session reliability to show up. Thirty minutes is a demo. Two hours is closer to a shift. If you only storm, you will size the logon path and under-size the session hosts. If you only sustain, you will miss 8 a.m.
  5. Watch the tail and the failures. Means hide the damage. Report p95 and p99 for every transaction, plus fail, retry, and disconnect counts. One stuck GPO or one saturated CIFS share will not move the average until the service desk is already taking calls.
  6. Stop at the acceptance line. Add concurrency in steps — 25 or 50 users is typical — until a transaction budget or a reliability budget is breached. The last step that still passed is the number you take to the business. Write down hardware, image, client version, script name, and the exact pass/fail table.
  7. Re-test when density-changing things change. New Windows Server feature update, new RDP client, FSLogix policy, an extra RemoteApp, different RDSH hardware, an RD Gateway or MFA change, a move from on-prem RDS to Azure Virtual Desktop. Capacity is not a one-time project.
Two-column schematic comparing a login storm (steep ramp, logon path) with a sustain (steady state, session hosts).
Two test shapes from this article: a login storm versus a sustain. Schematic only — not a load-generator screenshot and not a customer dataset.

FAQ

Can we web-test RD Web Access and call it an RDS load test?

You can load-test the portal that way. You cannot size session hosts, RDP, profiles, or the published application that way. RD Web Access and RD Gateway belong in the path. They are not the path.

How is Azure Virtual Desktop different from Windows Server RDS for this?

AVD is a cousin, not the same stack. Users still get an RDP session, but the broker, gateway, and host pool live in Azure. Do not assume an on-prem RDSH density number still holds after you move the workload. Rebuild the connection script; reuse the transactions and the budgets.

What about Citrix in the same environment?

Reuse the transactions and the budgets. Rebuild the connection for each protocol. An RDS concurrency figure is not a Citrix or AVD figure.

When is protocol-level RDP replay enough?

For a quick Connection Broker or RD Gateway soak, sometimes. For a number you will print on a capacity plan and live with at 8 a.m., measure the screen.

Take the number you can stand behind

A Microsoft RDS load test that a CAB will accept has four traits: it walks the real RD Web Access or RD Gateway path, it drives RDP from a real client, it ramps and then sustains (with a separate login-storm run), and it stops at a pre-written experience budget measured on the user’s screen.

When you need that GUI-level path — real Remote Desktop client, image and OCR, no agents on the session hosts — Tevron’s CitraTest VU is built for the job. See CitraTest VU load testing and Tevron’s notes on RDP load testing.

The Impact of Application Speed on User Retention

The Impact of Application Speed on User Retention
Abstract Tevron illustration: users feel milliseconds, businesses feel percentages.

Measuring application performance is important because modern software is the product, the storefront, the factory floor, and often the brand. Users do not experience your architecture, your sprint velocity, or your cloud bill. They experience latency, errors, jank, and whether the thing they came to do actually completed. If you do not measure that experience in production, you are flying by anecdote, support tickets, and luck.

Performance is a product feature, not a leftover…

For decades, teams shipped features first and “tuned later.” That model collapsed for three reasons.

  1. User tolerance collapsed. On the web and on mobile, people abandon pages that take more than a few seconds. A site that loads in about one second converts several times better than one that takes ten. Bounce rates climb steeply as load time moves from two seconds to three, then five. Users do not file a bug; they leave and often do not come back.
  2. Software became the transaction itself. Checkout, login, search, booking, trading, claims, payroll, and internal tools are not “supported by” an application. They are the application. A slow query or a 500 on a payment path is not a technical inconvenience. It is lost revenue, abandoned carts, failed trades, or employees who cannot work.
  3. Systems got too distributed to understand by inspection. Monoliths on a few servers could be reasoned about with logs and a profiler. Microservices, queues, caches, CDNs, third-party APIs, mobile clients, and multi-region clouds cannot. A request that looks “fine” in your service can still be slow because of a downstream dependency, a cold start, a lock, a chatty N+1 query, or a network hop you do not own. Measurement is how you reconstruct the path the user actually took.

If you only measure after users complain, you are measuring the residue of failure, not the system.

Users feel milliseconds; businesses feel percentages

The most cited commercial evidence is still Amazon’s mid-2000s internal experiments: adding about 100 milliseconds of latency was associated with roughly a 1% drop in sales.

The public record on that exact coefficient is thin (it comes from an engineer’s talks and posts, not a peer-reviewed paper), so treat “1% per 100ms” as a famous directional finding, not a universal law. What has been replicated, again and again, is the shape of the relationship.

Walmart reported that a one-second improvement in page load increased conversions by about 2%, with roughly 1% incremental revenue per 100ms of improvement. Google’s search experiments showed that adding a few hundred milliseconds reduced queries and revenue per user, and some of the lost behavior persisted after the delay was removed.

Akamai/SOASTA retail data associated a 100ms delay with conversion drops on the order of 7% in some slices, and a one-second delay with much larger drops. A Deloitte/Google study of brand sites associated a 0.1-second mobile improvement with high-single-digit conversion lifts in retail and travel (those figures are observational, not a clean A/B, so they should be read as “speed and conversion move together,” not “this exact lift is guaranteed”). More recent platform-level work, including Shopify’s 2026 analysis of Core Web Vitals across live stores, still finds that slower Largest Contentful Paint is associated with substantially lower conversion.

Four separately labeled published findings on latency and business impact from Amazon, Walmart, Akamai/SOASTA, and Deloitte/Google.
Published findings named in this article. Different studies, methods, and metrics — not one dataset. Shopify is omitted because this post does not cite a numeric figure for it.

The mechanism is not mysterious

  • Attention is scarce. Extra wait time is extra time to notice a competitor, a notification, or a reason to abandon.
  • Trust is fragile. Slow feels broken. Broken feels untrustworthy, especially for money, health, or identity.
  • Mobile multiplies the penalty. Unreliable networks, weaker CPUs, and impatient thumbs make the same backend look worse.
  • The tail matters more than the average. Users remember the 95th and 99th percentile, not your mean. A system that is “200ms on average” and “4 seconds for 2% of requests” is a system that regularly fails the people who matter most.

This is why performance work is not vanity. It is conversion, retention, and word of mouth wearing a stopwatch.

Schematic showing a typical 200 millisecond average and a far tail at 4 seconds for 2 percent of requests.
Example from this article (“200ms on average” and “4 seconds for 2% of requests”). Schematic only — not a customer dataset.

Downtime and slowness have a price tag you can itemize

Outages are the loud version of the same problem. Industry figures vary by sector and methodology, but they are consistently ugly: organizations quote downtime in thousands of dollars per minute; some financial and insurance environments have reported multi-million-dollar hourly costs for high-impact incidents. Detection and repair still often take tens of minutes. During that window you lose transactions, burn support capacity, trigger contractual penalties, and generate the kind of screenshots that live on social media forever.

Slowness is the quiet version

It does not page you at 2 a.m. It just taxes every session: fewer pages viewed, fewer items added, more retries, more “is it working?” tickets, more people who silently switch vendors.

Measurement changes the economics of both:

  • You detect degradation before it becomes an incident.
  • You shrink mean time to detect and mean time to recover because you can see which service, query, region, or release caused the change.
  • You can put a dollar figure on a regression (“this checkout p95 went from 800ms to 1.6s after Friday’s deploy”) instead of arguing from feelings.

Observability investments are often justified on exactly this: fewer customer-facing outages, much faster recovery, and reported ROIs that look large because the alternative is paying for fire drills forever.

You cannot manage what you cannot see in production

Lab benchmarks lie in predictable ways. Synthetic tests use warm caches, happy-path data, desktop networks, and one user.

Production has:

  • cold caches and thundering herds
  • pathological inputs and bot traffic
  • mobile networks and last-mile ISPs
  • third-party tags, fonts, ads, and APIs
  • data distributions your fixtures never had
  • garbage collection, lock contention, and noisy neighbors
  • deployments that only fail for 3% of users in one region
Two-column comparison of lab conditions versus production: warm caches, happy path, and desktop against cold caches, mobile, third parties, and 3 percent regional failures.
A comparison of conditions, not a measured chart. Lab and production examples are taken from this article.

Measuring application performance is how you close that gap

Useful measurement is not “CPU is 40%.” It is a stack of complementary views:

  • User-centric timing: time to first byte, Largest Contentful Paint, Interaction to Next Paint, time-to-interactive, Apdex, successful task completion.
  • Request traces: the critical path across services, with spans for DB, cache, queue, and HTTP.
  • Error and availability rates: not just 5xx, but failed business outcomes (checkout started but not completed).
  • Saturation: queues growing, thread pools exhausted, connection pools starved, disk and memory pressure.
  • Work done per dollar: cost per request, cost per search, cost per successful order.
Five-item stack of complementary measurements: user-centric timing, request traces, error and availability, saturation, and work done per dollar.
The five complementary views listed in this article. Not a live dashboard.

Without those, optimization is superstition. Teams rewrite the wrong layer, add hardware to hide a query, or declare victory because the homepage is fast while search and checkout are dying.

Cost control is a performance problem

In the cloud, performance and spend are the same knob turned in opposite directions.

Over-provision to hide inefficiency and your bill grows every month. Under-provision and latency and errors explode. Idle capacity, chatty microservices, unbounded retries, unindexed queries, oversized instances “just in case,” and functions that run longer than they should all show up first as performance symptoms, then as invoices.

Measurement lets you answer the only questions FinOps actually cares about

  • Which endpoints consume the most compute per successful user action?
  • Did the new ranking model double CPU per query?
  • Are we paying for headroom we never use, or starving the path that makes money?
  • Can this internal tool tolerate 200 extra milliseconds overnight so we can right-size it?

Teams that only optimize for “as fast as possible” overspend. Teams that only optimize for “as cheap as possible” ship a product people hate. Measurement is the only way to pick a point on that curve on purpose.

Engineering culture changes when performance is visible

Unmeasured systems produce heroics. A senior engineer who “just knows” the database becomes the bottleneck. Releases feel dangerous. Postmortems become blame sessions because nobody can reconstruct the timeline.

Measured systems produce feedback loops:

  • A regression is caught in canary or in the first hour, not after a weekend of lost sales.
  • SLOs and error budgets make reliability a product tradeoff instead of a slogan.
  • Developers can see whether their change helped users, not just whether tests passed.
  • Capacity planning becomes a forecast instead of a panic buy before Black Friday.
  • Vendor and SLA arguments become evidence: what users actually experienced, not what the status page claimed.

This is also why performance measurement belongs in the same conversation as developer productivity. Time spent guessing is time not spent building. Faster diagnosis is a direct reduction in toil.

The hidden risks of not measuring

If you skip measurement, the failures are not evenly distributed. They concentrate where they hurt most.

You optimize the wrong thing. Homepage Lighthouse scores look great while the authenticated app, search, or payment confirmation is slow. Executives see a green dashboard. Customers see a brick.

You discover problems through customers. By then the damage is already in reviews, churn, and support queues. In many organizations a large share of issues are still first reported by users rather than by monitors. That is a process failure, not a badge of closeness to the customer.

You cannot prove value. Platform, SRE, and performance teams that do not measure outcomes struggle to justify investment. “We made it better” is not a budget. “p95 checkout dropped 40% and conversion rose X” is.

Complexity outruns intuition. Each new service, feature flag, CDN rule, and SaaS dependency multiplies failure modes. The system becomes un-debuggable without traces and real-user monitoring. Outages then last as long as the meeting required to decide whose dashboard is telling the truth.

You miss the tail and the journey. Averages hide the users on bad networks, the region with a sick replica, the cohort on an old app version. Business impact lives in journeys (browse, then search, then cart, then pay), not in isolated service health. If you only watch boxes, you will declare the system healthy while the journey is broken.

CitraTest APM is the application monitoring solution. Learn more about CitraTest APM.

RDS / RDP Load Testing and End-to-End Monitoring (Windows Apps)

Think you may be off the hook from load testing because you use Remote Desktop Service (RDS) / Remote Desktop Protocol (RDP) from Microsoft (which provides a user with a graphical interface to connect to another computer over a network connection)? Think again. Your users have the same level of expectations regardless of your behind the scenes architecture, and how your applications are deployed and consumed. And there are quite a large number of RDP users out there. In fact, out of 11 million devices with open online 3389/TCP ports, roughly 4.1 million of the 3389/TCP ports are specifically speaking the RDP protocol (Source: Rapid 7, recent security scan results)

In a nutshell, a Remote Desktop Services (RDS) platform runs applications or user desktops on the server rather than on user workstations. No underlying objects or controls are delivered to the client. Instead, the RDS server sends screen images of the user desktop to the end-user workstation, and keystrokes and mouse clicks are returned to the server. This adds a new layer of complexity and challenge– since you stream your applications, many test automation tools would not work because they use object recognition methodologies. Instead you need a test automation solution that uses image recognition and visually examines the desktop, responds to changes and uses the keyboard and mouse just like a real user does. And this is exactly what CitraTest does. Use Tevron solutions for complete end-to-end testing and monitoring as outlined below

1) Build your test scripts and automate manual, functional, smoke and performance testing: Easily automate all user actions (clicking on, comparing, verifying, awaiting display images…) with minimal effort. CitraTest utilizes an advanced proprietary image recognition system to replicate the actions of an actual user and visually analyze every aspect of the desktop. Just like a user, CitraTest does not need to ‘see’ an image in the same location each time. CitraTest looks at the entire desktop and when an image needs to be clicked, it will move the mouse to the desired image and issue the appropriate mouse action, just like a user would do. CitraTest also automates keystrokes in the same way that an actual user types. The simplicity of using these 3 elements (desktop visualization, keyboard and mouse) gives CitraTest the power and flexibility to operate with any application so you can easily automate all your testing activities.

2) Test your application under load. Use CitraTest scripts and CitraTest VU to ensure readiness for peak traffic and real-world conditions for all Citrix, Remote Desktop Services & Microsoft Terminal Services environments. You can test, measure and validate application response time, at the client UI, under various controllable load levels with non-intrusive load testing. “Load generating machines” are used to generate user load against the server environment under test, while “measuring machines” actively measure response times at the client UI and gather server performance metrics on the back-end. Each CitraTest VU script executes in its own “desktop” and opens its own client connection to the server-under-test, just as a group of real users would. CitraTest VU automatically compares what it “sees” on the screen to baseline response images (created during test script development), and measures and reports response times at the client GUI to immediately identify underperforming components. Validate complex multi-step scenarios end-to-end (e.g. find item, add to shopping cart, enter credit card information and complete payment) and easily customize load levels and virtual user ramp-up times as defined in your test plans.

3) Monitor response time from a user perspective. Reuse the same CitraTest scripts and proactively monitor any application with CitraTest APM . CitraTest APM periodically executes end-to-end transactions, taking response time measurements along the way. By automating the driving of any application just like a real user, CitraTest APM can validate whether all critical aspects of an application are available and working within limits. If they are not, CitraTest APM generates a real time alert to help you find and resolve problems before your users are impacted. Screenshots are also taken when problems are identified to help you analyze root cause. Any end to end transaction can be simulated and measured in absolute values, percentages or statistical deviations to help you identify problems early on.

Are you ready to boost quality and customer satisfaction? Start testing and monitoring ALL your applications today, without any code changes or production impact! All you need is access from Windows to any target application.

See how other enterprises and global leaders rely on Tevron to ensure their application SLAs are met.

Good luck!

What Is Intelligent Automation? Definition, IPA vs RPA (Plain English)

Direct answer: Intelligent automation (also called intelligent process automation or IPA) is software that combines robotic process automation (RPA) with AI, rules, OCR, and decisioning so bots can complete multi-step work across applications – not only a single scripted click path. In plain English: RPA follows a playbook; intelligent automation can adapt when the playbook needs judgment or exceptions.

People search for intelligent automation meaning, intelligent automation definition, and what is intelligent process automation because vendor pages bury the answer. This page gives a plain-English definition, contrasts IPA vs RPA, and shows a practical path with Tevron CitraTest RPA for Citrix, Microsoft RDS, cloud VDI, and desktop apps.

Intelligent automation definition

Intelligent automation is the combination of RPA (bots that drive UIs and systems like a person) with intelligence layers such as machine learning, OCR/ICR, business rules, and exception handling. The goal is not a prettier dashboard – it is fewer manual handoffs for processes that used to need a human at every branch.

If you only remember one line: RPA does the clicks; intelligent automation decides which clicks make sense when the screen or data is not identical every time.

Intelligent automation vs RPA (IPA vs RPA)

Robotic process automation (RPA) configures software robots to process transactions, move data, trigger responses, and talk to other applications. Classic RPA shines on repeatable, predictable workflows – the same screens, the same fields, the same happy path.

Intelligent process automation (IPA) / intelligent automation keeps that robot layer and adds judgment: reading unstructured text, classifying documents, choosing a path when a dialog changes, or escalating when confidence is low. Teams often say “intelligent RPA” or “RPA intelligent automation” for the same idea.

  • RPA: scripted steps across apps; best when the UI and rules are stable.
  • Intelligent automation / IPA: RPA plus AI/rules/OCR so non-routine steps and exceptions can be handled without a full rewrite.
  • Together: routine admin off humans; complex branches handled with confidence thresholds and human-in-the-loop when needed.

What intelligent automation is used for

Common IT and operations use cases:

  • Cross-application ticket, order, or claims workflows (including thick clients and virtual desktops)
  • Document intake with OCR and routing
  • Employee onboarding / HR system updates across multiple tools
  • Finance and accounting reconciliations and posting steps
  • Citrix / RDS / AVD published-app automation where HTML scrapers cannot see the glass

On remoted apps, “the API returned 200” is not enough – the bot still has to wait until the screen is ready. That is the same on-the-glass idea Tevron uses for monitoring and load testing. Related reading: what is on-the-glass APM, measure Citrix response time, and how to load test Microsoft RDS.

Why it matters (without the hype)

Industry research has long framed intelligent process automation as a lever for operating-model speed – for example McKinsey’s writing on IPA as part of next-generation operations. Case patterns often cited include higher process efficiency after automating a large share of tasks, faster onboarding cycles, and retail/order flows that adjust stock without a person touching every step. Treat those as directional examples, not your SLA.

A Tevron customer example: an IT team faced moving about 60,000 records manually with six people over many weeks. With CitraTest RPA the same work finished in four days. Your mileage depends on process design, not magic.

CitraTest RPA and intelligent automation

CitraTest RPA automates from what appears on the user’s screen – including Citrix Virtual Apps and Desktops, Microsoft RDS, cloud VDI, and local Windows apps – using image recognition and OCR rather than fragile DOM-only scripts. That is a practical foundation for intelligent automation when the work lives in GUIs other tools cannot see.

More on the Tevron approach: CitraTest and RPA and the product page above. For a demo of automation plus performance monitoring in the same family, see schedule a demo.

FAQ: intelligent automation meaning

What is the meaning of intelligent automation?
It means automating work with robots and decisioning (AI, rules, OCR) so processes can handle variation – not only fixed macros.

What is intelligent process automation (IPA)?
IPA is another common name for intelligent automation: RPA plus cognitive/decision layers in an end-to-end process.

Is intelligent automation the same as RPA?
No. RPA is the robot layer. Intelligent automation includes RPA and adds intelligence for non-routine steps and exceptions.

What is intelligent robotic process automation?
Marketing shorthand for RPA products that add AI/OCR/decisioning – overlapping with IPA / intelligent automation.

Does intelligent automation replace people?
Usually it removes repetitive admin so people handle exceptions, customers, and design. Governance and human-in-the-loop still matter.

Ready to automate GUIs other bots skip? Start with CitraTest RPA or book a Tevron demo.

Calling All Financial and Accounting Professionals… Robotic Process Automation Can Save You Thousands of Hours of Avoidable Work Annually

Managing Month-End

Month-end and quarter-end are dreaded words in every Finance Department, usually involving long working hours to get the books reconciled.  You and your team are checking transactions and journal entries, balancing accounts, reviewing expense reports, depreciating fixed assets, reconciling inventory discrepancies, settling work in progress material, posting billing documents, and of course, still managing payroll.

Ultimately, you are responsible for capturing key data that will be used to make decisions and drive the business. However, tight deadlines and pressurized working conditions can often result in errors. Did you know that any repetitive, routine financial and accounting processes can be customized and automated cost efficiently with minimal involvement from the IT team?

Migrating Data

Let’s look at another scenario. Perhaps as Financial Controller, you are considering migrating data from one platform to another but the process of moving the records is a mammoth task. Of course, one option is to hire a team of consultants to read and parse the data, check for duplicates, and transfer the data into the new database.

Another solution might be to transfer the data manually with assigned teams reading one screen while simultaneously entering data into the other system. The problem is that both options are time consuming and expensive with a high risk of error. There are also data privacy laws to comply with plus the issue of software compatibility and the likely need to invest in middleware.

Making the Complex, Easy

Meet the perfect solution – Tevron’s CitraTest RPA. Use software bots to customize and automate repeatable financial and accountancy tasks like accounts reconciliation, journal entries, and preparing financial statements with minimal human intervention. Transfer data from one system to the next efficiently and accurately in a fraction of the time and at a fraction of the cost. Our advanced, high performing solution enters data just like a real user would but importantly without the risk of errors.

Expert Study

A recent Gartner study showed that automation can save Finance Departments thousands of hours with estimates indicating that 77% of controllers will be operating RPA by 2020. According to the researchers there are three main roadblocks to automating financial reporting work. Financial controllers are slow about removing human input; they don’t see sufficient or fast enough return on investment from the technology, and finally they are worried about the delays associated with standardizing processes.

According to research, maintaining unnecessary human interaction in what’s supposed to be a fully automated process limits benefits of automation while still introducing the risk of human error and the need for rework. And as for ROI, according to the study, the average amount of avoidable rework in accounting departments can take up to 30% of a full-time employee’s time. If fully implemented, however, RPA saves upward of 25,000 hours per year and around $878,000.

Many financial professionals believe that the process must be standardized before it is implemented. However, the research shows that by implementing RPA on processes that can be automated from day one, accounting teams can immediately free up time and capacity with minimum disruption. This ultimately accelerates adoption plus all the associated benefits of automation.

 

Benefits of RPA

Data Integrity

However great your team is, human error is inevitable.  It’s a dynamic environment. Changing suppliers, different policies, fluctuating currencies can make it challenging. The good news is that when your data forms are automated, you have the reassurance of knowing your data is 100 percent accurate.

 

Better Efficiencies

You understand only too well the importance of cost reduction. Digitize your processes now to improve productivity, increase efficiencies, lower costs and ensure compliance. It’s a win-win. Taking manual, boring work away frees the team up to provide value-add, focusing on strategic activities that will add to the bottom line, and deliver a more rewarding career path.

 

360-Degree Visibility

Keeping accurate and up-to-date records is vital to the success of any business. With CitraTest RPA, you can ensure consistency, visibility and control over financial operations.

Power In Your Hands

How does it work? You know your financial and accounting processes better than anyone.  You’re the expert. We’ve created wizard tools to allow you to write your own customized scripts. With CitraTest RPA, you get a library of functions and utilities that you can customize in line with your business needs.

About Tevron

Tevron® is a global leader in automation. Our solutions are successfully deployed across multiple vertical industries. Our customer portfolio includes industry giants such as John Deere. the Mayo Foundation, T-Systems, Fujitsu Services, Con Edison, USPTO, British Airways, Ameriprise Financial and Alcon Labs. Contact us now for a free demo!

CitraTest RPA

We design powerful tools for your hands

www.tevron.com

For more information or to schedule a demo, please visit

https://tevron.com/robotic-process-automation-citratest-rpa.aspx.

Intelligent Automation – CitraTest RPA

Intelligent Automation
What’s the difference between Robotic Process Automation (RPA) and Intelligent Process Automation (IPA)? In a nutshell, RPA uses technology to configure computer software to process transactions, manipulate data, trigger responses and communicate with other applications, programs and systems. Ultimately, RPA is perfect for tasks, processes and workflows that have repeatable, predictable interactions with other IT applications. The concept of RPA started back during the early 2000s, when IT teams started to experiment with basic automation, using software commands that followed scripted processes to perform tasks within a single IT applications. RPA technology then moved this to the next level by scripting tasks across multiple applications.

What is Intelligent Automation?
The subsequent, natural progression between robotic and intelligent automation has introduced machine learning and artificial intelligence into the mix. Unlike RPA, which is designed to automate routine, repetitive tasks, intelligent automation has the capacity to automate non-routine tasks. Intelligent automation can even tackle processes that require judgment, creativity, persuasion and problem-solving – all skills that previously required human intervention. This means that when you combine it with RPA technology, you can harness the power of automation to streamline both routine and highly complex processes and workflows, reimaging how things might work and creating an intelligent, self-driving organization.

Major Catalyst for Growth
According to a recent report by Forbes, intelligent automation is a major catalyst for growth. It’s important to say that intelligent automation is not about replacing humans. By delegating routine admin tasks to automation, workplaces become environments where innovative thinking is encouraged by everyone, rather than be the preserve of leaders. In 2017 McKinsey article notes a financial institution that automated 60-70 percent of its tasks and therefore increased process efficiency by 30 percent. In retail, goods can be ordered and processed for delivery and stock levels can be adjusted without an employee having to do anything. Another process greatly improved by automation is employee onboarding for the Human Resources department. McKinsey’s research found that, in a manual world, it can take up to four weeks to successfully onboard a new employee before you start seeing results. In an automated one, the cost of onboarding is reduced by 80 percent. For our own part, an IT customer, tasked with moving 60,000 records manually with a team of six was scheduled to work on the project over many weeks. Using CitraTest® RPA, the work was completed in just four days.

CitraTest RPA delivers Intelligent Automation

Tevron® is a global leader in automation. Our customer portfolio includes industry giants such as Xerox, Fujitsu Services, Siemens, T-Systems, Ameriprise,  Brabant Water, and John Deere. Work with experienced automation experts who have a successful track record of success.

We believe that automation will become central to business strategy and operations, driving new standards of customer experience such as deeper personalization, higher quality, faster delivery and greater convenience. What are you waiting for? Let us support you on your intelligent automation journey.