About
Building software, working through requirements, and directing agents.
My background
I’m a software engineer based in Seattle. I spent more than nine years at Oracle Cloud Infrastructure building deployment, workflow orchestration, and CI/CD systems. That work included implementing backend services, diagnosing failures across service boundaries, leading engineering efforts, and carrying changes through rollout and production support.
My work outside OCI includes AI evaluation and backend architecture at KnowData AI, leading development of a personal-safety platform at Ubimodo, and product and companion-app work on Microsoft’s meeting-room systems. My degree is in Industrial Engineering from Georgia Tech.
Correctness has to lead somewhere useful
AI-generated software needs strong checks. An agent can produce a plausible implementation, passing tests, and a confident explanation while still missing the requirement. I want to optimize for what happens when someone actually uses the software, including how it fails.
But correctness alone is not a sufficient objective. No consumer wants a proof harness showing how the agent avoided predictable failure modes, nor an implementation which technically avoids an incorrect output by never producing output, nor a product which works by delivering a vast reduction in features. I care about getting the intended result built, with evidence supporting the claims the humans care about.
Testing software across its entire use surface, like a human could, tells me more than a canned flow through the golden path can. Although extracting automated UX tests from design docs and agent session transcripts is far too expensive for typical use, it has promise for fully agentic development scenarios when the customer can’t fall back to an alternative if the product misbehaves.
Working with agents
I own the design and acceptance decisions, and I direct agent implementation alongside separate review and testing. The hard part is preserving what I asked for across a long session: the requirements, the unresolved decisions, and the difference between work that is complete and work that merely stopped.
Much of my recent work involves extracting the requirements a user cares about from design text and agent sessions which clarify or revise the design, then automatically and systematically checking software against that design. Among my private repos, Seer and UI Observation provide parts of the testing tools; Codex Manager helps keep the agent’s work moving toward the intended result.
The complete process is not ready for other people to use. I’m pursuing it because a dependable, efficient way to evaluate candidate implementations would make much larger agent-assisted projects practical to assess and improve. Many of my projects have too much complexity for a frontier model to naively vibe into existence; current state-of-the-art techniques to complete them require high oversight, duplicated workstreams, and/or sacrificing quality. My personal agent use builds on my earlier work on an autonomous coding-agent system, using structured memory of prior work, environmental controls on its autonomy, and corrections for predictable differences between what I intend and what the agent offers to address that intent.
I use Rust extensively in this systems work because its extreme constraints pull bugs earlier in the agentic development process. Although having agents implement in pure Rust can prevent certain classes of mistakes, requirements, integration, and useful behavior still need their own scrutiny.
For examples of the systems and projects behind this approach, see my work. To discuss a role or project, get in touch.