At work — Problems solved
I naturally fit the Solver Archetype, and value growth & variety highly. Here's a short list of problems at work that I'm most proud of solving.
Atomic Events - Instrumentation library
Problem Statement
We need to capture wait time and outcome after a customer interaction. This means capturing outcome, and duration for the time between user click until the next page is ready & actionable.
Proposal
What if we could toggle a UI's state as waiting/ready? Then we could capture the duration and outcome of those state changes.
Implementation & Impact
I created the first version of the library. Then successfully drove adoption and alignment onto this new library across 6 teams with many stakeholders, architects and principal engineers. After, I grew the team from solo dev (me) to 5 engineers. Then I transitioned to tech lead / architect / product manager of the new Atomic Events library
Capturing blank page renders
Problem Statement
Over the last 3 years we've had several blank-page outages with different root causes. These occurrences were at small enough volume that they didn't trigger our normal alerting mechanisms. We need to find a way to alert on these occurrences.
Proposal
Could we have a set of client-side health checks that run after the page is done loading?
Implementation & Impact
I developed an algorithm to check for several signals on the page, including visible count of text chars within the root element, and root element depth. These proved to be very effective signals and provided a minimal level of false alerts.
Helped ship a critical project on a tight timeline
Problem Statement
I was brought into a project after it started. We had critical deadlines that were at risk. How can we get back on track?
Proposal
I jumped in. Met with several members of the team, and asked them what would be the most helpful problems to solve.
Implementation & Impact
Instead diving into the code, I did whatever necessary to help unblock the engineers already on the team. I wrote new stories, re-wrote and clarified others, and quickly drove conversations to resolve blockers and points of confusion. When certain became items became blockers, met with product, got alignment, and moved those items further back in the timeline.
Created release pipeline for Atomic Events library
Problem Statement
We kept releasing minor but annoying bugs with the Atomic Events library my team owns. TypeScript compilation bugs were especially annoying for consumers and difficult for us to test before releases.
Proposal
How can we model our pre-release pipeline to match (as closely as possible) how teams will consume and use our library?
Implementation & Impact
I set up some pre-release hooks with a bash script that did the following: Ran `npm pack`, extracted the dist files from that, then loaded those into a test suite, and ran against playwright tests. Finally these new files were included in a sample app, and `tsc` was run to verify there were no TS compile errors. If all of this succeeded, the release was allowed to proceed. This worked really well and helped improved stability for our library releases.
Migrating the Send Money app on PayPal.com from Backbone.js to React & Redux
Problem Statement
In 2014 when I joined PayPal on the Send Money team it became clear that our team was painting ourselves into a corner with our architecture. Many subtle state bugs took days to solve. We needed a better way forward
Proposal
Let's look at Ember and React. Could the additional structure help solve our state problems?
Implementation & Impact
I was able to get our team tickets to the first ReactConf. Then I introduced and shipped React in our Backbone app in one small spot (in the Send Money Notes field). That went really well, so I started the migration by converting parts of our Backbone app to React. This allowed us to make incremental progress on our main branch without having to delay any critical features. After moving the big pieces and paving the way, I was able to hand off the rest to the team and they continued migrating to Redux successfully.