CaseAdvancedShipping & Model Lifecycle / Incident management for AI products / #11

How do you handle an incident caused by your provider rather than your code?

The direct answer
Do not call it a provider incident until you can reproduce it. Take fact patterns that were answered correctly before the drift started, replay them right now with nothing else touched, once against today's live model and once against a dated snapshot from before the drift. If the old snapshot gets them right and today's live call does not, on the exact same input, that is proof, not a theory. Then pin production to the last known good snapshot, fail the riskiest calls over to a safer mode, and take the two replay logs to the provider instead of a screenshot of one bad answer.
Do this, in order
  1. Prove it before you say it: replay the same frozen inputs, unchanged code, against today's live model and a snapshot from before the drift.Why: a provider will not act on a feeling that the timing lines up, and neither should you.
  2. Rule out your own last deploy first, with the same rigor you'd use on the provider.Why: if you skip this, you spend the incident defending a guess instead of finding the real cause.
  3. Recut the incident by call path, retrieval-only against calls that need the model to judge something, before recutting by anything else.Why: this is what shows the damage lives entirely in the calls that depend on the model's own judgment, not in data you touched.
  4. Once confirmed, pin production to the last known good dated snapshot immediately, don't wait on the provider's fix.Why: you don't control their timeline, and every hour spent waiting is another hour on an unknown target.
  5. Route the highest risk calls to a conservative, verbatim fallback until the eval recovers.Why: it costs fluency and a few more "verify manually" flags, but it stops a confidently wrong answer from reaching something that gets filed or sent.
  6. Stop tracking "latest" for good: pin a dated snapshot and only promote a new one after it clears a stated bar on your own eval set, more than once.Why: the incident was never really the bad answer, it was a setting that let any change reach production unchecked.
Hand sketched horizontal timeline titled The nine days before anyone noticed, with four milestones. Cartwell changelog entry, logged quietly page 3. Eval ticks up, 1.3 percent to 1.8 percent, inside the noise. Corwith deploys index, our code, later ruled out. Near miss filed brief, caught 40 minutes before deadline, marked in red as the point everyone actually noticed.
The number everyone reacted to sits at the right edge. The thing that actually caused it sits nine days to the left, in a changelog nobody on the product side was reading that week.

How to answer this, stage by stage

Nobody is grading whether you can say "we opened a ticket with the vendor." They are grading whether you can prove a provider caused something before you say so out loud, for an incident where your own code shipped changes in the same window. Seven moves get you there.

1
Scope it to one real product and one real near miss
Say it like this
"Let's ground this. Precedo drafts the Statement of Authorities section of litigation motions, built by Corwith Legal Technologies, running on a third party model from a provider I'll call Cartwell. About thirty four thousand citations a week, across firms like Renslow and Cade. Sorcha Delacombe runs incident response for it."
Why this works
Grounds the answer in real numbers before any framework talk starts, so it never turns into a policy lecture about vendor management.
2
Say what "handle a provider incident" actually means, before any story
Say it like this
"Here's how I'd frame it up front. Handling a provider incident isn't a communication problem. It's a proof problem. You're about to accuse something you don't control, so the bar is a reproducible replay, not a hunch that the timing lines up."
Why this works
States the actual test before a single detail, so the interviewer hears a method, not a story about pointing fingers.
3
Build the timeline before you build a theory
Say it like this
"I'd pull two calendars side by side. What we shipped, and what Cartwell logged in their own release notes, going back at least two weeks before the number actually moved, not just the day it spiked."
Why this works
TRACE's whole point is that the real start date is almost always earlier than the day anyone noticed.
4
Rule your own code out first, out loud
Say it like this
"Before I say a word about the provider, I check us. We'd shipped a retrieval index update the same week, so I'd replay the calls that only touch that index, with the model held out of it completely, against the old index and the new one. If those come back clean, that whole suspect is gone."
Why this works
An interviewer is listening for whether you reach for the provider as an excuse or actually rule yourself out first, with evidence.
5
Recut by call path, not by client or region first
Say it like this
"The split that matters here is retrieval-only calls against calls where the model has to paraphrase a holding and apply it to the facts. If the first group is flat and the second is climbing, the damage lives exactly where the model has to use its own judgment."
Why this works
A recut by the wrong dimension, like client or region, hides the real pattern. The right cut reveals it in one chart.
6
Run the one test that separates it's us from it's them
Say it like this
"Take forty fact patterns we know were answered correctly nine days ago. Replay them right now, same code, same prompt, same retrieval, against today's live endpoint and against a dated snapshot from before the drift. If the old snapshot gets them right and today's live call doesn't, on the exact same input, that's not a theory anymore."
Why this works
This is the strongest move in TRACE, one query a provider, a partner, and an interviewer all have to accept.
7
Say what changes once it's confirmed, and close on the count
Say it like this
"Once that replay comes back the way I described, I pin production to the last known good snapshot that same day, not after Cartwell fixes it, route the riskiest calls to a verbatim quote mode for a few days, and take the two replay logs to Cartwell instead of a screenshot of one bad citation. The eval miss rate goes from five point six percent back to about one point two within about six hours of pinning, not six days of waiting."
Why this works
Closes on a number and an action taken, not a promise to "monitor it closely."

