Jason Gedge

Jason Gedge

Work Experience

Logo for Gadget

Principal Engineer


I joined Gadget as the first engineer. I was involved in just about everything. Some of the major projects I worked on:

  • Created an automated, zero-downtime migration for moving customers between database storage strategies. Migrated hundreds of thousands of tables with no downtime or data loss.
  • Took our background actions project from 50% to 100%, with a focus on correctness — such as introducing idempotency into our retry logic — and the infrastructure to support it (new Temporal cluster).
  • Initial implementation of @gadgetinc/mobx-quick-tree. Significantly reduced node event loop blocks, along with making GraphQL generation roughly 2x faster.
  • Added user-defined HTTP routes for Gadget apps (e.g., similar to AWS Lambda or Google Cloud Functions, but slightly less general).

Some other significant contributions:

  • Helping finalize our switch from PostgreSQL to Elasticsearch for full-text search. Although I didn't build most of the underlying system, I fixed all remaining bugs and made it possible to do the switch. This project reduced the load on database by ~20%.
  • Helping to keep the lights on, especially in the most critical parts of our infrastructure like the database. In particular, I became known as the resident PostgreSQL "DBA" and Temporal expert.
  • Migrated our monorepo from yarn to pnpm.
  • Swapped out Monaco for CodeMirror. Also required creating our own language server and LSP client to provide autocompletion, diagnostics, and all the things you'd expect out of an advanced editor. This shaved off ~1 second from the request time for booting the web editor.
  • Created load testing scenarios using Grafana's k6 in prepararation for Black Friday / Cyber Monday.
  • Added a scheduling trigger for Gadget actions (cron jobs, but for Gadget).
  • Added real-time streaming (via Websockets) to our log viewer.
  • Migrated us from Google CloudSQL to Crunchy Postgres with no data loss and within our 30 minute maintenance window.
  • A steward of the codebase ensuring dependencies were kept up to date, proper code organization, and good programming practices were used to ensure long-term maintainability.
  • Created a library providing typesafe React bindings for Gadget (lots of advanced TypeScript to ensure queried records have the correct shape).
  • Initial implementation of our Shopify connection (managed syncing, webhooks, and oauth for Shopify apps).
  • Designed and implemented a planner for nesting Gadget actions. Primarily, you can think of this as a topological sort over the models being acted on to ensure parent records were created before children.
  • Rewrite our code runner, switching from a complicated xstate solution to a hand-rolled imperative solution, with far less code. The end result was something that was far easier to understand and expand upon.

Non-technical things I was involved with:

  • Sharing my knowledge and context of the system to help accelerate all members of our team.
  • Work with other senior engineers to help unblock them and provide guidance on various projects.
  • Informal mentoring via pair programming, code review, and internal conversations.
  • Interviewing candidates to assess technical skill (and a small amount of sourcing).
Logo for Shopify

Staff Production Engineer


  • Helped build and influence the design of packwerk, an open-source tool for enforcing boundaries in Ruby/Rails codebases.
  • Designed and developed an intra- and inter-cluster eBPF-based ping mesh for network observability in our Kubernetes platform. Required digging into the TCP stack implementation of linux (bootlin helped a lot for easy source code navigation). We sometimes detected networking issues in Google's datacenters before even they were aware of it.
  • Built a data pipeline to isolate performance regressions in the Shopify platform. This was done in a Python notebook and could show both short-term and long-term regressions across many dimensions.
  • Continued to help build our organization with regular interviews (~1 per week).

Senior Software Engineer


  • Designed and developed Fraud Protect for Shopify Payments (now called "Shopify Protect for Shop Pay").
  • Designed and developed a new model for expressing order risk for all of Shopify's orders, known as "risk assessments". Although it was used internally immediately, it wasn't exposed in the API until 2024.
  • Improved Shopify's risk service by introducing a new pending state, which eased pressure on the service since the core Shopify service would often retry the same request (which was CPU intensive).
  • Started interviewing on a regular basis for the R&D organization, primarily pair programming.

Software Engineer


  • Designed an approach for asynchronous label purchasing.
  • Created a regional failover setup for our shipping service (using AWS Route 53).
  • Automated our shipping service's infrastructure with Terraform.
  • Moved our shipping service from classic EC2 to VPC EC2 with zero downtime.
  • Improved performance of our shipping rates/label service by ~30% by through various small code changes discovered via profiling.
Logo for YouTube

Software Engineer In Test


  • Created new and expanded existing test infrastructure (e.g, static analysis, automated HTML validation, creating and validating test seams for functions with complex responses).
  • Move the local development environments to the cloud, with a service that had pre-warmed environments and leasing capabilities. Although this significantly reduced boot time from several minutes to seconds, developers weren't as excited about the remote workflow.
  • Improved the stack by dependency refactoring, reducing build times, build size, and resource consumption.
  • Expanded YouTube's primary local development environment with new functionality, also building out new service fakes to improve boot time.

Publications

Theses

  • Gedge, J. (2011) Underwater Stereo Matching and its Calibration. Department of Computing Science, University of Alberta. Master of Science. University of Alberta archive
  • Gedge, J. (2008) Automatic Panorama Construction: An In-Depth Look Into Image Stitching. Department of Computer Science, Memorial University of Newfoundland. Bachelor of Science (Honours).

Refereed Conference Publications

  • Gedge, J., Gong, M., and Yang, Y-H. (2011) Refractive Epipolar Geometry For Underwater Stereo Matching. Proceedings of the Eighth Canadian Conference on Computer and Robot Vision. IEEE Xplore
  • van Rooij, I., Evans, P., Muller, M., Gedge, J., and Wareham, T. (2008) Identifying Sources of Intractability in Cognitive Models: An Illustration using Analogical Structure Mapping. In B.C. Love, K. McRae, and V.M. Sloutsky (eds.) Proceedings of the 30th Annual Meeting of the Cognitive Science Society. Cognitive Science Society; Austin, TX. 915—920. PDF
  • Gedge, J., Hedlund, G., Rose, Y., and Wareham, T. (2007) Natural Language Process Detection: From Conception to Implementation. Newfoundland Electrical and Computer Engineering Conference. ResearchGate

Technical Reports

  • Evans, P., Gedge, J., Muller, M., van Rooij, I., and Wareham, T. (2008) On the Computational Complexity of Analogy Derivation in the Structure-Mapping Framework. Technical Report 2008-03, Department of Computer Science, Memorial University of Newfoundland. PDF

Education

Logo for University of Alberta

M.Sc., Computing Science


3.8 GPA

Logo for Memorial University

B.Sc. (Honours), Pure Mathematics and Computer Science


4.0 GPA, first-class honours

  • Dean's list recipient all years.
  • Awarded the "University Medal for Academic Excellence" in both Mathematics and Computer Science.
  • Led my ICPC programming competition team to the northeast North American regional twice.

  • Thesis: Automatic Panorama Construction: An In-Depth Look into Image Stitching

Languages

C / C++GoJavaPythonRubyRustShell (bash, zsh)SQLTypeScript

Technologies

CSSHTMLGraphQLKubernetesMySQLPostgreSQLReactRedisREST APIsTemporalTerraform

Other skills

Computer GraphicsComputer VisionDebuggingMathematicsWriting