Case Study
Building an Internal Marketing Software Platform
Turning disconnected campaign work into a connected internal product.
The Problem
Marketing work crossed campaign systems, work management, planning spreadsheets, and the data warehouse. Each held part of the business process. Moving work between them required people to translate campaign details, recreate records, and keep identifiers and operating rules aligned.
A useful platform had to reflect how marketers work while meeting enterprise requirements. I needed to make campaign context travel with the work, so each tool could act on the same records without people re-entering the details.
Building a Software Capability Inside Marketing
I designed and built an internal marketing software platform using Python and Flask on Azure. It connects Marketo, Snowflake, and Asana around a shared tactic ID, carrying campaign context across records, automation, tracking, and planning. I also built the forecast app as part of the platform.
As service owner of the registered enterprise application, I coordinate with IT and review functions on access and enterprise standards. That ownership connects decisions about what to build with responsibility for how the software is operated.
Where the Disciplines Converge
- Business process: translate campaign setup, planning, and coordination needs into connected workflows and clear requirements
- Enterprise IT: coordinate application ownership, sign-in, access, and security and architecture review
- Systems and integrations: connect Marketo execution, Asana work management, and Snowflake data through APIs and shared identifiers
- Data architecture: organize campaign, subcampaign, and tactic records so planning and execution use consistent relationships and metadata
- Development: own the Python/Flask implementation, interface design, validation, and automation, using AI-assisted development with human review
- Adoption: put operating guidance and familiar business steps into the interface, supported by documentation and feedback
From Shared Data to Campaign Execution
- Campaign, subcampaign, and tactic records share a governed tactic ID, with Snowflake-connected administration
- When a campaign is created, the app calls the Marketo Asset API to clone the appropriate program template into the correct folder structure
- Program tokens are built from campaign metadata and pushed via API, removing manual token entry
- UTM parameters are auto-generated and stored alongside the Marketo program reference
- List checks help identify data issues before execution
- Operating documentation keeps process guidance and governance context close to the work
- An admin editor provides bulk data management for ops team oversight
- Secure integrations and governed data access keep technical complexity behind a simpler operating interface
Planning and Process Design
I designed the connected planning model around targets, planned work, forecasts, and vendor commitments. The purpose is to make the relationship between campaign decisions and operational capacity easier to see.
- Intake design connects the communication need to the campaign record and the team doing the work
- Shared campaign data provides a foundation for planning, calendars, and resource decisions
- Build-versus-buy decisions prioritize the workflows that benefit from a connected internal tool
I redesigned intake across 11 forms, reducing the question set from 165 to 76 and required fields from 119 to 36.