
Playwright's Cookbook: Recipes with TypeScript
Practical, recipe-style patterns for building reliable end-to-end test automation with Playwright and TypeScript.

Senior Engineering Manager · Commonwealth Bank
Engineering leader building AI-native software platforms.
Built on two decades of engineering and quality discipline.
Leads engineering for enterprise payments data platforms, driving adoption of GenAI, LLMs, AI agents, MCP, and RAG.
Built and mentored engineering teams, including testing organizations of up to 40 people across 150+ projects.
Practical, recipe-style patterns for reliable end-to-end test automation with Playwright and TypeScript.
Building resilient, cloud-native data platforms and CI/CD pipelines on AWS.
A foundation in disciplined engineering practice, from Selenium to modern AI-native platforms.
Story
Now leading enterprise payments data platforms at Commonwealth Bank. Driving the adoption of GenAI, LLMs, AI agents, MCP, and RAG across the software delivery lifecycle.
Sep 2024 – Present · Sydney, Australia
Leads the engineering team for enterprise payments data platforms serving Frontline, Business Banking, and Channels. Drives AWS cloud-native platform design and the adoption of GenAI, LLMs, AI agents, MCP, and RAG across the software delivery lifecycle.
A move into Australia and into engineering leadership, building and training teams, owning regulatory certifications on the New Payments Platform, and modernizing automation practice at scale.
Nov 2021 – Sep 2024 · Remote
Built an end-to-end test automation framework (WebdriverIO/TypeScript, later migrated to Playwright) integrated with CI/CD for a hospitality API platform bridging apps and POS systems. Doshii is a Commonwealth Bank subsidiary — this role transitioned directly into the current Senior Engineering Manager role at CBA.
Jul 2021 – Nov 2021 · Remote (Contract)
Supported an internal platform squad, resolving technical issues in a native Android test automation suite built with Espresso and Kotlin.
Sep 2018 – Jun 2021 · Greater Newcastle, Australia
Built and maintained automation for Open Banking / Consumer Data Right compliance and digital banking (PayID, internet and mobile banking) using Robot Framework, Cucumber, WebdriverIO, and Appium. Built and trained a team, and managed Osko®/BPAY® regulatory certification testing on the New Payments Platform.
May 2018 – Aug 2018 · Sydney, Australia
Built an automation framework (Selenium, Java, TestNG) for a digital home-loan lending solution and streamlined user acceptance testing.
Two decades of hands-on test automation and quality discipline, from an early career in India through a decade at Emirates in the UAE. The rigor everything since is built on.
Jan 2014 – Apr 2018 · United Arab Emirates
Managed end-to-end testing services across 150+ projects with a team of ~40 manual and automation testing resources, including test automation architecture, budget ownership, and framework-level strategy.
Sep 2011 – Jun 2014 · Dubai, UAE
Delivered test automation and strategy for major initiatives including the Emirates website fraud prevention program, a closed-user-group redesign, JBoss/JDK and HTML4-to-HTML5 migrations, and new payment methods.
Apr 2008 – Aug 2011 · Dubai, UAE
Managed test teams, automated system and load testing, and configuration management.
Jun 2007 – Apr 2008 · India
Test engineering foundation early in career.
May 2006 – Jun 2007 · India
Software engineering foundation early in career.
Jun 2005 – May 2006 · India
First professional role, beginning a 21-year career in software test engineering.
Expertise
Every claim here is backed by a credential, a shipped project, or something written, linked below, not just asserted.
Leading adoption of GenAI, LLMs, AI agents, MCP, and RAG to streamline engineering workflows and improve developer experience at Commonwealth Bank.
AWS Certified Developer Associate, building resilient, cloud-native data platforms and CI/CD pipelines. Author of a companion AWS exam-prep book.
Embeds security, governance, and compliance into delivery pipelines — leading vulnerability management and secure software supply chains with Wiz and Snyk.
Two decades of hands-on test automation practice — Selenium to Playwright, Robot Framework, Page Object Model — and author of a widely-read Playwright cookbook.
Builds and mentors high-performing engineering teams, having led testing organizations of up to 40 people across 150+ projects and delivered structured training programs.
Books

Practical, recipe-style patterns for building reliable end-to-end test automation with Playwright and TypeScript.

Learn it by doing — and let curiosity lead your cloud journey. Hands-on notes for the AWS Developer Associate exam.
Certifications
Knowledge Hub
108 articles on test automation, engineering practice, and AI-native development, published on Medium and LinkedIn, and hosted here.

Why the biggest AI cost saving isn't a cheaper model or a caching trick — it's the token you never needed to spend. A model-selection, caching, and mock-data-testing story from an automated dashboard workflow, plus how /clear, /compact, and /context changed the way I manage context.

