Skip to main content

Teardown rubric

GTM Systems Teardown Rubric

TR
Tom Regan·14 min read·Updated
Quick Answer
A GTM systems teardown is a read-only inspection of how an outbound or inbound system actually behaves, scored against eight checks: ownership, latency, idempotency and dedup, suppression, consent and region, enrichment waterfall, CRM write-back and reporting, and a verification loop. Each check asks one yes or no question, names the failure smell, and says how to measure it.

A GTM system is usually judged by its dashboards. A teardown judges it by its mechanics: what happens to one lead, one event and one send as it moves through forms, enrichment, routing, alerts, the CRM and sequences. This rubric is the standard Artemis GTM uses for that inspection, published so any GTM engineer can run it on their own system. Its vocabulary comes from the GTM Systems Pattern Library, and every check points at levels of the Pipeline Debugger where you can practice spotting the failure. If you want revenue leaks priced in dollars rather than mechanics inspected, the free AI GTM Engineer diagnostic is the better starting point.

How do you use the rubric?

Run it read-only first. A teardown never changes a live system: no edited workflow, no test lead pushed through a production form, no record merged while you look. Changing the system while you inspect it destroys the evidence you came for, and it pages real reps. The discipline has its own pattern, the Read-Only Audit Pass.

  1. Get read-only access. A read-only CRM user, exports of workflow and sequence definitions, and admin views of the alerting and enrichment tools. Every check below can be scored from records and configuration alone.
  2. Trace real records, not the diagram. Pick recent leads from each source and follow their field history: when each was created, who owned it, when it was alerted, claimed and touched. The architecture slide shows intent; field history shows behavior.
  3. Score each check Pass, Fail or Unsure. Pass needs evidence in the data. Unsure is a legitimate result: it means the system cannot show you the answer, which is a measurement gap in its own right.
  4. Fix in number order when several fail. The early checks are inputs to the later ones: latency is meaningless without an owner, reporting is meaningless without write-back, and a verification loop needs the other seven to have something to verify.

The eight checks at a glance

Each check is a yes or no question an engineer asks of the system, with the smell you notice when the answer is no. The sections after the table add the measurement, the fix, the patterns and the debugger levels for each one.

No.CheckQuestionFailure smell
1OwnershipDoes every inbound lead, account and alert have exactly one named owner of record, set by a rule at the moment the record is created?Leads sit with an empty owner or with an integration user as owner, reps ask in Slack who has an account, and two reps work the same buyer while another lead waits with nobody.
2LatencyDoes a hand-raise (a demo request, a contact-sales form, a reply) reach a human who acts on it inside the sub-5-minute standard, around the clock, with an escalation when nobody does?Response time is a feeling rather than a number, the median only looks healthy because off-hours leads are left out of it, and a form filled on Friday evening gets its first touch on Monday.
3Idempotency and dedupWhen the same event arrives twice (a resubmitted form, a retried webhook, a visitor back in a new session), does the system still create one record, one sequence enrollment and one alert?Contacts that differ only by letter case or a trailing space in the email, a buyer enrolled in two sequences by two workflows, and an alert channel where the same visitor appears several times a week.
4SuppressionBefore any outbound send, is every recipient checked against one suppression list that holds customers, open opportunities, unsubscribes, bounces, competitors and do-not-contact requests?A current customer gets a cold first-touch email, a rep's open deal receives an SDR sequence, an address that unsubscribed in one tool is mailed by another, and suppression lives in several tool-level lists that disagree.
5Consent and regionDoes visitor identification respect the visitor's region: opt-out in the United States, opt-in everywhere else, and never person-level in the EEA, the UK or Switzerland?The identification script loads before the region is known, European visitors arrive in the alert channel as named people, a Global Privacy Control signal is ignored, and nobody can say which rule applied to which identified visit.
6Enrichment waterfallWhen the first enrichment provider returns nothing or a stale value, does the record fall through to the next source in a fixed order, with the source and date of every field recorded?Records sit with a blank title, company size or industry because one provider missed, sequences go out with a generic greeting or the wrong persona copy, and nobody can tell which vendor supplied a field or when.
7CRM write-back and reportingDoes every step write its timestamp and outcome back to the CRM record, against one shared handoff definition, so the funnel report is computed from fields instead of rebuilt from tool dashboards?Marketing and sales report different MQL counts for the same month, response time cannot be computed because only the create date is stored, and accepted, rejected and recycled leads look identical in the CRM.
8Verification loopIs there a scheduled end-to-end test that pushes a synthetic lead through the live system and checks every expected outcome, so a break is found by the test and not by a buyer?A workflow stopped silently after a token expired or a field was renamed, the team found out from a lost deal or a complaint, and "it worked when we launched it" is the only evidence that it works now.

