Engineering
How I think about building software — the reasoning behind the code, not just the stack.
Engineering Philosophy
Good software solves a real problem for real people. I'd rather ship something small that works than something ambitious that doesn't, and I favor solutions that are easy to understand over ones that are merely clever.
The stack matters less to me than ownership: knowing why a decision was made, standing behind its trade-offs, and changing course when the evidence says to.
AI-Assisted Development
AI tools are part of my daily workflow, mainly for exploring options faster and cutting down repetitive work. Architecture, trade-offs, and code review are still on me.
Claude Code
Primary tool — architecture discussions, implementation, and multi-file refactors.
OpenAI Codex / ChatGPT
Secondary reasoning and exploration for alternative approaches.
Google Gemini
Additional research and cross-checking during design decisions.
GitHub Copilot
In-editor completion for repetitive, low-ambiguity code.
Testing
On manabit.ai I use Vitest for unit and integration tests, and Playwright for end-to-end coverage of the core learning flow. Tests run as part of the normal workflow, not as a last step before shipping — that's what catches regressions before users do.
Development Workflow
Planning
Clarify the actual problem and constraints before writing any code.
Architecture
Decide data model, boundaries, and trade-offs up front, in proportion to the problem's real complexity.
Implementation
Build in small, reviewable increments rather than large, opaque changes.
Testing
Validate behavior continuously, not as a final step before shipping.
Deployment
Ship early and often, with fast feedback from production.
Iteration
Treat shipped software as a starting point, refined by real usage.