vaayaa Inclusive Education

Cybersecurity and Information Security Operations Case Studies

Technical5 Case StudiesUpdated Sep 2026

Operational security work rarely starts with a clean problem statement. It starts with a graph that looks wrong, a report that two teams read differently, or an alert that might be nothing. The five cases here follow that path across production incidents, data integrity failures, suspected compromise, architecture trade-offs, and an automation proposal that promised efficiency and carried its own risks. Each is drawn from a fictional organization and written from the seat of the person who had to decide. Read them for the sequence of decisions as much as the tooling.

1

Case Study 1

Release regression during a freight dispatch surge

Brightwater Freight Systems, a freight brokerage whose booking platform serves 340 carriers and 2,100 dispatchers.

The situation

On a Thursday afternoon, the team shipped a release to the booking API that included a new composite index and a schema change to the shipment status table. Within the first hour, median response time stayed near its usual level, but the 95th percentile climbed from about 400 milliseconds to more than six seconds. A carrier promotion had pushed request volume up by roughly a third, and dispatchers began reporting timeouts when assigning loads. Dana, the on-call lead, opened an incident bridge with Marcus, the platform engineer who had written the migration, and Priya from customer support, who was fielding calls from carriers who could not confirm pickups.

The challenge

The business wanted booking restored before the afternoon dispatch window closed, two hours out. A rollback was available, but it would also reverse the schema change, and Marcus could not say whether the old code could read the migrated table. The slowdown could have come from the new query plan, exhausted connection pools, or a rotated credential that a background worker kept retrying. Each explanation implied a different fix and a different risk.

Analysis

The team's first move was to stop guessing and pull evidence in a fixed order. Dana asked for query plans captured before and after the index went live, pool utilization for each service, and error rates by endpoint. The plans showed the new index winning a range query it had not been meant to serve, which explained latency on one path but not all of them. Pool metrics showed saturation only on the booking service. Teams grounded in Cybersecurity and Information Security Operations usually write the response target down before they touch anything, so every measurement gets judged against a number the business already agreed to. Here that number was under one second at the 95th percentile for booking writes.

Access was the second gap, and it had changed in ways nobody had listed. The background worker used a service account whose credential was rotated during the release, but the new value never reached the worker's cached configuration. That gap explained the retry storm. The same account also held write access to the status table from an unrelated migration that nobody had revisited. Maintainability was the quieter problem: the migration script had no reverse step, and the runbook assumed a rollback would be clean. A rule that every schema change ships with a tested reversal, and that every service account has a named owner, would have caught both.

Rollback or targeted fix during the dispatch window
Does the slowdown track the new query plan?
YesPlan regression confirmedDisable the new index hint and keep the release live.
NoPool exhaustion or credential faultRoll back the release and rotate the service account password.
Restore service first, then fix the migration offline.

Actions taken

  1. Dana disabled the new index hint on the range query path and left the rest of the release live. p95 latency dropped under one second within twenty minutes.
  2. Priya posted a status update every twenty minutes with the affected workflows, the expected next update time, and a manual fallback for carriers who needed to confirm pickups by phone.
  3. Marcus rotated the worker credential through the secrets store and restarted the worker so the cached configuration reloaded, then confirmed in the logs that retries had stopped.
  4. The team wrote and tested a reversible migration against a production data copy, then added every service account to an inventory with a named owner and review date.

Results

Booking latency returned to its usual range before the dispatch window closed, and no loads were lost, though several assignments were delayed by about fifteen minutes. The postmortem found the index regression and the credential gap, and both were fixed in the following sprint. The migration reversal became a required check in the release pipeline, and the service account inventory is now reviewed monthly by the platform group. Dana noted the most useful change was the response target in the runbook, since the next incident began with a number instead of an argument.

Questions for discussion

  • Which performance targets should be written into a release checklist before a schema change is allowed into production, and who should own them?
  • How would your team detect a service account whose scope had quietly widened, and how often should that check run?
  • If the rollback would have undone a needed migration, what partial fix would you have accepted, and what would you need to know first?
2

Case Study 2

Conflicting monthly no-show rates across two departments

Keystone Dental Partners, a network of 46 clinics that reports patient visits and billing through one shared warehouse.

The situation

Each month, the operations team and the finance team published a no-show rate for the clinic network. For three consecutive cycles the two figures differed by between four and nine percentage points, and the gap moved in directions that did not match any known scheduling change. Operations used appointment records from the scheduling system, while finance used billing events generated when a visit was closed. Erin, the data engineer who maintained the warehouse, had inherited both pipelines and wrote the transformations in different tools. Two clinic directors had started adjusting staffing from whichever figure they happened to see first.