Check 1: Ownership

Question

Does every inbound lead, account and alert have exactly one named owner of record, set by a rule at the moment the record is created?

Failure smell

Leads sit with an empty owner or with an integration user as owner, reps ask in Slack who has an account, and two reps work the same buyer while another lead waits with nobody.

How to measure it

Count records created in the window where owner_id is null or points at an inactive or integration user, and count accounts whose open contacts carry more than one distinct owner_id. For any record older than the assignment step, both counts should be zero.

The fix

Resolve the owner in one place and in a fixed order: existing account owner, then the territory table, then a round-robin pool that respects availability, then a named fallback owner. Write owner_id and owner_assigned_at in the same step that creates the record, and alert on any record that leaves that step without both.

The owner-versus-rotation decision itself is covered in round-robin vs ownership routing.

Patterns

Debugger levels that exercise this check

Play them in the Pipeline Debugger.

Check 2: Latency

Question

Does a hand-raise (a demo request, a contact-sales form, a reply) reach a human who acts on it inside the sub-5-minute standard, around the clock, with an escalation when nobody does?

Failure smell

Response time is a feeling rather than a number, the median only looks healthy because off-hours leads are left out of it, and a form filled on Friday evening gets its first touch on Monday.

How to measure it

Stamp lead_created_at and first_touch_at on every inbound record and compute response_minutes = first_touch_at - lead_created_at. Report the median and the slowest decile across all 168 hours of the week, split by source and by in-hours versus off-hours, and count records where first_touch_at is still null.

The fix

Start a timer at lead_created_at that escalates while claimed_at is empty: to the pool at the first threshold, to a manager at the second. Send an automated first touch to after-hours leads so the buyer hears back in minutes, and log it apart from the human first touch so it never flatters the number.

The full build is in the speed-to-lead implementation guide, the alert and timer layer in Slack and SMS lead alerts, and off-hours coverage in after-hours lead response.

Patterns

Debugger levels that exercise this check

Play them in the Pipeline Debugger.

Sources

Check 3: Idempotency and dedup

Question

When the same event arrives twice (a resubmitted form, a retried webhook, a visitor back in a new session), does the system still create one record, one sequence enrollment and one alert?

Failure smell

Contacts that differ only by letter case or a trailing space in the email, a buyer enrolled in two sequences by two workflows, and an alert channel where the same visitor appears several times a week.

How to measure it

Group contacts by normalized_email (lowercased and trimmed) and accounts by normalized_domain, and count groups holding more than one record. For events, log an event_id or a hash of source, payload key and time bucket, and count keys processed more than once. For alerts, count alerts per contact_id inside one dedup window.

The fix

Give every inbound event an idempotency key and refuse a second write with a key already seen; upsert on normalized_email instead of inserting. Thread repeat signals for one contact under the original alert for the length of a dedup window instead of posting a new one.

Duplicate records are also a data-quality problem upstream of any workflow; see CRM data quality.

Patterns

Debugger levels that exercise this check

Play them in the Pipeline Debugger.

Sources

Check 4: Suppression

Question

Before any outbound send, is every recipient checked against one suppression list that holds customers, open opportunities, unsubscribes, bounces, competitors and do-not-contact requests?

Failure smell

A current customer gets a cold first-touch email, a rep's open deal receives an SDR sequence, an address that unsubscribed in one tool is mailed by another, and suppression lives in several tool-level lists that disagree.

How to measure it

Join each sequence's enrolled contacts against customer accounts, open opportunities, global_unsubscribe, hard_bounce and do_not_contact, and count the matches; the count should be zero, and any match names the gap. Stamp unsubscribed_at in every sending tool and check that an unsubscribe recorded in one tool reaches the others.

