Work Experience
Scala Developer / (Search UI Team - HMRC)
January 2023 - Current
The search UI team is responsible for developing tools that aggregate an individual's tax persona into a single point where agents can query for such individual.
Below is what I'm currently working on.
- building an injectable survey app which gets triggered on specific user action
- building a UI for easily highlighting fraudulent activities involving tax payments, using a network graph that shows relationships between bank accounts, IP addresses, devices and tax accounts
Scala Developer / (CMQ Team - HMRC)
January 2022 - January 2023
The CMQ team was responsible for collecting and validating the authenticity of fraud header data from application developers integrating with HMRC services,
I was contracted to build the self service web app to aid the developers visiualize their fraud header data. below are the list of things I did:
- developed an experian like ui guage using javascript/canvas which give developers an instant visual cue as to the help of thier fraud header data
- developed as step chart which showed application developers fraud header data state over a 6 month period
- integrated CMQ fraud header data into an internal web app used by agents to carry out fraud checks
Scala Developer / (CRM team - Sky)
December 2019 - January 2022
I Was responsible for applications which were used to integrate internal data with 3rd party solution providers, These applications where built using akka stream
which where connected to kafka brokers on the upstream to receive events triggered by customer actions. Once events are consumed they are run through several flows
where they are transformed and enriched before they are sent to our 3rd party solution providers. Below is some of the activities I was involved in:
-
The previous maintainers used sbt & helm charts for building and deployment the apps which was non-standard within Sky, so my first task was to migrate away
from this to gradle and using Sky's gradle plugin for kubernetes deployment. I implemented several gradle plugins in the process.
-
collected metrics from the applications and installed Prometheus for metrics collection and Grafana for visualization, I also implemented gradle plugins
for publishing app specific dashboards to Grafana
-
Implemented a web based application using akka-http and lucene (for indexing) to allow the CRM data team query kafka via a simple search field
-
Tracked down and fixed key performance issues using tools such as visual vm, memory and cpu bottle necks
-
Did several presentations about kubernetes and kafka internal workings
-
I was recently acknowledged as the employee of the month for the work/support I put in during the launch of our platform into a new territory
Scala Developer / (NJP team - Sky)
April 2018 - December 2019
I was among other developers responsible for maintaining miscellaneous scala middleware applications for interfacing between the web and our backend systems.
My activities included:
- migrating our microservices from the deprecated spray framework to akka-http
- worked closely with the frontend team during the implementation of several features, including integrating with a new payment provider
- worked closely with the business analyst on features from drawing board to implementation and deployment
-
inherited a voucher management system from a java team and I was tasked with rewriting it in scala, so I had to reverse engineer it and come up with a scala
implementation for it, the new implementation contains 3 microservices an admin frontend running on nodejs, and admin backend written with playframework
for generating vouchers connected to the frontend using REST
Scala Developer / (payments - HMRC)
January 2016 - April 2018
I was the team lead on the payments system for HMRC, this system for responsible for collecting and processing tax payments from our customers, my responsibilities included:
- Led the team using extreme programing practices include pair programing, test driven design, frequent releases and short development cycles
- Came up with the strategy and led the team for transitioning to a new payment provider
-
January 31 is aways a big day for HMRC as Self Assessment tax is collected, consolidation happens the next day, the previous consolidation system could only handle 200K records before it came to a halt.
I was tasked with rewriting and optimizing the consolidation process. so I reversed engineered the system and determined that it was implemented using a number microservices and loading up all the records
into memory, so the 3 main issues I was able to glean was that 1.) integration points as a result of using microservices are prone to high latency,
2.) the Garbage collector is always active due to high memory usage (this is also a latency issue) and 3.) The consolidation process is a batch process and there is no need to implement it using microservices.
With this information in hand I re-implemented the consolidation system as a single service using akka-streams and batch queries to the database, which resulted in being able to process a million records in under 3 minutes
Grails Developer / (News UK)
March 2015 - January 2016
I was contracted to implement requirements for News UK’s Acqusition and Account Management Projects
- Redesigned The Times acquisition website based on designs from the News UK designers.
- Redesigned The Times Account Management Portal
- Redesigned the Dream Team Fantasy Football website and developed backend code required to plug it up to various New UK internal APIs for the 2015 Fantasy Football season
Principal Developer / (Bitcoinpaygate)
Aug 2014 - March 2015
Bitcoinpaygate is a startup looking to provide Bitcoin payment gateway services to companies and individuals, I was contracted as the principal developer to develop the gateway
- The gateway uses Hazelcast for high speed messaging, mission critical data is pre-loaded into RAM at start up to avoid blocking on IO during reads, IO operations on user request threads are avoided as much as possible and are performed on a dedicated IO thread. Log4j2 was used to enable heavy logging but still preserve the application’s responsiveness; this is possible because Log4j2 uses asynchronous logging and the LMAX disruptor for none blocking concurrency
- Designed and implemented the messaging system which was based on the Enterprise integration patterns, Hazelcast was used as the conduit for transferring messages around the cluster (Although I did use GridGain at first but quickly reverted to Hazelcast as GrainGain was slightly more complex and time did not allow for its continued use
- Designed and implemented the Bitcoin client which uses JSON-RPC to connect to a bitcoind daemon which in turn connects to the Bitcoin p2p network
- Designed and implemented the Exchange which is a facade to various Bitcoin exchanges, wrote an algorithm derived in house to compute a competitive exchange rates based on the aggregation of rates from the different exchanges
- Designed and implemented the payment processor which is an implementation of the Bitcoin payment protocol BIP 0070
- Designed and implemented the gateway’s webservice for 3rd party integration. The gateway was built using an embedded jetty container to avoid deploying to a servlet container
- I was also responsible for devOps, configured the build server which consisted of TeamCity, Git and Sonar for code coverage, installed mongoDB, mySQL, apache2 and tomcat. Configured apache2 for virtual hosting and also configured mod_jk for forwarding requests to tomcat
Lead Grails Developer / (How Splendid)
Feb 2014 - Aug 2014
Sub contracted to News UK to work on their Acquisition grails project, though a grails project 80% of project time was spend working on front end tasks requiring both JavaScript and CSS
>
- Redesigned the sun acquisition website based on designs from the News UK designers
- Created custom JavaScript controls (model dialog boxes, select, checkbox, radio box, etc.) to meet the News UK design requirements
- Redesigned the Dream Team Fantasy Football website and developed backend code required to plug it up to various New UK internal APIs for the 2014 Fantasy Football season
Tech Lead / GameSys
Apr 2013 - Feb 2014
Moved to the Games Platform team which was developing Gamesys’s next generation gaming platform to help implement and mentor team members on the proper use of Agile methodologies
>
- Took over the role of SCRUM Master for 2 iterations, introduced sprint retrospectives, showed the team the proper use of daily scrum meeting and introduced a product owner to the project
- Introduced view objects to the project as the team was previously using ACLs between every tier of the project architecture which lead to a proliferation of DTLs.
- I was also responsible for the Architecture for cross cutting concerns (exception handling, logging, etc.); which was implemented using Spring AOP
- As the project was already in progress before I joined the team; the current architecture used a scheduling framework (Quarts) for scheduling subsequent games. As a result of the decision to use scheduling, overlapping games were crippling the system and the team’s current fix was to use time offsets which still did not fix the problem. I introduced the team to the concept of using coordinators instead of scheduling; which takes the responsibility of scheduling subsequent games away from the scheduler and removes overlaps as subsequent games only start after the previous game was finished. Hazelcast was used for implementation as it comes pre-packaged with distributed locking features