I am a full stack engineer and architect with over 20 years of experience working for all manner of organisations, from working as a single freelancer, through a number of startups and consultancies, to large companies including Sun Microsystems and The Economist. I am passionate about open source and past contributions can be found below the employment history below. As I started my career in the 90s I have a solid foundation in all the things we used to do by hand (SQL, server admin, C, perl, you know the score).
I believe mindset trumps technology and have a passionate interest in collaboration, mentoring, upskilling and communication. I think shipped and working software is better than perfect software and am fully possessed of a devops mindset, encouraging ownership of all aspects of the development lifecycle. I have also worked across multiple teams in my time, picking up invaluable skills in cross-functional working, cross-team communication, dependency identification, cutting through static, unblocking team memmbers and data analysis.
- Cloud: Fully conversant with AWS and GCP, making heavy use of many services as detailed below and pushing the envelope in many cases. Also possessed of a devops mindset, instrumental in building CICD flows for teams and pushing ownership of the full software development lifeycle to engineers. Recent projects involved use of Terraform as a replacement for Cloudformation as well as migrating older projects to CDK. AWS services used in anger across multiple projects include API Gateway, Step Functions, Athena, CloudFormation, CloudFront, CloudTrail, CloudWatch, Cognito, CodeBuild, CodePipeline, DynamoDB, EC2, ECS, ECR, EFS, Elasticache, Elastic Beanstalk, Event Bridge, Elasticsearch, ELB, Glue (building ETL pipelines), IAM, KMS, Lambda, RDS (Aurora/Postgres), Route 53, S3, SAM, Secrets Manager, SNS (including message filtering), VPC asssembly and X-Ray. GCP services used include BigQuery, Cloud Storage, Spanner, Cloud SQL, GKE, GCE, Stackdriver and PubSub.
- JavaScript: fully proficient in ES6. Technologies used include Typescript, React, Redux, Node, Vue, GraphQL and the Apollo platform and building AWS Lambda functions for event-driven systems. Prefer to code in a functional style.
- Go: early adopter long before Go modules and generics landed, main project involved building out an event-driven distributed content platform at The Economist. Instrumental in bringing the language to the organization, securing training with Bill Kennedy and mentoring new hires. Outside The Economist, contributed to numerous Go OSS projects and open sourced some libraries we built in house. Also work closely with Todd McLeod, who created the best-selling Go courses on Udemy, on his social education platform. Bill was kind enough to say this about me:
"In the early days when I was learning and teaching Go, I had the pleasure of meeting Dave. Dave was writing Go and introducing it into his projects as an early adopter. Dave was there to help me as well since he had experience I didn't have yet. If you are looking for a top notch engineer with the ability to lead/manage teams and projects, Dave is someone you need to consider."
- Example OSS contributions to Go projects: bluemonday, Docker, caddy and godep. Example of a core library built by myself for the first iteration of the platform and open sourced by The Economist - ramlapi.
- Python: fully conversant with Python 3, mainly from supporting a fleet of Lambdas at The Economist and through interaction with the data science team.
- Ruby: not so much these days, but was a passionate Rubyist in the 2000s. Have worked with both pure Ruby and Rails, including contributions to the Rails framework itself and substantial commits to the A/B testing library Split.
- Back end: extensive work on the back end using a large set of technologies inluding Varnish, Openresty (including Lua), Elasticsearch, Docker to name a few. Pushed the envelope with many (writing test suites for Varnish using varnishtest, zero downtime deployments with Elasticsearch, using Lua to compose incoming requests into Elasticsearch filter searches via POST). Also SQL fluent.
- Logging and metrics: Extensive use of a slew of technologies to gain maximum visibilty into applications, including New Relic, Datadog, Logz.io, CloudWatch, AWS X-Ray, Kibana, Grafana and Prometheus.
I am also deep into Elixir and Clojure right now as a big fan of functional programming.
Switched to team spun up to decommission the legacy content sources, APIs and cloud resources, alongside assisting in the build of a new content platform.
Main initiatives included:
- Creating and executing a migration plan for moving old content into the new Content Platform (Lambda, Apollo GraphQL).
- Working with the Editorial Tools team to build new features to allow publication of older content sources from the new CMS (CUE) to the old and new Content Platforms.
- Building out the new Economist podcast experience (easy wins in CP1, extra functionality built out in CP2).
- Building out the new Economist homepage.
Work also involved cross-team collaboration in building out the new Content Platform (Apollo/Prisma, Lambda, Postgres, Cloudflare Workers) including schema stitching to use both the new and old Content Platforms at the GraphQL level as we deprecated functionality and building end to end migration plan and execution of same to get all old content (stored in Drupal and surfaced in old Content Platform) into the new API and data store (migration workers listening to SNS containing content reprocessing events, assembling old content into the new structure and pushing to the new GraphQL mutations) and working with BA to target appropriate content slices using a phased approach.
Technologies used: TypeScript, Node, GraphQL (Apollo toolchain), AWS (Lambda, SNS, SQS, AWS CDK, API Gateway, Step Functions, CloudWatch Events), Drupal, CUE.
Worked on the Economist editorial tools team (team assembled to switch from Drupal as a content source to CUE) in order to help the team move the weekly edition publishing flow from the older source systems. Instrumental in helping the team achieve their target on time and under budget. First weekly edition was published from CUE with zero errors.
Technologies used: TypeScript, Node, AWS (Lambda, SNS, SQS, AWS CDK, Step Functions, CloudWatch Events).
Back at The Economist again, this time on a contract to build out a syndication platform to consolidate and centralise various approaches adopted in-house to syndicate content to a range of internal, retail, wholesale and aggregation clients.
Techologies used: TypeScript with heavy functional flavour (mainly Ramda), AWS (Lambda, SNS, SQS, AWS CDK, Step Functions, CloudWatch Events).
Working as a back end engineer across a variety of products and teams. Remit included consolidating and documenting the microservice estate, hiring new engineers, building and maintaining services, acting as a conduit between back end and front end teams, collaborating as devops building CICD pipelines (ArgoCD, K8S) and working on cloud back end (GCP) with services written in Go, Python and Node. Used a variety of build and dev tools including Mage, Tusk, SOPS. GCP technologies used: BigQuery, Spanner, PubSub, Cloud Storage, Cloud SQL, Kubernetes, GCE.
Worked as a consultant for Direct Line on a pioneer cloud team building a real time fraud detection engine. Worked on all parts of the stack, from the React front end to the back end composed of a set of Node Lambdas and associated AWS infrastructure. Advised and worked on all aspects of the project and team to hit several tight and budget-sensitive deadlines in a high governance environment (code review process, rebuilding and streamlining CICD, infrastructure as code). Main components included:
- Assisting on build of the in house real-time fraud detection system and building a router to forward requests to both in-house and third party decision engines. Technologies involved Docker, Node (sample packages used included commander, jest, husky, lerna, pg, pg-essential, webpack, aws-sdk, axios, lodash and xml2js) and AWS (AWS SAM, API Gateway, Cloudformation, CodeBuild, CodePipeline, DynamoDB, Lambda, S3, SQS, X-Ray).
- Single-handedly building a prioritization service designed to allow claim handlers to pull a claim to work on based on a set of nuanced criteria. Service was invoked on a regular schedule via AWS CloudWatch Event Rules. Technologies involved Node (primary package used was lodash for list processing and composition) and React (front end integration including wiring into Redux). Back end was Postgres (AWS Aurora).
- Single-handedly building a GraphQL layer to interface the front end with relational data contained in a Postgres database. Technologies used included Docker, Node (apollo-server, apollo-server-express, dataloader, dotenv, express, graphql, graphql-tools, pg, pg-format, sequelize) and AWS (Aurora).
- Building an ETL pipeline to process and transform large quantities of claim data in batch for storage in a relational database. Service was invoked by S3 event triggers on CSV upload. Technologies involved Node, Python, Apache Spark and AWS (Athena, Cloudformation, CloudWatch, CodeBuild, CodePipeline, S3 and Glue).
Worked on the Content Platform as technical lead for a team of 8 distributed engineers (UK, New York and Slovakia), building on the foundational work completed in a previous project (detailed below) and migrating the initial fleet of worker services from Elastic Beanstalk worker environments to AWS Lambda and serverless. Worked on the entire stack, including the above mentioned workers (Go), a subset of workers written in ES6 JavaScript, the GraphQL layer that sat in front of the fleet, a gateway layer which comprised Nginx (Openresty), Varnish and Lua, and an Elasticsearch back end, including working out a way to re-index with zero downtime. Technologies used: Docker, Node, Varnish, Nginx, Lua, Elasticsearch, AWS (AWS SAM, Cloudformation, Cloudwatch, CodeBuild, CodePipeline, Elasticache, S3 SNS and SQS).
"It is my pleasure to write a recommendation for Dave Goodchild whom I have had the fortune of working with at The Economist since I joined end of February 2015 as platform architect for the content and the data management platforms. Dave Goodchild was a senior engineer on the project to revamp the content platform into a micro-service based, message driven, reactive system. He played a key role to enable us to deliver the modernization of the core content stack of The Economist on time and on budget. It is rare to come across a standout talent like Dave Goodchild who is an amazing Golang developer and any other programming language he is asked to use, regardless if it is php, javascript, clojure or configuring nginx or varnish. He is able to quickly capture the entire end-to-end picture of a problem or a feature, devise a technical solution in record time, then implement & maintain it. His deep understanding of functional reactive programming concepts enabled to build up the new containerized system based on Docker with the back-end micro-services written in Golang and front-end based on GraphQL and ReactJS running completely optimized for Amazon Web Services (AWS), driven fully by a Continuous Delivery (CD) pipeline. It's a pity that he decided to leave after contracting about four years for The Economist. At least I've learnt a great deal working with him and I'm happy that he remains as a very good personal friend who I can deeply recommend as a colleague."
Artur Ortega, Platform Architect, The Economist (previously Telegraph and Yahoo).
"Dave is a level headed very highly skilled engineer. He has an uncanny ability to break down even the most complex task and simplify it to the point that everybody on the team can contribute. He cuts through the noise and encourages everybody to see the core value proposition. He takes ownership of any task given to him or tangential to him and ensures it gets done to the highest quality. It doesn't matter if it's greenfield or legacy, unfamiliar tech or a well trodden road; Dave will roll up his sleeves and get it done. He has deep knowledge of Golang and high scale AWS cloud architectures. He's a true polyglot engineer and will cut code in the appropriate tech to get the job done."
Juhjar Singh, Devops Practice Lead, The Economist.
Built out several iterations of a distributed content platform at The Economist. Involved in all aspects of the project:
- Built a set of microservices in Go, including building the microservice template, mentoring team members in Go and building key components, some of which are now open source.
- Worked alongside the web products team to deliver the front end (using Node and GraphQL).
- Worked as a devops resource on an API gateway and caching architecture, using a suite of tools including Salt, Nginx, Openresty, and Varnish. Initial gateway code was managed via Salt then ported to Docker.
- Worked with a variety of AWS tools in a devops capacity, including S3, SNS, Lambda, CloudFormation, SQS, Elastic Beanstalk, EC2, EC2 Container Service and VPC.
- Built a development environment using Docker Compose which integrated all services and the API gateway locally. Later work also involved a fair amount of Lua to turn the gateway into a true powerhouse.
- Assisted with implementing a continuous delivery pipeline with Docker and Amazon ECS, initially using GoCD for the pipeline and transitioning to AWS Code Pipeline.
- Assisted with ensuring the whole stack was fully tested using Go's built-in testing package and developing a set of contract and integration tests.
- Helped to build the service discovery layer, initially with Consul and transitioning to dynamic back ends in Nginx routing to AWS ELBs.
- Built Drupal modules for the back end to deliver content from the CMS to API consumers. Later iterations leveraged S3 events and SNS to trigger downstream Go workers which transformed and stored raw content in the appropriate format (modified JSON for API consumers, Apple News format for the Apple News service, and later all content consolidated in a canonical data model influenced by schema.org).
- In later stages of the project, worked on mechanisms to ensure content could still be served even if all the services and Drupal back end went down using Varnish write behind cache and storage of responses and content on S3.
Hired by the cloud computing consultancy that worked with The Economist on providing AWS services and training to build a data product using React and Redux on the front end and Serverless and AWS on the back. The system provideD a dynamic UI on top of Peak's data management offering allowing clients to log in and navigate a series of data-driven dashboards.
Initially hired as a Drupal developer, I had the good fortune to establish a great working relationship with The Economist and work on a number of digital transormation projects from inception to delivery, including:
- Instrumental in assisting in the migration of The Economist stack onto AWS. Touched all parts of the migration process, from consulting on migrating our services and packing configurations into Salt, adjusting the deployment process to cater for auto-scaling, normalising HTTP headers across the whole stack through Incapsula, through the Amazon ELBs, Varnish, web servers and applications.
- Providing support for a Rails application owned by Digital News Agency (part of the Economist Group), including advising on upgrading from Rails 2.3.8 to 3 and then 3.1, building a robust test harness around the application and supporting ongoing development. Also involved in building a set of tools in Ruby for use by the ops team.
- Heavily involved in an ongoing project to bring Javascript development at The Economist into the 21st century (toolset involved: Bower, Grunt, Yeoman, Jasmine, Qunit, Node and Express).
- Sole developer on a project to integrate subscription and reconciliation services into Google Play, built using a back end composed of Symfony components and exposing a JSON API. Involved working closely with the team of Java developers tasked with working on the Economist Android app.
- Helped to deliver service-oriented architecture for The Economist, which was essentially a monolithic Drupal codebase. Work covered all aspects of this mammoth undertaking, from building of initial feature lists for potential vendors and working closely with all stakeholders to ensure the project was delivered with minimal risk and disruption. The system was broken down into several discrete components which could fail without bringing the rest of the system down and potentially be swapped out for other components if necessary. The in-house built components involved a large range of technologies - a data store, a series of user-facing components (for example a Manage My Account system which was built using a range of cutting-edge front end technologies including Yeoman, Jasmine, PhantomJs, Grunt and Angular) and a set of carefully designed APIs.
- Instrumental in delivering a project whose main remit was to ensure the site could handle the extra load that will be generated by the uptake in registrations and subscriptions generated by the new paywall. Heavy stuff, working on one stream to utilise Varnish to allow us to cache pages for authenticated users in parallel with a second stream to build the system that returned user data via JSON to correctly populate the dynamic and user-specific subsystems (user navigation, analytics and ads). Involved close collaboration with ops to ensure the correct architectural decisions were made (and building tools to speed up the process, such as this memcache client I wrote to make querying the cache for user sessions easier).
- Worked on the first part of the Economist mobile project - driving the mobile wallpage implementation as well as working on some high profile mobile entry points (login and registration pages) as well as a larger initiative to start placing more diverse Economist content behind the paywall.
- Completed a project to decouple the Economist paywall from Drupal and help move The Economist towards a service-oriented archiecture. This project was pure JavaScript (with an admixture of Jquery and Underscore), tested using Jasmine and Phantom. The application also utilised local storage to store pre-compiled paywall templates.
OCT 2011 - OCT 2012: CONSULTANT ENGINEER, UNBOUND
Freelanced for a UK-based startup (Rails 3 platform) created by the QI research team. Unbound provides a crowd-funded publishing platform for writers, both published and unknown, and has garnered an impressive amount of press:
Roles previous to 2011 can be seen on my LinkedIn profile.
- ruby
- ruby
- rails
- rails api
- regularity - rb regex library
- draper - rb presenter library
- discourse - rails and ember forum
- jumpstartlabs
- railsgirls
- quartz (ruby-go interface gem)
- refinery CMS contributors)
- adn-cli(command line client for same)
- split (ab testing gem)
- resque - rb redis-backed queue
- [adn (API wrapper for app.net)](https://github.com/adn-rb/adn/graphs/
- diaspora - decentralized social software
- rstat.us - decentralizised social software
I'm a big believer in sharing the love and have delivered training sessions at The Economist and Direct Line and am currently helping with the build and maintenance of Greater Commons, a course platform for developers. I am also working with Todd McLeod to build some Udemy courses on Go, and was intrumental in bringing Bill Kennedy in for training sessions. Here's an example of a session on Varnish testing I delivered for The Economist.
I was one of the original creators of rubyinthepub, a meet-up designed to put developers, journalists and writers in the same room to explore their common space and collaborate on projects. This small event has since transformed into the UK arm of Hackshackers, an event originally kicked off by the New York Times.