Documents building the Akuna Vista Local Directory using Spec-Driven Development with Claude Code — a 21-document spec set, 18 tracked sprints, and a full test suite, built in roughly 19 hours across several evenings.

Building a workforce analytics MCP server after Anthropic Academy's Introduction to MCP course — how tools, resources, and prompts split control between model, application, and user.

Practical AI-cost-discipline strategies from building a vulnerability tracking pipeline: caching repo identifiers, reserving LLM calls for genuinely complex work, and matching model choice to task complexity.

Lessons from building an internal engineering dashboard on where AI genuinely helps versus quietly introduces problems.

Considers how AI assistants move from personal tools to shared team infrastructure via MCP in security workflows.

Builds a RAG-based chatbot that explains a GitHub repository in plain English for non-engineers.

Argues for automating routine calendar decisions instead of treating a calendar as a static, manually-managed schedule.

A 2025 retrospective on AI quietly becoming part of everyday life rather than remaining a distinct 'tech' category.

Examines why the October 2025 AWS US-East-1 outage took longer than expected to resolve.

A hands-on, branch-organized guide to Playwright's API testing capabilities.
Weighs the pros of using Playwright for API testing against pairing it with RestAssured.

Maps the maturity evolution of a Playwright test automation framework across six levels of tooling integration.

Coding-exercise walkthrough: finding common elements between two arrays with a generic TypeScript function.

Coding-exercise walkthrough: finding the missing number in a sequence of consecutive numbers.

Coding-exercise walkthrough: merging two sorted arrays into one.

Coding-exercise walkthrough: finding the sentence with the most words in an array of strings.

Coding-exercise walkthrough: summing the elements of a numeric array.

Coding-exercise walkthrough: replacing every occurrence of a substring, not just the first.

Coding-exercise walkthrough: stripping vowels from a string with a regular expression.

Coding-exercise walkthrough: splitting and sorting the words in a sentence.

Coding-exercise walkthrough: removing duplicates from an ArrayList using a Set or filter.
Coding-exercise walkthrough: finding elements that appear more than once in an array.
Coding-exercise walkthrough: using a Set to detect duplicate elements in an array.

Coding-exercise walkthrough: checking whether two strings are anagrams using character counts.

Coding-exercise walkthrough: finding the Nth largest number in an array.

Coding-exercise walkthrough: checking whether an element exists in an array via iteration.

Explores Playwright's integration options with other tools and their advantages for test automation.

Coding-exercise walkthrough: computing a string's length without using the built-in length property.

Coding-exercise walkthrough: finding duplicate words within a string.

Coding-exercise walkthrough: finding duplicate characters within a string.

Coding-exercise walkthrough: counting how many times a target character appears in a string.

Coding-exercise walkthrough: counting how many times a given word occurs in a string.

Coding-exercise walkthrough: counting the occurrences of each character in a string, day 2 of a 20-day TypeScript series.

Coding-exercise walkthrough: reversing a string, day 1 of a 20-day TypeScript series for Playwright learners.

Recommendations for learning Playwright, particularly for engineers transitioning from Selenium.

Explores GitHub Actions workflow structure and the events that trigger a workflow run.

Uses of regular expressions in test automation, with historical context on how regex developed.

A configuration guide for identifying and reporting problematic JavaScript/TypeScript patterns in a Playwright project.

Addresses code formatting inconsistencies across a team and introduces Prettier as a solution.

Discusses test reliability enhancements in Playwright and cautions against overusing step-level retries.

Tackles common problem-solving scenarios related to Playwright's auto-suggestion features.

Tackles extraction of text from initially hidden elements using Playwright's auto-wait behavior.

Demonstrates a maintainable approach to structuring Playwright test cases using the Page Object Model pattern.

Handles application URL differences across environments within a Playwright test suite.

Surveys Playwright's locator methods — getByText, locator, and more — for targeting page elements.

Turns frequently reused test steps into reusable keywords for consistent data comparison.

Compares Playwright and TestCafe based on hands-on experience with both frameworks.

Synchronizes test actions and assertions so URL changes are detected reliably mid-test.

Lays out a learning path for web automation with Playwright, from installation through automated test generation.

Walks through integrating Lighthouse with Playwright to run automated web audits.

Uses Playwright project dependencies to control setup steps that run before test execution.

Examines why retrying failed tests became common practice as software systems grew more complex.

Traces how data handling in test automation evolved from early libraries to modern frameworks.
Reviews IDE features that support productive Robot Framework test development.

