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 |
|
Frameworks, etc |
|
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.
And many more projects you can find on my GitHub page
Employment History
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.
- 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
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
- 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.
- 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.
Working on various projects for international customers
- 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.
Working on various projects for international customers
- 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.
- 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.
- 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.