cv.md 18 KB

Hello, I'm Craig Fletcher.

You can call me on 07480924132, email me at hi@leakypixel.net, or see additional details at leakypixel.net.

I've been developing for the web for around 16 years and I'm still as eager as ever to push my skills and learn new things. I primarily work remotely, and have led teams and worked on multiple large-scale initiatives for startups and multinational corporations alike.

My primary skills include React, Vue, NodeJS and JavaScript/TypeScript generally - though I've worked with many languages, libraries and tools appropriate to the task at hand and often managed the entire stack from development to production to support.

Experience

A short description of my last few roles and what they entailed. I'd be happy to discuss these further, but for now I'll keep it brief.

Mint Velvet - Front-end JavaScript engineer (fully remote)

October 2023 - September 2024

As part of a small, highly commerically-driven team, took up various initiatives and improvements, alongside day-to-day BAU retail work. Initially, this started as a pure front-end role but evolved quickly into a full-stack role, owning the entire process of a service from design to production support. Some of the more noteworthy tasks included:

  • Initiated and led replacement of an external service with an in-house solution, developed using nodeJS and fastify, saving a significant monthly subscription cost for the business
  • Deployment and configuration of new infrastructure using Ansible and Azure
  • Liasing with third parties to connect and configure infrastructure for interdependent services
  • Site speed optimisation through use of server-side rendering (liquid templating) and advanced loading strategies for external dependencies, achieving a positive difference of 17 (~25%) on Google Lighthouse pagespeed
  • Migration to Cloudinary media from Shopify native, including parser and runtime modification to match component requirements
  • Worked very closely with lead designer to implement a component library approach, resulting in both a reduction in total number of components and much more consistent brand identity
  • Resolution of various developer headaches through use of a dockerised dev environment, greatly reducing "blocked" time for Windows users in particular
  • Refactoring and improving critical areas of the site to make better use of client-side caching and improve perceived speed through optimistic updates to the store

Skills used: Vue CompositionAPI GraphQL NodeJS Pinia TypeScript Yarn ESBuild pkg Fastify MongoDB Shopify Liquid Storybook Cloudinary Docker Ansible Azure Swagger OpenAPI React-remix

Kloeckner Metals (Erlang Solutions) - Front-end JavaScript engineer (fully remote)

August 2022 - October 2023

Worked on and led various business-critical initiatives, including:

  • Implementing an app-wide store (Pinia) as part of the process of refactoring the app and removing developer obstacles
  • Upgrading a stock and order management app from Vue 2 to Vue 3
  • Helping develop a component library using modern techniques and tooling, including both Vue and Ember
  • Implementing stock availability across a worldwide group in a centralised app

Skills used: Vue CompositionAPI GraphQL NodeJS Vuex Vite Ember Pinia TypeScript Yarn

Orbit - Full-stack JavaScript engineer (fully remote)

June - August 2022

Worked together with a cofounder of a small startup to develop core features of the product and decrease tech debt (primarily in the state management and data fetching areas of the app). Developed a state management and data cacheing solution based on Jotai and URQL which fixed a number of long-standing bugs and resulted in a 15-20% performance improvement across the app.

Skills used: React React-hooks GraphQL NodeJS TypeScript NPM Ramda Jotai URQL Hasura

Attest/101ways - Full-stack JavaScript engineer (fully remote)

March - June 2022

Worked with a small to medium sized team to develop new features and improvements to the client application, using Vue, Pinia, Vuex and Ramda. Application performance was paramount, and involved heavy use of large datasets and graphing libraries.

Skills used: TypeScript Vue NPM HighCharts WebPack Pinia Vuex Ramda PostCSS Jest Cypress

Penfold pensions - Full-stack JavaScript engineer (fully remote)

September 2021 - March 2022

Worked with a medium sized team to refine and develop a cross-platform app to allow customers to manage and analyse their penfold pension. Primary responsibilities included finding and fixing complex multi-layer bugs, developing new features to match stakeholder specifications and performance analysis and recommendations.

