David Murdoch

London-based · 07793 380037 · dsmurdoch357@gmail.com

Senior frontend developer who writes flexible code and delivers products. I started coding in 2009. I have been devoting the bulk of my professional time to programming since 2016. I can write Java, JavaScript, Python. When I talk about code I strive towards a precise description of what code is doing. For example how data flows through the redux store. Dispatch Action => Store => Middleware => Reducer => Selector => UI. This does not always translate to a high-level interpretation of a feature but when working with peers, I can easily communicate what I can do and what I can't do. And what I can do is quite a lot these days...

Experience

DigiVault

London Piccadilly/ Remote

DigiVault is a crypto-asset custodian. The task was to develop a new website portal for their clients to transfer assets. The previous portal was developed by contractors, written with create-react-app and used a heavy use of redux-observable to handling application state. The core dev team of DigiVault was backend Java developers. They knew basic HTML and basic JS so the use of redux-observable and rxjs was a lot of cognitive and code overload for their team. Also they weren't fans of JSX. They opted to build a new portal using Svelte with the same current features as the legacy portal. I got to use a broad range of technologies at this role. The backend was written in Java using a framework called gradle that was heavily inspired by Express.js. They used BDD tests written in python and behave for integration testing. The idea was to use a simple scripting language that both frontend and backend developers could understand and share a common module. For integration tests on the frontend we used the playwright library. Svelte was an interesting framework. Very similar to React. Custom hooks were much harder to make without a `useEffect` hook. I took on the role so that I could work on more custom components. I ended up using the `tweened` store quite a lot, would be nice to have that in react.

Apr 2021 - Aug 2022

ShipServ Ltd.

Chiswick, Greater London

Worked with development tool nx and Next.js Experience with the material design system Gained proficiency in TypeScript

Jan - Apr 2020

Ageas Insurance Ltd.

Bournemouth/Covent Gardens

Using React in re-platforming a legacy web portal. The legacy site included an iframe within which the Worldpay checkout took place which come January will not be PCI compliant. The web portal was being moved to a serverless middleware.

Sep - Nov 2019

Smarter Click

Borough, Greater London

First experience with IAM integration Extra awareness of AWS tools such as CodePipeline, CloudFront and aws-amplify Cypress integration tests

Apr - May 2019

QA Consulting Ltd.

Croydon, Greater London

Consultant work for the Home Office - First experience with the React library - Worked on converting the gov design system into CSSinJS components: https://github.com/govuk-react/govuk-react - Focused on writing forms and data fetching - Wrote unit (jest) and integration (selenium) tests - Some experience of redux before migrating to Context API - Worked within Scaled Agile (SAFe) process - Employed by QAConsulting, the client was HODDaT within the Home Office

Jun 2017 - Apr 2019

Education

Southend High School for Boys

  • A2 Levels: 1 A*, 1 B, 2 C

  • AS Levels: 3 A, 3 B

  • GCSE: 9 A/A*, 4 B

Sep 2004 - Jun 2011

2:2 MPhys Physics with Nanotechnology, University of Southampton

Oct 2011 - Jul 2015

Projects

external

This portfolio

The GitHub link to the source code of this portfolio

external

IMH website

A website for my parent's company. Built with Tailwind anc Gatsby and uses Contentful as a CMS

internal

Noughts and Crosses

The tutorial example from the reactjs.org docs in tailwindcss stylings with TypeScript typings

internal

FizzBuzz

Numbers 1 to 100 where any number divisible by three is replaced with the word "fizz", and any number divisible by five is replaced with the word "buzz"

external

Totally not XSS vulnerable

An example of a XSS vulnerable site. A list of usernames and passwords are stored in IndexedDB and an example username in the form that can be used to print the list in a table

external

Layout Proposal for Twitch Streamer I watch

AustinShow uses a video call app to do a battle royale style show. During the elimination stage he introduces a bottom three stage that can sometimes be hard to follow

internal

D3.js pie chart

Pie chart in svg using D3.js

Interests

  • Running
  • Swimming
  • Films
  • Cycling