The fix

Keep one suppression ring in the system of record, and have every sending tool read it at enrollment and again just before each step sends. Write unsubscribes and bounces back to that ring from every tool, and treat a failed lookup as suppress, never as send.

Patterns

Debugger levels that exercise this check

Play them in the Pipeline Debugger.

Sources

Check 6: Enrichment waterfall

Question

When the first enrichment provider returns nothing or a stale value, does the record fall through to the next source in a fixed order, with the source and date of every field recorded?

Failure smell

Records sit with a blank title, company size or industry because one provider missed, sequences go out with a generic greeting or the wrong persona copy, and nobody can tell which vendor supplied a field or when.

How to measure it

For each field that drives routing, scoring or copy (job_title, employee_count, industry, email), compute the fill rate by source and by month, and count records where field_source or field_enriched_at is null. Record email verification status at send time, not at import.

The fix

Order providers per field, call the next provider only when the previous one returns empty or falls below a confidence floor, and stop at the first verified value. Write field_source and field_enriched_at beside each value, and send records that exhaust the waterfall to a review queue instead of into a sequence.

Patterns

Debugger levels that exercise this check

Play them in the Pipeline Debugger.

Check 7: CRM write-back and reporting

Question

Does every step write its timestamp and outcome back to the CRM record, against one shared handoff definition, so the funnel report is computed from fields instead of rebuilt from tool dashboards?

Failure smell

Marketing and sales report different MQL counts for the same month, response time cannot be computed because only the create date is stored, and accepted, rejected and recycled leads look identical in the CRM.

How to measure it

Check that each inbound record carries lead_created_at, alert_sent_at, claimed_at and first_touch_at, plus mql_at and either sql_accepted_at or sql_rejected_at with a rejection_reason. Count records that reached a later stage with an earlier timestamp missing, and compare the MQL count in the CRM with the count each tool reports for the same window.

The fix

Agree one written MQL-to-SQL definition with entry criteria, exit criteria and a fixed list of rejection reasons, and make it the only thing that moves lifecycle stage. Have every tool write its timestamp to the shared record instead of its own log, then build the funnel report from those fields alone.

The handoff definition is worked through in the MQL-to-SQL handoff, and the four timestamps in Slack and SMS lead alerts.

Patterns

Debugger levels that exercise this check

Play them in the Pipeline Debugger.

Sources

Check 8: Verification loop

Question

Is there a scheduled end-to-end test that pushes a synthetic lead through the live system and checks every expected outcome, so a break is found by the test and not by a buyer?

Failure smell

A workflow stopped silently after a token expired or a field was renamed, the team found out from a lost deal or a complaint, and "it worked when we launched it" is the only evidence that it works now.

How to measure it

Keep a list of expected outcomes for a tagged test record (record created, owner_id set, alert posted, sequence enrolled or suppressed, timestamps written) and run it against production on a schedule. Log verify_run_at, the result of each expected outcome and the time since the last fully passing run, and alert when an outcome fails or a scheduled run does not happen.

The fix

Seed tagged test records that exercise each path, such as a fit inbound lead, a customer that must be suppressed and a visitor from a consent-first region, and assert every outcome after each run. Exclude the test tag from reporting, and treat a failed or missing run as an incident with an owner.

Patterns

Debugger levels that exercise this check

Play them in the Pipeline Debugger.

Sources

Self-Check: score your own system

