TOOLS
My tools
The hardware and software I lean on day to day. Mostly QA work, a bit of photography on the weekends. I update this when something gets replaced, not on a schedule.
Hardware
Where everything else runs.
Daily driver. Light enough that I don't dread packing it for a trip. Battery makes it through a full day of testing.
Second screen. Browser under test on one half, test runner output on the other. Doubles as a TV when I clock off.
Mechanical, 75% layout. Keeps the arrow keys, drops the numpad I never used.
Quiet and low profile. Pairs with the MX Master 3S on the same Bolt receiver. Stays on the office desk; the home setup needs its mechanical click.
Everyday mouse. Horizontal scroll for moving across wide traces and Jira boards. Quiet clicks are the upgrade over the original 3.
Noise cancelling for open-plan focus. Comfortable enough to forget I have them on.
Editor & shell
Where the test code is written and the logs are read.
Primary editor. I keep two extensions installed: Playwright Test (for running and debugging specs inline) and ESLint. The rest I delete after a week.
Default terminal on my LXDE setup. Fast to launch, doesn't fight me for keybindings.
Structured-data shell. Pipelines pass tables and JSON instead of strings. Useful when I'm digging through Playwright trace output.
Pair-programming agent in the terminal. I let it scaffold Page Objects and write first-pass fixtures. I read every diff before it lands.
Design
Mockups and visual design work.
I design in Figma. Mockups, wireframes, the occasional logo. Free tier covers personal projects.
I use Claude for design feedback. Quick second opinion on a layout, and a drafting partner for the copy that sits on it.
Test automation
The runners and frameworks the regression suite executes on.
Default for new browser automation work. Cross-browser, with tracing built in. Makes debugging flaky failures much easier.
Still here for legacy projects. I keep it installed for the time-travel debugger, which has saved more than one evening when I'm trying to figure out why a suite someone else wrote is breaking.
Unit and integration tests on .NET services. `[TestCase]` keeps edge-case coverage from turning into copy-paste.
Same job on the Java side. `@ParameterizedTest` for table-driven specs.
Android UI testing. Instrumentation against real Activity state, not a screen scrape. Open alongside Android Studio, never on its own.
Visual regression built into the runner I already use. No separate vendor, no extra subscription.
Load & performance
How does it behave under stress, not does it work at all.
API & network
Poking at endpoints by hand before writing the automated check.
Where API collections live. Workspaces let me hand a flow to a developer without an email chain about which environment they're hitting.
What I reach for on a one-off sanity check. `curl | jq` turns a noisy JSON response into something I can read.
For traffic the browser DevTools can't see. Mobile apps, native clients, anything not in a tab. Map Local and breakpoints do most of the work.
Local stack
Database clients and the runtime everything else depends on.
MySQL and MariaDB. Fast, free, and the session manager remembers every connection I've ever made without nagging me to upgrade.
Postgres, SQL Server, SQLite, Oracle. ER diagrams and data compare across environments are the bits I use most.
Spins up databases, queues, and mock APIs for local testing. Keeps my host machine clean and the test environment reproducible.
Accessibility & quality gates
Catching the issues users would have caught for me.
The accessibility tree visualiser is the best of any browser. Quickest way to confirm the ARIA you wrote turns into the thing a screen reader will read aloud.
Performance, accessibility, SEO, PWA in one pass. Hooked into the CI for this repo. If a regression sneaks past code review, the build catches it before anyone else has to.
Cross-browser & device
Confirming the build works somewhere other than my laptop.
Tracking & comms
Where bugs land and reports go.
Where the work is tracked and, when something slips, where the post-mortem starts. I live in two filters: 'mine open' and 'mine in review'. The rest is noise.
Test cases bolted onto Jira so coverage links to requirements without a separate tool. Imports Playwright and JUnit reports cleanly.
Screen recording for longer bug reproductions and demos.
Screenshots, GIFs, short captures with annotation. Keyboard-driven, so a clip gets attached to a ticket in seconds.
Shrinks OBS recordings to a Jira-friendly MP4 without trashing the quality. Not an editor, just a converter.
Notes & journaling
Where the thoughts that aren't code go.
Apple Journal
Where I write all my thoughts down. Pulls in photos and locations from the day on its own, so the entry has context I'd never remember to add.
I track my reading on StoryGraph. Currently reading, finished, ratings, all in one place.
Photography
What I carry for the shots that end up on the travel pages.
Daily body. Small enough that I bring it on walks I wouldn't otherwise bring a camera on. IBIS rescues handheld low light, and the film simulations do most of the work I would have done in Lightroom.
Walkaround zoom. 24 to 122mm equivalent covers most travel framing in one lens. Weather sealed, so it stays on when it rains.
Variable ND for long shutters in bright conditions. Silky water, motion blur on busy streets, without pushing ISO into noise.
Bought to give the ND filter something useful to stand on. Reaches eye level at 72", folds down short enough to clip onto the bag. I chose aluminium over carbon to save the money. I feel the difference every time I lift it.
Snap clips on both ends. Body comes off for tripod work, back on when I want to walk. Comfortable and out of the way.
Holds the body, one lens, a filter. That's all I want it to do. The cream colour gets compliments, though it shows dirt quickly.
RAW processing and the rare composite. One-time purchase, no subscription. Adobe isn't getting another payment out of me.
Infrastructure
The plumbing under everything I ship.
I host my frontends here. Preview URLs per branch, fast deploys. It's so easy to use, and reliable.
I host my backends here. Small machines, simple scaling. It's so easy to use, and very powerful.
I package my services with Docker. The image I run locally is the same one that goes to production. Reliable, and easy to ship.
All my domains live here. DNS, email routing, edge caching, the lot. Free tier handles everything I throw at it.
Outbound transactional mail. Sits between my apps and SMTP so I don't have to think about deliverability or per-provider auth headaches.
S3-compatible object storage with zero egress fees. The first time I uploaded something heavy I started budgeting for the bandwidth out of habit, then remembered I didn't have to.
Every line of code I've written lives here. Actions handles the CI on every push, and the PR review interface is the one I find least painful.