Applies @playwright/test to GraphQL API testing, covering query-based data retrieval.

Traces test-automation scripting from early JavaScript and VBScript use to Playwright's evaluate method.

Explores using ChatGPT alongside Playwright to speed up day-to-day test-automation work.

Integrates Allure reporting into Playwright to replace manual, error-prone test reporting.

Uses process.env to keep Playwright test data and scripts secure and maintainable.

Uses Playwright's Trace Viewer to diagnose why an automated test script failed.

Replaces polling loops with Playwright's event handling for waiting on page events.

Surveys Playwright's built-in reporters for generating clearer test reports.
Explains how playwright.config.ts drives browser selection and other test-runner configuration.

Uses Playwright's test.step() function to pinpoint exactly where an end-to-end test fails.
Explains soft assertions and how they differ from standard assertions in test automation.
Makes the case for accessibility testing as part of a standard test-automation practice.
Uses Playwright test annotations to add precision and efficiency to a test suite.
Applies encryption to protect passwords, card numbers, and other sensitive test data.
Explains Playwright's auto-wait strategy as a more efficient way to wait for elements.
Automates drag-and-drop interactions with Playwright, a notoriously tricky UI gesture to script.
Uses Playwright's test generator to record interactions instead of hand-writing test scripts.
Walks through writing a first end-to-end test with Playwright's automation framework.
Surveys Playwright's built-in assertions for verifying page and application state.
Surveys Playwright's locator strategies for finding page elements with precision.
Walks through the steps involved in performing a user action with Playwright.

Rounds up commonly used Playwright commands for automated testing.

Sets up visual regression testing with WebdriverIO to catch unintended UI changes.
Captures screenshots and diagnostic detail during WebdriverIO test runs.

Compares black-box mobile automation approaches, including Appium's cross-language support.

Captures an enterprise-level API testing strategy and the planning it requires.

Lays out a strategy for testing APIs directly and as part of a broader test suite.
Explains environment variables and how they let tools and SDKs interact more easily.

Walks through cleaning time-series data as a foundational step in data analysis.

Explains event listeners in Robot Framework and how they respond to test events.

Argues for learning a programming language first, before mastering any specific automation tool.
Covers new browser-management features, including aliases, introduced in SeleniumLibrary 4.0.

Surveys approaches to automating tests for two-factor authentication across common 2FA methods.

A troubleshooting guide for downgrading iOS after an update breaks iPhone automation scripts.

Combines screen scraping with test automation to compare dynamic values across screens in hybrid app testing.

Explains the case for running automated mobile tests over Wi-Fi instead of a cable connection.

Compares strategies for identifying elements reliably in iOS test automation.

Proposes a single test automation approach that works across both browser and mobile device testing.

Covers what makes iOS automation distinct, centered on the development provisioning profile it requires.

Introduces a flakiness gauge for measuring and addressing flaky tests in a Robot Framework suite.
Uses Robot Framework's mobile browser support to run the same test cases across website and mobile site.

Practical steps for diversifying testing skills across web, mobile, API, and accessibility testing.
A short list of practical tips for scoping and running effective end-to-end test automation.

Introduces the Page Object Model pattern for structuring Selenium-based automation.
Reflects on how the software engineering workplace and its norms have shifted under agile ways of working.
Proposes an online retrospection board to make tracking bi-weekly agile retrospectives less effortful.
An introduction to Selenium as an open-source browser automation technology and its trade-offs.

Documents the surprising length of the end-to-end QA task backlog surfaced during a sprint gathering.

Traces how software testing strategy has shaped business outcomes, for better or worse, over time.
Argues that automating without a testing plan is the core reason test automation efforts fail.
Rethinks how a test automation environment should adapt to a fast-changing, agile application.

Surveys BDD tools like Cucumber to make manual testing more efficient and productive.
A checklist covering the content and cultural aspects of multilingual testing.
Speaking
Test Automation Summit (TAS24), TestingMind · Sydney, Australia · Aug 1, 2024
Training
NGM Group · One-week, in-person training · May 31, 2024
A one-week hands-on training program covering end-to-end test automation with Playwright.
Projects
A trusted, searchable directory of local businesses, built as the first implementation of a reusable Neighbourhood Directory Platform — built in roughly 19 hours using Spec-Driven Development with Claude Code, with 21 specification documents, 18 tracked sprints, 178 unit tests, and 297 end-to-end tests.
A retrieval-augmented generation chatbot that helps engineers understand and navigate a codebase.
Community & Open Source
Public repositories, experiments, and ongoing contributions.
Contact
Open to engineering leadership roles, speaking, and training conversations. The fastest way to reach me is below.