RLRodney L. Lewis
Pendo.io / architecture
Customer Support ROI calculator header with centered hero banner, deflection calculator controls, and dynamic annual savings output cards.

Taking engineering out of the campaign loop

The bottleneck at the demand gen layer was not technical difficulty. It was that every campaign asset — a landing page, an email, a variant of either — had to pass through an engineer, and engineers are a shared resource with a queue. The cost showed up in what the marketing team stopped attempting: when a second variant means waiting behind a sprint, you ship one variant and call it a test.

Challenge

Marketing operations could not launch a campaign without engineering. Every landing page and every email started as a ticket, which meant the pace of demand gen was set by an engineering queue rather than by the campaign calendar. Testing suffered first: when a variant costs a sprint slot, teams stop running variants.

Solution

I rebuilt the demand gen surface on go.pendo.io as a template system rather than a page factory. Marketo guided landing page templates and email templates were broken into modules marketing ops could assemble on their own, with custom JavaScript underneath for the behavior the templates could not express — form logic that filtered non-company email addresses at the point of entry, and Google Tag Manager data layer scripts that made every page report itself consistently. Mutiny sat on top for audience-segmented testing and personalization.

Outcome

Marketing ops stopped filing tickets to launch, scaling up to manage 40+ user conversion paths natively. Campaigns, variants, and audience-specific treatments shipped on the marketing team's own schedule, and the data coming back was clean enough to act on because the tracking was part of the template rather than added per page.

The campaign path before and after the template system, and where engineering sat in itTwo chains of four boxes, drawn at the same positions so they can be compared. The upper chain, labelled “Before: engineering gated”, runs Marketing ops, Engineering, Landing page, Marketo, with Engineering shown as a solid grey box marking it as the bottleneck. The lower chain, labelled “Built: no ticket required”, runs Marketing ops, Modules, Landing page, Marketo. Engineering is absent from the chain, with an unbroken tracking bar beneath it and a single return arrow labelled “test, read, iterate” running from Marketo back to Marketing ops.Before: engineering gatedMarketing opsEngineeringLanding pageMarketoBuilt: no ticket requiredMarketing opsModulesLanding pageMarketotest, read, iterate
Above, every campaign asset passes through engineering, and instrumentation is added page by page, so it is only as complete as whoever remembered it. Below, marketing ops composes from template modules and the tracking comes with the template, which is what makes the return arrow worth having: a hypothesis can be formed, shipped, and read against a clean baseline without a ticket.

The build

So the work was to change who could build. I broke the Marketo guided landing page templates and the email templates into modules — hero, form, proof, offer, footer — that marketing ops could compose without touching markup. The constraint was that the modules had to be genuinely complete: a template system that covers only the easy cases still routes every interesting campaign back through engineering, which is the same bottleneck with extra steps.

Underneath the templates, custom JavaScript handled the things guided templates cannot express on their own. Form logic filtered out non-company email addresses at the point of submission, so the lead quality problem was solved at the source rather than in a downstream cleanup job. Google Tag Manager data layer scripts standardized what each page reported, which meant a campaign was instrumented because it used the template, not because someone remembered to instrument it.

That is the part that makes the loop work. Analytics hygiene is usually treated as a reporting problem, handled after the fact by the people who need the numbers. Building it into the template moves it upstream: every page emits the same events with the same names, so comparisons between campaigns are actually comparisons, and the funnel view is trustworthy without reconciliation.

With the build cost removed and the measurement trustworthy, testing became routine rather than exceptional. Mutiny handled audience segmentation and personalization on top of the same templates, ultimately supporting 40+ active user conversion paths. Demand gen could run a treatment for a specific segment and read the result against a clean baseline. The team could form a hypothesis in the morning and have it live without a ticket.

The systems I build for marketing get judged on one thing: how long the team operates after I stop being involved. On the demand gen side at Pendo, the answer was that campaign launches simply stopped appearing in the engineering queue.

Archived screenshot of a Pendo demo-request landing page with no site navigation: a heading and paragraph on the left above a three-column statistics row and a row of four customer logos, and a five-field form card with a consent checkbox and submit button on the right.
A demand gen landing page on go.pendo.io, October 2022. The statistics row, logo row and form are template modules, not page markup. Note that the figures shown are Pendo's own product claims from the campaign, not measurements of this work.
Screenshot of the Pendo Customer Support ROI Calculator landing page: a centered purple hero banner with uppercase eyebrow and headline "How much customer support time could you be saving?", an interactive two-column calculator card with sliders and dynamic metric outputs ($31,500 cost savings, 18,000 annual tickets), and an active popup modal form card overlaying the inputs with four required fields and a vibrant pink submit button.
Customer Support ROI Calculator on go.pendo.io. The centered text hero and interactive popup modal form are modular Marketo template components, enabling campaign-specific lead capture flows without engineering overhead.

Built with

  • Marketo
  • Mutiny
  • Google Tag Manager
  • Segment
  • JavaScript
Contact

Hiring for a web platform role? Let's talk.

Open to senior web developer and platform lead roles, Bay Area hybrid or remote. I reply within one business day.

Also taking select contract work through Sprintz.

Reach out

Other ways to connect