Summary

Born and raised in South Africa, spent 8 years in the UK, 6 in Vietnam and finally moved to Australia in 2015. My latest position has me working in workforce management software, but the bulk of my experience has been in ecommerce, CMS and reporting solutions (and primarily in the travel industry). That said, I've also worked on a data migration project for both Deutsche Bank and Monsanto while I worked in Hanoi and I started my developer career in public transport (bus monitoring applications in the UK). I also spent a year in the finance industry.

Wherever I've worked, I've always striven to do the best I can at whatever task I am given. I work well whether in a team or on my own. I am sure you will find I have much to offer you and your organization.

Skills

Programming Languages .NET, C#, JavaScript
Databases
  • RDBMS: SQL Server, PostgreSQL, MySQL, Oracle, SQLite
  • OLAP: SQL Server Analysis Services
  • NoSQL: Mongo DB
Frameworks, etc
  • .NET: ASP.NET MVC, Web API, OData, Web Forms, Orchard CMS, EPiServer CMS, nopCommerce
  • JavaScript: Aurelia, Durandal 2, KnockoutJS, RequireJS
  • Tools & Cloud: Git, Jira, BitBucket, Azure
  • Other: Bootstrap, Kendo UI
Other .NET Related Entity Framework, Autofac, RabbitMQ, WinForms, Windows Services, WCF, SharePoint
Miscellaneous (Hobby) Unity Game Engine, ZeroBrane Studio (Lua IDE)

Projects

You can find my employment history further down the page, but there's nothing better than letting my code speak for itself. Below is a list of some of my many open source projects.

Extenso Code Library - More than just an extensions library - various helper classes, data access code, even a lightweight alternative to AutoMapper.
Mantle CMS - Mantle is a multi-purpose framework and CMS loaded with functionality and features that can be used for creating pretty much any type of website. Built on .NET Core
Responsive File Manager for .NET Core using PeachPie - Responsive File Manager running on .NET Core with Peachpie.
elFinder.NetCore - elFinder connector for .NET Core
CodeShop - Code Shop is a database centric template based code generator for any text(ascii) programming language like C, PHP, C#, Visual Basic, Java, Perl, Python… Supported databases are SQL Server, MySQL, PostgreSQL and Oracle
Kore CMS - The precursor to Mantle CMS mentioned above. This one was built on MVC5.
DevToys Code Generator - DevToys Code Generator is a tool that helps you generate code snippets. Use the liquid templating language to iterate over a list of strings, JSON data or a CSV file
Data Migrator - Migrate data from any database system to any database system - extensible via plugins (developed with MEF).

And many more projects you can find on my GitHub page

Employment History

Software Developer

Jul 2023 - Present
Rapid Global

We have a great many apps/projects. The main Visual Studio solution consists of 183 projects, of which 23 are ASP.NET APIs, 11 are ASP.NET MVC projects and the rest are libraries, unit tests and windows services. Our MVC apps are slowly being migrated to APIs with a React frontend.

  • We are migrating the MVC apps to APIs with a React frontend.
  • We have one main application called MyRapid which users need to login to and from there they can get redirected to one of the other applications.
  • We also have a shared application called FormBuilder which, as the name implies, allows admin users to setup forms and then other users to fill in instances of those forms. This is shared amongst many apps as a sub application in IIS (using an iframe).

My achievements thus far (in chronological order):

  • Migrated our "MyRapid" app (see above) from ASP.NET MVC to ASP.NET Web API
  • Refactored FormBuilder - This took many months of work to move away from WCF and clean up the code, which was extremely messy and difficult to understand.
  • Migrated all other WCF services to just be in our class libraries.
  • EF code first: When I first joined, we were still using .NET Framework 4.8. The plan was to move to .NET 8. As a first step, I helped move from EDMX to code first for EF6 (still on .NET Framework 4.8).
  • Migrated our "Contractor Registration" app from ASP.NET MVC to ASP.NET API
  • Created a PDF API - We use ABCPdf. Until this point, each app/library was referencing the NuGet packages for this. This caused performance issues and slow deployments, not least of which is because the several hundred MB of files had to be downloaded/copied each time for each app/library. I had the idea to move all our PDF generating code to one central API and so only that had to reference the NuGet libraries. This massively improved build times, deployment times and saved more than 100GB of space on all developer machines.
  • Spearheaded the migration of all our .NET code from .NET Framework 4.8 to .NET 8. For my part, this included a large portion of the class libraries, 100% of the MVC apps and a few of the APIs. We got this all done within the last quarter of 2024 while still continuing to develop and deliver new features on the old version at the same time.
  • Entity Framework Core: Due to many differences between EF6 and EFCore, I recommended we do not move to EFCore during the main .NET migration. Once the latter was completed, I was assigned the case of migrating to EFCore, which was a mammoth task in itself.

Developer

Aug 2022 - Jun 2023
Xeppo
  • Azure-hosted architecture
  • Development of the main web application (MVC5)
  • Development of “connectors” which obtain data from a source system, transform it and save it to the destination for use in the main application.
  • Development of related APIs, etc.
  • Azure SQL Database
  • Assisting with business analysis and design of new features
  • Mentoring other developers

Software Developer

Apr 2015 - Jul 2022
GoQuo (Malaysia)

Worked remotely for GoQuo (travel industry) from 2015 until 2022. The bulk of my work was working on a reporting system I created, maintained and added new features to. I also occasionally helped the Vietnam team with their “engine” for creating travel websites. Additionally, I’ve worked on several other projects, like real-time booking notifications, email reports, sftp reports, etc. for GoQuo’s clients. One of the last things I did before leaving was a complete rewrite of their hotel management system to improve the performance, the UI and the code quality.