Skills used: TypeScript React NPM WebPack Babel React-Hooks NextJS NodeJS Apollo Jest Cypress

Erlang Solutions - Front end tech lead (fully remote)

October 2020 - September 2021

Architected and led a 3-person front end team, replacing an underpeforming angular site with a fully modularised and modern react-based solution for a high traffic betting company based in South Africa, as well as upskilling the existing development team into the react ecosystem. As part of the team lead role, updated key stakeholders and discussed design of the solution with appropriate people within the business.

Skills used: TypeScript React Docker NPM WebPack Babel React-Hooks React-Sagas

Betika - Front end engineer (6 months, fully remote)

2020

Worked as part of a 10-person team to deliver new functionality to a greenfield implementation of a high-traffic sports betting website, using VueJS and Vuex.

Skills used: TypeScript VueJS Docker NPM WebPack Babel Vuex

EnergyLinx (GoCompare group) - JavaScript consultant (2 months, fully remote)

2020

Worked as the lead developer with a small (3 person) team on a complete rebuild of a React and TypeScript component based whitelabel system. Built an MVP with functioning cross-module themeing, configuration injection and a reference implementation as the sole developer, which was reviewed and discussed with the technical and design team on a continual basis.

Skills used: TypeScript React Docker NPM WebPack Babel

Greenroom Design - Systems integration engineer (3 months, fully remote)

2019 - 2020

Reverse engineered an existing in-store product showcase solution, requiring use of Erlang/Phoenix, vanilla JS/HTML/CSS, associated animations and the existing custom build and deploy system for a multinational retailer end client.

Skills used: Erlang/Phoenix JavaScript CSS HTML CSS3-animations

AKQA - JavaScript consultant (6 months, fully remote)

2019

Worked on a high-profile project for a well-known international clothing brand, using React, TypeScript, Netlify, Next.js, AWS lambda, nodeJS and AWS dynamoDB to deliver an integrated customer experience across in-store devices, mobile websites and a facebook messenger bot. Working remotely as part of a small, internationally distributed team to deliver a time-critical project with many challenges and tight deadlines.

Skills used: TypeScript React Netlify Next.js LambdaFunctions NodeJS DynamoDB MessengerAPI

Erlang Solutions - JavaScript consultant (9 months, fully remote)

2018 to 2019

Worked closely with a worldwide distributed team to develop a deliveroo-like service for fuel and related product delivery. As the only JavaScript developer on the team, I built a react and apollo based web application to interact with an erlang graphql service that was being developed in tandem by other members of the team.

Skills used: JavaScript React LeafletJS Apollo GraphQL Erlang/Phoenix

The Co-op Group - JavaScript consultant (6 months, part remote)

2018

As part of the ventures team, built a new marketplace application using react for the frontend and python with flask for the backend. Worked in a team of 2 to get the project off the ground and into production. This project was more focused toward user research and constant iteration than technical challenges, something I really enjoyed.

Skills used: JavaScript React Redux Python Flask SQLAlchemy Docker

Earlier

2017 to 2018 - Life's Great - JavaScript consultant (6 months, part remote)

2017 - Tyres on the Drive - JavaScript consultant (12 months)

2016 - The Hut Group - JavaScript developer (12 months)

2015 - Bet365 - JavaScript developer (6 months)

2013 to 2015 - On The Beach ltd. - Front end developer, Permanent

Freelance projects

I'm sometimes lucky enough to get to work on small projects, which can be quite varied. A few of my favourites have been:

  • Worked with a small team to deliver a mobile-first video conferencing solution built on open source technologies in order to host entertainment events with a high level of audience participation
  • Development of an "augmented reality" display app for an international shoe brand, requiring reverse engineering the existing platform
  • Cross-platform time tracking app for a series-A startup, using Quasar/Vue/Capacitor/Cordova
  • Worked with a series A startup to produce a custom-designed device for secure decommissioning and backup of spinning disk drives
  • Various Web3 projects - including dashboards, dApp interaction and web3 APIs for early-stage startups using web3js and ethers
  • Successfully delivered both shopify reskins and full builds of small ecommerce sites for small to medium businesses, incorporating detailed analytics and complex applications (embedded Vue apps) such as cut calculation for sheet materials

