The Decision Audit: Questions to Ask After a Bad Call So It Does Not Happen Twice

A practical post decision audit for support ops and CS leaders. Use these decision audit questions to reconstruct what was true at the time, test signal quality, separate bad luck from bad process, and install guardrails and tripwires so the same failure pattern does not repeat.

Lucía Ferrer
Lucía Ferrer
22 min read·

When a support decision backfires: freeze the story and start the audit clock

When a support ops decision backfires, the story starts forming before the data finishes loading.

One version says the decision was obviously wrong. Another says the decision was fine but execution was a mess. A third says the world changed and no one could have predicted it. All three can be partly true. None of them are evidence.

A decision audit is how you keep the story from becoming the record.

It’s not a blame session. It’s not a victory lap for whoever “called it” in a hallway chat. It’s a short, structured window where you capture what was known at the time, test whether the signals were trustworthy, and decide what to change so you don’t pay for the same surprise twice.

Here’s a realistic support ops backfire. You adjust routing so more tickets qualify for a priority path. The goal is to cut VIP wait time. Two days later:

  • Overall backlog is up 40%
  • First response time is up 8 hours for non-priority customers
  • CSAT drops 0.4

Meanwhile VIPs are thrilled, so half the company calls it a win.

This is exactly where teams get burned: arguing from outcomes makes you dumber. You need a way to separate “we chose this tradeoff knowingly” from “we got surprised by a blind spot.”

Start the audit clock while evidence is still warm.

  • If the blast radius is contained and you mostly need to prevent narrative drift, run a 30–60 minute decision audit. Your output is a frozen snapshot of T0 (the decision moment), plus a short list of what you need to verify.
  • If the impact is broad or politically loud, do the deeper version over 2–5 days. That buys you time to pull ticket samples, reconcile dashboards that disagree, and talk to frontline leads who can tell you what actually changed on the floor.

To keep the room safe and useful, set rules of engagement upfront. Don’t over-engineer them—just make them explicit.

  1. No hindsight language. Ban “we should have known” and “it was obvious.” Replace them with “what did we know then?”

  2. Separate the decision from the outcome. A good process can still lose. A bad process can still win.

  3. Assumptions are first-class inputs. If an assumption broke, that’s a learning target—not a character flaw.

  4. Evidence beats seniority. Confidence is not a data source.

Practical tip: nominate a neutral facilitator (even a rotating one) whose only job is to stop the meeting from slipping into story mode. When emotions run hot, a facilitator is cheaper than re-litigating the same argument next quarter.

If you do nothing else today, do one concrete thing: assign one person to capture the “scene photo.” Export or screenshot the key dashboards with filters visible and timestamped. People don’t lie in audits nearly as often as dashboards drift.

Practical tip: also save the decision’s “paper trail” where it actually lived—Slack thread links, the ticket-routing change request, the announcement message, the JIRA comment where someone said “small risk.” The audit goes faster when you’re not relying on everyone’s memory (which is famously… creative).

Reconstruct the decision record: what we believed, what we saw, what we ignored

The fastest way teams get burned in a decision review is reconstructing the past from current pain. Your brain will happily rewrite T0 so it matches today’s outcome. The meeting will feel decisive. The next decision will be worse.

Your goal here is simple: rebuild the decision record as it existed when you made the call, using only what was reasonably available then.

When you do this well, two useful things happen.

First, people can disagree without it getting personal, because you’re debating inputs and logic—not competence. Second, you end up with a reusable artifact you can compare across decisions, instead of reinventing “what good looks like” every time something blows up.

Common mistake: trying to run “decision audit questions” as a freeform discussion. The result is usually a collage of anecdotes plus one new rule nobody follows. Write the record first, then interrogate it.

Start by naming T0 and writing a one-paragraph snapshot of the decision moment.

  • What was the goal?
  • What constraint was binding?
  • What options were on the table?
  • What was the urgency?
  • What did you expect to happen in the first 24–48 hours?

In support, constraints are rarely abstract. They sound like:

  1. “We can’t add headcount this month.”

  2. “Weekend coverage has one specialist instead of three.”

  3. “Engineering can’t ship the fix for two weeks.”

  4. “Enterprise customers demand a human response within four business hours.”

Now list the options you actually considered—including the unglamorous ones.

