I have a great understanding of software & system architectures and their concepts and benefits, at a technology agnostic level.
This allows me to design elegant solutions using known technologies and to quickly pick up new paradigms as technologies/implementations evolve.
In terms of software architecture, I am comfortable designing and building applications using multi-tier architectures such as n-tier
or onion architecture.
I work with “clean code” in mind to create testable/reusable/maintainable code, employing the techniques of OOP & SOLID principles
and applying design patterns to solve problems in familiar ways. I frequently use the principles of Domain Driven Design such as
domain modelling, bounded contexts, repository pattern, CQRS etc.
In terms of system architecture, I have designed and built large multifaceted applications by employing the use of both
distributed microservice & event driven architectures.
considering the blend of on-prem, cloud and containerized
infrastructure.
I have been working in .NET for pretty much my entire career, starting with .NET Framework, .NET Core and now keeping up to date with the latest .NET releases.
Writing C# within the Microsoft development stack is my natural habitat and is where I can really excel with my approach to problem solving,
whilst reflexively adhering to clean coding standards and implementing elegant software architectures.
I also have a lot of experience in optimizing and performance tuning code ,
where performance is a necessity (such as: carefully choosing/refining algorithms, using dotTrace to inspect code performance, using parallel code/threading/AKKA.NET
and using asynchronous programming).
Most projects I have worked on have been web based, therefore I have gained a lot of experience working across a multitude of technologies and paradigms, such as building APIs using ASP.NET (RESTful and RPC) and building front end websites in Node.js/JavaScript libraries & frameworks such as Next.js, React and Vue.js - including building mobile responsive websites using both Bootstrap and Tailwind. I am comfortable working in both front-end and back-end development ecosystems.
I have worked with both Azure and AWS products to design, develop and deploy cloud based software solutions including web applications, serverless functions, SQL/NoSQL based storage, eventing systems and more. I have also used Docker and Kubernetes to create and deploy containerized applications, both on-prem and into cloud hosted Kubernetes clusters.
I strive to uphold the best software quality and streamlined code delivery processes whenever possible, such as writing and maintaining unit and integration test suites (e.g. using NUnit, Jest, SpecFlow, Cucumber.js, Selenium) as well as incorporating those tests and their metrics into automated build and release pipelines (e.g. generating test results and coverage reports on pull request and adding quality gates and PR policies). I have worked with Azure/GitLab/GitHub YAML pipelines to create build and release processes which allow for GitOps or DevOps style management of environments (e.g. infrastructure as code) and application deployments, using tools such as Helm and Terraform as well as provider specific CLI tools and Bash.
I have been using relational databases since I was at university and have designed and built many SQL Server based solutions, including normalisation processes, ORM integration, defining and creating indexes, stored procedures and performance optimization etc. I have also used several different technologies for storing non-relational, key/value, or document based, data such as CosmosDB, Redis, Kafka, Elastic etc. using JSON, ProtoBuf, Avro etc.
Working as a contract software development consultant to assist the client in designing and building a new software project that will further enhance their e-Commerce platform.
Working as a contract software development consultant to assist the client in on-boarding a new back end management system and re-writing of their customer facing
website to support the updated user journeys and process flows. The first part of the project was to understand the current systems and new business requirements to help to design an
architecture which would cater to the new requirements with minimal disruption to the live systems and to create a layer of abstraction between the back end and front
end systems for future proofing. Based on these designs I then provided software development services using ASP.NET Core and SQL to
deliver the “middle-tier” APIs necessary to accomplish the desired result as well as providing support in the go-live/migration process.
Following the success of the initial project, a subsequent contract was to perform a similar transition for another arm of the business, this time using .NET 6 and
AWS cloud infrastructure to support a React Native mobile app, using an event driven microservice architecture. I also worked alongside the platform
operations manager to design and build a GitOps workflow using GitLab, Terraform and Helm.
Working as a contract .NET developer to assist in the expansion of decentralised microservices to enhance or add functionality on the Jet2Holidays website during the “responsive” rewrite phase, using ASP.NET WebAPI (C#), Sitecore CMS and Vue.js. The second contract in succession for Jet2 was working on a new high performance accommodation search and pricing engine using .NET Core, Kafka, AKKA.NET, Docker and Kubernetes I helped to create an event driven microservice with complex real-time pricing algorithms with a strong emphasis on performance and accuracy. I also helped to establish a build/deployment pipeline capable of delivering .NET containers to Kubernetes environments using TFS, Docker and Helm.
Working as a contract software development consultant providing help, support and guidance to the new development team of Kinetic's flagship "Aureus" product. This is a large Microsoft stack Azure based project with many components, which I designed and built while working for Kinetic. I was offered a short term contract to help mitigate the risk of outsourcing the project, by providing my expertise and knowledge of the system.
In February 2015 I was promoted within Kinetic to Solution Architect and Development Lead. Continuing my work as a developer but now also leading the development team tactically and operationally. My role consisted of such things as defining standards and practices, following the Agile methodology, source control management, setting up of CI/CD pipelines, creating & managing an Azure PaaS environment and providing support to the business and colleagues. I was still involved in the implementation of the software architecture, from providing various levels of high level architecture designs to writing the code in C#. We made the transition to using ASP.NET MVC and React as our front end web technologies and using ASP.NET WebAPI microservices for separation of the various components in the software. We also adopted domain driven design techniques and it's supporting architectures (OOP, IoC, Domain Modelling, Repository Pattern etc.) in the core code. We are also now making use of various Azure cloud services such as Web Apps, blob/table/queue storage, AAD, Redis cache, Azure Search, SQL Azure and more - all of which I am involved with from a planning/design perspective but also hands on technical perspective.
I returned to Kinetic Worldwide as a senior developer using ASP.NET in VB and C#, building tools that are specifically aimed at our specialist OOH planning teams. During this time, amongst other things, I worked on several complex reach and frequency calculation models from different global vendors, optimising the algorithms for speed and building innovative new concepts on top of the underlying outputs. The systems I built in audience measure were industry leading at the time and won me a lot of praise within the industry. Building the core software in c# but now with Silverlight and WCF.
Alongside my permanent employment, during this time I acted as IT Director for a company I started with 3 others. In this capacity I designed, built and maintained an online shopping portal optimised for search engine friendliness, to generate product leads for businesses and to help consumers find the best deals on products across multiple sections. Written in ASP.NET, c# n-tier architecture and MS-SQL back-end with many integrations such as XML feeds with clients and 3rd party advertising channels, CAP automotive data, vrm lookup, geocoding, sagepay payments and more. Unfortunately this business did not generate enough revenue to continue and the site has now closed.
Since my graduation in 2005, I have worked in various roles as a software/web developer using the Microsoft development stack of .NET (ASP.NET/C#) with MS-SQL data layer - building e-commerce websites, CMS web applications and various other web based applications. During this time I built on my University degree foundation of knowledge to become a more proficient coder, finessing my architectural approach to creating pragmatic software solutions.
I have a wide variety of interests and like to continually learn about new things. Of course, I have an interest in I.T. and specifically in software, architecture and performance. Outside of I.T. subjects I like health and fitness such as weight lifting and practising Taekwondo in which I am currently 2nd Dan black belt. I am also a car and driving enthusiast, which extends from simply admiring the styling or performance of a great car, to watching Formula 1 and WRC, to improving my own skills having taken my IAM advanced driving test and participating in several track days. I also have an interest in the Russian language, which I have been learning from the Internet since 2012. You can read more about my interests on my about me page.