Skills

Some of the skills I've picked up along the way and tools I've used.

JavaScript

I've around 16 years experience with JavaScript, and consider myself highly proficient. I take an active interest in new developments, often spending my free time checking out new features and frameworks.

  • React (Redux/Apollo GraphQL/hooks/reselect/Jotai/React Native)
  • Vue (Vuex/Quasar/Vue Apollo/Vitest/Vite/Pinia)
  • CMS and product management platforms (Shopify/Strapi/Contentful/Wix)
  • Cross-platform wrappers (Cordova/Capacitor/Quasar/Electron/PhoneGap)
  • API integration (analytics/Facebook messenger platform/payment systems/GraphQL)
  • NodeJS (Express/Restify/Fastify/native HTTP/cloud functions/Hasura/Prisma)
  • Document DBs (Mongo/Couchbase/DynamoDB)
  • Client-side templating (Handlebars/Mustache/jst)
  • Module loading & dependency resolution
  • Testing & automation (Jasmine/Jest/Karma/Istanbul/Selenium/nyc/Vue test utils 2 & 3)
  • Build systems (Grunt/Gulp/Webpack/custom-built)
  • WebSockets (Pusher/native)
  • Modern ECMA script (Babel/Node)

DevOps

In the past few years, I've taken a keen interest in devops-related skills. Initially, this started as a passion project to containerise and self host infrastructure, but quickly developed into managing the full stack in my commerical roles.

  • AWS and Digital ocean
  • Continuous integration (Jenkins/Travis/GitHub actions)
  • Docker & docker-compose
  • Ansible
  • Server administration (systemd, collectd, init.d)
  • Common web servers, certificates and proxying (nginx/Apache/caddy)
  • Building appliances/discreet servers (Raspberry Pi/Intel Atom SoC)
  • Versioning (npm/git tags/artifactory/docker images)
  • Linux/UNIX-like OSes (Debian/Arch/FreeBSD)
  • Grafana, telegraf and influxdb

HTML & CSS

Developing the front end of a project was my main focus for many years, picking up a history of tools and techniques. It's still something I find very satisfying, especially in first iterations of products.

  • Sass/SCSS/LESS
  • Responsive design
  • Bootstrap
  • Modular design & web components
  • BEM/SMACSS
  • Accessibility/Information hierarchy
  • Progressive enhancement
  • W3C Standards
  • Cross browser compatibility
  • HTML 4 & 5

Others

I've also picked up a few odds and ends that don't fit anywhere else, often from interested coworkers or personal projects.

  • UX and data-driven design
  • Git (GitHub/CLI/GitHooks/Workflows)
  • Agile, Kanban & Scrum
  • Project management tools (JIRA/Trello)
  • Blockchain (trading, bitcoin/iota/ethereum/bat/litecoin/monero theory and use, some experience with solidity)
  • Web3 technologies (Web3js/Ethers/Metamask)
  • Analytics (Google/server stats/pingdom/custom built)
  • AI/ML (model finetuning/local models/SKLearn/Keras)

Experience of working with

Working on many projects has given me contact with quite a few back end environments, with varying degrees of depth.

  • Java (Spring, some)
  • Golang (Iris, some)
  • Erlang (Phoenix, moderate)
  • C# (.NET, moderate)
  • Bash (day to day environment & scripting)
  • Rust (scripts/tools here and there)
  • Python (flask/sql alchemy/raspi-GPIO/scripting)
  • Ruby (Rails/cucumber/rspec/scripting)

References/reviews

Things people have said about working with me.

Kloeckner - Jan Butzner (Product Manager Innovation & Design)

November 2023

I worked with Craig for over a year, very closely on a complex, high-stakes project involving Vue, GraphQL and such, with a lot of technical debt. First of all, it is a joy to work with and talk to Craig. He is very knowledgeable, intelligent, empathic and efficient. He not only managed to analyze the situation clearly, he also proactively suggested and made major improvements to the code base and was able to clearly communicate and explain it even to non-tech people.

