Welcome, I'm


Software Engineer

Photo Profile

Theo Michail

Software Engineer

Full-stack Software Engineer currently working at Deliveroo as an Android Engineer. Known for my passion and problem-solving capabilities, I thrive on transforming ideas into successful products. My journey in software engineering is underpinned by a commitment to continuous learning and adapting to new technologies.

Working both independently and collaboratively, I've led and contributed to numerous projects, emphasising a balanced approach to product innovation, timely delivery, and technical excellence - ensuring high-quality outputs in an environment of fast evolving business needs and technologies.

Professional Competencies

Languages

Java
Kotlin
TypeScript
Python
SQL
HTML & CSS
C
Bash

Frameworks, Technologies & Platforms

Spring
Spring Boot
Android
Jetpack Compose
KMP
Coroutines / Flows
Web Components
React
Vaadin
Hilla
Lit
Hibernate
Azure
JUnit / Jupiter
Espresso
Cypress
Vitest
Docker
Jenkins

Development Practices

OOP
Clean Architecture
Microservices Architecture
Agile Methodologies
Security Practices
REST APIs
Containerisation
Responsive & Accessible Design
Automated Testing
CI / CD
Resiliency
Version Control

Additional Skills

Systems Architecture

I have strong experience in systems architecture, particularly in designing and implementing scalable, efficient backend solutions. My experience includes:

  • Designing Scalable Microservices: Creating microservices architectures that are highly scalable and resilient, enabling efficient handling of varying loads and seamless integration with other services.
  • Cloud-Based Solutions: Implementing solutions on cloud platforms, ensuring high availability, and leveraging cloud-native features for optimal performance and reliability.
  • Stateless Design: Employing stateless design principles to enhance scalability and fault tolerance, allowing for easier deployment and maintenance of services.
  • Load Balancing and Service Discovery: Implementing load balancing strategies and service discovery mechanisms to ensure even distribution of traffic and efficient routing.
  • API Design: Crafting well-defined APIs that facilitate seamless communication between different microservices, focusing on robustness, security, and ease of use.
  • Data Management & Caching Strategies: Applying efficient data management practices and caching mechanisms to enhance system performance and data retrieval speeds.
  • Observability: Incorporating comprehensive monitoring and logging systems to track the health and performance of a system, enabling proactive maintenance and troubleshooting.

This experience has equipped me with the skills to design robust and scalable systems that evolve with needs of the business and its technical requirements.

Project Management

I have managed teams for multiple software projects where I gained experience in:

  • Stakeholder management, including regular communication and updates to ensure alignment with project goals and expectations
  • Coordinating development, testing, deployment and maintenance
  • Managing changing requirements and scope creep to ensure targets and deadlines have the best chance of being met without compromising on software quality
  • Evaluating different engineering methodologies and determining which is most suitable for a given project and team
  • Risk assessment and mitigation planning to foresee potential challenges and prepare proactive solutions
  • Conflict resolution within the team, fostering a positive and collaborative work environment
  • Continuously seeking feedback and implementing lessons learned for ongoing improvement in project management practices

Experience

  • 2024 - Present
    Android Engineer
    Deliveroo

    Working in a multidisciplinary team to deliver robust and well-rounded features to the consumer app


    Highlights:


    • Led multiple cross-platform projects as Tech Lead from ideation to delivery
    • Coordinating the consumer app's migration to Android 15
  • 2023 - Present
    Technical Project Lead
    Coptic Orthodox Diocese of London

    Leading the design and architecture of a comprehensive software product, managing a team of 6 engineers, actively contributing to code development, and liaising with stakeholders. This role involves overseeing both backend and multiple frontend developments, ensuring high-quality standards and efficient project progression.

  • 2023 - 2024
    Android & Quality Engineer
    Capital One

    Working in a mobile team both as an Android engineer and a quality engineer to produce high-quality, user-centric mobile applications.


    Highlights:


    • Lead the migration to Jetpack Compose in the Capital One Android app
    • Leading voice in designing a cross-platform design system to be used company-wide across design, mobile and web
    • Created a solution for a multiplatform, embeddable mock server to be used on both mobile platforms and in automated testing
    • Architected and championed redesign of a complex app feature to support multiple 3rd-party vendors
  • 2018 - 2023
    Full Stack Engineer
    Lex Management Solutions

    Development and deployment of B2B applications designed for improving business efficiencies and automating workflows

  • 2018
    Internship
    Packets2Disk

    Writing the installation and modification scripts for the company's packet monitoring software used in the financial sector