Let's learn

What happens when the thing you would swear was working stops being it, and nothing on your end changed?

Say we build a tool that reads the facts of a motion and drafts the paragraph that names the cases, quotes the holding, and gets the citation format right, so a lawyer isn't hunting through a case database by hand at midnight.

Before a tool like this existed, an associate spent about five hours pulling cases and checking every pin cite by hand for one motion. The tool cuts that to about forty five minutes: read the draft, check it, file it.

Every night, a held out set of eight hundred real citations gets checked against the actual case text, the pin cite and the holding, not just whether the case name is spelled right. Normally about thirteen of those eight hundred come back wrong. That's about one point three in a hundred, and it's the number the team has always lived with, mostly caught by the lawyer's own read before anything gets filed.

Nightly eval miss rate, sixteen days across the incident
6% 3% 0 day -9 changelog day -2, our deploy near miss 5.6%
The line barely moves for the first week. It does not become a straight climb until after our own deploy, which is exactly why the team's first guess pointed at our own code, and exactly why that guess was wrong.

Here is the turn. Those extra bad citations at one point eight percent, two point one percent, were never the real problem. The real problem is the afternoon one of them is a real holding that decides a real motion, and the pin cite looks exactly like every one that was right yesterday.

It was never four more wrong citations a night. It was one afternoon, forty minutes before a filing deadline, when the wrong one looked exactly like a right one.

At its worst, that costs far more than a bad night on a dashboard. If a misstated holding gets filed, that isn't an embarrassing typo. That's a lawyer standing in front of a judge on a case that doesn't say what the brief says it says, with the firm's name on the signature block and a very different kind of conversation waiting afterward.

Knowledge spark: what is a pinned snapshot? Most model providers let you call a specific, dated version of their model directly, instead of an alias like "latest" that quietly moves to whatever they ship next. Pinning means you decide when a new version reaches your users. Tracking "latest" means the provider decides that for you, every single day, without telling you it happened.

The choice I would take back. Production traffic pointed at Cartwell's always-newest "assistant-latest" alias instead of a dated snapshot we controlled, so every change Cartwell shipped reached Precedo's users automatically, with no gate and no warning.

The decision that mattered Tracking the provider's "latest" alias instead of a pinned, dated snapshot with a golden-set gate before promotion. It felt like free upgrades for a year. It also meant a change nobody at Corwith tested or asked for could reach a filed legal brief the same day it shipped, with nothing standing in between.

I also looked at just adding a stronger warning telling associates to double check every holding by hand, and rejected it. A banner doesn't change what a rushed associate actually rereads forty minutes before a filing deadline. A gate on what version of the model reaches production does.

What I would leave alone. The tool's plain summary of the facts, the party names, the procedural history, is not where the risk lives, and pinning the model back a version wouldn't make that any safer. If that phrasing drifts a little, nobody's legal argument depends on it. The risk lives specifically in the one sentence that states what a case actually held.

The lesson. A dependency you don't version yourself isn't a dependency. It's a bet you're re-placing every single day without ever noticing you placed it again.

Now here is the same thing as a story

The short version is above. Read on if you want to feel how ordinary the nine quiet days looked from Corwith's own dashboard.

Sorcha Delacombe runs incident response for Precedo. Two years in, she can tell inside a minute whether a spike on her dashboard is a real problem or a Tuesday. She built that instinct the slow way, watching the nightly eval number every single morning with coffee before anyone else was at their desk.

