I am a passionate, loyal and hard-working Software Architect/Engineer that specialises in designing and building innovative, elegant and efficient applications. I design software that stands the test of time, write clean code and keep up to date with new patterns, practices and technologies.
- Cocoa Touch
- SQL Server
In addition to these core skills, I also have knowledge of and experience with a wide range of other technologies including Node.js, Elasticsearch and Redis.
- Visual Studio
- Visual Studio Code
- SQL Server Management Studio
- Git (standalone, GitHub and Bitbucket)
- Team Foundation Version Control
- Octopus Deploy
- Agile (Scrum, using JIRA)
2007-Current - Marval Software Ltd.
- Software Architect (2014-Current)
- Senior Developer (2010-2014)
- Developer (2008-2010)
- Graduate Developer (2007-2008)
I started working at Marval Software Ltd. in 2007 as a Graduate Developer. I have been promoted 3 times since then, most recently to the position of Software Architect. I lead a team of developers on MSM - a web-based service desk tool that allows companies to manage their IT Infrastructure.
Roles & Responsibilities
- Design and implementation of new features in conjunction with key stakeholders
- Identification and reduction of technical debt
- Mentoring junior developers
- Third line technical support
My current roles and responsibilities have allowed me to lead, design and implement the following:
A .NET business rules engine to replace hard-coded logic throughout the application. This allowed us to provide customers with maximum flexibility and reduce our codebase.
A denormalisation engine that materialised entities from a complex view into a table. This allowed us to deliver considerably faster grids and reports to our customers.
A plugin framework based on the emerging Web Component standards. This allowed third party developers to create plugins that could appear on, interact with and extend almost any page within the application.
A RESTful web service based on the ASP.NET Web API framework and the Avalon+JSON media type. It made extensive use of HTTP (including content negotiation) and its responses included affordances that allowed us to drive RESTful web clients.
An iOS version of our main user interface. The functionality was driven entirely by the aforementioned RESTful web service. Additional functionality could be added to the application without (necessarily) needing to update it.
Underlying storage agnostic data access libraries written in Clojure including an Event Store, Document Store (with a custom SQL-like query DSL and full-text search) and Key-value Store. An initial JDBC implementation was provided for each store. This facilitated simple on-premise deployments using existing data storage technologies, whilst allowing us to use dedicated and more cost effective alternatives in the cloud.
In addition, I led our adoption of Agile working practices. This involved coaching the development team on the Scrum framework, switching our project management tool to JIRA and switching our source control to Git. This also involved specifying and contributing to the automation of our entire build and release process, which allowed us to deliver the application faster than ever before.
I also delivered internal training courses on topics such as Representational State Transfer (REST), the SOLID principles of object-orientated design and functional programming. In addition, I introduced the development team to concepts such as Domain Driven Design (DDD), Command Query Responsibility Segregation (CQRS) and Event Sourcing (ES).
- BSc Computer Science (2:1 Hons) - University of Nottingham - 2006
- A Levels in Maths (B), Design & Technology (B) and Geography (A) - Wellingborough School - 2003
- Avalon+JSON - a pragmatic hypermedia specification designed to enable task-based user interfaces whilst preserving traditional web API entity response models.
I love programming and have been writing code from an early age. I am always reading about and experimenting with new techniques and technologies. I have been heavily influenced by the following books and presentations:
- Domain-driven Design: Tackling Complexity in the Heart of Software
- Implementing Domain-Driven Design
- Design Patterns: Elements of Reusable Object-Oriented Software
- Patterns of Enterprise Application Architecture
- Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions