OCT 2022 — AUG 2026 · 3 YRS 10 MOSSenior Software Engineer

Constant Contact

Almost four years on the Internal Services team of an email marketing platform, responsible for the core Rails API: the service that orchestrates the microservices customers use to create, schedule and send their campaigns. At the same time I built React and TypeScript views on top of that same API.

~10
microservices orchestrated by the API
3M+
recipients in the largest campaigns
24/7
one on-call week every eight, with PagerDuty

WHAT I BUILT

01Core API of the ecosystemOrchestrates ~10 independent microservices.

The Rails API wasn’t the source of truth: it was the backbone that orchestrated the other services and held the campaign logic. Around it were the email delivery service, segments in Snowflake queried through Elasticsearch, per-contact product recommendations, reports and analytics, contact imports and DNS configuration. With the team, I kept it up to date, fixed failures and improved it for four years.

RailsMicroservicesSnowflakeElasticsearch
02Campaign logicFrom segment to send to stats.

Segment creation and import, campaign scheduling and sending, open and click tracking, stats and revenue calculation, and event-based automations, such as sending an email 30 days after a contact buys a product. The largest campaigns went to more than 3 million recipients per send, so any failure had a wide impact.

RailsAutomationsTracking
03Cross-service failuresShared state and silent errors.

I coordinated multi-step flows across services: passing state between them and handling partial failures, when one step succeeds and the next does not. A recurring case: when the service that updated contact status in Snowflake went down, the error spread silently to other parts of the platform. Our job was to fix the data, fix the cause and keep it from happening again.

MicroservicesSnowflake
04Contact imports and domainsOnline stores, files and DNS.

Customers brought their contacts from Shopify, WooCommerce or their own platforms, or imported them as files through AWS EFS. We also maintained the DNS setup that let each customer send campaigns from their own company domain.

AWS EFSDNSIntegrations
05Anomaly detectionPython and Prophet integrated with the backend.

A Python tool built on Facebook Prophet and integrated with the Rails backend that learns each customer’s normal pattern of errors and contact-file imports (for example, daily or every three days) and flags deviations, such as a customer who stops importing, so the team can reach out before it becomes a problem.

PythonProphetRails
06On-call and supportPagerDuty, one week out of eight.

The Internal Services team handled customer cases, bugs and production incidents while working through a backlog of customer-requested features. I was on the PagerDuty on-call rotation: one 24/7 week every eight weeks.

PagerDutyIncidents
07React and TypeScript interfaceAnalytics, settings and the campaign editor.

I built and maintained views of the main application on top of the team’s own APIs: the analytics section with aggregated campaign performance (opens, reads, clicks), the account and product settings screens, and new campaign editor parameters wired end to end from API to UI.

ReactTypeScript