Home  /  Projects  /  Insufficiency Workflow Control ← All six case studies

In plain English: Cases waiting on a missing document, a returned request, an applicant upload or a payment each ran to a different client deadline, with no live view. I replaced the twice-daily manual workbook with a queue that refreshes every 30 minutes and warns before each deadline.

PORTFOLIO CASE STUDY

INSUFFICIENCY WORKFLOW CONTROL

Automating SLA Visibility Across Multiple Insufficiency Queues

A Google Sheets and Apps Script workflow for scheduled refreshes, queue-level analytics, proactive reminders, and status controls.

Prepared byKhaled Medhat — Team Leader, Case Validation
EnvironmentGoogle Workspace: Google Sheets + Google Apps Script
StatusLive since January 2026 — major upgrade August 2026
Date of this documentOctober 2026

A. Executive Snapshot

Business problemFour insufficiency queues — first-level, second-level, applicant responses, and payment checks — were tracked in a sheet assembled by hand from several sources. One compilation took about two hours, twice a day, leaving long visibility gaps under tight, client-specific SLA deadlines.
My role and contributionI defined the queue rules and SLA clock logic, designed the workbook structure, alerts, analytics, and status controls, and directed AI-assisted development of the Apps Script workflow. I tested, corrected, and maintained the solution.
SolutionA scheduled workflow that filters the company-wide case feed to the four in-scope clients, routes each case to its correct queue, refreshes the workbook every 30 minutes around the clock, posts queue summaries and SLA reminders to the team chat, and reconciles performer statuses against the source feed.
Methods and toolsGoogle Sheets, Google Apps Script, the company case-management API, a shared payment inbox, team chat (Hangouts/Chat), and AI-assisted coding under my direction.
Project statusLive since January 2026; major upgrade in August 2026 (status reconciliation, first/second-level split, full analytics tab, chat summaries); continuous maintenance since.
Verified outcomes24/7 30-minute refresh (up to 48 automated runs a day); formula-driven analytics; SLA reminders one hour before each deadline; status reconciliation. Manual effort figures are owner-reported estimates; no audited SLA percentage is claimed.
LimitationsNo measured before/after SLA-compliance figure; the strongest outcome signal is observational (absence from the company breach report). Client names are anonymized; mockups use hypothetical example data.

B. Executive Summary

After a case passed initial validation, it often still needed a follow-up action: a missing document, a request returned from verification or a later stage, an applicant upload, or a payment shortfall. Each follow-up type had its own deadline rules, and missing one was operationally costly. Yet the only working view was a spreadsheet that a performer assembled by hand from several data sources — roughly two hours per compilation, twice a day.

The problem became urgent when the clients tightened the rules. First-level insufficiency had to be completed within an overall 12 hours measured from the original validation case start; second-level insufficiency had 24 hours from its own entry; applicant responses had 12 hours for the two revised clients and 24 hours for the others, measured from the applicant upload. With a view that refreshed twice daily, a case could sit unnoticed until it was already late.

I replaced the manual assembly with a scheduled workflow: a Google Apps Script job that reads the company case feed every 30 minutes, keeps only the four in-scope clients, routes cases into the correct queue tab, computes elapsed time from the right clock for each queue, and posts queue summaries and deadline reminders to the team chat. The analytics tab is formula-driven, so it recalculates on its own. A hidden edit timestamp with a 40-minute reconciliation rule protects correct performer input while clearing statuses that no longer match the source. The result is a working view that is always current, with deadlines made visible before they pass — instead of after.

C. Business Context and Problem Definition

The four queues

Insufficiency work split into four distinct queues, and treating them as one was dangerous because each had its own clock:

RECONSTRUCTED RULESFigure 1
QueueClock starts when…TargetApplies to
First-Level InsufficiencyThe original case start in Validation — not the moment the case enters Insufficiency.12 h overall2 revised clients; 24 h for the other 2
Second-Level InsufficiencyThe moment the case enters second-level Insufficiency (returned from a later stage).24 hAll 4 clients
Applicant ResponsesThe applicant's document upload after the team's request.12 h or 24 h by client12 h: the 2 revised clients; 24 h: the other 2
Payment ChecksThe payment date.24 hAll 4 clients

SLA rules by queue and client, reconstructed from the client operating requirements.

CLOCK-ORIGIN CORRECTION. First-level originally started from the Insufficiency entry time; I corrected it to the Validation case start so the 12-hour overall target matched the client definition. The correction prevents the sheet from understating elapsed time.

The manual baseline

A performer assembled the working sheet by pulling case data from several sources, populating the tabs, and organizing the columns. One compilation took about two hours. The sheet was prepared roughly twice a day — about four staff-hours daily — which meant the visible picture was always hours old.