We/I will dearly miss working with him and he was only "released" due to unrelated business decisions. Highly recommend hiring Craig, you will not regret it!

Orbit - Sebastian Sas Mangel (Co-founder - Engineering)

July 2022

Craig has been a fantastic and excellent addition to our team for a few months. We have worked together very hard to develop core features of the product and decrease tech debt in the state management and data fetching areas of our web app. He has a very thorough understanding of the React ecosystem and as a whole of front-end technologies. Craig has conducted together with myself the research and PoC implementation of Jotai, which we later have adopted throughout the app. This has resulted in a 15-20% performance improvement and it has reduced significantly the number of network requests and bugs that we have faced with our previous implementation of a data caching layer. Needless to say, this was a very challenging endeavor, with a relatively short deadline, filled with numerous moving parts.

We have also worked together to develop a new feature called the Treemap, which is a visual and interactive representation of the product discovery outcomes.

He is a great communicator and very hard working individual. His technical knowledge covers areas way beyond front-end technologies. I can't recall just how many conversations we had about IoT devices, microcontrollers, networking, and security - always fascinated by the sheer amount of knowledge he has.

We have been very pleased with the work he has done and we are grateful to him for his contribution to the team and the company.

AKQA - Mike Carlisle (Group Technical Director / Consultant / Architect)

October 2019

Craig worked with us on an extremely intense project with tight timelines. He was able to help deliver the project and put in additional effort above and beyond what was expected of him. He was able to ramp up quickly and own the solutions he worked on, as well as reacting to changing requirements and challenges. Craig worked closely with an external API team to overcome issues and deficiencies with data, and collaborate around improvements with how data was retrieved to optimize for performance. He also produced the frontend for a web experience in ReactJs to design specifications, and with impressive turn-around. Craig also owned and delivered a Facebook Messenger Bot as part of the solution.

This was an unusually challenging and stressful project, and we were lucky to have Craig staying focused and committed to the delivery of the end experience.

Erlang Solutions - Katarzyna Kraus (Project Manager)

June 2019

I had the pleasure of working with Craig on a few month long project implementing an Elixir based app. As our frontend expert he had an additional challenge being the only representative of his field on a distributed team of backend engineers. With members located all over Europe, taking on intertwined tasks, there was an additional requirement of communicating effectively within the team to make sure everyone progresses with their work and does not block others. The success hinged on developers actively coordinating with each other and keeping the conversation going. Craig’s friendly attitude, sense of humour and opened mind played a huge role in making that happen.

Craig managed to combine the requirements of being the sole expert in his field with being a team player aiding other people and overall team progress. He took initiative, was able to advise and guide the customer towards certain solutions, he listened to feedback and changing requirements and moved forward in a steady, confident pace. He is not the loudest voice in the room and not the one to initiate edgy endeavours, but his advice is well thought out, meaningful and opened for debate. He is not afraid to admit mistakes and raise flags if he thinks something is going wrong, which builds trust within the team and allows management to make good decisions.

It is my opinion Craig’s personality will match any team and combined with his expertise as a seasoned frontend developer will help projects reach a successful delivery.

I'm not boring

I have quite a few hobbies outside of my development work, and try to keep myself as active as I can - especially during the summer, when I can get outside.

  • Rock climbing and bouldering are my big hobbies... though they don't look a lot different from the outside, there's quite a gap. I vary between the two, but practice indoors twice a week and get outside when I can.
  • Being interested in the open-source culture, I attend as many related meetups and events as I can - oggcamp and fosstalk live being ones I've attended for a few years.
  • I also spend quite a lot of my free time tinkering and working on personal projects, such as building raspberry pi based camera systems, monitors, or arcade systems. I'm also passionate about self hosting as much of my personal infrastructure as I can (talk to me about this!) and dockerising all the things.
  • Of course everybody needs to relax - I spend quite a lot of time reading, or listening to podcasts. Some of my favourites are 99 percent invisible, bad voltage, linux unplugged, selfhosted and Stuff you should know.