“Do nothing for 48 hours and collect better evidence” is an option. Teams skip it because it feels passive, but audits often reveal it was the best option available.

Next, make assumptions explicit. If you don’t write them down, you’ll argue about them later as if they were facts.

Support assumptions that matter more than you think:

  • Demand assumptions: volume, spikes, and mix by issue type
  • Staffing assumptions: who’s available, how quickly they can context-switch, what the schedule really looks like
  • Channel mix assumptions: chat vs email vs phone, deflection rates, after-hours behavior
  • Customer tolerance assumptions: which segments will accept slower first response in exchange for better resolution quality

Concrete anchor number one: an assumption that breaks quietly.

Example: “Priority-eligible tickets will stay under 18% of daily intake.” It sounded reasonable because that was the last four weeks’ average.

What went wrong: after a billing email went out, “priority-eligible” tickets spiked to 32% for three days. That didn’t just add work—it changed the work. More tickets entered the path that required senior agents, creating a senior-agent bottleneck and starving the rest of the system.

This doesn’t automatically mean the decision was bad. It means the decision was conditional and you didn’t capture the condition.

Now inventory the evidence you used. Don’t clean it up. Just list it.

  • Dashboards and queue reports
  • A manual sample of recent tickets
  • Escalations from account managers
  • QA notes and rubric scores
  • Frontline lead judgment from recent shifts
  • Customer verbatims from chat transcripts

This is where you prevent the audit from being poisoned by retrospective drift.

Time-stamp your evidence. If you pull a report, export it and name it with date, time, and filters. If you use a dashboard view, screenshot it with the filter panel visible.

Support metrics are notorious for definitional churn:

  • categories get merged
  • “first response” quietly starts counting an automated acknowledgment
  • a tag gets applied more often because someone discovered it exists

If you audit with today’s definition of yesterday’s number, you’ll learn nonsense.

If you want a simple reference structure for capturing artifacts without inventing your own bureaucracy, this template is a useful starting point you can adapt to your environment: [1]

Now go looking for missing context. Most bad calls are made with real data—just not representative data.

Concrete anchor number two: a coverage gap that looks like truth.

Example: you optimized routing based on weekday chat volume because chat is high-visibility. The backfire happened in weekend email, where complex billing cases pile up and staffing is thinner. Your sample was honest, and it was biased.

To test representativeness, you don’t need a thesis. You need a few cuts that expose the usual blind spots:

  • Segment cut: compare top accounts vs the long tail. Escalations come from the top. Volume often lives in the long tail.
  • Time cut: compare business hours vs off-hours, or weekday vs weekend. Many “we’re fine” dashboards are weekday dashboards.
  • Issue-type cut: if you route based on broad categories, you can accidentally concentrate the hardest tickets into the least-staffed lane.

Finally, write the counterfactual prompt that turns this from a postmortem into a learning system.

Ask: “At T0, what information would have changed our mind?”

Force the answer to be specific:

  • “If we knew the priority share would exceed 25% of intake for more than 24 hours, we wouldn’t have expanded eligibility.”
  • “If we had transfer rate by issue type, we would have predicted the handoff storm.”
  • “If we had backlog age distribution by channel, we would have seen email aging while chat looked healthy.”

That answer is gold. It tells you exactly what to instrument next time and prevents the empty promise of “we’ll be more careful.”

Here’s a lightweight decision record template that stays useful without turning into paperwork theater:

  • Goal: the outcome you wanted
  • Constraint: the thing you could not change
  • Options considered: include doing nothing
  • Assumptions: demand, staffing, channel mix, customer tolerance
  • Evidence used: with timestamps and filters
  • Risks: who gets hurt if you’re wrong
  • Decision rule: what triggers go, pause, or rollback
  • Owner: who is accountable
  • Review date: when you’ll check again even if it looks fine

That last field isn’t bureaucracy. It’s how you avoid discovering the failure only after customers do.

Diagnose what broke first: signal quality, execution reality, or a changed environment

Once you’ve reconstructed T0 cleanly, you can stop arguing about motives and start diagnosing mechanics.

The question in this phase isn’t “who messed up.” It’s “what broke first.” Get this wrong and you’ll fix the wrong layer—and compound the damage.