The volume made staleness costly

On a typical day the queues carried roughly 500–1,000 applicant-response cases, 300–600 first- and second-level insufficiency cases, and up to 5–10 payment checks. With a 12-hour overall clock on first-level work, a sheet refreshed twice a day could show a case with only an hour left — or hide it until it was already late. The practical symptom: the company analytics team sent a six-hourly report of cases that had breached their SLA, and the team queues appeared in it regularly.

D. Data Discovery and Root Cause Analysis

The visible symptom was breach-report appearances. Working backward from it, the contributing factors were clear:

SymptomContributing factorHow the solution addresses it
Cases appearing in the six-hourly SLA-breach reportWorking sheet refreshed only twice a dayRefresh every 30 minutes, 24/7
Hours of assembly work per updateData pulled and combined by hand from several sourcesScript filters and routes cases automatically
Wrong sense of elapsed timeFirst-level clock started at insufficiency entry instead of the validation case startClock corrected to the client definition
Statuses disagreed with the source systemPerformer errors had no check against the live feedHidden edit timestamp + 40-minute reconciliation rule
Leads could not see where work was building upNo live workload view per client, queue, and performerFormula-driven analytics tab and chat summaries

The most important finding was the clock-origin error in the first-level logic. An earlier version of the elapsed-time calculation started the timer when the case entered the insufficiency queue, which understated elapsed time against the client overall 12-hour definition. Correcting the clock — starting from the original validation case start — is what made the sheet trustworthy for deadline decisions. The contributing factors above are observed operating problems; the breach-report observation is reported and not independently audited.

E. Solution Design and AI-Directed Development

I translated the operating rules into a precise specification before any code existed:

  1. Filter and classify. Keep only the four in-scope clients, then route each case by queue type and level so the same case never appears as multiple queue entries.
  2. Apply the right clock. Compute elapsed time per queue from its own start point — validation case start for first level, insufficiency entry for second level, upload time for applicant responses.
  3. Populate the workbook. Write barcode, performer, start date, elapsed time, and level into the matching tab; leave status blank for performers to fill in.
  4. Refresh and reconcile. Run on a 30-minute trigger and check performer statuses against the source feed.
  5. Publish visibility. Let formula-based analytics recalculate and post queue summaries and SLA reminders to the team chat.

I designed this specification myself, then used AI as an implementation partner: I described the required behavior, reviewed the generated Apps Script code, tested it against the live data, identified problems, and directed corrections until the behavior matched the specification. The iterative improvements came out of that loop:

RECONSTRUCTED — IMPLEMENTEDFigure 2
API feed — applicant responses Existing company case data API feed — first & second level Existing company case data Shared payment inbox Barcode + receipt emails replace four pulls GOOGLE APPS SCRIPT — 30-MINUTE TRIGGER, 24/7 Filter the company-wide feed to the 4 in-scope clients Classify each case by queue and level Compute elapsed time from the correct SLA clock Write rows into the matching operational tab Reconcile performer statuses against the source feed Build queue summaries and deadline reminders Tab: First / Second Level Case rows with level, clock and status Tab: Applicant Responses Upload-based cases by client rule Tab: Payment Checks Barcodes captured from the shared inbox Tab: Analytics Three formula-driven summary tables Team chat messages Queue summary every 30 min + reminders

Solution architecture, reconstructed from the implemented workflow. Two API feeds plus the shared payment inbox feed the 30-minute Apps Script cycle, which writes the four tabs and publishes chat messages.

The operational tab

HYPOTHETICAL EXAMPLEFigure 3
BarcodePerformerStart DateTime PassedStatusLevelEdit Log *
BAR-10482Performer A20 Oct 08:1010 h 52 mIn ProgressFirst Level20 Oct 11:24:17
BAR-10485Performer B20 Oct 07:5512 h 18 mFirst Level20 Oct 11:31:02
BAR-10490Performer C20 Oct 09:402 h 05 mSecond Level20 Oct 09:40:00
BAR-10493Performer D20 Oct 10:151 h 12 mDoneSecond Level20 Oct 10:58:44
BAR-10497Performer A20 Oct 11:020 h 40 mFirst Level20 Oct 11:02:00

* Column H is hidden. It records the exact edit timestamp (minute : second) whenever a performer changes a status, so the next run can reconcile the sheet against the source feed.

Yellow: 2 hours or less remain Red: the deadline has passed

Operational tab (hypothetical example). Every 30 minutes the script writes each open case into the correct tab. Status starts blank; performers update it manually. Time Passed is calculated from each queue clock.

The analytics tab

HYPOTHETICAL EXAMPLEFigure 4

