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.

Workstation

  • MacBook Pro (Apple M3 Pro)

    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.

    Core tool

Languages & Frameworks

Core technologies I rely on for building maintainable, production-grade systems.

  • TypeScript

    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.

    Core tool
  • Java

    Used extensively for enterprise-grade test automation and backend validation. I value Java for its maturity, ecosystem, and suitability for long-lived frameworks.

    Core tool
  • React / Next.js

    Used for building production UIs, internal tools, and this site. I focus on predictable rendering, accessibility, and performance over novelty.

    Core tool

Testing & Automation

Tools I use to reduce risk, increase confidence, and surface failures early in the development lifecycle.

  • Playwright

    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.

    Core tool
  • Selenium (Java)

    Used in legacy and enterprise automation frameworks. While heavier than modern tools, it remains relevant in large, established codebases.

  • JUnit / TestNG

    Core test runners for Java-based automation. Familiar, stable, and well-integrated into CI pipelines.

  • Postman

    Useful for exploratory API testing, contract validation, and debugging integration issues before automation is introduced.

    Core tool

CI, Observability & Infrastructure

  • Jenkins

    Primary CI system for running automation, gating releases, and validating changes at scale. I care deeply about fast feedback and actionable failure signals.

    Core tool
  • Splunk

    Used for log analysis, debugging production issues, and validating system behavior across distributed services.

    Core tool
  • Azure DevOps (ADO)

    Used for work item tracking, test planning, pipelines, and release coordination in large teams.

    Core tool
  • Docker

    Used for local development, reproducible environments, and isolating dependencies during testing.

Developer Tools & Productivity

  • Visual Studio Code

    My primary editor for TypeScript, JavaScript, and automation work. Extensions, debugging tools, and Git integration make it a reliable daily driver.

    Core tool
  • IntelliJ IDEA

    Essential for Java-heavy projects and large enterprise codebases. Strong refactoring tools and static analysis help maintain long-lived systems.

    Core tool
  • Notion

    Used for documentation, planning, and knowledge capture. I treat documentation as part of the system, not an afterthought.

  • Excalidraw

    Used for lightweight architecture diagrams, test flow sketches, and system discussions. Optimized for thinking, not polish.

Design & Collaboration

  • Figma

    Used to understand designs, mock ideas quickly, and collaborate with designers—primarily as a communication tool, not a design crutch.

  • Teams

    Primary communication tool for cross-functional collaboration, incident coordination, and day-to-day testing discussions.

  • Slack

    Primary communication tool for cross-functional collaboration, incident coordination, and day-to-day engineering discussions.

Tooling evolves over time. I focus on fundamentals—observability, determinism, and feedback quality—rather than chasing short-lived trends.