Full Stack Software Engineer and architect leveraging a wide range of skills and experience. Specializing in creative and innovative solutions and striving for high-quality workmanship. Specialties: Front-end development and architecture, NodeJS, Full-Stack development, NodeJS, integration, application architecture.
I've been working on a platform team which works on the Optum Store, a successful e-commerce site that provides medication, over the counter products and virtual care.
Skyscanner showed me what a Startup looks like once scaled. I was exposed to a wide and diverse range of concepts and technologies which operated across the business. My time there entrenched my React, AWS and Python skills in particular but also rekindled my love for data, data analytics and data visualisation. For the most part, I worked on a partner-facing product, Travel Insights, and in particular, Travel Insights Vision, a data analytics platform, giving airlines, airports and destination marketing organizations (DMO's) access to industry insights and information.
The engineering was heavy on both the front-end and back-end with a public-facing, React/NodeJs web-app powered by Apache Druid and Apache Spark, to put it in a nutshell. To give you an idea of the scale, my team (7) was responsible for around 30 different services and repositories. A large part of these services was inherited from another squad during a company re-organisation and I was required to quickly learn and own these services. I became the go-to person in my team for technical and domain guidance.
I owned and was responsible for delivering the initial release of, Travel Insights Vision, our visual data analytics product. The data and backend services had already been developed and my team was responsible for creating the user interface and providing the raw data to our partners in a visual and massaged way. I was also involved and took responsibility for optimising and maintaining our Apache Druid cluster which provided the front-end access to the data. After some time, and discussion with leaders I moved into a support mode, assisting team members with delivery and goals only for fear of becoming a knowledge silo.
Technically, I gained experience with many AWS services such as Lamda, EMR, ECS, EC2, S3, IAM and CloudFormation. Infrastructure as Code was widely used across services and projects. Skyscanner has embraced microservice and microsite architecture and gained Infrastructure as Code (IaC) was widely used across services and projects. And finally, after many years, I had the opportunity (or rather was forced) to learn Python. While it was not the primary language used, it was the language of choice for Lambda functions/services and batch jobs, as well as a couple of legacy services. During my time at Skyscanner, the company was migrating all services away from AWS ECS, to a cells-based architecture in Kubernetes and while I was not directly involved with engineering and guidance of this architecture, I gained some experience migrating services to this new platform.
I was very much involved with the redesign of an existing page on the Partner Portal which had become very popular with partners and had a lot of feedback and suggested improvements. I introduced several best practices and guidelines (in alignment with the other Skyscanner products) and took the lead on implementing Redux for state management. Some of the team members had not used this before and I was able to guide them and get them up to speed. The page redesign was delivered in good time and was well received.
I was fortunate to have the opportunity of working on some of the main website services as well. This included a payment abstraction layer used by the Book with Skyscanner (BwS) feature. I worked across the stack, including a Java service which was the payment abstraction to various payment providers (in this case only Braintree). I also helped with work on the integration of this new service on two front-end services (flights and hotels) that were calling Braintree directly. We tested the integration using experiments and directing small amounts of traffic to the new code before ramping up to 100% traffic.
I joined The Sun Exchange primarily as a Front-end developer as they needed someone experienced to take charge and focus on building a solid foundation for the front-end.
By the time I joined, development had already started on a new front-end using React and Next, with a very simple Material based CSS. The React based site had been wired up to work with the old Drupal-based site. I refactored the React site, splitting out views into re- usable and more understandable components and incorporated a React based CSS framework called Semantic-UI. This paved the way for the re-implementation of the major feature of the business, to crowdfund Solar cells, except this time, everything was automated.
The Sun Exchange launched an ICO around mid-2018. We initially started discussions with a supplier to use their product for running the ICO. With around 3 weeks left before the launch of the ICO, we decided to build our own solution in parallel as it became increasingly clear that the supplier was not going to be able to deliver everything we needed. We managed to develop everything we needed with the correct integration with our current system, with myself leading the front-end development using Vue.Js and Vuetify and we ended up launching using our own solution.
With the success of our ICO using Vue.js and increasing disgruntlement with React and Semantic-UI, we decided to make the move to Vue.js and Vuetify in for the development of our main product, especially since we had already developed a large part of the required functionality for our ICO. I architected and developed the initial re-write of thesunexchange.com using Vue.js and Vuetify with integration into a Headless CMS and backed by GraphQL.
Many of the features I have worked on during my time at The Sun Exchange were implemented across the stack and I implemented several integrations including Stripe, Paygate (RSA Payment provider), HubSpot, GraphCMS and AWS S3, all of which touched the back-end significantly.
This has probably been one of the most challenging roles in my career and I've learned a huge amount.
My initial tasks were to take over the platform development and maintenance, which was currently being outsourced to an external development house, and to put together a team who would continue to support the platform.
I rebuilt the buggy and messy front-end which was written in ASP.Net MVC, using Aurelia JS and Semantic-UI, while converting the old MVC controllers to Web API controllers, cleaning up as I went. This was done in a fairly short amount of time. We had a few load time and SEO issues that were addressed soon after the initial release.
The next big task was to bring down our hosting costs which were ludicrous. To do this I decided to move our data from a Couchbase VM (hosted n Azure) over to Azure Cosmos DB (Document DB). Prior to Couchbase 4.5, it did not support ad-hoc queries. As a result, all the application code was written in a way that pulled all data into memory and then filtered as necessary, in memory. Even after N-SQL support was released, the indexing mechanism was still poor; simple, common queries were quite slow by default, requiring an explicit index to be created. Based on these issues and the obvious benefits of culling some IaaS, moving over to a DaaS and our business requirements to stick with Azure hosting, the move to Cosmos DB became an obvious choice. The result was a 70% reduction in hosting costs.
In-between this, I was managing a team of 4 (including myself), recruiting and delivering several business-critical features.
I worked on a really exciting project during this period and I was sad to leave it behind.
In a nutshell, the project was a distributed computation engine and data store built as a competing product to Gensym's G2 platform, Wonderware and GE's product suite for the mineral processing and manufacturing industry.
We integrated several existing products that had been previously developed into a new product which was built from the ground up using Aurelia JS, ASP.Net Web API, Akka.Net and MongoDB. The back-end had a micro-service architecture.
In addition to this, my duties included managing a team of two and supporting the rest of the business and engineers. We had several products requiring support and maintenance.
My short time spent at Flowgear was enlightening and it opened my eyes to the world of SaaS. I started on the conversion of their Silverlight client to a HTML 5 based client and the early integrations of the two to make a smoother transition from Silverlight, rather than a big once off job.
I also worked on various projects and plugins within the Flowgear platform which gave me great insight into the design and architecture of this great product.
Sadly, it just didn't feel like a great fit for me on various levels.
I had the opportunity to work on many interesting projects in the mineral processing industry where I cultivate my full-stack skills.
I used WPF for one or two smaller projects but it quickly became evident that our projects were better suited to web-based technologies such as Silverlight and WCF. These projects usually relied on integrating with another one of our products (a calculation engine) and the clients choice of data storage platform (historian and OPC server such as OSiSoft PI/AF, GE Historian, Wonderware InSQL) to crunch large amounts of signal (time series) data and report back important bits of information in various formats such as trends, bar charts, pie charts and tables, etc. allowing our clients to get insight into KPI's.
I've always felt that front-end development is very complex and time-consuming and thus, the most challenging. I had the same drive to make maintenance simple and easy on the back-end as I had for front-end and made a point of employing every Design Pattern out there that I could.
I started work on our own data platform, usually called a Historian or Historical DB. The platform was based on Cassandra, chosen for its wide column support (performs well with time series data) and the ability to scale out horizontally, an obvious choice for this type of application. The interface was a simple Web API built with ASP.Net Web API, the first of it's kind in the industry, allowing for super simple integration with consuming applications, rather than heavy client-side SDKs and in some cases DCOM. We provided a .Net client library as well and integrated with our existing products, such as our Data Retrieval and Analytics software which was able to fetch data from several sources, plot a trend (line series) and provide a number of features for chemical and process engineers to analyze data.
Myself and a friend started up a small part-time business teaching game programming using C# and XNA. It was great fun and it gave me the unexpected opportunity to really ground myself in the fundamentals of software engineering, all the things I'd learned years before in varsity and not totally grasped.
We ended up writing a game with some of our students for PC and Xbox. It turned out quite well. Getting the game to run smoothly on an Xbox 360 gave me some key insights into the .Net CLR and various performance considerations one can apply to "every day" .Net development.
As a young and ambitious software engineer, who knew better than anyone else, I thought it would be a good idea to go into consulting work by myself (aka freelancing).
This mostly consisted of the same work I was doing for my previous employer with a few extra web development projects on the side using Joomla.
This is not a part of my career which I consider to be my finest but it's nice to look back and reminisce on how young and naive I was.
I started off my career working on various features on Fusion Software's CRM platform based on VB 6 and MS SQL. As I progressed I started advocating the benefits of moving to .Net but got little head way. Fortunately, I was outsourced to Westcon and worked on their internal sales software which was based on .Net and integrated with Syspro ERP. I worked with Westcon for the remainder of my time at Fusion Software and most of my time in my next consulting role and enjoyed it. I learned a lot about how a sales system works and the related bits and pieces such as inventory, pricing, warehousing, ROE, tax, etc.
They had a great vibe and a good team and I'm not surprised that they're doing well. At the time, it made me feel that being outsourced, I was missing out on a lot of value that comes from being part of a company like that and I left to find that company for myself.