Additionally, I also worked in the evenings on various ecommerce and custom CMS solutions for Widecommerce (http://widecommerce.com/) from 2015 to 2017

Development Team Lead

Nov 2014 - Apr 2015
Niteco (Vietnam)
  • Managing team resources to successfully deliver the project: explaining requirements, sharing information, assigning tasks, coaching and assisting others with technical issues.
  • Communicating with all stakeholders and creating the project plan and estimation, design documents and user manuals to ensure clients’ needs are met and projects are successfully implemented, completed and delivered.
  • Using tools such as TFS and MS Project to manage the delivery of the project on a daily basis; ensuring work completed meets the quality and timeline agreed with the client and taking steps to correct when it does not.
  • Researching new technologies and tools and distributing this information with a focus on how it can be applied in a real sense to improve client outcomes.

Senior Software Developer

Aug 2014 - Nov 2014
Niteco (Vietnam)
  • Intensive study for EPiServer 7 CMS and EPiServer 7 Commerce certifications, as these are used heavily by the company and were requirements for me to have before taking on the “Team Leader” role that they wanted me for.
  • Design and implementation of the company intranet, using SharePoint 2013
  • Implementing a demo project for trainee/junior developers to learn from – an ecommerce site built from scratch using MVC 5, Entity Framework, Angular JS, Web API 2 with OData, Kendo UI, Isotope, Autofac and Bootstrap 3.

Freelance Software Developer

Mar 2014 - Aug 2014
Self-employed

Working on various projects for international customers

Co-Owner / Solution Architect

Jan 2012 - Mar 2014
VortexSoft (Vietnam)
  • Working on many different projects. Primarily ASP.NET MVC-based websites.
  • Working with customers to determine project requirements, best solutions for those projects, etc.
  • Working with customers to update their existing systems, which included identifying technical and usability problems and then deciding on the best solution for updating those systems – sometimes this meant updating several components and other times it meant a complete rewrite of the project.
  • Designing backend databases. As the developer with the most experience in developing well-structured databases, I was responsible for designing the databases for almost every project during this time. For those databases which were designing by other developers, I still often provided guidance.
  • Managing our international customers (Keeping in contact with them during the projects, providing weekly updates, producing Gantt charts for estimated timelines, etc.)
  • Managing the other developers (assigning tasks, doing code reviews, etc.)
  • Writing, debugging and testing code for various projects, making sure to keep to the customers’ requirements and satisfaction.
  • Coding internal tools & our custom CMS / development framework.

Freelance Software Developer

Jan 2011 - Dec 2011
Self-employed

Working on various projects for international customers

Software Developer

Feb 2010 - Dec 2010
FPT Software (Vietnam)
  • Worked on a project migrating several hundred applications from Lotus Notes to SharePoint.
  • Worked on a tool to extract data from Lotus Notes NSF files to Excel spreadsheets for Analysis & Design team.
  • Wrote an application to connect to Lotus Notes databases, SQL databases, Excel spreadsheets, etc. and generate .NET web user controls, etc. from custom templates.
  • Worked on a data migration tool which transfers data from Lotus Notes to SharePoint.
  • Managing interns, assigning work where appropriate.
  • Wrote some tools for generating random data for both Lotus Notes databases and SharePoint databases.
  • Worked on an automation tool for SharePoint, where a script would be loaded into the tool and actions would be performed in a WebBrowser control as though it were a user. This was still in the early stages before I left.
  • Worked on a custom framework for software migration. On this, I wrote a data binding component, some data access code and various other things.

Development Support Engineer

Apr 2008 - Dec 2009
Advanced Communication & Information Systems (ACIS), UK
  • Created a Windows Service application which was fully implemented as the company’s data update process. The application automatically updated SQL Server databases (as well as ran specified scripts), XML files, restarted services, etc. It was a highly configurable application that drastically improved the data update process.
  • Created a central web application for the Technical Support Team to manage data, schedule data updates from one place for all customers, and view charts for software failures to easily identify which products or components are failing most and how often. This was based on the Master Page model and used LINQ for the data access layer.
  • Created an extensible plug-in based application to amalgamate the company’s internal test tools.
  • Wrote a plug-in for the company’s data management application, which allowed customers to visualize their scheduled bus routes on Google Maps and implemented printing functionality for a timetable plug-in in the same application.
  • Technical Support duties, as per previous position.
  • Developing tools for internal use.
  • General code tidy up and bug fixing.

Technical Support Engineer

Apr 2007 - Mar 2008
Advanced Communication & Information Systems (ACIS), UK
  • Providing support for customer-facing software.
  • Creating and updating SQL Server databases and OLAP cubes.
  • Installing and configuring in-house software on servers.
  • Locating and fixing problems with data coming in and communicating with Field Engineers, where applicable.
  • Managing "Users" and "Groups" for the servers, Microsoft Analysis Services, and Executive Viewer software.
  • Periodically updating client systems with data provided by clients and/or field engineers.
  • Creating and maintaining Product Support database using C# and SQL. This was not a job requirement but was requested due to my MCP in C# Windows Forms programming.
  • Creating and maintaining a GUI administrative tool for the company’s leading product, which uses a MySQL database. This replaced an outdated command-line application and was my initiative to improve efficiency.
  • Automated archiving of log files from our FTP server via batch files to eliminate manual work.
  • Creating, amending, and running SQL scripts on databases.
  • Backing up, upgrading, and general maintenance of databases.
  • Replaying customer data through in-house software when there were issues with automatic database entry.
  • Restarting services that had gone down for any reason.
  • On-call duty – handling issues during weeknights and weekends.
  • General fault finding.