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

01

Planning

Clarify the actual problem and constraints before writing any code.

02

Architecture

Decide data model, boundaries, and trade-offs up front, in proportion to the problem's real complexity.

03

Implementation

Build in small, reviewable increments rather than large, opaque changes.

04

Testing

Validate behavior continuously, not as a final step before shipping.

05

Deployment

Ship early and often, with fast feedback from production.

06

Iteration

Treat shipped software as a starting point, refined by real usage.