22 posts

TALK

Scaling Microservices Without Losing Your Mind

Practical lessons from scaling a platform from 10 to 200+ microservices, covering patterns that worked, anti-patterns we discovered, and organizational changes that made it possible.

speaking

EXPERIMENT

Incident Management: Lessons from 5 Years of On-Call

Practical insights on building effective incident response processes, reducing MTTR, and creating a sustainable on-call culture.

incident-managementon-callreliability

EXPERIMENT

Event Sourcing: Lessons Learned from Production

After running an event-sourced system in production for 2 years, here are the lessons I learned about when event sourcing is worth the complexity and when it's not.

event-sourcingarchitecturelessons-learned

TALK

Event Sourcing in Practice: Patterns and Pitfalls

After implementing event sourcing in three production systems over five years, I share what actually works, what doesn't, and when you should (and shouldn't) reach for this pattern.

speaking

EXPERIMENT

Treating Technical Debt as Investment, Not Burden

A framework for quantifying, prioritizing, and communicating technical debt to stakeholders in terms they understand.

technical-debtengineering-leadershipstrategy

EXPERIMENT

Zero-Downtime Database Migrations: A Practical Guide

How to evolve your database schema without taking your application offline, with real examples from PostgreSQL migrations.

databasemigrationspostgresql

EXPERIMENT

Building Resilient APIs: Patterns for Production

A practical guide to building APIs that gracefully handle failures, with real-world examples from production systems.

api-designresilienceproduction

EXPERIMENT

Microservices vs Monolith: Making the Right Choice

A decision framework for choosing between microservices and monolithic architecture, based on team size, domain complexity, and organizational factors.

architecturemicroservicessystem-design

EXPERIMENT

Making Code Reviews Actually Effective

How to transform code reviews from a bottleneck into a tool for knowledge sharing, quality improvement, and team growth.

code-reviewteam-practicesengineering-culture

EXPERIMENT

Observability Beyond Logging: Traces, Metrics, and Understanding Production

A practical guide to implementing observability that actually helps you understand and debug production systems.

observabilitymonitoringdevops

EXPERIMENT

A Practical Testing Strategy for Real-World Applications

How to build a testing strategy that catches bugs without slowing you down, based on years of trial and error.

testingqualitybest-practices

EXPERIMENT

API Versioning Strategies That Actually Work

A practical comparison of API versioning approaches with recommendations based on real-world experience.

api-designversioningbest-practices

TALK

From IC to Tech Lead: Lessons Learned

A candid conversation about the transition from individual contributor to technical leadership—the skills that transfer, the ones you need to develop, and common mistakes new tech leads make.

speaking

TALK

Designing APIs That Last: A Hands-On Workshop

A hands-on workshop where participants design, review, and iterate on API designs. Covers versioning strategies, error handling patterns, and building APIs developers actually want to use.

speaking

DECISION

Transitioning to Remote-First Team Structure

Adoption of remote-first team structure where all collaboration assumes remote participation to ensure equitable experience and access to global talent.

teamremote-workculture

TALK

Testing Strategies for the Real World

A practical look at testing strategies that balance confidence with development speed—when to write unit tests vs integration tests, and patterns for testing distributed systems.

speaking

DECISION

Adopting Event-Driven Architecture for Order Processing

Migration from synchronous order processing to event-driven architecture using Apache Kafka to decouple services, improve resilience, and enable scalability.

architectureevent-drivenkafka

DECISION

Choosing TypeScript Over JavaScript for New Services

Decision to adopt TypeScript as the standard for all new backend services to improve type safety, catch bugs at compile time, and enhance developer experience.

architecturetypescriptdeveloper-experience

TALK

Building a Blameless Incident Culture

How to build an incident response culture that learns from failures instead of assigning blame. Practical frameworks for running effective postmortems and creating lasting improvements.

speaking

DECISION

Implementing Feature Flags for Safer Deployments

Implementation of feature flags using LaunchDarkly to enable safer deployments, gradual rollouts, instant kill switches, and A/B testing capabilities.

deploymentfeature-flagsrisk-management

DECISION

Monorepo vs Polyrepo for Microservices

Consolidation of 30+ microservices into a monorepo using Nx to simplify coordination, improve code sharing, and accelerate cross-service refactoring.

architecturemonorepodeveloper-experience

DECISION

Choosing PostgreSQL Over MongoDB for New Services

Selection of PostgreSQL for a new subscription service to provide ACID transactions, relational data modeling, and strong consistency guarantees for billing operations.

databasepostgresqlarchitecture

Get in touch

Own your tracking, CDP, and the agents on top of it.

That's the job I do. Tell me what you're building and where the measurement breaks down.

Open to Martech, Marketing Analytics, and Marketing Ops roles in Calgary and remote.