Chief Technology Officer

April 2019 - June 2021
Melbourne ๐Ÿ‡ฆ๐Ÿ‡บ

I joined MatchBox Exchange at a time where they had proven to have a successful business model operating in Australia and New Zealand with software services being provided by an external vendor utilising offshore resources. The directors were looking to bring in a CTO to help them scale the business and pave the way for the future.

In the early stages of this role, I stabilised the technology platform by:

  • Migrating the code from .NET Framework to .NET Core
  • Moving the source control to repositories owned by MatchBox Exchange
  • Recruiting a small but highly capable team of software engineers and a Head of Product
  • Moving away from an infrastructure as a service (IaaS) solution to a platform as a service (PaaS) and serverless architecture to reduce risk and operating costs
  • Introducing automated testing and deployments

Throughout my time as CTO, I was responsible for the recruitment, people management, technical strategy and had accountability for our delivery management. Given the size of the business, there were also product management responsibilities. A large part of my role was also mentoring management team members, many of which had limited prior experience in tech, to appropriately set expectations and ensure that joint understanding was established.

Being a start-up there was naturally a lot of time spent on operational activities such as the those typically expected of a Principal Software Engineer (e.g. software development, tech support), vendor management, as well as client / customer 'pre-sales' and integration planning activities.

Accomplishments

  • Successfully transitioned from an offshore vendor model to an internal small high performance software engineering team
  • Supported the product from operating as an English-only service for AU and NZ to a multi-lingual service operating in 8 markets
  • Modernised the MatchBox Exchange product website, as well as backend processes (automated testing, translations, DevOps, etc)
  • Championed the business to join the Microsoft for Start-ups program as a qualified start-up resulting in Azure credits of approximately $120,000 USD
  • Introduced a federated identity platform (powered by Identity Server) which allowed customers and partners to sign in via OpenID Connect / OAuth 2.0 SSO

Skills

Accountability
AdminUI
Agile
Architecture / Design
ASP.NET Core
Azure
Bootstrap
Business Continuity
C#
Change Management
Crowdin
CSS
Delivery Management
DevOps
Distributed Computing
Docker
Engineering Practices
Entity Framework
HTML
Identity Server
JavaScript
jQuery
Leadership
Microsoft Identity Platform
Modern Identity Management
MSSQL
People Management
Product Management
Shape Up
Stakeholder Management
Team Building
Tech Strategy
Technical Leadership
Thought Leadership
Vendor Management
Vue.js

Projects

Supporting Expansion

A large part of the work that we undertook was to add to MatchBox Exchange's market reach and to achieve first to market advantage. This was achieved by my team rolling the product out into additional markets (countries), providing additional shipping line integrations, and working with large customers / partners on capabilities that would increase their adoption of the products.

Due to the large amount of this sort of work, the team was improving integrations to make them simpler and quicker to implement and addressing various technical debt issues to make new market rollouts simpler. As a part of this, we started to move towards more of an event / message driven architecture so that we could have a more decoupled, more scalable system that was more capable of responding to business events in a multitude of ways.

In addition, MatchBox Exchange had a tenant per market with very little resource sharing, in order to reduce cloud hosting costs and the technical cost of ownership the team spent time working on resource sharing (SQL Elastic Pools, multiple web apps per app plan, etc.) and moving towards a single global platform for all markets. This required significant architecture and design changes.


Architecture / Design
ASP.NET Core
Azure
Distributed Computing

Identity Server

MatchBox Exchange had a proprietary AuthN / AuthZ solution that was based on ASP.NET Identity. The previous vendor had developed it with some quirks which could have resulted in security issues and it did not support the increasingly growing OpenID Connect and OAuth 2.0 standards meaning that SSO (single sign on) was not possible.

Identity platforms such as Okta and Auth0 were evaluated, but after talking to their sales teams they were far too cost prohibitive which led us to proceed with an Identity Server solution.

For security reasons authentication was removed from the main MatchBox Exchange solution into a separate website with data and auth logic moved to Identity Server. We used AdminUI In addition, we supported Microsoft work accounts with single sign-on (SSO). Identity Server then provided SSO capability used by our customers, partners, and where possible our internal systems. Over time we introduced additional capability in our solution, such as:

  • Being able to migrate username/password accounts to SSO
  • Support for private identity providers hosted by a partner (i.e. not using a publicly available global endpoint)
  • Support for Ping Identity (Ping Federate)

AdminUI
ASP.NET Core
Docker
Identity Server
Microsoft Identity Platform

Multilingual

MatchBox Exchange had an English only product, but wanted to move into Asian markets. On top of making code changes to provide multi-lingual support within the product, I didn't want to have our small team of software engineers spending a lot of their team copy / pasting translations from our external translators.

After some research I found the concept of a translation management system, ultimately landing on Crowdin. After configuration, Crowdin integrated with our Azure DevOps repository and translators were able to apply their translations in Crowdin's website, with those changes automaticaly triggering pull requests in our source code repository.


ASP.NET Core
Crowdin

Vue.js Pilot

MatchBox Exchange had an aging ASP.NET Core MVC user interface which was difficult to update, provided a poor dated developer experience, and wasn't as suitable to build a modern responsive modern mobile user experience as other options. The team looked at the major SPA frameworks and landed on Vue.js. I managed the pilot of taking our registration screen and migrating it to Vue.js, including the creation of supporting APIs.


ASP.NET Core
Vue.js