Jason Gedge

jason ‹at› gedge.ca thegedge jason-gedge @thegedge

Work Experience

Logo for Gadget

Founding Engineer


– Present
Active

I joined Gadget as the first, full-time employee. As a founding engineer, I've been involved in a lot of projects and my fingerprints are everywhere, but some of the bigger things I've worked on:

  • Switch our approach to reloading processes for our customers' development environments from xstate to a supervisor that can reload processes in a more controlled manner.
  • Helping finalize our switch from PostgreSQL to Elasticsearch for full-text search. Although I didn't build most of the underlying system, I worked out all remaining bugs and made the switch.
  • Helping to keep the lights on, especially in the most critical parts of our infrastructure like the database. In particular, I became the resident PostgreSQL and Temporal  expert.
  • Took our background actions project from 50 to 100%, with a focus on correctness (introducing idempotency into our retryable bits) and infrastructure (booting up a new temporal cluster).
  • Created an automated, zero-downtime migration for moving customers between database storage strategies.
  • Migrated our monorepo from yarn to pnpm.
  • Swapped out Monaco  for CodeMirror , along with creating our own language server and LSP client to provide autocompletion, diagnostics, and all the things you'd expect out of an advanced editor.
  • Load testing scenarios using Grafana's k6 .
  • Added a scheduling trigger for Gadget actions (cron jobs, but for Gadget).
  • Added real-time streaming to our log viewer.
  • Migrated us from one database provider to another 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.
  • User-defined HTTP routes for Gadget apps (e.g., similar to AWS Lambda or Google Cloud Functions, but slightly less general).
  • Created a library  providing typesafe React bindings for Gadget (lots of advanced TypeScript to ensure queried records have the correct shape).
  • Initial implementation of @gadgetinc/mobx-quick-tree  (reduced node event loop blocks), along with further improvements.
  • 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 something imperative, with far less code. The end result was something that was far easier to understand and expand upon.

Non-technical things I'm 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.
  • Lots of informal mentoring via pairing, 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.
  • Building tools, patterns, and educational materials to enforce software architectural boundaries on Ruby/Rails projects.
  • Designed and built 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)
  • Built a data pipeline to isolate performance regressions in the Shopify platform.
  • Continued to help build our organization with regular interviews (~1 per week).

Senior Software Engineer



  • Designed and helped develop Fraud Protect for Shopify Payments (a warranty system for protecting Shopify merchants against fraudulent chargebacks).
  • Designed and helped implement a new model for expressing order risk (known as "risk assessments").
  • 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 through 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.
  • 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.

Education

Logo for University of Alberta

M.Sc., Computing Science



Logo for Memorial University

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



  • Graduated with a 4.0 GPA and 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

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 

Skills

Languages

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

Technologies

CSSDockerHTMLKubernetesPostgreSQLReactRedisTemporalTerraformWeb APIs

Skills

Computer GraphicsComputer VisionDebuggingMathematicsSoftware / API DesignWriting

The bars measure how confident I feel in various skills and technologies. A low rating is due to not using the skill recently, but I'm a quick learner!