A simple three-bucket triage keeps you honest:

  • Evidence failure: the decision relied on signals that were misleading, incomplete, or interpreted incorrectly.
  • Execution failure: the decision may have been sound, but adoption, training, routing behaviors, handoffs, or tooling reality didn’t match what the decision assumed.
  • World changed: the decision was reasonable at T0, then demand, customer behavior, product stability, or channel mix shifted in a way that invalidated the assumptions.

If you need a meeting-friendly decision tree, keep it blunt:

  • Did we agree on what the key metrics meant at T0?
  • If no, start in evidence failure.
  • If definitions were stable, did frontline behavior change the way we expected?
  • If no, start in execution failure.
  • If definitions were stable and behavior changed, did volume or mix shift sharply right after the decision?
  • If yes, start in world changed.

You might have multiple buckets in play, but picking a primary one prevents the classic failure where you “fix policy” to solve an adoption problem.

Now run signal integrity checks. These aren’t fancy; they’re the difference between a real diagnosis and dashboard astrology.

You want at least three tests.

Test one: reconcile counts across sources.

If your intake count in one report says 1,200 tickets and another says 900 for the same day, you don’t have a decision problem yet. You have a measurement problem. Teams waste hours debating conclusions downstream of this mismatch.

Test two: align timestamps between intake, first response, and resolution.

This is where teams get burned by invisible window shifts. Intake might be logged in local time. Resolutions might be logged in UTC. First response might be measured from ticket creation, but ticket creation might happen after an email parser delay.

When those windows are misaligned, “first response got worse” can be a reporting artifact.

Test three: break outcomes into cohorts that match the decision.

If you changed routing for a segment or channel, measure by that same segment or channel. Overall metrics are a blender; they hide the exact place you intervened.

Test four (if you have time): check for proxy gaming and Goodhart effects.

If you push hard on first response time, the system will find ways to get a “first response” without doing the work. That can be completely unintentional. Agents respond to what you reward. When that happens, the metric improves and customers still feel stuck.

Concrete anchor number one in this section: a metric definition trap.

Example: “first response” is defined as the first message sent, including automated acknowledgements. You added more automation as part of the routing change. Your first response time chart improves, and your time to first human gets worse.

If you don’t split those two, your audit will blame routing when the real problem is that your metric stopped representing customer experience.

Next, check for coverage gaps that fool operators because they’re invisible on the default dashboard.

  • Channel skew: you monitor chat constantly, while email quietly ages.
  • Segment skew: you hear from top accounts and exec escalations (important), but miss the long tail where volume and reputational slow leaks live.
  • Time-of-day skew: the weekday view looks stable; the weekend shift absorbs the failure.

Now decide what to trust when metrics conflict. This is a common support leadership problem because CSAT, SLA, and backlog often tell different stories.

When diagnosing what broke first, start with operational flow metrics that move early and are harder to “spin”:

  • Backlog age distribution, not just backlog count. A flat backlog can hide tickets getting older.
  • Time to first human response, separated from automation.
  • Transfer rate and handoff count by issue type. Transfers spike when ownership is unclear or routing creates ping-pong.
  • Reopen rate and repeat contact rate. These are quality smoke detectors.

Then look at SLA attainment with context. SLA can improve on paper if you change categorization or move tickets into a different clock.

Use CSAT as a lagging confirmation, not a steering wheel. Survey coverage and timing matter. If the surveyed population changed, your CSAT shift might be about who you asked—not what you did.

Concrete anchor number two in this section: an execution and adoption trap.

Example: routing rules changed, but macros and internal notes didn’t. Agents keep sending tickets back to the old queue because that’s where the macro points. Transfer rate rises, backlog grows, and leadership blames staffing.

The fix isn’t “undo the decision.” The fix is closing the adoption loop and measuring whether the new routing is actually being used.

If you only have an hour, you can still get to a high-confidence primary bucket:

  • Pull a small sample of tickets from before and after the change. Look for what happened, not what the dashboard implies. Did the ticket hit the intended queue? Did it transfer? Did it reopen? Did the customer get a human quickly?
  • Ask one frontline lead a precise question: “What are you doing now that you weren’t doing last week?” If the answer is “not much,” you almost certainly have an execution gap.

By the end of this section, you should be able to say one sentence with confidence: we’re mostly dealing with a signal problem, an execution problem, or a world-changed problem.

That one sentence determines what you fix next.

Separate bad luck from bad process: the question bank that grades decision quality