1 — Pending cases by performer

PerformerInsuff. Not Accepted — First LevelInsuff. Not Accepted — Second LevelApplicant Resp. — Client 1Applicant Resp. — Client 2
Performer A1294138
Performer B8145247
Performer C1563629

2 — Completed cases by performer (whole-day productivity)

PerformerInsufficiency Not AcceptedApplicant ResponsesTotal
Performer A96118214
Performer B87104191
Performer C10297199

3 — Queue summary by TAT bucket (the exact same table posted to the team chat)

First Level Insufficiency Not AcceptedClient 1Client 2Client 3Client 4Total
0–6 Hours70007
6–8 Hours00000
8–10 Hours00101
10–12 Hours00000
GT 12 Hours00000
GT 24 Hours00303
Total704011
Second Level Insufficiency Not AcceptedClient 1Client 2Client 3Client 4Total
0–6 Hours4151047
6–8 Hours526013
8–10 Hours62008
10–12 Hours63009
GT 12 Hours32207
GT 24 Hours00202
Total611411086
Applicant responsesClient 1Client 2Client 3Client 4Total
0–6 Hours15717900336
6–8 Hours38310069
8–10 Hours50005
10–12 Hours1210013
GT 12 Hours6110017
GT 24 Hours01001
Total21822300441

Analytics tab (hypothetical example). The tables are built with formulas, not pivot tables, so they update by themselves every time the script refreshes the source tabs. Table 3 is the exact same TAT-bucket table posted to the team chat.

F. Project Management and Implementation

The work went live in January 2026 and has run continuously since, with the largest upgrade in August 2026 — adding the status-correction logic, the first/second-level split, the full analytics tab, and the chat summaries.

The key implementation decisions were about timing and safety. The 30-minute cadence matches the source feed refresh rate, so runs never work from data older than one cycle. The 40-minute reconciliation threshold gives the source time to refresh, covers the run itself, and adds a safety buffer for occasional script failures or source update delays, so the control catches stale statuses without deleting correct work. Reminders fire one hour before each queue's own deadline and repeat with the cycle, so an approaching case stays visible until it is handled.

Risks were managed by design: the workflow runs 24/7 because the operation runs 24/7; the payment inbox dependency replaced four slower dependencies; and every rule that could silently mislead — clock origins, grace windows, bucket definitions — was made explicit before automation.

TIMELINE — REPORTEDFigure 5
BEFORE JAN 2026 Manual baseline Two ~2-hour compilations per day JAN 2026 Go-live 30-minute automated refresh, routing AUG 2026 Major upgrade Status correction, analytics, chat summaries ONGOING Sustainment 24/7 operation and maintenance

Implementation timeline. Dates reported by the project owner; the workflow has run continuously since go-live.

G. Preventive Improvement

The solution builds prevention into the process rather than relying on people to remember:

IMPLEMENTED RULEFigure 6
Performer edits a case status Hidden column records the edit timestamp (exact to the minute and second) Next 30-minute run starts Is the case still in the API list of unfinished cases? NO — keep the performer status (correct input) YES Is the edit older than 40 minutes? (30-min refresh + 10-min safety buffer) NO — keep status; re-check next run YES Clear the status back to blank (blank = not done) The run itself takes 1–2 minutes; the 10-minute buffer absorbs occasional script failures, API errors, and source update delays.

Status-correction decision flow. Implemented rule: a status is cleared only when the case remains unfinished in the source and the edit is older than 40 minutes.

These controls are implemented. Recommended future controls — execution and exception logs, and a formal test set for the SLA calculations — are part of the roadmap, not claimed as built.

H. Testing and Validation

Testing was continuous and behavior-based. I verified that cases landed in the correct tab and level, that elapsed time matched each queue's clock after the first-level correction, that the chat summary format and buckets were readable, that the reconciliation rule waited through the 40-minute window before clearing, and that payment barcodes were captured from the inbox. Each of these was checked against the live environment and corrected where it failed.

The strongest available outcome evidence is observational: before the workflow, the team's cases appeared regularly in the company six-hourly SLA-breach report; since the workflow became routine, no case from these queues has appeared in it. This is an observed operational signal reported by the owner, not an audited measurement — no before/after SLA-compliance percentage is claimed.

I. Business Impact and Performance Measurement