The challenge

Erin needed to explain which number was wrong before the next report went to the regional board, about two weeks away. Neither pipeline had failing jobs, so the usual alert channels were silent. The scheduling system allowed appointment edits after a visit was marked complete, and billing reversals could post days later, so each source was incomplete in its own way. Nobody could say which system owned the definition of a completed visit.

Analysis

Erin started by writing down what the metric was meant to measure, since two teams had computed different things under one name. Operations counted scheduled appointments marked no-show, and finance counted closed visits with that status. She drafted a requirement with one grain, one row per appointment, and a timestamped status history. Row counts at each pipeline stage showed where the gaps entered. A join dropped appointments with a null provider ID, and a deduplication rule kept the latest status without checking whether it arrived before the visit closed. Analysts often treat a metric definition as a testable contract, not a label open to reinterpretation.

Access was part of the reliability question, because the people who could edit a status had become a hidden input. Scheduling staff could edit a status after a visit closed, and the warehouse kept no record of who changed it. Erin proposed limiting post-close edits to one named role and logging every change to an audit table the pipelines could read. Maintainability was the other half: the pipelines used different tools, and neither had tests on its outputs. Erin also asked for shared reconciliation checks on every load, failing loudly when counts diverged beyond an agreed tolerance.

Closing the loop on conflicting reports
Reconciled metric
1Trace lineage
2Validate transformations
3Monitor divergence
4Review with owners
  1. Trace lineage Map each figure back to its source tables and rules.
  2. Validate transformations Compare row counts and null rates at every stage against the source.
  3. Monitor divergence Alert when operations and finance counts drift past agreed tolerance.
  4. Review with owners Confirm definitions with clinic directors before each board report.

Actions taken

  1. Erin wrote a single grain definition for no-show, signed off by both operations and finance, and placed it in the warehouse documentation next to the transformation code.
  2. She rebuilt the two broken joins so that null provider identifiers were kept and flagged, and added a deduplication rule that compared status timestamps against visit close times.
  3. Post-close edit permission in the scheduling system was restricted to a named records role, and each change was written to an audit table that the reporting pipeline reads directly.
  4. Reconciliation checks now run on every load with a tolerance of one percentage point agreed in advance, and any breach pauses publication and notifies both teams.

Results

The corrected figures differed by less than one point, and most of the earlier variation came from the null provider join and post-close edits. The board received one number with a documented definition and a short note on the two corrections. Clinic directors stopped switching between reports. Over the next two cycles, a check caught a delayed billing feed, and publication paused for one day until the feed was repaired. Erin's team now treats a failed check as a normal outcome, not an emergency.

Questions for discussion

  • When two reports disagree, what evidence would convince you that the definition is the problem rather than the data, and who should be asked first?
  • Which post-close changes should be allowed at all, and how would you weigh record accuracy against the cost of locking the record too early?
  • What tolerance would you set for reconciliation alerts, and how would you tell whether it is too tight or too loose after a few cycles?
3

Case Study 3

Suspicious service account activity during a quiet weekend

Ridgeline Credit Union, a community lender serving 180,000 members across four counties, with a security team of six.

The situation

On a Saturday, the monitoring service flagged a service account used by the loan document portal logging in from an address range that had never appeared in its history. The account could read document storage and write to a staging bucket used by an overnight export. Within three hours it requested several hundred objects, about a fifth of them income verification files. Tomas, the security analyst on call, paged Ines, the incident lead, and the two engineers who owned the portal. Nobody yet knew whether the credential had leaked, whether a tool had been misconfigured, or whether an insider was involved.

The challenge

The response had to contain the risk without destroying what might be evidence. Disabling the account would stop the access but could also tell an intruder that they had been noticed. Preserving logs required a request to the cloud provider that needed approval from the chief risk officer, who was traveling. Member notification rules would apply if member data had been viewed, but the team could not yet confirm that.

Analysis

Scoping came first, and the evidence had to be trustworthy. Tomas matched authentication, storage access, and export job logs by request identifier, since clock skew between systems made timestamps unreliable. Every claim in the incident record had to cite a log entry, its source, and its retrieval time. Ines required that forensic copies be hashed on collection and stored in write-once storage before analysis. Responders often treat the evidence chain as a requirement in its own right, because a defensible response depends on it.

Access controls were both the cause of the exposure and the means of containing it. The account had broad read access so a nightly indexing job could run, and the grant had outlived the job. Containment had to remove the credential without taking the portal down, so engineers moved it to a narrower role first. Only then was the old key revoked, with its active sessions terminated. Maintainability was the lasting concern. A quarterly review now compares each service account's permissions against the jobs that use it, and an alert fires on access outside documented paths.

