I am an enthusiastic developer who strives to write maintainable code that solves business problems. Based in London, I enjoy working collaboratively in a team as well as working autonomously. My latest interest is writing software at enterprise scale, in particular focusing on SOLID principles and improving my domain modelling skills.

Skills

Current

  • C# 5
  • .NET 4.5
  • ASP.NET MVC 5
  • ASP.NET Web Api 2
  • OAuth2
  • IdentityServer3
  • TypeScript
  • SOLID
  • TDD
  • TFS
  • Elasticsearch
  • NUnit
  • Moq
  • Scrum
  • NuGet
  • Git

Experience

  • Knockout
  • AngularJS 1
  • Couchbase
  • RabbitMQ
  • Grunt
  • Bower
  • Python
  • Javascript
  • SQL
  • Django
  • Rhino Mocks
  • TeamCity
  • jQuery
  • Subversion
  • Linux
  • Kibana
  • Azure
  • Octopus Deploy
  • Puppet

Work Experience

Senior Software Developer, Perfect Channel

October 2014 — Present

  • C# 5
  • .NET 4.5
  • ASP.NET MVC 5
  • ASP.NET Web Api 2
  • OAuth2
  • IdentityServer3
  • AngularJS 1
  • Knockout
  • TypeScript
  • SOLID
  • TDD
  • Couchbase
  • Elasticsearch
  • Kibana
  • RabbitMQ
  • Azure
  • Octopus Deploy
  • Puppet
  • TFS
  • NUnit
  • Moq
  • Scrum
  • My current role is focused on the development of a multi-tenanted data analytics and visualization platform, implemented as a family of decoupled microservices. I have been responsible for a broad range of technologies, mainly split into the development and maintainance of the microservices and the DevOps to support the platform. The following are tasks that I have done in this role:
    • Developed plugins for our Kibana-based Dashboard that provides OAuth2, theming, and extra metric visualizations.
    • Developed and maintained an OAuth2 Elasticsearch proxy API that authorized users based on their tenancy.
    • Maintained the IdentityServer3 implementation as our OpenID Connect server, integrating with our in-house user accounts library.
    • Developed and maintained various frontend components implemented as single page applications using AngularJS.
    • Implemented resource protection for our APIs using open source OWIN middleware packages.
    • Implemented continuous delivery using Octopus Deploy and created custom TFS 2013 build templates to create NuGet packages of our services for Octopus.
    • Implemented a workflow to provision an environment in Azure with a combination of Octopus Deploy, Azure Powershell scripts, and Puppet. The workflow begins by creating a resource group and skeleton services in Azure, the provisioning of the Puppet Master VM, followed by any number of service VMs provisioned as Puppet Agents.
    • Developed a set of Puppet manifests for the platform, including a set of MCollective manifests to allow the Puppet Master to push updates to Agents and a set of RabbitMQ manifests.
    • Created a Vagrant file that bootstrapped developer VMs using the same Puppet manifests as described above.
  • My previous role involved being in a cross-functional team, performing full-stack development for a marketplace trading platform.
  • Performed regular code reviews to improve the quality of the deliverable as a team and also to learn and to teach others.
  • Followed the Scrum methodology to deliver iterations. Actively participated in sprint planning and retrospectives to promote continuous improvement.
  • Proactive in documenting existing technical debt as stories into our backlog to allow the development teams to tackle them in future sprints.

Application Developer, Rates E-Commerce, Credit Suisse

July 2012 — October 2014

  • WPF
  • C# .NET 4
  • Oracle/Sybase SQL
  • NUnit
  • Rhino Mocks
  • TeamCity
  • Unix
  • C++
  • Google Test
  • Google Mock
  • Boost
  • Main WPF GUI developer responsible for implementing new features using MVVM to promote code maintainability. Added unittests to enable refactoring the codebase.
  • Implemented continuous integration using TeamCity and created a QA test plan to maintain application quality between releases.
  • Implemented an automated release process using TeamCity and shell scripts to allow one-click deployments.
  • Responsible for developing and delivering a C++ market data feed for the MTS Cash Market Facility.
  • Developed code using the test driven development method with Google Test and Google Mock to ensure testability and improve code quality. Use of smart pointers from Boost where appropriate to safely manage resources.

Application Developer, Trade Management, Credit Suisse

July 2011 — July 2012

  • ASP.NET MVC 3
  • MSSQL
  • C# .NET 4
  • NUnit
  • Rhino Mocks
  • TeamCity
  • Developed an ASP.NET based CRUD application to administer user access to a trade blotter using HTML5 and MSSQL stored procedures.
  • Offered support and troubleshooting for the trade blotter application, talking to the users of the system in front and middle office.

Intern, ICT Develop, Airbus

July 2008 — July 2009

  • Development of a framework that enabled rapid development of CAD tools in Python.

Education

MSc in Computer Science, University of Bristol

2010 — 2011

BEng in Aeronautical Engineering, University of Bristol

2005 — 2010

  • Achieved 2:1 honours
  • One-year industrial placement at Airbus, UK. See above.

The King‘s School, Canterbury

1999 — 2004

  • A in Mathematics, Further Mathematics, Physics, and Design and Technology

Achievements

Technical Analyst Challenge Winner, Credit Suisse

January 2013

  • AngularJS 1
  • HTML5
  • jQuery
  • Designed and developed an AngularJS single page application for the challenge winning incident management dashboard.
  • Collaborated on the product presentation and created the overall look-and-feel for the presentation.