Education

  • 2020 - 2023
    Computer Science BSc
    University of Warwick

    Bachelor's degree in Computer Science

  • 2018 - 2020
    A Levels
    Wren Academy

    3 A*s in Maths, Further Maths and Physics

  • 2013-2018
    GCSEs
    Haberdashers' Aske's Boys' School

    10 GCSEs

Portfolio

Some Of My Work

MyChurch V2

Software Suite, Volunteering

Distributed DRL Training Platform for Racing Simulation

AI, University

Clipboard

Web App

Kenouz

Web App, Volunteering

Big Band Intranet

Web App

MyChurch

Web App, Volunteering

Mento

Web App, University

Show scheduling tool

AI, University

Multithreaded intrusion detection system

University

MyChurch V2

The original MyChurch system was built to meet the unexpected needs of the church during the COVID-19 pandemic. We had to release quickly and with a single purpose - to allow churches in the diocese to resume services with limited capacity. As the pandemic came to an end, there was a desire to expand the system to be used as a more general purpose church management system. Some initial features were added, but it was clear that the system needed to be rebuilt from the ground up with modern technologies to handle the ever expanding feature set and increasing load on the system. The legacy system currently has over 8000 active users and there are plans to introduce this to more congregations.

My role in this project has been multi-faceted:

Project Leadership and Management
  • Collaborating with Stakeholders: Direct engagement with stakeholders to ensure the system meets their evolving needs.
  • Managing the Team: Leading a team of volunteers posed unique challenges such as fluctuating commitments and developer turnover. We adapted our approach, employing flexible project planning and leveraging the Kanban methodology to maintain progress and adapt to changing team dynamics.
  • Mentoring: Providing guidance and support to the less experienced engineers to ensure they are able to contribute effectively to the project.
Technical Design and Implementation
  • System Architecture: Designing a system which is cloud-native and has a stateless microservices architecture focusing on security and scalability. This approach ensures high availability and robustness, accommodating the expanding feature set and user base.
  • Code Contribution: Actively contributing to the codebase across various components of the system, ensuring high standards of code quality and system functionality.
  • CI/CD and Testing: Set up Jenkins pipelines for continuous integration and deployment. Established testing frameworks in repositories and managed GitHub pull request workflows with reviews and status checks to maintain code quality.
  • Observability: Integrating monitoring systems on Azure, incorporating distributed tracing, logs, metrics and alerts to ensure optimal performance and reliability of the system.
  • Knowledge Base and Documentation: Maintaining a comprehensive wiki as a knowledge base for the project, including an auto-updating API reference that synchronises with changes merged through pull requests.

Achieving all of the above has removed many roadblocks, with the intention of helping other engineers ramp-up quickly and focus on the features they are working on.



Technologies used:

Back-end

  • Spring
    • Spring Boot
    • Spring Cloud
    • Spring Data
  • Kotlin
  • PostgreSQL
  • Redis
  • Flyway
  • Docker
  • JUnit
  • Mockito
  • Testcontainers

Front-end

  • Kotlin Multiplatform
  • Jetpack Compose
  • Kotlin Flows
  • Koin
  • Ktor
  • Voyager
  • Gradle

Other

  • Azure
    • Container Apps
    • Active Directory
    • Key Vault
  • Open Telemetry
  • New Relic
  • Jenkins
  • GitHub
  • penpot

AI Racing Agent

My 3rd Year Dissertation project was to create a distributed platform to facilitate the training of Deep Reinforcement Learning agents to race in the Assetto Corsa racing simulator. Potential applications of this work include optimising a racing car's setup or finding the ideal racing line for a given car and track combination.