Assignment strategy Best for Advantages Risks Recommended when
During: Document Assumptions & Info Complex decisions, team collaboration Audit trail, identifies knowledge gaps, shared understanding Time-consuming, bureaucracy, incomplete data Imperfect information, multiple data sources
Quarterly/Annually: Strategic Decision Audit Long-term strategy, major investments Evaluates overall decision quality, identifies systemic issues, informs future strategy Too infrequent for tactical adjustments, resource-intensive Assessing major strategic shifts, reviewing core business models
24-48 Hours After: Initial Outcome Check Early course correction, assumption validation Catches immediate issues, prevents escalation Premature judgment, misinterpreting noise as signal Immediate, observable effects. part of a sequence
Before: Define Decision Criteria High-stakes, complex decisions Clear success metrics, reduces bias, sets expectations Analysis paralysis, rigid criteria, misses emergent factors Significant impact, multiple stakeholders, high uncertainty
During: Implement 'Kill Switch' / Reversal Plan Experimental, high-risk initiatives Limits downside, builds confidence, quick pivots Over-reliance, delayed commitment, perceived indecision Uncertain outcome, reversible impact, critical response needed
Weekly/Bi-Weekly: Decision Review & Learning Continuous improvement, team development Identifies patterns, refines process, fosters learning culture Blame-oriented, superficial reviews, lack of follow-through Regularly making similar decisions, long-term optimization

You can do everything “right” and still get punched in the face by variance.

Support volume spikes. Product incidents happen. A new channel explodes. One customer submits 200 tickets because their integration broke. If your decision audit only asks “did we get the outcome we wanted,” you’ll punish good process and reward lucky outcomes.

The point of decision audit questions is to grade the decision process separately from the result—and then improve the process so your next call has better inputs and safer downside.

A useful mindset shift: outcomes are data, not verdicts.

If you want extra perspective on reflective review without turning it into therapy homework, this article is a solid primer: [2]

Before the question bank, pick a simple rubric and score the decision quality independent of outcome. Keep it light enough that people actually use it.

Use four dimensions. Score each 1 to 5:

  • Clarity: did we state the goal and the binding constraint in plain language?
  • Alternatives: did we consider at least two real options, including smaller tests or delaying for better evidence?
  • Evidence strength: was evidence timestamped, representative, and connected to named assumptions?
  • Reversibility: did we understand whether we could undo it, and did we set a rollback trigger?

Interpretation stays simple:

  • If most scores are 4–5, your process is worth repeating even if the outcome hurt.
  • If you’re mostly 2–3, you leaned on judgment and luck and you need tighter guardrails.
  • If you have 1s, treat it like a safety issue. You’re guessing in a live customer system.

Reversibility changes which decision audit questions matter most.

A reversible support decision is something you can unwind in hours. Example: adjusting routing thresholds for one queue, or limiting a new policy to one segment with an explicit rollback.

A less reversible decision creates a customer promise or lasting expectation. Example: “We offer phone support to all plans,” or “We guarantee two-hour response for this tier.” Rolling that back costs trust, not just time.

Decision rule you can actually use:

  • Reversible decisions can move with thinner evidence only if monitoring is tight and rollback is real.
  • Less reversible decisions demand stronger evidence and explicit tradeoff alignment before you ship.

Now name tradeoffs. If you don’t name them, the org will name them for you afterward.

In support, the constraint triangle shows up in different clothing, but it’s always there:

  • If you optimize for SLA, you’re choosing speed and predictability. You might accept more templated responses, more handoffs, or less depth.
  • If you optimize for backlog reduction, you’re choosing throughput and system health. You might accept slower experiences short-term to prevent aging tickets becoming a reputation problem.
  • If you optimize for quality, you’re choosing correct resolution and fewer reopens. You might accept longer handle times and worse short-term SLA.
  • If you optimize for cost, you’re choosing efficiency and deflection. You might accept that edge cases and high-touch needs feel less supported.

Write the chosen tradeoff in a sentence that makes you slightly uncomfortable. That’s how you know it’s real.

“We chose VIP speed over long-tail throughput for two weeks.”

Now anchor this section with two concrete examples so the rubric doesn’t float off into theory.

Concrete anchor number one: a decision that “worked” but was still low quality.

You cut backlog by auto-closing tickets after seven days with no customer reply. Backlog numbers look great. CSAT stays flat because surveys go out less often on those tickets.

