Tools I Use to Build and Validate Software
This is a curated list of tools I rely on to design, test, and maintain reliable systems. I prioritize debuggability, signal quality, and long-term maintainability over trends.
Last reviewed July 2026 · 19 tools across 6 categories
Workstation
The machine everything else runs on — chosen for enough headroom to run automation suites, containers, and multiple browsers at once without slowing down.
- MacBook Pro (Apple M3 Pro)Core tool
My primary development machine. The M3 Pro provides the performance and battery life needed for running local services, automation suites, containers, and multiple browsers simultaneously without friction.
Languages & Frameworks
Core technologies I rely on for building maintainable, production-grade systems.
- TypeScriptCore tool
My default language for frontend, backend, and automation work. Strong typing and editor tooling help prevent entire classes of bugs before they ever reach runtime.
- JavaCore tool
Used extensively for enterprise-grade test automation and backend validation. I value Java for its maturity, ecosystem, and suitability for long-lived frameworks.
- React / Next.jsCore tool
Used for building production UIs, internal tools, and this site. I focus on predictable rendering, accessibility, and performance over novelty.
Testing & Automation
Tools I use to reduce risk, increase confidence, and surface failures early in the development lifecycle.
- PlaywrightCore tool
My preferred tool for modern UI and end-to-end testing. Deterministic execution, strong debugging tools, and cross-browser support make it ideal for validating critical user flows.
- Selenium (Java)Also reach for
Used in legacy and enterprise automation frameworks. While heavier than modern tools, it remains relevant in large, established codebases.
- JUnit / TestNGAlso reach for
Core test runners for Java-based automation. Familiar, stable, and well-integrated into CI pipelines.
- PostmanCore tool
Useful for exploratory API testing, contract validation, and debugging integration issues before automation is introduced.
CI, Observability & Infrastructure
Where a test result becomes a decision — running automation at scale, seeing what actually happened in production, and coordinating the release around it.
- JenkinsCore tool
Primary CI system for running automation, gating releases, and validating changes at scale. I care deeply about fast feedback and actionable failure signals.
- SplunkCore tool
Used for log analysis, debugging production issues, and validating system behavior across distributed services.
- Azure DevOps (ADO)Core tool
Used for work item tracking, test planning, pipelines, and release coordination in large teams.
- DockerAlso reach for
Used for local development, reproducible environments, and isolating dependencies during testing.
Developer Tools & Productivity
The tools I write, document, and think in day to day.
- Visual Studio CodeCore tool
My primary editor for TypeScript, JavaScript, and automation work. Extensions, debugging tools, and Git integration make it a reliable daily driver.
- IntelliJ IDEACore tool
Essential for Java-heavy projects and large enterprise codebases. Strong refactoring tools and static analysis help maintain long-lived systems.
- NotionAlso reach for
Used for documentation, planning, and knowledge capture. I treat documentation as part of the system, not an afterthought.
- ExcalidrawAlso reach for
Used for lightweight architecture diagrams, test flow sketches, and system discussions. Optimized for thinking, not polish.
Design & Collaboration
For staying in sync with the people I build with, not just the code.
- FigmaAlso reach for
Used to understand designs, mock ideas quickly, and collaborate with designers—primarily as a communication tool, not a design crutch.
- TeamsCore tool
Day-to-day communication at Costco Travel — cross-functional collaboration, incident coordination, and the running conversation with devs that makes shift-left testing work in practice.
- SlackAlso reach for
Where I keep up with side-project collaborators and a few engineering communities outside of work.
Tooling evolves over time. I focus on fundamentals—observability, determinism, and feedback quality—rather than chasing short-lived trends.