Triage view of the suspected account compromise
Business impact, low to high
Watch and restrictHigh impact but thin evidence: narrow access and watch for further activity.
Contain immediatelyStrong evidence and member data exposure: revoke the key and preserve logs now.
Log and monitorLow impact and weak signal: record the event and review it in the next sweep.
Clean up and documentConfirmed but contained: close gaps, update the runbook, and brief leadership.
Evidence strength, low to high

Actions taken

  1. Ines approved revoking the old key once the replacement role was verified, and recorded her approval with the time and her name in the incident log.
  2. Tomas placed the affected storage paths and export history under a retention hold, filed the provider request with the chief risk officer's approval, and confirmed receipt in writing.
  3. The team reviewed which member files had been listed or read, and sent the notification question to counsel with a record of what was and was not confirmed.
  4. Engineers rebuilt the export job with a dedicated role, documented its scope in the runbook, and added the account to the quarterly permission review.

Results

The old key was revoked within the first afternoon, and the portal kept running on the narrower role without member-facing downtime. Logs showed about two hundred objects had been listed, and forty-one income verification files had been opened, all from a single unfamiliar address range. Counsel reviewed the record and found that the notification decision rested on whether the files were retrieved, which the provider logs later confirmed for a subset. The root cause was a leftover grant from an old indexing job. The quarterly review has since flagged two other accounts with unused write permissions.

Questions for discussion

  • Which logs would you preserve first when a provider's retention window is shorter than your investigation timeline, and who should approve that choice?
  • How would you decide whether revoking a credential is worth the risk of alerting a possible intruder, and what would change your answer?
  • What separates a service account review that catches stale grants from one that only produces a list nobody reads?
4

Case Study 4

Choosing a ticketing platform architecture for venue peaks

Corvid Venue Systems, a ticketing software company with 62 employees whose checkout serves about 900 venues.

The situation

Corvid's checkout service ran as a single application with one primary database, and it had handled ordinary sales well for years. Two large venues scheduled onsale events for the same weekend, and during the first announcement, checkout latency rose above four seconds and some purchases failed at payment. The product team wanted a design that could absorb sudden peaks without a permanent cost increase. Three options were on the table: scale up the current stack, add read replicas and a write queue, or run checkout active-active across two regions.

The challenge

The decision could not be judged on speed alone. Checkout handled card data, so any design had to keep payment scope small and access tightly controlled. The on-call team was four engineers, so anything that needed constant tuning would become a risk. Hosting costs had to stay within a fixed monthly ceiling agreed with the board.

Analysis

The team began by turning the workload into numbers. Peak demand lasted about six minutes at onsale, with request volume near twenty times the daily average and most of it reading seat maps. That profile argued against a design tuned for steady throughput. Each option ran the same load script against the same payment sandbox and was scored on p95 checkout latency under 1.5 seconds, duplicate charges, and recovery time. Experienced architects fix requirements before comparing options, since otherwise each option can be defended by whatever it does best.

Security constraints shaped the options as much as performance did. The multi-region design doubled the places where payment tokens were handled, and so doubled access review and key rotation. The queue option kept payment inside one service but added a message store holding order details, which needed the same encryption and role separation as the database. Maintainability favored the option the four-person on-call team could explain from memory. Each design was scored on how many separate procedures an on-call engineer would need during an outage.

Scoring three architecture options against the workload
Current stack2/10
No change cost, but the next onsale repeats the same failure.
Vertical scale-up4/10
Cheapest change, but a single database still caps peak writes.
Replicas and queue7/10
Absorbs spikes well, with a new store to secure and monitor.
Active-active regions6/10
Strong resilience, but doubles payment scope and operations load.

Scores set by the review team in this scenario, 10 = highest priority.

Actions taken

  1. The team chose the replica and queue design for checkout writes, with seat selection reads served from replicas, and recorded the decision and its scoring in the architecture log.
  2. Engineers placed the payment handoff behind a dedicated service with its own role, kept card data out of the queue, and added token-only logging so the audit scope stayed small.
  3. A waiting room was added at the front door for onsale events, with a fixed admission rate set from load test results and reviewed before each major announcement.
  4. The on-call runbook was rewritten as a short set of procedures, one per failure mode, and each was rehearsed once in a staging drill before the next venue onsale.

Results

The next onsale event ran with checkout latency under one and a half seconds at the 95th percentile, and no duplicate charges were recorded. The queue absorbed the spike, and a waiting room held about 3,000 buyers without errors. Hosting cost stayed inside the board's ceiling. A staged rehearsal exposed one gap, a replica lag alert that fired too late, which was corrected before the following event. The active-active option stays on the roadmap until venue volume justifies the operations cost.