Two weeks later, repeat contact rate rises because customers reopen or create new tickets. The outcome looked good at first, but the process was poor because the evidence didn’t test for silent quality regression.

In the audit, evidence strength should score low and reversibility medium. The fix isn’t “never auto-close.” The fix is guardrails that watch repeat contact and reopen rates.

Concrete anchor number two: a decision that “failed” but was high quality.

You added a specialist triage step for complex integration tickets because you saw transfer rates spiking. For a week, first response worsened because specialists were scarce. Then reopen rate dropped and resolution quality improved.

The short-term outcome looked worse on SLA, but the process was good because you named the tradeoff and watched the right leading indicators. The audit should protect that learning, not punish it.

The table below is a useful reminder that different decision moments call for different audit rhythms.

Now for the copy-friendly decision audit question bank. Use it as the agenda so you don’t skip the uncomfortable parts when the room is emotional.

Once you answer these, turn the learning into a decision rule for next time. A decision rule connects evidence to action so you’re not re-litigating the same argument later.

Example: “If priority-eligible tickets exceed 25% of intake for two consecutive days and backlog age p95 rises above 72 hours in the billing queue, narrow eligibility within 24 hours and revisit weekend specialist coverage.”

That’s the point. Next time the pattern appears, the system tells you what to do before customers start telling you.

Failure modes and guardrails: how to catch the next bad call before customers do

A decision audit that ends with “we learned a lot” is comforting and useless. The value comes from what you harden afterward. Guardrails are the difference between learning and recurring pain.

Start by calling out common audit failures so you don’t reproduce them in the audit itself:

  • Scapegoating: blaming an individual or a team is emotionally efficient. It’s also how systems stay broken.
  • Story-first analysis: deciding what happened, then hunting for numbers to support it.
  • Metric shopping: switching dashboards until you find a chart that proves your preferred conclusion.
  • Hindsight bias: treating uncertainty as if it was predictable.
  • Overcorrection: making a large policy swing to fix what was actually a narrow execution gap.

Now name support-specific failure modes that show up again and again after “bad calls.” You want at least five in your team vocabulary:

  • Survivorship bias: you only hear about tickets that escalated or accounts that complained loudly, so you optimize for the loud minority.
  • Escalation bias: the escalation path becomes the de facto queue, and you measure the wrong funnel.
  • Goodhart’s law: a metric becomes a target and stops being a useful measure.
  • Hidden queue growth: work moves into a place you don’t measure well, like a specialist queue or a “needs info” status that quietly ages.
  • Silent quality regression: backlog and SLA improve while reopen rate and repeat contacts rise.
  • Definition drift: your metrics change meaning because tags, categories, or automations changed.

If those sound abstract, here’s the operator version: the system looked fine until it didn’t, because you were staring at the wrong corner.

So what breaks first in support systems?

  • Queues break when prioritization rules concentrate work in one lane without matching capacity.
  • Handoffs break when ownership is unclear, when a new routing rule creates ping-pong, or when specialists become the bottleneck.
  • Knowledge breaks when macros, internal docs, and policy explanations lag behind the decision.
  • Coverage breaks when volume shifts by channel, segment, or time and staffing doesn’t.

Guardrails should map to these failure points. Guardrails don’t need to be complicated. They’re early warnings plus a pre-planned response.

Start with leading indicators, not lagging outcomes. Lagging outcomes like monthly SLA attainment and CSAT arrive after customer harm has already happened.

Leading indicators that work for most support ops decisions:

  1. Backlog age distribution, especially p90 and p95

  2. Time to first human response, separated from automation

  3. Transfer rate and number of touches per ticket, broken out by issue type

  4. Reopen rate and repeat contact rate

  5. First contact resolution rate

  6. Queue entry and exit rates by channel, to spot hidden queue growth

  7. Escalation rate split by severity, so you don’t treat “noise escalations” as equivalent to true fires

Now attach tripwires. A metric without an action is trivia—and trivia is how teams lull themselves into thinking they’re monitoring.

Concrete anchor number one: a leading indicator tripwire that actually protects customers.

Example: “If backlog age p95 exceeds 72 hours for two consecutive days in the billing queue, pause the eligibility expansion and revert routing criteria within one business day. Then run a targeted sample of 30 tickets to confirm whether the handoff count increased.”

