Passionately Programming since 2015
From nonprofit storytelling to digital marketing at scale to independent client work — over a decade of solving real problems with clean, maintainable code and a bias toward shipping.
My approach
How I work.
I believe the best digital work comes from understanding the full picture — not just the design or the code, but the business problem behind both. Every project I take on starts with listening: what’s the goal, who’s it for, and what does success look like?
I write code that’s meant to last. That means strict types, automated testing, semantic markup, and accessibility built in from the start — not bolted on at the end. I care about performance, maintainability, and giving the next developer (or future me) something clear to work with.
Key Points
- Full-stack ownership — I move comfortably between frontend and backend, from React editor components to PHP architecture to CI pipelines.
- Convention over configuration — Predictable patterns reduce onboarding friction and cognitive overhead. If the structure is obvious, the code explains itself.
- Ship, measure, iterate — I’d rather ship something focused and refine it than chase perfection in isolation.
AI Integration
AI as a collaborator, not a shortcut.
I integrate AI into my development workflow the same way I’d integrate any powerful tool — deliberately, with clear boundaries. AI is exceptional at accelerating research, generating boilerplate, stress-testing ideas, and catching blind spots in code review. I use it daily.
But I don’t hand over architectural decisions, and I don’t ship code I don’t understand. AI works best when the developer driving it knows what good output looks like — and knows when to override it. The judgment, the context, the taste — that’s still the human’s job.
My approach: use AI to move faster on the work that benefits from speed, and stay hands-on for the decisions that benefit from experience.
Key Points
- Code generation & review — Drafting implementations, catching edge cases, and pair-programming through complex logic.
- Research & exploration — Quickly surveying approaches, evaluating trade-offs, and prototyping ideas before committing to a direction.
- Documentation & testing — Generating test scaffolds, writing clear documentation, and maintaining consistency across a growing codebase.
- Always verified — Every AI-assisted output is reviewed, tested, and understood before it ships.
Career
The path here.
I started my career in 2015, hired straight out of college as a Junior Web Developer at StoryCorps — a national nonprofit dedicated to recording and preserving personal stories. Over two and a half years, I grew from junior to Web Developer, building and maintaining the digital platforms that supported their mission. It was a place that taught me how to write code with purpose and work within tight constraints.
From there, I joined Situation Interactive, a digital marketing agency in New York. I spent nearly nine years there — the longest stretch of my career — working across campaigns, platforms, and clients at scale. I sharpened my skills in frontend architecture, performance optimization, and working within large, cross-functional teams. It was where I evolved from a developer into an engineer who could own systems end-to-end.
When the pandemic hit, I was laid off — and what started as an uncertain moment became the foundation for my freelance practice. I built a client roster that let me take on ambitious, long-running projects with real ownership.
| Period | Role | Organization |
|---|---|---|
| 2015 – 2018 | Junior Web Developer → Web Developer | StoryCorps |
| 2018 – 2020 | Web Developer → Senior Web Developer | Situation Interactive |
| 2020 – 2020 | WordPress Developer | King & Partners |
| 2021 – 2026 | Web Developer → Senior Web Developer | Situation Interactive |
| 2020 – Present | Freelance Web Developer | Independent |
Resume
Want the full picture?
Download my resume for a complete overview of my experience, skills, and education.