
I approach software as a system of tradeoffs rather than a collection of isolated features. Before implementation, I clarify the user outcome, operating constraints, failure modes, and evidence that will show whether the result works. I prefer small, observable changes; typed boundaries; automated tests around meaningful behavior; and documentation that lets the next engineer or agent understand why a decision was made. For AI-enabled products, I also make model uncertainty, tool permissions, recovery paths, evaluation criteria, latency, and cost visible parts of the design.
My strongest fit is work that connects product thinking with implementation: designing agent workflows, adding LLM capabilities to an existing application, building full-stack React and Next.js features, integrating Python services, or improving performance and machine readability. The projects and articles linked on this site are public examples of that work. They should be used as evidence of the specific techniques described on each page, not as a claim about confidential client work or technologies that are not listed.