The number that morning nine days before the near miss was nothing. One point four percent, inside the usual noise. She didn't know, and had no way to know yet, that Cartwell had logged a changelog entry the day before, three paragraphs down a release notes page titled "Quality and latency improvements to the assistant endpoint. No action needed." Nobody at Corwith read release notes pages that closely. Why would they. Nothing had broken.

Over the next week, the nightly number drifted. One point four. One point six. One point eight. Still inside the band Sorcha's own dashboard called "watch it, don't panic." A number moving like that looks exactly like ordinary noise, right up until it isn't.

On the Monday, Corwith shipped its own retrieval index expansion, three new regional case law reporters added to Precedo's search, a change the team was genuinely proud of. Recall on rare, out-of-state citations went up. It looked, by every measure the launch review checked, like a clean improvement.

The team's first guess pointed at the thing they had just shipped, because that's always the first guess. It was also the wrong one.

By Tuesday the eval sat at two point one percent. Still watch-it territory. Nobody paged anyone.

Wednesday afternoon, Amrita Voskuil, a litigation associate at Renslow and Cade, was finishing an opposition brief forty minutes before the e-filing deadline. Precedo had drafted the Statement of Authorities that morning, citing Halbrook v. Corven Timber for the proposition that a force majeure clause covers a labor shortage. The case name was real. The pin cite pointed at a real page. The case, read in full, says the opposite.

Amrita didn't catch it. Her supervising partner did, on the final read, the way a partner who's read a thousand force majeure cases catches something a junior associate reading fast would not. He called Corwith's support line still holding the printed draft, furious, forty minutes from a deadline he now had to make with a hand-cited paragraph instead.

That night's eval landed at five point six percent. Forty five of eight hundred, more than four times the normal rate.

Sorcha's first instinct was to look at Monday's deploy, because that's the thing her own team had just touched. She had the retrieval team replay every retrieval-only call, the ones where Precedo only needed to quote indexed case text back verbatim with no paraphrasing, against the old index and the new one, with the model held out of the test entirely. Flat. Clean. Zero difference. That ruled out the thing everyone had assumed first.

So she recut the whole incident window by one line: calls that only needed to retrieve and quote, against calls where the model had to read a holding and apply it to a new fact pattern. Retrieval-only miss rate: flat at zero point four percent the entire sixteen days. Model-synthesis miss rate: one point three percent baseline, climbing to nine point eight percent at the peak. Every wrong citation in the whole incident sat inside the second group.

Hand sketched three panel comparison titled Three suspects, one confirmed. Panel one, our retrieval deploy, clean on retrieval-only calls, ruled out, marked green. Panel two, provider version bump, logged and public, clean at calm hours, marked amber. Panel three, provider load fallback, same name, worse answers at peak, marked red as the confirmed cause.
Ruling out the first suspect took a day. Separating the second suspect from the third took one more test, run twice, at two different hours.

Now there were two suspects left, both on Cartwell's side. The version bump they'd logged in their changelog. And something Sorcha had only ever half-believed was real: a provider quietly routing a slice of "latest" traffic to a smaller, faster relief model during their own peak load windows, without changing the model name in the response at all.

The test that separated them was almost embarrassingly simple. She took forty fact patterns from the pre-incident golden set, already hand-verified correct nine days earlier. She replayed all forty, same code, same prompt, same retrieval, against Cartwell's live "assistant-latest" alias and against a dated snapshot from before day minus nine that Cartwell still exposed on request. The snapshot got all forty right. The live endpoint got thirty four right and six wrong, and every one of the six was a model-synthesis call. Nothing else differed between the two calls but which target answered.

That was the proof. Not a theory. A replay, run twice, that a provider has to accept because they can run it themselves and get the same result.

Old decision, told as a memory of a meeting. When Precedo first integrated Cartwell's API, someone on the platform team pointed out that pointing at "assistant-latest" meant every improvement Cartwell ever shipped would reach Precedo automatically, with zero engineering work on Corwith's side. The room liked that a lot. Nobody in that room was wrong about what it bought them, for two years running.