It has a threshold, a timeframe, and an action. It also forces verification so you don’t revert based on noise.

Concrete anchor number two: a staged rollout and rollback plan that matches reversibility.

Example: you want to reroute all enterprise chat to a specialized team to improve resolution quality.

Instead of flipping it for everyone, you stage it for one region or one time window for 24 hours. You compare transfer rate, time to first human, and reopen rate for that cohort against the rest. You set a rollback trigger that a single owner can execute without a permission parade.

If the cohort shows a transfer spike above a defined threshold, you revert immediately and update macros and routing ownership before trying again.

Teams get burned here because they say “we can roll back” but they never decide who can do it, what number triggers it, or how quickly it must happen.

If rollback requires three approvals and a calendar meeting, it’s not rollback. It’s hope.

This is also where you protect the audit from getting personal. After a backfired decision, people want a villain. Guardrails are the alternative: “We don’t need a villain; we need earlier detection.”

If you want a broader framing on audit logs and why frozen evidence matters (even outside software incidents), this reference is a useful mental model: [3]

Now write a compact guardrails checklist you’ll reuse for future support ops decisions:

  1. Name the tradeoff you’re choosing and one metric you’re willing to worsen.

  2. Pick three to six leading indicators that should move first.

  3. Define one tripwire per indicator, including threshold, timeframe, and action.

  4. Assign one adoption owner responsible for training, macros, routing ownership, and escalation paths.

  5. Decide reversibility and match evidence burden. Thinner evidence is fine only with strong tripwires and a fast rollback.

  6. Schedule the first review within 24–48 hours, then again at week two, even if early numbers look good.

Finally, run a quick pre-mortem before the next big call. Ten minutes here can save weeks later.

Ask: “Three weeks from now, if this is labeled a failure, what likely broke first?”

Then ask: “What are we optimizing so hard that the system will game it without meaning to?” Metrics are like a well-trained dog: they’ll do exactly what you reward—and they’ll look proud about it.

Close the loop: write the one-page learning and the ‘next-decision’ trigger

Decision audits fail quietly when they end as a document in a folder nobody visits.

Operational closure is the whole game: a one-page learning artifact, an owner, and a trigger that forces the learning to show up in the next decision.

Keep the one-pager short enough that a new support lead can read it in five minutes and understand what changed. If it’s longer than that, it turns into a reference people swear exists and never open.

Use this one-page outline:

  1. Decision and date: one sentence, plus T0.

  2. What we were optimizing for and the binding constraint.

  3. What happened: call out key metric shifts, including at least one leading indicator.

  4. What broke first: signal quality, execution reality, or world changed.

  5. The assumptions that broke and the assumptions we’ll use next time.

  6. The updated decision rule: include the go, pause, and rollback triggers.

  7. Guardrails and monitoring: which tripwires you installed and how often you review.

  8. Owners and review dates: one for the learning doc, one for the operational change (if different).

Concrete anchor for this section: a future trigger that prevents a repeat.

Example: “If backlog age p95 in the billing queue exceeds 72 hours for two days, we must revisit priority eligibility within 24 hours and run a 30-ticket sample to verify handoff counts. If transfer rate is above the threshold, we revert routing within one business day.”

Now decide dissemination. Share patterns broadly, keep sensitive details local.

Broadcast to anyone who might repeat the decision type:

  • the assumptions that broke
  • the metric definition trap you discovered
  • the tripwires that would have caught it earlier

Keep local anything person-specific, like coaching feedback or performance issues. The goal is organizational memory, not public shaming.

If you want a general reference on post-decision review habits, this is a straightforward read: [4]

Close with a ritual you can actually repeat:

  • Within 48 hours of a backfired call, schedule a 45-minute decision audit session and assign one person to freeze evidence with timestamped exports and screenshots.
  • Within one week, publish the one-page learning with owners and review dates.
  • Before repeating the same kind of decision, confirm the decision record fields exist, the tripwires are set, and rollback can be executed quickly.

That’s how you get better without getting slower.

You don’t need perfect decisions. You need a system that becomes less wrong faster—and notices drift before your customers do.

Sources

  1. github.com — github.com
  2. decision-mastery.com — decision-mastery.com
  3. agentpatterns.tech — agentpatterns.tech
  4. howtothink.ai — howtothink.ai