Questions for discussion

  • Which requirement would you revisit first if the team later found that seat selection reads were slower than the write path under load?
  • How would you decide whether a waiting room is an acceptable product compromise for buyers, and who should own that decision?
  • What operational signal would tell you that the replicated design had outgrown the four-person on-call team?
5

Case Study 5

Automated claims routing with a language model pilot

Marrow Claims Office, a third-party administrator that processes about 58,000 insurance claims a year for regional carriers.

The situation

Marrow's adjusters spent much of each morning sorting incoming claim documents into queues by type, severity, and whether a fraud review was needed. A vendor proposed a language model that would read each intake packet, extract fields, and route it automatically. The pitch promised a large cut in intake time and fewer misrouted files. Hassan, the operations director, asked the claims team and the data group to evaluate a pilot covering one carrier's auto claims for a single quarter. The pilot would run alongside human routing, with no automatic decisions on coverage.

The challenge

The vendor's demonstration used clean sample files. Real intake included scanned forms, handwritten notes, and documents in Spanish and Haitian Creole. A misrouted fraud flag could delay a legitimate payment, while a missed one could let a weak claim through. The team also worried that the model's confidence scores might track document quality more than accuracy, which could push some claimants' files down the queue unfairly.

Analysis

The evaluation started with what the system had to do and for whom. Routing accuracy was necessary but not sufficient, so the requirements were set per queue. Fraud flags needed high recall, since a missed flag was the costliest error, while routine claims could tolerate more false positives that humans would catch. The test set held two thousand historical packets, stratified by document type, language, and scan quality, labeled blind by adjusters. Careful evaluators usually report metrics by subgroup before any aggregate, because an average can hide a group that is consistently worse off.

Access and maintainability added constraints the proposal had not covered. The model would see claimant identifiers and medical notes, so the integration needed redaction before submission and a retention limit on prompts and outputs. Vendor support staff could not see live packets, and adjusters could not change routing thresholds. Maintainability raised two questions: how an update would be tested before release, and who would notice drift after a carrier changed its form layout. Without a versioned evaluation set and a named threshold owner, the pilot would be hard to trust after its first month.

Staged rollout of model-assisted routing
  1. 1Classify intakeModel reads packets, redacts identifiers, and proposes a queue and confidence score.
  2. 2Check thresholdsRoute only above the fraud-recall floor; send everything else to a human.
  3. 3Sample human reviewAdjusters review a random share of auto-routed files each week against labels.
  4. 4Expand by queueWiden automatic routing only after subgroup metrics hold for two consecutive reviews.
  5. 5Rollback triggerAny subgroup recall drop beyond the set margin returns that queue to manual routing.

Actions taken

  1. Hassan approved a shadow period of one full quarter in which the model ran on every intake packet, its routes were recorded but never applied, and the claims lead reviewed the results monthly.
  2. Thresholds were set so fraud-flag recall stayed above the agreed floor for every subgroup, and the floor is kept in a versioned configuration that only the claims director can change.
  3. Identifiers are redacted before any text leaves Marrow's network, and vendor access is limited to logs with hashed claim numbers, reviewed quarterly by the security team.
  4. Each model update must pass the same evaluation set and subgroup breakdown before deployment, and the rollback switch is tested in staging so any queue can revert within an hour.

Results

After the shadow quarter, the model's proposed routes matched adjusters in most standard cases, and it caught several fraud flags that the manual queue had initially missed. Subgroup results were uneven, however. Files with poor scans and Haitian Creole text had lower recall for one queue, which led the team to hold that queue in manual mode. The claims director approved automatic routing for standard auto claims only after two consecutive reviews met the floor. Intake time fell noticeably in the pilot queues, though the team reported the gain more cautiously than the vendor had promised.

Questions for discussion

  • What would you need to see in a shadow period before agreeing to automatic routing for a queue that carries fraud exposure?
  • Who should hold the authority to change confidence thresholds, and how should that authority be recorded so an audit can follow it?
  • If a vendor offers a model that scores better overall but cannot explain its routes, how would you weigh that against the subgroup evidence?

Learning Resources

Technical CASE STUDIES

China, India, United States, Indonesia, Pakistan, Nigeria, Brazil, Bangladesh, Russia, Japan, Mexico, Philippines, Vietnam, Egypt, Turkey, Germany, United Kingdom, France, Italy, Canada, South Korea, Australia, Spain.

Hourly Active: 37,008 Learners