The replay, run the same window forward with the fix in place: production pinned to the last known good dated snapshot within six hours of the confirmed test, the riskiest synthesis calls routed to a verbatim-quote mode that costs a little fluency but can't misstate a holding it isn't allowed to paraphrase. The eval miss rate is back to one point two percent by the next morning's run.

The thing Sorcha would tell her past self, the one sitting in that integration meeting two years earlier: a provider that ships free upgrades for two years straight isn't proof the upgrades will always be free. It's proof you never once had to find out what happens when one isn't.

TRACE, the five checks that tell you whether it's your code or theirs

This is a diagnosis question wearing an incident-response costume. Something changed, two plausible causes shipped in the same window, and the job is separating them with evidence instead of a hunch, so TRACE fits: rule out, then narrow.

T
Timeline. When did it actually start, not when did anyone notice?
Include things that looked like improvements, on both sides.
Here, the real start is Cartwell's quiet changelog entry, nine days before the near miss and seven days before Corwith's own deploy.
R
Recut. Slice by the dimension that could actually separate the causes.
Not client, not region, not time of day first. The call path.
Retrieval-only calls stayed flat at zero point four percent. Model-synthesis calls climbed to nine point eight percent. All the damage sat in one slice.
Miss rate by call path, before and at the incident's peak
Retrieval-only calls, before0.4%
Retrieval-only calls, at peak0.4%
Model-synthesis calls, before1.3%
Model-synthesis calls, at peak9.8%
A recut by client or region would have shown every firm affected a little, which looks like nothing in particular. Cutting by call path shows one specific kind of work carrying the entire incident.
A
Assume nothing. Rule out your own instrumentation and your own code before the provider.
A tracking change or your own deploy can look exactly like a real drift on a dashboard.
Checked the eval harness itself first, unchanged. Then replayed retrieval-only calls against the old index and the new one, with the model held out. Flat. That closed out "our code" with evidence, not a shrug.
C
Cause candidates. Three, named, not a shrug at "something on their side."
The hardest step, and the one most incident reports skip past.
Corwith's retrieval deploy (ruled out). Cartwell's logged version bump (checked, clean at calm hours). Cartwell silently routing "latest" traffic to a smaller relief model under its own peak load, without changing the reported model name (confirmed).
E
Evidence test. The one check that separates the top two hypotheses.
Ends in a result someone could run again themselves, not a promise.
Forty pre-verified fact patterns, replayed unchanged against today's live endpoint and a dated snapshot from before the drift. The snapshot: forty for forty. The live endpoint: thirty four for forty, all six misses in the synthesis group.
Hand sketched two panel comparison titled Same input, two targets, two answers. Left panel, dated snapshot, 40 of 40 holdings correct, marked green. Right panel, live latest alias, 6 of 40 holdings wrong, marked red.
Same forty fact patterns. Same code. Same prompts. The only thing that changed between the two columns is which model answered.

And if you want to be sure it really works, try it somewhere else

Brightwell Goods runs Sagewell, a support-reply drafting assistant built on the same Cartwell "latest" alias, at a company that sells outdoor gear online and has nothing to do with law.

T. Deven Nadeau, who runs support operations, first noticed a run of tickets where Sagewell told customers a ninety day return window applied to a product line with a thirty day exception. The pattern started building two weeks before anyone flagged it, again quietly, again under a Cartwell alias nobody had pinned.
R. Recut by whether the draft needed to combine two policy documents, the standard window and the seasonal exception, against drafts that only needed one document. Single-document miss rate: flat. Combine-document miss rate: climbing, same shape as Precedo's synthesis calls.
A. Brightwell had also shipped its own policy document refresh that same week. Ruled out the same way: replayed the old document set through the same drafts, clean.
C. Worth saying plainly rather than stretching it into something new: the confirmed cause here is the same mechanism as Precedo's, Cartwell's own load-based fallback on the same alias, this time triggered by Cyber Monday afternoon traffic instead of a court filing deadline.
E. Same test. Thirty combine-document questions, pre-verified, replayed against the live alias and a dated snapshot. Snapshot: thirty for thirty. Live: twenty five for thirty, at four in the afternoon on Cyber Monday. Confirmed.