Mark each check Pass, Fail or Unsure for the system you run. Every check starts at Unsure, because that is the honest answer before you look. The page keeps nothing: your answers live in this tab and are gone when you close it, and nothing is sent unless you send it yourself through one of the paths below.

  1. 1.Ownership

    Does every inbound lead, account and alert have exactly one named owner of record, set by a rule at the moment the record is created?

  2. 2.Latency

    Does a hand-raise (a demo request, a contact-sales form, a reply) reach a human who acts on it inside the sub-5-minute standard, around the clock, with an escalation when nobody does?

  3. 3.Idempotency and dedup

    When the same event arrives twice (a resubmitted form, a retried webhook, a visitor back in a new session), does the system still create one record, one sequence enrollment and one alert?

  4. 4.Suppression

    Before any outbound send, is every recipient checked against one suppression list that holds customers, open opportunities, unsubscribes, bounces, competitors and do-not-contact requests?

  5. 5.Consent and region

    Does visitor identification respect the visitor's region: opt-out in the United States, opt-in everywhere else, and never person-level in the EEA, the UK or Switzerland?

  6. 6.Enrichment waterfall

    When the first enrichment provider returns nothing or a stale value, does the record fall through to the next source in a fixed order, with the source and date of every field recorded?

  7. 7.CRM write-back and reporting

    Does every step write its timestamp and outcome back to the CRM record, against one shared handoff definition, so the funnel report is computed from fields instead of rebuilt from tool dashboards?

  8. 8.Verification loop

    Is there a scheduled end-to-end test that pushes a synthetic lead through the live system and checks every expected outcome, so a break is found by the test and not by a buyer?

0 of 8 pass, 0 fail, 8 unsure

Mark a check Fail and its first pattern appears here. Unsure is a finding too: it means the system cannot show you the answer yet, and that measurement gap is worth closing on its own.

Ask for a teardown

Your answers above become a short plain-text summary: one line per check and an optional line about your stack. It carries no name, email or company field. Read it, then choose a path.

Tools and how they connect, for example "HubSpot, an enrichment waterfall in Clay, Slack alerts, Outreach sequences". Leave out names, email addresses and customer data.

Private

Email the summary to Tom Regan. This opens your own mail client; the summary leaves your machine only when you send it.

Email the summary

Call

Walk through the system live. Booking opens Calendly in a new tab; paste the summary into the booking form if you want it on the agenda.

Book a teardown call

Frequently asked questions

What is a GTM systems teardown?

A GTM systems teardown is a read-only inspection of an outbound or inbound go-to-market system against a fixed rubric. This rubric has eight numbered checks: ownership, latency, idempotency and dedup, suppression, consent and region, enrichment waterfall, CRM write-back and reporting, and a verification loop. Each check is a yes or no question with a failure smell, a measurement written in CRM field names, and a mechanism-level fix.

Does a teardown change my system?

No. A teardown is read-only. It reads workflow definitions, field histories, logs and records through read-only access or exports, and it never edits a workflow, submits a test lead into production or enrolls anyone in a sequence. Fixes, including the scheduled test records the verification check calls for, come afterwards, with your approval and an owner on your side.

What do you need from me for a teardown?

To start, only the request summary from the Self-Check: your eight answers and an optional line about your stack. If the teardown goes ahead, read-only access to the CRM and the tools in the lead path, or exports of workflow definitions and recent records, plus a walkthrough from whoever owns the system. Never send passwords by email; access should be a read-only user that you create and can revoke.

What happens to what I send?

Nothing you enter in the Self-Check is stored on artemisgtm.ai or sent anywhere by the page; the answers live in your browser tab until you close it. The Private path opens your own mail client with the summary as the body, so it is sent only if you send it, and it reaches Tom Regan like any email. The Call path opens Calendly, which handles the booking under Calendly's own privacy terms.

How is a teardown different from the free diagnostic at /engineer/?

The free AI GTM Engineer at /engineer/ is self-serve: it runs inside your own Claude, asks about your funnel and prices each revenue leak in dollars. A teardown is a person reading the mechanics of the system against these eight checks: who owns each record, how fast it moves, whether events dedupe, what suppresses a send, how consent gates identification, how enrichment falls back, what writes back and what verifies it. The diagnostic shows where revenue leaks; the teardown shows which part of the machine is leaking it.

How to cite this rubric

Tom Regan, "GTM Systems Teardown Rubric," Artemis GTM, version 2026.10, https://artemisgtm.ai/resources/gtm-systems-teardown-rubric/. Cite a single check by its anchor, for example https://artemisgtm.ai/resources/gtm-systems-teardown-rubric/#latency.

Your go-to-market needs real systems.

Artemis GTM builds and runs outbound and inbound GTM systems inside your stack. Start with one evaluation call: a written scoping note and a custom quote follow.

Or install the free AI GTM Engineer