Work Experience
Founding Engineer
– Present
ActiveI 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).
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.
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
M.Sc., Computing Science
–
- Focus on computer vision
- Graduated with a 3.8 GPA.
- Awarded an NSERC Graduate Scholarships
- Thesis: Underwater Stereo Matching and its Calibration
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
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!