Hand sketched flow diagram titled Where Sagewell's answer actually breaks. Five boxes left to right: customer question, Brightwell policy docs, Cartwell latest alias marked in red as the emphasized step, drafted answer, rep sends it.
A flow diagram, not a timeline this time, because the point at Brightwell isn't when it started. It's exactly which step in the pipeline the fallback lives inside.
Same mechanism, different deadline At Precedo the peak window was three to five in the afternoon, when court filings cluster. At Brightwell it was Cyber Monday. Different clock, same finding: a provider's own load-shedding can degrade quality with the model's reported name unchanged, and the only way to catch it is a replay run at the hour it actually happens.

Swap the trigger and it still runs.
Speed: an interviewer caps the answer at ninety seconds. Skip straight to the replay test and the pin, and name the confirmed cause in one line.
Cost: this quarter's API budget gets cut and a nightly shadow eval against a second endpoint isn't affordable every night. Don't cut it to zero. Drop it to twice a week and say so plainly, that's a stated tradeoff, not a silent one, and it still catches a drift before it becomes a near miss.
The model got better, for real, everywhere: suppose Cartwell's change really was a clean, honest improvement with no load-based fallback at all. Pinning is still the right call, because you can't tell a genuine improvement from a genuine regression without running the same replay. You'd promote the new snapshot the moment the golden set confirms it, instead of trusting the changelog's own word for it.

Where people run it wrong.
They call it a provider incident because the timing lines up, without ever replaying the same input against both.
They treat a status page that says "all systems operational" as the final word, when it only means nothing crossed the provider's own bar for public admission, not that nothing changed for you specifically.
They fix it with a warning banner telling people to double check everything, and call the incident closed without ever gating the next model version that reaches production.

How to use it live. Say the reframe before any story: "the point of proving a provider incident is that you're accusing something you don't control, so the bar for saying it out loud is a reproducible replay, not a hunch that lines up with the timing." That buys you the room to actually run the test, instead of reciting "we opened a ticket and we're monitoring closely."

Flashcards (click a card to flip it)

1 · THE METHOD
What method fits a question like this, and why not FLIPS?
Tap to flip
ANSWER
TRACE. Nothing here is a person's habit snapping. It's a detective problem, separating our own code from a provider's quiet change, ruling out suspects with evidence instead of a guess.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Sorcha Delacombe, incident lead for Precedo at Corwith Legal Technologies, the tool that drafts the case citations inside a litigation motion.
3 · THE NEAR MISS
What almost went out the door before anyone caught it?
Tap to flip
ANSWER
A brief citing Halbrook v. Corven Timber for a holding the case does not support, caught by a supervising partner forty minutes before an e-filing deadline.
4 · THE SPLIT
What's the split that separates it's us from it's them here?
Tap to flip
ANSWER
Retrieval-only calls, flat and clean, against calls where the model has to paraphrase a holding, which climbed to nine point eight percent. The second group carried every wrong citation.
5 · THE OLD DECISION
What decision would you take back, and why did it make sense when it was made?
Tap to flip
ANSWER
Tracking Cartwell's always-newest "latest" alias instead of a pinned, dated snapshot. It made sense because it meant free upgrades with zero engineering work, until an upgrade nobody tested reached a filed brief the same day it shipped.
6 · THE NUMBER
Fill in the blank: the nightly eval ran at about ___ percent normally, reached ___ percent on the night of the near miss, out of a held out set of ___ real citations.
Tap to flip
ANSWER
1.3 percent normally. 5.6 percent on the night of the near miss. 800 citations checked every night.
7 · THE REPLAY
Same bad window, new design, what changes?
Tap to flip
ANSWER
Pin production to the last known good snapshot the moment the replay confirms it, route the riskiest calls to a verbatim-quote mode, and the eval miss rate returns to about 1.2 percent within about six hours, not six days of waiting on the provider.
8 · CROSS PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and is the confirmed cause the same or different?
Tap to flip
ANSWER
Sagewell, a customer support drafting assistant at Brightwell Goods. The same mechanism, Cartwell's load-based fallback on its "latest" alias, confirmed honestly as a repeat rather than stretched into something new.

Check yourself Score: 0 / 0

True or false
1. True or false: because Cartwell's changelog entry and the near miss both fell inside the same nine day stretch, the timing alone is enough to call this a provider incident.
  • True
  • False
