AWS Solutions Architect Associate · AWS Developer Associate · HashiCorp Terraform Associate
I design and deploy cloud infrastructure on AWS — choosing the right compute model, integration pattern, and data layer for what the workload actually requires. Sometimes that's serverless. Sometimes it's EC2 with an autoscaling group. The pinned repos below show the output. This is how I think before I write a single line of code.
It starts with the real problem, not the interesting problem
Before choosing a service or designing a schema, I work backwards from what the end user actually needs. What decision are they trying to make? What friction are they trying to avoid? The architecture flows from that — not from what sounds impressive or what I want to practice.
Strong framework first, iteration second
Good software doesn't start with a sloppy draft; it starts with a clear understanding of the "why." While I use AI to accelerate the build, my projects are iterated multiple times with a focus on the person actually using them. By thinking through friction points and usability after the initial build, I ensure the final output represents a deliberate engineering process rather than just a first-draft prototype.
AI tools accelerate execution, fundamentals prevent getting lost
I leverage Claude Code and Codex to move fast—generating boilerplate and iterating on implementations. However, I don't treat AI output as the final product. Featured projects here were reviewed and refined through multiple iterations, focusing specifically on the end user perspective to ensure the UX is intuitive and the architecture is robust. The goal is intentional, high-velocity engineering, not unvetted AI slop.
Every architectural decision has a reason
I don't default to the most powerful option or the most familiar one. I ask: what does this workload actually look like? Burst-heavy or steady-state? Single writer or concurrent? Latency-sensitive or async-tolerant? The answers determine the data layer, the integration pattern, and the provisioning model. The goal is the minimum surface area that solves the problem well — nothing bloated, nothing missing.