This was a challenging project which required me to overcome various roadblocks along the way. You can find the full dissertation below.




Technologies used:

  • C
  • Python
  • Ray
  • RLLib
  • TensorFlow
  • TensorBoard
  • Assetto Corsa

Clipboard

Clipboard is a PWA that allows organisations to create and manage surveys across multiple sites. Surveys are completely user customisable to suit the needs of the organisation. It is installable as an app on all devices with a compatible browser or can be used as a website.

I have taken ownership of this project from start to finish including talking with the client to agree on an initial scope, designing the database, creating the front end and back end, and deploying to production. It is still in active development alongside my studies.

Click to open gallery

Features include:

  • 2 survey layouts
  • 8 different question types (and counting)
  • Questions can include or require additional comments and photos
  • Categorisation of questions
  • Access control to allow groups of users to complete surveys on different sites
  • Grouping of users and sites for easy access control
  • Assign jobs to users on a day by day basis or with complex recurrence rules
  • Scoring system to allow for automatic grading of surveys
  • Exporting of results and statistics to PDFs and Excel Spreadsheets
  • Viewing statistics and running reports
  • Collaboration between users

Technologies used:

  • Java
  • Spring Boot
  • Maven
  • Vaadin
  • PostgreSQL
  • Apache POI

Kenouz

Kenouz is a PWA that was developed for a charity in Egypt which provides financial support to students in poverty. It allows the charity to manage the students they support and the payments they make to them as well as log any pastoral care / support they provide. It is installable as an app on all devices with a compatible browser or can be used as a website.

Features include:

  • Submitting an application for a new student to be supported
  • Viewing the status of an application
  • Logging payments and collecting signatures as proof of payment
  • Logging information of the student's current situation such as family member's health, dependants etc.
  • Logging pastoral care provided to the student
  • Report generation

Technologies used:

  • Java
  • Spring Boot
  • Maven
  • Vaadin
  • MySQL

Big Band Intranet

As the Music Director of the Big Band at my university, I was trying to find a way to motivate the band members to practice more. After speaking to a few of them, I found that the main hurdle was that it was a bit of a hassle to get the music for the songs we were playing. I decided to create a web portal to make this process easier.

The portal is a PWA that is installable or usable through a brower that allows the band to view music for their parts in all songs in upcoming rehearsals and gigs. They can also access links to Spotify, Apple Music and YouTube for the songs. If they want to practice a song that we will not be playing in the near future, they can request it and gain access to it on a person by person basis. We have also moved our gig sign up process to the portal, which has made it much easier to sign up for gigs as once you are logged in, it is only a button to sign up instead of filling out a form every time.

Click to open gallery

Features include:

Members:

  • View date, location and other information of upcoming gigs and rehearsals
  • View set-list for any gig / rehearsal
  • View sheet music for all parts you play as well as links to streaming services
  • View players list for an upcoming gig
  • Sign up to upcoming gigs

Admins:

  • Manage songs and all related information
  • Create and edit gigs / rehearsals
  • Manage set of instruments that users can select on sign-up to the site
  • Manage users and approve new sign-ups
  • View sign-ups for gigs and populate players list
  • View statistics for players and songs such as number of times rehearsed and number of gigs played


Technologies used:

  • Java
  • Spring Boot
  • Maven
  • Vaadin
  • PostgreSQL

MyChurch

When lockdown hit in 2020 there was a lot of uncertainty around what would happen within our churches and how people would be allowed to attend liturgies. We needed a way to limit the number of people attending a liturgy while still giving everyone a fair change to attend and worship. This need resulted in me leading the development team for MyChurch.

MyChurch is a church management system being used across the Coptic Orthodox Diocese of London that allows churches to manage and monitor attendance to liturgies and other services such as Sunday School and conferences. Churches can control eligibility rules for attending liturgies such as restricting age (for elderly-only liturgies) or restricting attendance frequency to give everyone the chance to attend while liturgies have a maximum capacity. To further comply with COVID-19 restrictions, MyChurch allows churches to share resources such as liturgy books to reduce the need for physical copies.