MetricBaselineResultEvidence statusValidation method
Refresh cadence~2 manual compilations/dayEvery 30 minutes, 24/7 (up to 48 runs/day)ImplementedRun history / sheet audit log
Staff time per update~2 hours per compilation (~4 staff-hours/day)No manual compilation per runReported / EstimatedTime-log comparison (not available)
Projected manual alternative under the revised SLA~4 updates/day = ~8 staff-hours/dayReplaced by automationEstimated projectionNot applicable — projection, not measured
Cases in the six-hourly breach reportRegularly before the workflowNone observed after it became routineObserved / ReportedCompany analytics reports (not independently audited)
SLA-compliance percentageNot measuredNot measuredNot availableRequires approved analytics export
Error reduction from status reconciliationNot measuredNot measuredNot availableRequires before/after error logs

Validation plan for the missing measurements. To substantiate the outcome further: (1) export breach-report appearances for a defined pre-period and post-period and compute cases-per-week before and after; (2) log every reconciliation event so the number of cleared wrong statuses is measurable; (3) keep run-level execution logs with timestamps and counts so cadence is provable. These are proposals, not evidence of results.

REPORTED + IMPLEMENTEDFigure 7

BEFORE — MANUAL

REPORTED
  • One full compilation took about 2 hours
  • Prepared twice per day
  • About 4 staff-hours per day of assembly
  • Several source pulls combined by hand
  • Hours of gap between refreshes
  • Late cases visible too late to act

Baseline effort: owner-reported recollection.

→

AFTER — AUTOMATED

IMPLEMENTED
  • Refreshes every 30 minutes, 24/7
  • Up to 48 automated runs per day
  • Cases routed to the correct queue automatically
  • Live analytics recalculate on their own
  • Queue summaries and reminders posted to the team chat
  • No manual compilation inside each run

Cadence: implemented and running.

Figure 7 — Manual baseline versus the automated cycle. Manual effort figures are owner-reported recollections; the automated cadence is implemented and running. Projected manual alternative under the revised SLA: 4 updates/day at ~2 hours each = ~8 staff-hours/day (estimate, not a measured historical figure).

The 30-minute queue summary

HYPOTHETICAL EXAMPLEFigure 8
Hi Team, Insufficiency sheet updated ✅

Insufficiency Report

First Level Insufficiency Not AcceptedClient 1Client 2Client 3Client 4Total
0–6 Hours70007
6–8 Hours00000
8–10 Hours00101
10–12 Hours00000
GT 12 Hours00000
GT 24 Hours00303
Total704011
Second Level Insufficiency Not AcceptedClient 1Client 2Client 3Client 4Total
0–6 Hours4151047
6–8 Hours526013
8–10 Hours62008
10–12 Hours63009
GT 12 Hours32207
GT 24 Hours00202
Total611411086
Applicant responsesClient 1Client 2Client 3Client 4Total
0–6 Hours15717900336
6–8 Hours38310069
8–10 Hours50005
10–12 Hours1210013
GT 12 Hours6110017
GT 24 Hours01001
Total21822300441
🔗 Click Here To Open The Sheet

The 30-minute queue summary posted to the team chat. Real format, hypothetical example numbers; payment checks are intentionally excluded because their daily volume is small.

J. Lessons Learned and Future Roadmap

Three lessons stand out. First, the business definition of a clock must be confirmed before automation — the first-level origin correction showed how easily a technically working timer can be operationally wrong. Second, reconciliation controls need a grace window that respects the source refresh timing, or they will destroy correct work. Third, visibility is only useful when it reaches people in their working rhythm — the 30-minute chat summary turned the sheet from a tool people open into a signal people receive.

The roadmap: keep execution and exception logs, validate the grace period against source timing, build a small test set for the SLA calculations, and compare overdue-case rates before and after using approved company reports. These would convert the current observational evidence into measured evidence.

K. Skills Demonstrated

CompetencyMy contributionSupporting evidenceBusiness or technical value
Business analysis and rules designTranslated queue rules and client SLA variations into filter, classification, and clock logicSLA rules table; clock-origin correctionCorrect deadline decisions
Data and process analysisIdentified staleness, wrong clock origin, and status disagreement as the failure pointsRoot-cause table; breach-report observationTargeted the right problems
Workflow automation designSpecified the 30-minute refresh, routing, and inbox-based payment captureArchitecture diagram; implementation timelineReliable, current working view
AI-directed developmentDefined requirements, directed code generation, reviewed, tested, and corrected iterativelyIteration list; testing sectionWorking solution in the available environment
Preventive controlsDesigned the hidden-timestamp reconciliation with a 40-minute grace windowStatus-correction flowStatuses stay consistent with the source
Operational visibilityDesigned formula-driven analytics, chat summaries, and color-coded urgencyAnalytics and chat mockupsLeads act before deadlines, not after

About the visuals in this document: process diagrams are reconstructed from the owner description of the real workflow; sheet and chat mockups are hypothetical examples; no confidential screenshots, employee data, or internal interfaces are included. Client names are anonymized.