Show hint
Ask what the actual E step, the evidence test, proved that the timeline alone did not.
Show answer
False. Timing lining up is a hypothesis, not proof. The actual proof came from replaying the same frozen inputs against today's live endpoint and a dated snapshot and seeing the difference land on identical input.
Multiple choice
2. Why does the recut by call path, retrieval-only against model-synthesis, matter more here than a recut by client or region?
  • A. Because different clients are billed at different rates.
  • B. Because it's the split that shows the damage lives specifically in calls that need the model's own judgment, not in data the team touched.
  • C. Because model-synthesis calls are always slower to return, so they're easier to log.
  • D. Because retrieval-only calls don't get recorded in the nightly eval at all.
Show hint
Check what the two segments looked like once Sorcha actually ran the recut.
Show answer
B. A recut by client or region shows every firm affected a little, which looks like nothing in particular. Cutting by call path shows one specific kind of work carrying the entire incident.
Fill in the blank
3. The nightly golden set eval checks ___ real citations. The miss rate went from about ___ percent normally to about ___ percent the night of the near miss.
Show hint
Check the numbers in "Let's learn" and flashcard 6.
Show answer
800; 1.3; 5.6. A jump from thirteen wrong citations a night to forty five is what made the drift finally visible, but the drift itself had been building for nine days before that.
Short answer
4. What old decision does this answer take back, and why did it make sense when it was first made?
Show hint
Look for the choice told as a memory of an integration meeting, not a dial someone could just turn up.
Show answer
Model answer: Pointing production traffic at Cartwell's "latest" alias instead of a pinned, dated snapshot gated by the golden set eval. It made sense because it meant every real improvement Cartwell shipped reached Precedo automatically, with zero engineering work, which looked like a pure win for two years until an untested change reached a filed brief the same day it shipped.
Short answer, apply it yourself
5. Think of a tool you use that depends on someone else's API or service you don't control. What's one thing you'd want to test with a same-input replay before you ever blamed "their side" for a problem?
Show hint
Look for a case where you'd normally just assume the other company's system is at fault.
Show answer
Model answer: A budgeting app that auto-categorizes transactions using a bank's data feed. Before blaming the bank's feed for a miscategorized purchase, replay the same transaction description through the categorizer against yesterday's cached feed data and today's live feed, to see whether the categorizer changed or the underlying data did.
Short answer, the number question
6. If the miss rate had only drifted from 1.3 percent to 2.1 percent, and never produced a near miss like Amrita's, would the same evidence test still be worth running? Why or why not?
Show hint
Think about whether a small average change can hide a much bigger spike inside one segment.
Show answer
Yes. A quiet drift is exactly the case TRACE warns about: the metric moves weeks before anyone notices, and a small aggregate change can hide a much larger spike inside one segment, like the synthesis calls here. Waiting for a dramatic near miss before running the replay is how the real start date gets missed by over a week, almost the way it nearly was here.
Before this goes on the record
Why this works
Tests whether you treat "it's the provider" as an accusation that needs proof, not a convenient place to point when your own code shipped in the same window. It also checks whether you know a provider incident is usually a change to which specific kind of call fails, not a blanket description of a bad day.
Follow-up traps
"What if you can't reproduce it, because the fallback only triggers under real production load, not your test replay?" Response: run the same replay at your own peak traffic hour instead of a quiet one, since a load-based failure often only shows up under load. If it still won't reproduce, widen the sample rather than downgrading to a guess.

"Isn't pinning to an old snapshot just refusing free improvements out of fear?" Response: no, because the block is temporary and reversible. Nothing stops the newer snapshot from being promoted the moment it clears the same golden-set bar, at least ninety eight percent match on the eight hundred citation set, three nights running. The difference is that promotion becomes a decision instead of something that happens to you.
If pressed
The detail that confirmed this as a load-based fallback rather than a clean version bump was time of day. The same forty fact patterns, replayed against the live endpoint at six in the morning Eastern and again at four in the afternoon Eastern, when court filing deadlines cluster, came back accurate at six and wrong more often at four, on a model whose reported name and version string never changed at all.
From U2xAI Academy

From answering questions to owning outcomes.

A live workshop where you ship a working AI agent, defend a launch decision, and walk away with a portfolio recruiters can't wave off, not just more questions to study.

  • A live AI agent you actually shipped
  • A launch decision you can defend under pressure
  • An interview-ready portfolio, not more flashcards
Know more