Univar Solutions (2026–present)
Lead Developer · Remote, contract through Insight Global
Univar is a chemical distributor, which in practice means a lot of warehouses and a lot of SAP. I joined in July 2026 as lead developer. So far that has meant three apps. Two of them run on iPhones and iPads through Capacitor, with Firebase sitting between them and SAP. The inventory management app is how people in the warehouses pick, process, and receive.
The electronic proof of delivery app, which drivers use to record each delivery, was still on Angular 17 when I got there. I planned the migration and rewrote it in Vue and Nuxt 4 in my first three weeks, so both apps are on one stack. Every page a driver can reach came over. The new version holds on to photos and signatures taken without a signal and uploads them once the phone reconnects.
Since August most of my work has been in the inventory app, on returnable containers (the cylinders, drums, and totes that customers send back when they’re empty). Warehouse staff used to go out to a separate asset-tracking app to record those. The new screens let them scan each container’s batch number in the inventory app itself, and the numbers go to SAP along with everything else they submit. I also tracked down why a retry after an SAP error never left the iPad. The app was answering it from its cache of the first attempt.
As lead I wrote the team’s deploy and hotfix steps and cleared the dependency findings from our security scanner. In September I started the same Angular-to-Nuxt rewrite for a third app, the plant dashboard, which is where plant staff look up deliveries and their paperwork.
This entry gets longer as things ship.
TriNet (2021–2025)
Senior Software Engineer · Remote
I joined TriNet to help bring their development team in-house. The corporate website had been built and managed by an external agency on Vue 2 and Nuxt. The tooling and the codebase were both dated, and the vendor relationship meant internal teams couldn’t really own their own site. My job was to help stand up an internal team and then rebuild, run, and own the site ourselves.
The 25-minute build
The first thing I noticed in my first few months was that builds on Netlify took 20–25 minutes. Every time. Marketing used Contentstack to manage copy, which meant every single-word change (a typo fix, a product name tweak, a date correction) kicked off a 25-minute wait before anyone could see it live. Several people were making updates throughout the day, and all of them were sitting there watching a progress bar.
It annoyed me, so I fixed it. The build was doing almost everything the wrong way: every asset in the project was being reprocessed on every build, every asset was being logged during processing, content collections were being rebuilt even when nothing in them had changed, and the whole CMS dataset was being refetched from scratch every time instead of incrementally. Cleaning that up (proper caching, incremental fetches, killing the asset logging, not rebuilding what hadn’t changed) brought builds down to 1 minute, and the marketing team was very happy with me.
Vue 2/Nuxt to Vue 3/Astro
With the site in-house and the feedback loop fast enough to iterate on, the bigger migration could finally happen. I planned and led the full move from Vue 2/Nuxt to Vue 3/Astro with a Node.js backend, rebuilt the test suite, and automated enough of the pipeline that feature work could move quickly without anyone babysitting deploys.
Accessibility: D to A
The site graded a D against WCAG standards when I arrived. By the time I left, it was an A. Most of that work happened alongside the migration, because we were rebuilding the front end anyway. But a lot of it was just going through and fixing things that had been wrong for a long time. Semantic markup, keyboard navigation, color contrast, screen reader testing, the whole list.
The rest
- Set up Contentstack so three departments could publish their own updates without a developer
- Redesigned the layout and navigation, and visitor conversion went up 25%+
- Cut image load times 75% with better compression and newer formats
- Managed one direct report, and hired and managed outside contractors for the big pushes
- Kept shipping through mid-sprint scope changes, shifting leadership direction, and moving launch dates
Independent Consultant (2018–2021)
Senior Software Engineer · Remote
Three years running my own shop, taking on up to ten clients at a time (Ann Taylor among them) and handling every phase from proposal through deployment. Design, full-stack development, DevOps, client communication, and the parts nobody puts on a resume: scoping conversations, writing proposals that say what the work will cost and when it will ship, and keeping records good enough that nobody had to ask me twice what was going on.
Everything shipped on time and on budget, which with ten clients at once had at least as much to do with the calendar and the inbox as with the code.
North American Power (2017)
Senior Web Developer · Norwalk, CT
North American Power is an electricity provider, and I spent a year rebuilding its enrollment website. I set the design direction, wrote and refactored the SCSS, and added a lot of JavaScript to make the functionality behave. It ran on Drupal 8 and Foundation 6, and there were three of us on the team, doing daily scrum and tightening up a codebase that had gotten redundant in places.
DiscoverOrg (now ZoomInfo) (2014–2016)
Senior Software Engineer · Vancouver, WA
DiscoverOrg hired me to take a sedimentary mess of a codebase and turn it into something you could actually develop in. What I walked into: stylesheets that overrode each other multiple times, HTML generated by stored procedures or scattered across directories, a jQuery and plain-CSS front end with no architecture to speak of, and a backend that was part procedural Perl, part underbaked PHP, with a MySQL database doing what it could.
The CTO and I chose Angular (1.x at the time) with plain SCSS on the front end, and eventually Java Spring Boot on the backend. He was a Java developer and brought in a back-end hire to work alongside me, which meant I got to learn Angular, tighten up my SCSS, and learn how to consume and contribute to Java APIs. I built new Angular views in HTML and SCSS with their attendant models and controllers in JavaScript, consumed existing Java APIs, wrote my own when I needed to, and refactored the legacy Perl, PHP, and front-end code underneath. Look, feel, functionality, and performance all came up.
DiscoverOrg grew from about $30M to $1.2B in annual revenue during and after my time there. The website was one factor of many, but it was the factor I worked on, and it had to scale with everything else.
Earlier
I did front-end work at Blue World (2013–2014) with Bootstrap, jQuery, and PHP. In 2013 I also took two short contracts. For InsightExpress I produced web content for ad tracking integrations, and it appeared on Yahoo!, MSN, The Wall Street Journal, and Forbes. For La Prairie I made wireframes for a major website redesign. Before that I was at Direct Wines (2011–2013), where I built the front ends of four brand websites that shared an Oracle ATG backend and wrote a fair number of custom JSTL functions. At Vertrue/Adaptive Marketing (2007–2009) I managed web development and moved the corporate and client websites from table-based layouts to CSS. There’s also assorted freelance work going back to 2008.