Since then, it has evolved to incorporate more church services such as creating groups where members can access resources, sign up to group events and track attendance.

Click to open gallery

Features include:

Congregation:

  • Viewing available and eligible liturgies
  • Booking liturgies for household
  • Getting booking QR code to attend liturgy
  • Viewing diocese and church-specific resources
  • Selecting churches to attend
  • Signing up to groups which are open
  • Biometric sign-in

Servants:

  • Viewing list of attendees to prepare for a liturgy
  • Registering attendees by list or scanning QR code
  • Booking other members who are not able to book themselves
  • Managing group members, events and resources

Priests:

  • Viewing list of attendees to prepare for a liturgy
  • Registering attendees by list or scanning QR code
  • Booking other members who are not able to book themselves
  • Managing group members, events and resources


Technologies used:

  • Apache Cordova
  • JQuery Mobile
  • PHP
  • Bash
  • MySQL

Mento

Mento is a web application that was developed as a group project for a module in my second year of university that was run in collaboration with Deutsche Bank. The brief was to develop a solution that facilitates the employee mentoring program. I was elected as the project manager and was responsible for managing the team, delegating work, managing talks with the client and ensuring project deliverables were submitted on time as well as taking part in the project development.

We were given a specification of the minimum requirements for the application and were given the freedom to develop the application in any way we saw fit as long as it met the requirements and the client was happy with all proposed additions. We decided to develop the solution as a web application as it would allow for easy access from anywhere.

Managing this team of 7 was an interesting experience as there was a range of experience levels and enthusiasm towards the project which would introduce added difficulties. Taking this into account, our development methodology was a blend of Plan-Driven and Agile development. We were required to submit a Requirements Analysis document before starting development, so I took this opportunity to plan aspects of the project such as the technologies we would use, the database schema and the user interface design. Agile concepts were also adopted during development such as stand-ups twice a week to discuss progress and rearrange tasks as needed to prioritise the most important features for the client.

Furthermore, I took on a teaching role to help team members with less (or no) experience to get up to speed with the technologies used. I set aside 6 hours a week, where I would be working in a public workspace so that other team members could come to me with issues they've been having. I also created a section in our group's Discord server where I published:

  • A small summary about each part of our technology stack
  • Information about setting up an IDE and making use of features such as debuggers
  • Expectations on file structure, code formatting and docstring comments so that it's consistent
  • Credentials to the testing environment
  • Links to docs, tutorials and other information that would be useful

Click to open gallery

Features include:

  • Registering topics to learn, topics to teach and topics of interest
  • Personalised mentor suggestions
  • Chat feature built using reactive programming
  • Comment analysis using Natural Language Processing (Stanford CoreNLP)
  • Syncing with external calendar for meeting suggestions between mentor & mentee
  • Notifications for upcoming meetings, messages etc.

Mentee:

  • See list of recommended mentors to send a mentoring request to
  • See list of group mentoring sessions in order of recommendation to sign up to
  • Create / edit plan of action on mentoring points
  • Create meeting request with mentor (one requirement was that the mentee must drive the relationship)

Mentor:

  • Set maximum number of mentees to stop being shown as a recommended mentor when this is surpassed
  • Manage mentees
  • View / edit mentee's plan of action
  • Create group sessions and tag with related topics to market to specific mentees

Admin:

  • Manage users
  • Manage topics
  • Manage group sessions
  • Manage system-wide variables (such as the coefficients for the matching algorithm)
  • View system logs
  • View suggestions submitted by users


Technologies used:

  • Java
  • Spring Boot
  • Maven
  • Vaadin
  • PostgreSQL
  • Stanford CoreNLP

Comedy Show Scheduling Tool

This project was assigned as coursework for my Introduction to Aritificial Intelligence module in my second year. The brief was to develop a schedule for comedy shows by different comedians and to match the shows to target demographics. The schedule had to be developed in a way that every demographic had a certain number of shows targeted to them and to minimise the cost of shows based on pricing rules and other constraints.

