Remote Senior Software Engineer - TapClicks - Remote
(2019-07 - 2026-07)
- Lead replacement of angular 1.6 framework of Dashboards & Report Studio to Vue
- Touched every line of code to replace decades-old code with Vue and maintain feature parity
- Multiple rounds of performance optimisation to ensure the experience improved on load-times and user satisfaction. 57% increase in page render and ready speeds
- Upgraded charting library from deprecated amcharts3 to 5
- Extracted previously hardcoded chart-specific monolithic configurations into modular composables that could be reused across all chart types
- Added previously missing features (benchmarks, regression lines, gauge charts)
- Improved PDF / PPT export of both Dashboard and Report Studio
- Fixed long-standing issue with tables being spread across multiple pages
- Found multiple efficiencies that improved rendering time of PDF exports
- Developed a "live data mirror" for exports so developers could instantly debug live platform data to handle data-related issues with widgets, layout, etc in their local environment. Caused ticket closure speed for related tickets to be measured in hours, not days
- Supported development of a clojurescript-based Google Sheets extension
- Overhauled the Semantic UI-based React components to match the company style
- Changed the local environment from static scripts that mocked returns from Google and the TapClicks API with one that could run directly inside the Google Sheets environment and communicate with Google Script through postMessages cutting development time in half and reducing errors
- Created an admin panel for the Looker Studio add-ons under Megalytic / Raven brands in Vue
- Integrates with TapClicks API via a node.js / mongo backend
- Handles payment subscriptions through Chargebee
- Kept the Megalytic platform alive as the sole-remaining developer
- Migrated AdWords and Google Analytics connectors to the TapClicks API
- Wrote a series of transformers to convert the old Java request / response to the new API endpoints
- Worked alongside devops to sunset the application
Remote Senior Software Engineer - Megalytic / Digital Brand Mine LLC - Remote
(2017-08 - 2019-07)
TapClicks acquired Digital Brand Mine LLC and the Megalytic product which included a personnel transfer
- Abstracted out the connector framework so that each new API accessed (YouTube, MailChimp, Instagram and Bing Ads) had a consistent setup
- 4 new API connectors added in under a year, compared to 1 year per connector previously
- Overhauled the Scheduled Report system to use an AWS SQS to pass jobs between microservices (schedule report, generate report ready for scheduled time, mail report)
- Saved computational resources by spreading the load over an hour's window
- Listeners on the reports would re-generate the report if it changed in that generation window
- Fixed the "local midnight" problem so that metrics would never report on the wrong day
- Implemented AWS ECS to dynamically handle the load on the report generation microservices
- Gave the widgets support for async API requests where some connectors would return a job ID to poll
- Implemented sqitch as a database management tool to sync the database between branches, developers and environments (local, staging, prod)
Senior Developer / Senior Technical Architect - Orvelo / Motionlab
(2016-06 - 2017-08)
- Developed the "Orvelo" Lead Management software
- Symfony3 REST API
- Every endpoint supported by a PHPUnit test
- Vue.js front-end with websockets ensured that multiple users couldn't edit the same record
Senior Developer - Docnet / Venditan Commerce Ltd - Gear4music.com
(2014-04 - 2016-06)
- Complete re-write of the payment processor
- Used the Digital River API to give access to 61 new payment types
- Allowed for per-country payment methods
- Abstracted payment process to ensure that adding additional payment types was a well-documented and painless process
- V12 finance and Klarna were added by Junior Developers later
- G4M processed at least ~£80,000 / day in sales so it had to be right first time
- Added "Riskified" integration into order decision process (can the product leave the warehouse)
- Changed the order decision process from a monolithic single class into a chain of responsibility
- Standard checks (in stock, card is valid, payment has been made, address verified, etc) moved to decisions in chain
- Riskified sits mid-way through and when triggered removes the other checks in the chain until authorisation is received
- Fraudulent chargebacks from stolen cards reduced dramatically
- Gave the CFO price list control
- Every product has multiple prices based on the customer type (public customer, business customer, educational institution, etc), geographic area, currency, tax type, etc
- Privileged users could now export the inventory and pricelist as a CSV, make changes, and re-upload to the system
- Every price change is backed up with a delta and stored so that rollbacks can be made
- Fixed a bug that had existed since 2008 via deep inspection of old payment process
- Fixed and improved product filters
- Product filters would display based on what was currently visible on screen rather than what matched the search
- Ensured that the filters could access the search cache and build themselves from there
Various jobs - Various marketing agencies
(2006-06 - 2014-04)
Supporting custom PHP CMS. Developing addons inside existing CMS systems (PyroCMS on Laravel). Developed an entirely customisable form system for season train tickets complete with exports to accounting software and an invoicing system that would run ~£100,000's worth of tickets a week.
Optimised templates for a nation-wide (pre AirBnB) holiday cottage booking platform. Worked with Northern Rail to build custom Facebook integrations to capture competition entries. Maintained and developed a delegate tracking system for events including payment options, breakout attendance, limited community functions, barcoded attendance tracking for fire regulations, etc.