This is a list of some employers and projects where I worked, either as an individual contributor, architect, designer or lead for systems in industries such as Gaming, Telco and Broadcasting.
I list the three most recent employers and a bit about the projects I contributed to. If you have any question about any of my experience contact me.
If you prefer to download my CV and check out what I've been doing professionally in the past 19 years, then click here.
Kindred PLC, London.
Contract duration: 2 years, 3 months
Kindred Group (formerly Unibet Group Plc) is an online gambling operator which consists of 11 brands, among them Unibet, Maria Casino, 32Red, and iGame. The Group offer products such as online casino, online poker, online bingo, and sports betting. - Wikipedia
Kindred owns a technical platform to deliver gaming and betting experience to the end-users across all brands. The platform consists of more than 200 microservices, most of them developed with Java, SpringBoot and mainly Oracle. The platform is deployed in production either through Kindred own data centre or through a managed Kubernetes cluster, also owned by Kindred. Teams usually follow Scrum, Kanban or any other agile methodology.
The following are the two projects I contributed to directly mostly while working with Kindred
Rewards Management System
The goal of this project is to manage rewards offered by the 11 different brands of casino and betting sites of kindred Group. A reward can be as simple as "Register and get 10£ bonus money" or "Play at least 10£ in these games and earn back your first 5£ if you loose".
Across all the brands, it was handling more than 60 Million events per day from tens of different actions performed by the users and changes of state in other systems.
It's a microservice architecture with services built with Java and SpringBoot and RDMS, NoSQL and in-memory data stores. It uses a message broker (with interfaces JMS or Spring Cloud Streams) to propagate and consume events in the system. The whole system consists of more than 6 microservices.
For each event, a service verifies if the customer has a reward active or is eligible to get a new reward. If there's and active reward, the service will calculate the next outcome/action that needs to happen for the customer. It performs multiple reads and mutations of data representing rewards for customers. Depending on the outcome, the state is persisted, new events are triggered and other services are called using HTTP to perform operations in a distributed transaction. The systems handle more than 75% of the 60 Million events generated per day. The system also handles requests to create rewards via an HTTP REST API. The system also handled CRON jobs running to cleanups and migrations
The Rewards Management System was formed by eight microservices that were the responsibility of a team of 6 developers, two QAs, one Agile lead and a Product owner. The system interacted with a myriad of other microservices developed and maintained by other teams. The tech side of the business was composed of more than 200 microservices.
Examples of contributions
- Help with coordination and contributions to keep the resilience and performance of the main service in the architecture according to the SLA; Developed and run performance tests written and run with Gatlin; Collected metrics, analysed behaviour of JVM and app threads; did reports and suggested the next actions. Contributed to necessary changes in the system to achieve the desired targets.
- Contributed mostly for a new feature of the main service in order to modify rewards batch based on programmable triggers and according to configurable rules. For each record affected, it publishes metrics about the outcome to an Influx DB. Built Graphana and Splunk dashboards to monitor the process.
- Code reviews and suggestions of code changes according to do OOP design patterns and principles and business rules.
- Improved observability by coordinating and contributing to a project to make the eight microservices follow the adopted observability patterns and tools. Exposed standard and custom metrics to an InfluxDB using Micrometer and create dashboards in Grafana. Adopted distributed tracing using Spring Sleuth and created dashboards with Splunk.
- Created from scratch new microservices using a custom Maven archetype to quickly spin new microservices. The idea was to reduce the time to start development of new microservices while following the adopted tech stack in Kindred. The microservices generated by the custom Maven archetype are ready to follow TDD and BDD practices.
- Contributed to the upgrade of the microservices so they could run in Kubernetes clusters.
- Architected and design multiple new features of the system. Coordinated with other teams so we could deliver the new features as required by the business.
- Explained the system to newcomers and help them get up to speed
- Wrote documentation about new and existing features and change requests
Campaign Management System
Campaign Management System is made of multiple microservices developed using Java 11+, Spring Boot 2+, Oracle and CockroachDB. The overall high-level responsibility of these microservices is to select the customers to target given a set of rules provided by various systems.
The goal of the main system is to trigger communications to customers according to their contact preferences. for example, if a customer has said that email is he's prefered way to be contacted for marketing purposes, then the system will trigger an email sent to customers.
When the "brain" decided to send a communication to a customer, it would send a message to a queue that would be consumed by another system responsible for delivering the messages through the correct channel.
I contributed just a bit to the code base of this system, but I analysed their code base on a weekly basis in order to integrate with our system.
Examples of contributions
- Introduced Sleuth for distributed tracing, in order to understand better the communication between the two main marketing systems.
- Small coding of a feature to filter the available campaigns to customers, when showing promotions on the webpages
- Advice and documentation about integration with our system
- Helped recruitment by performing technical interviews with candidates.
Yule Technologies, London
Contract duration: 3+ years
Yule Technologies is a company officially open in September 2017. I work on this company part-time as a solo developer and I am also the director and owner.
The company is in the business of developing systems for Content Marketing, Social Marketing, Email Marketing and more, using Java/Kotlin and Spring Boot.
As a solo developer, I developed from scratch a platform using Java, Spring, Mongo and AngularJS where user can access different modules to help them to perform multiple Online Marketing processes. The modules are presented in a single Web Application, developed with AngularJS. Technically, each module is a Jar file with the supporting Java code, HTTP Apis and AngularJs code.
The system is composed of 6 distributed services that communicate using HTTPS or AWS SQS. I use Ansible to provision the machines where the services run and to deploy new versions. Code is Bitbucket and I have a GoCD pipeline to automate the deployment of new versions.
It's quite old technology, the user interface requires more work and does not scale, just because of lack of resources :). It handles only small customers for charity and customers are non-profit organisations. The platform is constantly being built to keep my coding and design skills sharp while I was/am learning technologies used with my main customers.
Next are some of the subsystems of the platform and short description of each.
Contacts Management System
This is a very basic contact management system. It allows the administrator to create lists, optionally associate tags and add contacts to the list. One contact can exist in multiple lists. It also handles the logging and retrieving of activity records for each contact, for example: "When did the user subscribe? What metadata was available at time of registration, such as tags, pages, widgets, etc"
It's deployed as and AngularJS Client within the shell web application. A different Java Service exposes a Rest API and consumes events through AWS SQS related to it's business logic.
Contact Automation System
Give administrators the possibility to create automation flows with emails and Twitter private messages. An organisation can send emails to contacts in the Contacts Management System. A Flows can be: "send an email when the user subscribes to a list and send another one if criteria met."
Criteria can be behaviour the user has with the platform, for example: "Did the customer logged in last X days? Did the user open the last email?" It can also be metadata of the system, such as time of subscription, used browser, country code, etc.
Social Media Automation System
With this module, administrators of the system can configure multiple schedules for multiple Twitter and Facebook accounts. Each managed Twitter and Facebook account can have a publishing schedule associated. A Schedule is a matrix-like structure with timeslots to mark when the content, and which content, should be published. It uses the Content Management System to source the content.
This system allows configuration of the schedules and also handles the responsibility of communicating with Twitter API ad Facebook API to send a message on behalf os customer.
Content Management System
Customer's team members use this system to collaborates with the Project/Organisation and publish content into the platform. Published content will automatically be published on the respective Twitter or Facebook accounts, according to their Publishing Schedule.
Content Generation Tools
The platform provides multiple tools to automate content creation. Two of the main tools are:
- Automate content extraction from other websites that have RSS or integration.
- Use Unsplash API to search and use images to create image quotes to publish as scheduled.
White Label and Agency Management System
The platform can be deployed with a different look and feel in different domains and servers, as separate entities. This is achieved using Ansible to deploy different instances of the system.
The platform works with the concept of Agency. An agency can provide marketing services to multiple customers using only a single login. Each login can manage multiple projects (or customers)
The tech stack is pretty old and includes Java 8, Spring Boot 1.5.18, AngularJS 1.4.8, Ansible, Ngnix, Let's Encrypt, AWS SQS, AWS S3, AWS Lambda, AWS Cloudfront, MongoDb (managed by mlab.com), Papertrail to handle logs. If you're interested you can read a bit more about the high-level architecture, you can read this.
Employment time: 1 Year.
Sky Group Limited is a British media and telecommunications conglomerate owned by Comcast and headquartered in London. It has operations in the United Kingdom, Ireland, Germany, Austria, Switzerland, Italy and Spain. Sky is Europe's largest media company and pay-TV broadcaster by revenue (as of 2018) with 23 million subscribers and more than 31,000 employees as of 2019. - Wikipedia
I worked as a full-time employee and part of the engineering team responsible for the delivery of the platform for the Video On-demand (VOD) business. VOD delivery platform is responsible for streaming TV shows and movies to millions of Sky to their devices that could be tv boxes, smart TVs, mobile phones, anytime anywhere. The systems and tools were built with different technologies and libraries, such as Java, Scala, Dropwizard, SpringBoot, Cassandra, AppDynamics, ELK Stack, Bash
I had a Senior Platform Developer position within one of the teams contributing to the platform. The architecture behind the VOD business is composed of multiple services that work together to deliver streaming to customers. There were at the time more 5, or more, teams contributing to the architecture.
Teams usually followed Scrum, or another agile methodology, for managing workload and output. The team I was serving had an average size of 6 developers and one QA.
We followed religiously Pair Programming, TDD and BDD to build the main services and tools to support it, to guarantee that the quality was excellent. Around 80% of the time, we were pairing with different team members and we invested a lot in testing and testing tools and libraries.
I conceived a tool to test integration with Kafka. The tool is a SpringBoot application that embedded a Kafka node and provided HTTP and Java interfaces to interact with the Kafka node. For example, through HTTP or Java, it was possible to start and stop the node, retrieve and delete messages in the topics and other useful features. The same tool could be used as part of the Integration tests (controlling through HTTP) or in Unit Test. The interfaces were the same but depending on the implementation, the tool would control a local Kafka node or a remove Kafka node.
- Design and coding new features and tools with Pair Programming and TDD for the team
- Contribution to best practices, such as maintaining documents describing best practices
- Contribution to the migration of AWS to a datacenter owned managed by Sky. The project was to allow the deployment of the whole platform in both types of datacenters.
- Helped the recruitment process by being part of the technical interviews for candidates.
Other projects and companies I worked before
Employment time: 2 Years
The team consisting of 4 developers, one QA, one Product Owner and three support specialists provide software in the cloud for events, especially running events. The startup's customers at the time were organisations such as Though Mudder and Spartan. The service the startup is offering is a service to provide registration, payment, tagging, recording and leader board out of the box. The software integrates with equipment that detects participants in points of the track and integrates with customers websites to provide leader boards.
I was an individual contributor to the main project that had the frontend+server deployed as a war file into an elastic beanstalk. I introduced and lead AngularJs adoption at the frontend and helped the team to adopt more agile practices. I also consulted on other projects owned by the same main investor.
Employment time: 1 Year and 3 Months
Truphone is a GSMA accredited global xmobile network that operates its service internationally. The company is headquartered in London and has offices in ten other countries, is spread across four continents. - Wikipedia
I worked as a Senior Sofware Engineer for the team maintaining and rewriting the system that provided the services to allow one SIM card to have multiple numbers, depending on the network it was connecting to. Customer can have a single SIM card, with a normal phone, and have different numbers in different countries. The main telco system that allowed this to happen was written in Phyton(?) and the project I was working was to migrate it to Java.
The architecture team had decided the system would be built using Java, Fuse, Apache Camel, CXF based on the recommendation by RedHat. I participated in architecture discussions, provided documentation and developed POCs. My goal was to create an architecture that was agile for the development teams.
While in Truphone, I also led a project to make development and deployment of internal tools more effective. Multiple teams had multiple ways and languages to write their network tools, the objective of this project was to provide a platform for network engineers to write tools to analyse traffic,e, apply changes to networks, monitor, etc.
The app framework was using OSGI to provide modularity and deployment of the tools and versions automatically without restarting servers.