Mark Mayes
Profile
I have ** years’ experience as a software developer, using the Microsoft stack as a contractor within the financial sector.
I am open to contract and permanent positions.
It’s worth mentioning that although most of my last few years of work experience were based around Robotic Process Automation (RPA), I was careful during this period to maintain my core skills of C# and SQL Server. Every RPA role, which I performed had some element of C# and/or SQL Server involved.
Education & Achievements
I am an Automation Anywhere Certified Advanced RPA Professional
I am an Automation Anywhere Certified RPA Trainer
I have delivered Automation Anywhere training sessions in the UK & South Africa
I co-authored the Microsoft Press book, “Advanced Visual Basic 5”.
I am a Microsoft Certified Professional
I was a member of the Friends of Redgate program for 2015
I have given presentations at VBITS London, the Irish Computer Society in Dublin and the UK Visual Basic Users Group (VBUG) in London
I completed secondary school education with ‘O’ Level Grade ‘A’ passes in English Language, Mathematics, Physics, French, Music, and Sociology
Key Skills
C# & .NET Framework
22 years
SQL Server all versions (SSIS ETL, SSRS & Architect)
25 Years
Visual Basic (versions 1-6, VB.NET & VBA)
28 Years
MySQL & Oracle
10 Years (on and off)
Active Server Pages (ASP), ASP.NET & IIS
9 Years
Model View Controller (MVC)
3 Years
Access (as a DB engine), & ADO, DAO, etc.
12 Years
XML & the Document Object Model
10 Years (on and off)
Excel & Excel VBA
9 Years (on and off)
Automation Anywhere (RPA development software)
4 years
Automation Anywhere C#.Net DLL MetaBots
4 years
Web Data Scraping
4 years
Norinchukin Bank (London Branch) January 2024 to Present
Senior Developer
I was hired by Norinchukin specifically to oversee the upgrade of several existing systems, as well as the development and implementation of various new applications.
I have recently completed a C# .Net Library/DLL, which is a Helper project, providing a wrapper around an existing set of external API calls. This was an interesting project to work on as it involved a lot of generics and reflection, making this DLL truly generic. This library will eventually be used by every developer/project in the team, so I also produced some very informative documentation, explaining exactly how to use the library and presenting numerous scenarios, which the end-user is likely to encounter and how to use the library in each of those cases. I gave a presentation to the development team covering this library, and so far, it has been very well received by the team.
There are over 50 existing applications, which are responsible for the day-to-day running of this branch. Most of these applications were developed, over the past 15 years, by a single person using VB.Net. There is an appetite to convert a lot of these applications to C#. Interestingly, the reason for this appears to be the lack of VB.Net developers in the market and the company is wary of having a code base, which sometime soon, could become unmaintainable.
So, VB.Net to C# conversion will play a major part of my role, this year. In addition, I have been tasked with analysing these existing applications, with a view to finding any potential improvements in terms of the functionality, performance, maintainability, and coding standards, etc. So, this will not be a case of simply converting code from one language to another. It is envisioned that because these applications have been maintained over many years, there will be various instances where code, or even functionality can be completely removed, etc.
In addition to these code conversions, there are a few applications, which were started 5 years ago, but were never completed. I’ve been given the task of analysing these applications and beginning the process of completing these systems, where possible.
There is also a desire to move to a more cloud-based architecture, which will more than likely be some form of Azure solution. There is a lot of discovery work for me to perform here.
Advanced Air (UK) Ltd CONTRACT – September 2023 to December 2023
Consultant
Advanced Air is the first manufacturing company I have worked for, and I found this a fascinating experience. Before I looked at any code, I was shown around the whole company, including the usual departments (accounts, sales, admin, etc), but I was then given a detailed tour of the factory floor and discovered a whole new world that until then, I had not even considered. The reason for this detailed introduction to the inner workings of the factory was to give me an idea of what the existing software was doing, in relation to the manufacturing aspects of the company.
My key role in this position was twofold: A) I had to respond to support issues regarding the main factory application, and B) I was tasked with presenting my findings on this application, with a view to replacing, or upgrading it. This is because the application was almost 20 years old and had become increasingly difficult to maintain.
The core architecture consisted of a VB6 application, which connected to a SQL Server database. However, the application had been changed so many times over the years that the code based was completely bloated and unmanageable. On top of this, as modern technologies arose of the years, they were implemented as part of the architecture, so the VB6 front-end did things like connect to web services etc. In addition, the VB6 app had embedded browsers and a mixed bag of third-party controls, etc.
The application included an extremely complex “engine” (for want of a better word), which managed the way quotes are presented to clients. Because the basic products produced by the company had numerous configurations, a client could ask for Product A, with as many as a hundred configurable properties. This in turn could then affect the next product they required in terms of how they fit together. All this configuration was managed by the config engine, which, having been updated numerous times, was almost impossible to decipher.
Having spent untold hours digging very deep into the application, my proposal was to replace the entire system with a brand-new offering. But I proposed a staged implementation, whereby distinct portions of the system were replaced, one at a time. This staged approach was to start with the config engine by unravelling its inner workings and rebuilding it as an API.
I created a detailed proposal and implementation plan for the company, which was very well received. Overall, this was an interesting contract, in which I learned a great deal about the manufacturing industry in general.
Architects Registration Board CONTRACT – November 2022 to May 2023
Short Term Tactical Developer
I was hired for this contract specifically to implement a set number of specific changes to two existing, legacy systems.
The first system was originally developed using VB6 and SQL Server 2010 with some additional components created using C#.Net. As the original developers were no longer around, my task was to implement some specific changes to this system, whilst maintaining the existing architecture and development approaches. In other words, my changes were to have a minimum impact on the existing code base and should be implemented seamlessly.
This was easier said than done as the code base was huge and presented a significant challenge to become familiar with the inner workings of the code as well as ensuring that my changes referenced every area of the code required.
The second system was an online web portal, originally developed using the first version of ASP and SQL Server. Again, this was an exceptionally large code base and most of my time was spent familiarising myself with the structure of the website and its code. In the end, the changes I implemented were minor, but it was important that these changes impacted every conceivable area of the code.
This has been a very enjoyable and rewarding contract as the requirements were made clear from the start and I have been able implement the requirements working alone and independently, whilst presenting regular updates on my progress, for which the client has offered their appreciation on multiple occasions.
Web Data Scrapers PERMANENT – October 2021 to October 2022
Online Start-up
I worked on my own start-up, which was to provide a generic web data scraping service to individual and corporate clients. The project ran out of funding after a year so had to be abandoned.
I developed a complex series of applications, services and databases using C#, .Net, MVC, Azure SQL Server, Azure Functions, HTML, CSS, JavaScript, WinForms, Bootstrap, and REST API’s.
The website allowed clients to define and manage their own web data scraping jobs, which were then dynamically modelled and implemented via an online scheduling service.
The website provided clients with their own management dashboard, which produced dynamically created job performance reports on the fly.
Health Gig Jobs PERMANENT – October 2020 to September 2021
Remote Consultant and Interim CTO
Health Gig Jobs was a start-up based in Florida, USA. They hired me as a remote consultant and interim CTO. The funding for the project dried up before it had an opportunity to go live.
This company was set-up to connect temporary health care workers with health care firms across the USA. It was a phone-based app with an accompanying intranet site.
The CEO and founder of the company had no experience in IT whatsoever. He had commissioned a USA based company to develop his vision but was having difficulty communicating with them regarding technical matters, which is why he approached me as a go-between.
I consulted with the development company to ensure that the project timeline was kept on track, and the software was delivering all the requirements.
In addition, I prepared an extensive testing plan for the entire project, which was subsequently signed off by the CEO and the development company. I then oversaw the implementation of this testing plan and ensured that all failed tests were followed-up and fixed by the dev company.
Illness February 2020 to September 2020
Unfortunately, I was hit with COVID immediately after finishing my last contract and this developed into a long(er) term illness. I was unable to work (or do much else) during this time.
Travelers Insurance UK CONTRACT - May 2019 to January 2020
Automation Anywhere Lead Developer, Business Analyst, Architect & Trainer
I was hired to set-up and manage their entire RPA development process in the UK. I was given carte blanche to implement my own ideas and strategies.
I was given four subject matter experts (SME’s) to work with, who had zero experience in either RPA or any kind of software development. I created an in-depth, structured, and well documented training programme for these SME’s and implemented this over a series of successful training sessions lasting a month. My primary goal for these training sessions was to:
Equip the SMEs with the necessary skills to develop RPA solutions unsupervised.
Provide the trainees with a well-documented and useable development architecture.
Instil within the trainees, an appreciation of a consistent development methodology.
Create a platform for trainees to communicate effectively across their own departments.
Just two weeks after completing these training sessions, two of the SME’s had already successfully completed their first bots, which gave me (and my superiors) a great deal of confidence in the effectiveness of the training programme.
In addition to training the SME’s, I was also tasked with identifying, analysing, and documenting all manual processes within the firm, which were deemed as potential processes for automation. This involved sitting with the same SME’s previously mentioned, along with various other subject matter experts, across four departments and looking at over 75 manual processes. After discounting 25 of these candidate processes, I documented my analysis of over 50 processes and presented my findings to the RPA sponsors who subsequently prioritised and agreed or disagreed on each of these candidates for inclusion in the RPA development programme.
I also created the entire RPA development architecture, which included the analysis and development processes as well as the testing and implementation protocols. I developed this architecture by implementing a back end created with C#, SQL Server & SSIS.
Experian UK CONTRACT - March 2018 to April 2019
Automation Anywhere Lead Developer & Architect
This was a rewarding contract, in which, I was the “go-to” guy for all things technical and development-related. I led a team of 6 RPA developers who were all SME’s recruited from within the company. I oversaw the development of 9 fully functional bots released into production, which were developed using 2-week sprints (Agile).
I also delivered numerous training courses on a variety of subjects, such as:
Error Handling Best Practises
Defensive Programming
SQL Basics
Promoting openness and the sharing of our failures
Coding Standards
Thinking like a Programmer, finding the correct logic for a problem
Unit Testing strategies for RPA Development
Introduction to C# with a view to creating MetaBots.
I developed a complete RPA Developer Framework, which included an array of tools, such as AA code templates, coding standards, development methodologies, and most importantly, a SQL Server database to support and enhance AA development by providing the following features:
A completely generic process workflow for each bot, which maps how a bot runs, from start to finish
Generic capture and storage of the actions performed by a bot, against each “entity” (i.e., list of processed work items, or a list of clients to be processed, etc)
Advanced logging features (logging verbose information as well as developer debug statements to the database, file, or event viewer)
Tools to support the management and retrieval of configuration values from within the bot. All config values are stored on either XML files or the SQL Server database and categorised by their owning Bot as well as their runtime environment (DEV, UAT, PROD, etc)
Database schema, stored procedures and user defined functions providing the ability to record, store and present MI data, which can be unique and ad-hoc to each bot.
Centrally managed and easily defined email templates and email delivery management processes, which allow permitted individuals to visually design a specific email (each email design is created for a specific purpose) then save that design to the database as a template, which can be retrieved from AA code, which will simply fill in the gaps, replacing any template placeholders with data. The developer then sets the email to “to be sent” on the database and the RPA Developer Framework default code templates take care of everything else, sending the email and any other emails in the database queue.
Several DLL MetaBots developed in C#, with the intention of making life a little less frustrating for AA developers (i.e., date calculations or string manipulation!). Over time, I have built-up quite an extensive library of functions, which don’t exist in the core AA language but are easily accessible now, as DLL MetaBot functions.
In addition to developing tools and frameworks for the developers, I also developed, and co-developed numerous bots for the business. Whilst all these bots used AA as their principal development tool, I spent much of my time working on DLL-based MetaBots created using C# and database modelling & development.
GenPact (Bucharest, Romania) CONTRACT - December 2017 to February 2018
Automation Anywhere Senior Developer
GenPact is an Indian consultancy with offices all over the world. I worked in their Bucharest office on a very high-profile RPA project for a global manufacturer who must go nameless.
I was hired for this project to help get it back on track. When I arrived, the project was 2 months behind schedule. Two months later, the project was completed on time.
Overall, I developed over 8,000 lines of code, working against a detailed requirements document and sat next to the SME.
I developed a central logging system, which ensures that all logs are sent to a central database (MySQL & XML).
I developed a centralised configuration system, which stores the configuration information for all tasks in a central location.
I developed a centralised monitoring system, which acts like a dashboard and enables support users to see briefly, which tasks are running, succeeded, and failed.
Finally, I developed an AA MetaBot (written in C#), which provides a full library of functions, which hook into the SAP GUI API. This enabled AA developers to make a call to a single function whenever any interaction was required against SAP GUI screens, etc.
UBS CONTRACT - June 2017 to October 2017
Robotics Senior Developer
I worked for the Finance Robotics Centre of Excellence team, which is a central function, designed to provide development support, mentoring, and guidance, and to ensure that all RPA projects and robots developed within the Finance department are fit for purpose.
I spent a lot of my time at UBS extending the functionality of the Outlook MetaBot. This is a C#.Net MetaBot, which I developed for UBS 12 months earlier, whilst working on-site at UBS through Deloitte. As all MetaBots within UBS are developed and maintained by the main, UBS Centre of Excellence in Zurich/New York, and, as I was the original developer of this very high-visibility MetaBot (used throughout the whole of UBS), I was given special dispensation to work for the main UBS Centre of Excellence team, whilst working on the Outlook MetaBot.
I was single-handedly developing the GGAT Upload robot, which is an Automation Anywhere task, designed to manage the upload, analysis, and reporting of GGAT data. This robot was developed to function as the Gold Standard example of AA coding within the Finance department. The main purpose of this project was to function as an example of best-practise AA development standards, which all developers within Finance could use as a starting point for their own projects. In addition to using AA code, this robot also relied heavily on a new SQL Server database, which I created (including SSIS) to enhance the monitoring & support of all robots across the department.
Robiquity Limited CONTRACT - April 2017 to June 2017
Senior Automation Consultant
I worked on-site at Ceva Logistics, which is a client of the RPA consultancy, Robiquity. I delivered various RPA solutions using AA. I designed and developed a brand-new RPA development architecture, which ensures that all projects follow a consistent model and adhere to a strict set of guidelines and quality checks.
I also provided training and mentoring to junior staff, ensuring that they developed a deeper understanding, not just of AA, but of solid development principles in general.
I developed various generic tools for use by Automation Anywhere, including some particularly useful MetaBots and a feature-rich generic error handling task. I developed a solution, which allows AA to call C# functions without the use of a MetaBot.
Deloitte UK Managed Solutions CONTRACT - February 2016 to January 2017
Robotics Process Automation Developer
I was taken on at Deloitte to build tactical and proof-of-concept solutions for a new team called Managed Solutions. This team was created to provide Robotic Process Automation solutions for internal and external clients. I used a combination of Automation Anywhere, C# and SQL Server to develop internal and external RPA solutions over the course of 12 months.
I developed an extremely interesting proof-of-concept for an external client, which parses data from PDF documents (of differing types) in a structured manner and then extracts, organises, and outputs this data as fungible datasets, which can be used for a myriad of products and services. To support this solution, I designed a complete database model in SQL Server, which enables a generic approach to parsing different documents with differing types. I also created numerous C# functions, which became AA MetaBots, used to extend the core functionality of Automation Anywhere, making it possible to parse text from PDF documents.
I spent a few weeks in Wakefield developing a proof-of-concept solution for a food producer using Automation Anywhere. This POC involved scraping data from an Excel spreadsheet and automating the entry of that data into various SAP forms. All this processing was completely automated using Automation Anywhere and screen based MetaBots.
I worked on site at UBS, where I was one of two developers building numerous automated solutions as part of the UBS IB Simplification programme.
I developed an internal solution for Deloitte, which automated the creation of US Tax returns for retired Deloitte Employees. This software read the core data for 650 employees from an Excel spreadsheet and then automated the entry of that data into a software application called CHX, which eventually output a PDF tax return. I developed the entire solution from scratch using Automation Anywhere coupled with numerous screen and logic based MetaBots.
Barclays (Investment Bank) CONTRACT - February 2016 to February 2016 (Yes, really!)
Senior Data Architect & SQL Developer
This was a noticeably short contract in which, I was asked to perform 4 months’ work in 17 days. My predecessor had been tasked with designing a database and web-based front-end for managing internal staff interviews.
Unfortunately, after 4 months of development, that solution was not delivered to specification. As the deadline for the deployment of this solution was immovable, Barclays needed somebody to come in immediately, hit the ground running and deliver the required solution within 17 days.
I was given an Interview Data file, which was an XML file containing 114 fields and asked to use this file as the basis for modelling a relational SQL Server database. The database, which I designed contained 51 tables, 10 views, 12 stored procedures and 5 user defined functions. There were quite a few lookup tables as well as a good deal of junction tables to support many-to-many relationships.
I developed a quite simple ETL process (SSIS) to migrate the existing XML file into the new database model. Although it was a straightforward process, I had to incorporate functionality to parse single fields with comma-delimited values into many-to-many relationships.
I also created re-runnable scripts, which allowed the entire database to be rebuilt from scratch, including static data and lookup values, etc.
Once the database was designed and all database objects were complete, I created a Visual Studio SQL Server Database Project and added the new database to this project. This gave me the ability to deploy the entire database to any server on demand. There was no DBA and very few IT restrictions on this project and as such, actions such as deployment and re-building databases was very ad-hoc, hence this Visual Studio approach.
Various reports were provided, which were all based on a single “base” view. I adopted this approach so that reports could be extended and added to after I left.
Having completed the data side of the project, I developed a Web Forms intranet front-end solution. This gave the users the ability to list, select, view, edit, delete, create, and search on the numerous interviews. Because the database was now completely normalised, the search facility was particularly powerful and allowed users to perform intricate searches and filters.
Apart from the search and filter functionality, the web front-end itself was basic and amounted to little more than a few master/detail pages. In addition to the main user functionality, I also created administration pages, which allowed the admin users to perform CRUD operations on the static data and lookup values.
All the above was completed in 17 days of paid contractual work, although I did work over 2 weekends, unpaid, to be certain that the project would be delivered on time.
The client was extremely impressed and happy with the work I delivered and commented on numerous occasions regarding my professionalism and approach to delivering a completed solution on time.
Barclays (Investment Bank) CONTRACT - July 2015 to November 2015
SQL Developer – Risk & Analytics - Credit Risk - Back-Testing
My first task on the team was to re-design the existing release procedures by streamlining the data folder architecture and writing intricate PowerShell scripts to automatically generate SQL release scripts from the existing codebase.
I was reminded constantly that I added weight and brought some much-needed experience to the team, which grew quite rapidly. I added numerous additional feeds to the multitude of internal databases. I developed SSIS scripts (ETL) to import new feeds into the back-testing database (Oracle) in addition to designing associated database objects to store those feeds.
I was also tasked with identifying, and where necessary, redesigning various aspects of the databases to reduce the amount of storage space required. I achieved this by implementing various “smart” design changes using “From/To” dates to store only the differences in data over time rather than storing every single piece of data, even if it is the same data every day.
Legal & General CONTRACT - March 2015 to July 2015
Senior ETL Developer and Data Analyst – PCR ETL Project for Solvency II
I was employed for this short contract to design, architect, develop, evaluate, and implement a new ETL solution for the PCR project. This solution worked by polling for input files from upstream systems (SQL Server Agent triggering SSIS ETL job) then extracting those files into a staging area before performing extensive validation and enrichment and finally passing the data through to a downstream system.
The SSIS component was quite simple because it used extensive scripting in C#. In addition, 2 DLLs were created, which performed most of the work with the SSIS scripts calling into these DLLs. The C# DLLs also performed various enrichment tasks by calling into another DLL created by an external team.
Interestingly, the team tasked with developing this system were all Unix/Oracle developers and I was the only Windows developer on the team. Because of this, I was called on daily to offer advice and consultancy for Windows and SQL Server.
There were no analysts on this team, so I was dealing directly with the end-user.
There was a particularly good testing team, but I still developed extensive unit tests for the whole project.
The project used a Hudson server to perform continuous integration. I also developed the deployment application, which zips up the Hudson deployment and extracts it to the required server as well as creating all the required directories, configuration files and executables onto the required server.
Finally, I developed three utility applications for our own development team, the testing team, and the end users. These three utility applications were all GUI apps developed using WinForms.
Canopius Insurance CONTRACT - November 2014 to March 2015
Senior SQL Developer and Data Analyst – Finance Transformation Project
I was working on the Finance Cube development within the Finance Transformation Project. To begin with, I developed a utility tool in C#, which parses and documents SSIS packages. I also developed another utility tool in C#, which traverses all source code inside a Source Gear Vault and produces various reports, showing what kind of code exists and where.
Finally, I extended the existing database design (tables & stored procedures) to support new requirements for this existing Data Warehouse Finance Cube.
Lloyds Banking Group CONTRACT - May 2013 to September 2014
Lead Developer/Data Architect - Group Reconciliations - PPI Payments & Reconciliations
I was hired to design and build a brand-new reconciliation and workflow system for the Lloyds PPI programme called CPRS (the front-end of this system is known as RapidRec), which was successfully delivered against an aggressive time limit.
By spending a lot of time talking to the business regarding their functional requirements and talking to various other departments regarding the banks’ existing data-flow infrastructure, after formalising a requirements document, and writing detailed functional specifications, I designed an end-to-end system complete with functional design documentation, logical data model, entity relationship model and mock-ups of the front-end. Having achieved sign-off for this design, I completed the physical design and build of the SQL Server database, together with the SSIS packages and related jobs to import the external data into a fully normalised model.
I then developed various stored procedures, which perform reconciliations against all the imported data and create workflow items for each PPI case. These stored procedures were extraordinarily complex with regards to the business rules, case priority algorithms, workflow rules, etc. I also built a large amount of test data for these recs, which covered all the reconciliation scenarios and workflow cases and loaded 100,000 records into the database, covering a 10-day period to facilitate tests run over this period. I created automated test scripts for the database using Visual Studio and C#. Having completed the unit testing against