Constraints

  • Each show, whether it is a main or test show, requires a comedian to be assigned to it.
  • A comedian can only be assigned to the main show for a demographic if the comedian’s themes contain every topic that the demographic likes.
  • A comedian can only be assigned to the test show for a demographic if the comedian’s themes contain at least one topic that the demographic likes.
  • A comedian can perform in a maximum of 4 hours of show a week. Main shows are 2 hours long, and test shows are 1 hour long.
  • A comedian cannot perform for more than 2 hours per day.
  • A comedian can perform only main shows, only test shows, or a combination of the two.
  • The shows marketed to a demographic can either involve two different comedians, or the same comedian.
  • To hire a comedian to perform in a single main show costs £500. If that comedian is hired for a second main show, the second main show will only cost £300. If the two main shows are on consecutive days, then the second main show only costs £100. To hire a comedian to perform a single test show costs £250. Each subsequent test show a comedian performs costs £50 less than the preceding one, and so the second show will cost £200, the third £150 and the fourth £100. Furthermore, a test show that is performed on the same day as something else the comedian is performing, whether main show or test show, has its cost halved.

This is a classic example of a constraint satisfaction problem (CSP). I broke it down into two parts:

  • Matching the shows to comedians
  • Scheduling the shows

Matching the shows to the demographics was done using a backtracking algorithm. The backtracking was optimised using the Minimum Remaining Values (MRV) heuristic and the Least Constraining Value (LCV) heuristic. The order for shows was determined by the number of comedians that fit the constraints for a show and are available. The order of comedians was determined by the number of hours left they had (smallest first) to minimise the cost of the shows.

Scheduling the shows was done using Stochastic Local Search (SLS). The heuristic was calculated from the total cost of the schedule and each constraint that was broken added £20 000 to the cost (greater than the maximum possible cost of the schedule). This was done to ensure that removing a constraint violation would always be prioritised. The algorithm would run until two valid schedules were found and the one with the lowest cost would be returned. 2 valid schedules was chosen via trial and error as the average cost wouldn't change much after this point but the runtime would increase linearly so this was a good trade-off for the marking criteria.


Technologies used:

  • Python

Comedy Show Scheduling Tool

This project was assigned as coursework for my Operating Systems & Computer Networks module in my second year. The brief was to develop a multithreaded intrusion detection system that would monitor network traffic and detect malicious activity. The system would be able to detect the following attacks:

  • SYN attacks
  • Cache poisoning
  • Blacklisted URL violations

The system was implemented using a thread-pool model for multithreading. I decided to use this model as network traffic could be heavy so creating a new thread for each packet would result in a huge amount of overhead in creating and destroying threads. The thread-pool model allows for a fixed number of threads to be created and reused for each packet. The number of threads in the pool was proportional to the number of CPU cores on the machine.


Technologies used:

  • C

My Life Outside Work

Music


Music - more specifically jazz - is a big part of my extracurricular life. I've been playing the piano since I was 7 years old, the double bass since I was 11, and I've recently been teaching myself the saxophone.
While at university, I was the Music Director of the Warwick University Big Band, which is a 17+ piece jazz orchestra that performs at various events around the university and the surrounding area. On average, we played 4-6 gigs per term. I also am one of the founding members of the Warwick Jazz Collective, a 7-piece jazz ensemble that performs at smaller events such as weddings, restaurants and private functions.
In addition to this, I was a member of The Improv Musical. This is a group of musicians and actors who perform a 1-hour completely improvised, audience-led musical. We perform multiple times a term at the University and every summer we perform at the Edinburgh Fringe Festival for a month. This has been one of the most challenging and rewarding experiences of my musical career as performing with other musicians having had no prior preparation is an extremely difficult task.




Sport


I have a passion for motorsport, both as a spectator and as a participant, racing for the Warwick University Motorsport team in the British University Karting Championship.
I also enjoy pole-vaulting and have competed for my local athletics club in the past. My national ranking within my age group peaked at 26th in March 2018, after having placed 3rd in the local tri-county championships.