Karl Fenech: Curriculum Vitae (extended)

Executive Summary

Personal Profile

Karl Fenech

I compiled my first program in GW-BASIC when I was ten. I subsequently developed my passion for software into a career, studying for a BSc IT (Hons) degree at the University of Malta, an MSc Computer Science at the University of Edinburgh, and working for over 12 years as a C# and .NET developer in full-time professional roles, mostly in senior and tech lead positions. I am highly motivated with a strong work ethic and an outstanding track record of excellence:

  • graduated at the top of my class in both my degrees
  • co-authored three published papers and a patent
  • successfully brought various projects to fruition as tech lead
  • won multiple programming competitions (mostly algorithmic)
  • regularly contribute online using my “Douglas” alias

I enjoy undertaking challenging roles that require a level of intellectual prowess and technical proficiency, including the opportunity to work on novel and cutting-edge products. I am keen to learn and assimilate new technologies as they emerge. I often assume a degree of responsibility and participation in the project leadership. My dedication and determination to excel have been regularly commended by my supervisors, who often entrusted me to assume self-direction in the execution of my projects. The CTO from one of my previous employments recommends me as having “exceptional coding and problem-solving skills”, with “a passion and enthusiasm for technology that is difficult to find”.

Technical Expertise

My academic specialization is parallelism, distributed computing, and high-performance computing. My industry experience has been varied, spanning development on educational tools, online insurance services, document management, email archiving, financial applications, cloud-based reporting, and sports betting.

I have applied myself to backend and desktop development using C# and .NET for the last 18 years (including university), gaining substantial experience in multithreading, WCF, WPF, Office add-ins, TPL, asynchronous programming (async–await), LINQ, Entity Framework, three-tier architectures, SOA, microservices, and ASP.NET Core, with solid knowledge of SQL Server and T-SQL. I have many years’ experience with Visual Studio, unit and integration testing, CI/CD (Git, SVN, TeamCity, TFS, Azure DevOps), and agile development (Scrum, Kanban). I have moderate knowledge (with around five years’ experience) of web technologies, including (X)HTML5, JavaScript, jQuery, AJAX, CSS, ASP.NET MVC, SignalR, and Blazor WebAssembly.

I have recent experience in Azure, including Azure Functions, App Service, Service Bus, Redis, Cosmos DB, Key Vault, Azure SQL Database, Azure DevOps, and ARM templates. I acquired the Microsoft Azure Fundamentals certification in 2019, Azure Administrator Associate in 2022, and Azure Solutions Architect Expert in 2023.

Personal Details

Email address: karl.fenech@gmail.com
LinkedIn LinkedIn profile: linkedin.com/in/karlfenech
EU Nationality: Maltese (EU)

Professional Experience

Technical Architect @ Ascent Software

I am currently a technical architect with Ascent Software (Luqa, Malta). I joined the company as a junior technical architect in August 2020 (3 years ago), getting promoted to technical architect in September 2021. Ascent Software is a premier provider of digital transformation projects to global corporate clients, including Bosch, G4S, Hive, and BT. I work with multiple teams, typically at early stages or critical junctures of their projects – for example, to devise the architecture of a new system; to revise the architecture of an existing system being modernized for cloud deployment; or to delve into performance issues and come up with optimizations. I design the system architectures utilizing microservices and Azure PaaS services for better maintainability, deployability, and scalability. I help the teams establish and maintain code quality standards and best practices, promoting full deployment automation using Azure DevOps pipelines and ARM or Terraform templates; microservice decoupling through asynchronous event-driven messaging; and scalability through serverless functions and stateless web apps. I spend 30–70% of my time on hands-on development, such as bootstrapping solutions to complex problems or laying the architectural groundwork for a project. I liaise directly with the clients to understand and discuss their technical requirements, including in the pre-sales stage to help come up with the project proposals.

Senior Software Developer @ Betway & Derivco

I was a senior software developer with the Astra (Automated Sportsbook Trading) development team at Betway and Derivco (Gżira, Malta) from December 2017 to August 2020 (2 years 8 months). The Astra team was transferred from Betway to Derivco in June 2018, with Betway remaining our primary operator. Astra develops sports trading and pricing solutions for the Derivco Sportsbook platform, integrating third-party feeds and bespoke mathematical models built in collaboration with the quantitative analysts and sports traders. I mainly used .NET Framework, WPF, RabbitMQ, and SQL Server for the legacy on-prem system; and .NET Core and Azure technologies for new projects on the cloud. I participated in the team’s Scrumban agile development process.

I was the lead developer for BuildABet, the backend behind BetYourWay, which computes bespoke prices on the fly for arbitrary combinations of outcomes chosen by customers from the same sports event. I adopted several new Azure technologies for this project, including Azure Functions (serverless computing), Service Bus, Cosmos DB, Azure DevOps, and ARM templates. I engineered the solution to achieve our long-held ambition of continuous delivery with zero downtime, using Azure DevOps pipelines and ARM templates for full deployment automation, as well as staging slots for blue–green deployment. The solution is fully georedundant, failing over to a secondary region in case of a regional outage. This was the first major project from the wider Astra team to be deployed on Azure, and its successful delivery boosted our initiative to migrate the rest of the system to the cloud. It was also one of the first implementations of a real-time “bet builder” product in the global betting industry. Betway hailed it as the company’s main product milestone for 2019.

I pushed forward several system improvements to enhance performance, reliability, and maintainability, both on-prem and on the cloud. I optimised the throughput of a Service Bus messaging system between on-prem and cloud from 10–20 msg/s to over 400 msg/s, by introducing batching, parallelism, and asynchronous processing, all while preserving reliable delivery. I innovated solutions for optimistic concurrency control using Redis. I drove fortnightly live deployments of the legacy monolith system for over six months, thoroughly documenting the manual process so that it could be automated. I wrote extensive unit tests and integration tests, configuring them to run as part of our CI/CD pipeline. I promoted software best practices, pushing for inline code documentation, reusability (DRY principle and OOP design), intuitive design (principle of least astonishment), and helpful logging. I created abundant backlog items for our epics, so as to spread the work across the entire team. I helped juniors pick up tasks and got them up to speed with the required technical knowledge.

Senior Software Developer @ Spreadex

I was a senior software developer with the sports betting platform team at Spreadex (St Albans, United Kingdom) from June 2016 to December 2017 (1 year 6 months). Under the system’s microservices architecture, I used: Redis, RabbitMQ, WCF, and Oracle on the backend; ASP.NET Web API, WebSocket, Angular, and TypeScript on the frontend; plus Selenium and TFS.

I served as the project lead on three projects (each comprising 1–3 person months) for introducing new business features. In this role, I liaised with the business managers to: refine and concretize the specification; plan and schedule the work involved; lead the development team in the implementation; write up the high-level documentation and deliver presentations on the new behaviour; collaborate with business for testing; incorporate their feedback; and oversee the deployment to production.

I contributed as a full-stack team member on several other projects and technical improvements. Per the team’s agile continuous-delivery workflow, I typically delivered multiple releases to production per week, with the team working on multiple features at a time using branching. I streamlined and optimized the high-performance messaging system, built on Redis and WebSocket, which drove our website, using compiled lambda expressions to selectively serialize properties. I championed the pervasive use of asynchronous programming across our services to alleviate thread pool starvation. I introduced dynamic batching of operations (especially database updates) to improve throughput by increasing granularity during times of heavy load.

I resigned amicably due to my decision to leave the UK because of Brexit.

Senior Software Developer @ Ascent Software

I was a senior software developer with Ascent Software (Luqa, Malta) from April 2014 to January 2016 (1 year 9 months). I was a senior member of two product development teams for financial applications, and the tech lead for a cloud-based reporting solution. I designed system architectures, implemented core components, coached junior members, and liaised with partners and clients. I used SQL Server, Entity Framework, TPL, asynchrony, WPF, WinForms, ASP.NET Web API, TeamCity, Git, and SVN, and participated in the agile development process.

I worked on the Trident suite, a turnkey cash management system for pooled funds, for around ten months. I developed most of the database schema and business logic for bookkeeping and third-party payments, two new major modules released during my time. For the database, I championed the use of table inheritance (TPT) for structure, inline table-valued functions and indexed views for performance, and integrity-checking indexed views for efficient cross-table integrity constraints. I optimized the performance of some of the most taxing queries by multiple orders of magnitude, bringing their execution time down from minutes to sub-second. I improved the responsiveness of the desktop application by introducing asynchrony with the async and await keywords. I wrote T4 templates to automatically generate C# classes from static lookup tables in the database, eliminating hundreds of lines of manually maintained code in the spirit of the DRY principle.

I was the technical lead of a four-person team working on a cloud-based SaaS reporting solution for eight months, re-architecting the inherited system to improve its maintainability, performance, and stability. I reduced the size of the codebase for the data access layer by over 50%, replacing its reliance on ADO.NET and stored procedures by LINQ and Entity Framework. I put forth a redesign of the system’s security mechanisms, proposing transparent row-level security in the database based on auto-generated updatable views, and an automated infrastructure for partitioning tenants into separate databases for better isolation and scalability.

I was consulted by other teams for my expertise in parallelism and SQL query optimization. I voluntarily delivered training sessions to colleagues company-wide on TPL (offering insights on the inner workings of its work-stealing task scheduler), asynchronous programming (explaining how it alleviates thread blocking), and the new features of C# 6.0 upon its release.

I resigned amicably, intending to dedicate a few months to personal programming projects (including my GitHub library and my blog), and then relocate to the UK. I had informed the company of my plans more than five months in advance. After the end of my employment, I continued to provide handover sessions to my new replacement on a casual basis in January 2016.

Software Developer @ GFI Software

I was a software developer with GFI Software (San Ġwann, Malta) from May 2011 to August 2012 (1 year 3 months). I was a member of the product engineering team for GFI MailArchiver, an email archiving solution for small- to medium-sized businesses, used by thousands of customers worldwide. I used WPF, WCF, TPL, Add-in Express, and SVN, and participated in the Scrum development process.

I contributed several modules for upcoming releases of the product:

  • I studied the IMAP standard (RFC 3501) and custom-built an IMAP client to download emails from Microsoft Exchange and Gmail.
  • I lent my expertise in parallelism to assist with the development of an IMAP server, which we stress-tested to scale to thousands of concurrent users.
  • I designed and implemented the GFI MailArchiver Outlook Addon, which permitted users to archive emails and files to our server. I integrated with Microsoft Outlook using Add-in Express. Through this component, I introduced the team to WCF as an SOA-enabling technology.
  • I developed a WPF library to visually represent email communication patterns between users, as appearing in the Communications Flow Report (see sample report) of the MailInsights tool. I spontaneously came up with the custom-designed elliptical-layout algorithm, and it ended up being preferred by the product owner over off-the-shelf visualisation packages.
  • I implemented a WPF tool that permitted developers to view, filter, and search the company’s custom log files. I optimized this desktop application for high performance on large datasets, employing asynchrony and multithreading (on background threads) to load, parse, and filter thousands of rows per second from multiple live log files.

I resigned amicably to pursue my full-time Master’s in Edinburgh, having informed the company of my intentions before commencing my employment.

Software Developer @ Atlas Insurance

My first permanent role was as a software developer at Atlas Insurance (Ta’ Xbiex, Malta) from April 2009 to April 2011 (2 years).

I was the lead developer of the document management system, an ambitious two-year company-wide project that empowered the company’s transition to a paperless office. I designed its system architecture and implemented most of its components across all tiers. I used WPF, WCF, SQL Server, LINQ to SQL, Add-in Express, and evolutionary prototyping.

I was involved by my supervisors in the full systems development life cycle from the outset, regularly meeting with the business managers (from the other departments) to evaluate their workflows and needs, delivering demonstrations and supporting the business users in learning how to use the system, and continually improving it based on their feedback and emerging requirements. I championed evolutionary prototyping as the development process, an approach that was enthusiastically received by the business users. I was officially promoted to project leader (under my managers’ supervision) following the success of the system’s deployment in several departments.

I was also the core developer of the backend services for online motor insurance renewals, a four-month project that served as the company’s first online service developed entirely in-house (see Times of Malta article). I wrote a reusable module for integrating with the third-party payment gateway to process card payments.

I resigned amicably, following the completion of my main project, to pursue new opportunities in product engineering, having given the company more than a year’s advance notice.

Professional Experience (short-term)

Teaching Assistant @ University of Malta

I was a teaching assistant on a casual basis with the Department of Computer Science, University of Malta (Msida), from October 2013 to January 2014 (3 months). I delivered example sessions and tutorials for “Mathematics of Discrete Structures” (CPS1002) to a class of 89 first-year undergraduate students.

Research Support Officer @ University of Malta

I was a research support officer on a part-time basis with the University of Malta (Msida) in October–November 2013 (5 weeks). I prototyped a framework for a legal contract analysis support system, which incorporated a three-tier service-oriented architecture and Microsoft Word integration.

Research Intern @ Microsoft Research

I interned with Microsoft Research India (Bangalore) in July–October 2008 (16 weeks). I developed a software prototype that assists teachers in using a computer plus projector for whole-classroom instruction, and evolved it based on the team’s observations and the teachers’ feedback following real-life deployments. I created a webpage to describe our project, “Computers for Whole-Classroom Instruction in Developing Region Schools”.

Education

MSc Computer Science @ University of Edinburgh

I studied for a Master of Science in Computer Science postgraduate degree at the University of Edinburgh in 2012–2013. My specialist area was Computer Systems, Software Engineering & High-Performance Computing. This was a taught full-time 12-month degree covering theoretical and practical aspects, intended to prepare students both for Ph.D. study and for careers in the software industry. I was awarded a STEPS Scholarship from Malta as the top-ranking applicant in the ICT Priority Area for the 8th Call.

My degree consisted of eight selected taught courses, all appertaining to my specialist area, and three mandatory research-oriented courses. All courses were SCQF Level 11 (Master’s degree level).

My MSc Project was titled “Scheduling Task-Parallel Programs in a Multiprogram Workload” (see dissertation). I investigated and devised techniques for optimizing the performance of parallel programs running concurrently on a manycore machine. Building on the TPL task infrastructure of the .NET Framework, I developed a novel extension to the work-stealing task-scheduling algorithm for handling multiprogram workloads. Our scheduler infers each parallel program’s respective scalability, and partitions the machine’s processor cores among the said programs accordingly. Using a 64-core machine, I experimentally demonstrated that, for low- to moderate-scalability programs, our multiprogram scheduler can achieve modest improvements over mainstream thread and task schedulers. Technical readers will likely be most interested in the “Parallel Abstractions” section, the “Skeleton Designs” chapter (which includes C# and OOP discussions), and the “Scheduler Designs” chapter (which presents our task-scheduling algorithm).

I graduated with Distinction in November 2013; my overall grade average was 91%. During the graduation ceremony, I was awarded the 2013 Informatics Prize for MSc Computer Science, for obtaining the highest overall mark from the graduating class (cohort: 64). For a summary of my academic experience during this degree, refer to my article, “Going Parallel in Edinburgh”.

BSc IT (Hons) @ University of Malta

I studied for a Bachelor of Science in Information Technology (Honours) at the University of Malta in 2004–2008. The degree was a taught full-time four-year programme. I specialized in the Computer Science stream, which included an Artificial Intelligence component.

My Final Year Project was titled “Parallel Processing over a Peer-to-Peer Network” (see six-page paper). I designed and prototyped a parallel processing framework that distributes user-defined tasks over a peer-to-peer network. With a utilitarian vision of making supercomputing power available to non-specialist developers, I sought to develop a self-optimizing framework that could transparently deploy any submitted tasks onto the mesh of participants whilst ensuring fault tolerance. The prototype was implemented using the .NET Framework, making extensive use of multithreading and WCF Peer Channel.

I graduated with First-Class Honours in December 2008. My weighted overall grade average across the four years was 90%, achieving 95% in my FYP. I was selected by the Faculty of ICT as the “most meritorious student” within the course group (cohort: 50), to be ceremoniously robed during the graduation ceremony. I was also one of the top three students to receive the Dean’s List Award for “outstanding performance” during the final academic year of my degree (being the first time such awards were held).

Matriculation and Secondary Education Certificate

The MATSEC Examinations Board is the Maltese authority responsible for setting and administering examinations at levels comparable to the GCSE and GCE in the UK.

I was awarded the Matriculation Certificate with overall grade A in 2004. My Advanced Level subjects were Pure Mathematics and Physics; my Intermediate Level subjects were Systems of Knowledge, English, Philosophy, and Computing. I was formally congratulated by the MATSEC Board for being the only candidate from the 2004 examinations session to pass all six subjects with Grade A. (The session cohort was 2,233 candidates.)

I was awarded an Advanced Level Certificate for Accounting as an individual subject in 2003.

I was awarded the Secondary Education Certificate in 2002. My Ordinary Level subjects were Maltese, Religious Knowledge, English Language, English Literature, Mathematics, Physics, French, Accounting, Computer Studies, and Chemistry. I was formally congratulated by the MATSEC Board for passing all ten subjects with Grade 1 (the highest). I was awarded the Anna Muscat Azzopardi prize for obtaining the highest number of marks in Maltese.

Personal Achievements

Online Contributions

I work on personal projects and other engagements in my spare time and occasional sabbaticals. I use “Douglas Williams” as alias for most of my online contributions.

I contribute on Stack Overflow as Douglas, mainly answering questions under the C# and .NET tags, having gained a reputation of over 50,000 so far (currently the third-highest from Malta). Globally, I am the 204th user to receive the C# gold badge; 133rd for .NET gold; and 21st for TPL bronze (see rankings).

I maintain the DogmaMix.Core project on GitHub as a library providing additional general-purpose functionality, utility classes, and extension methods for the .NET Framework. This project, XML-documented and unit-tested, is intended to be of production-grade quality.

I occasionally publish technical articles on .NET Framework topics to my personal blog. I custom-built the rudimentary CMS that hosts the blog as an exercise in ASP.NET MVC 5 and responsive web design.

I developed Maltese Diacritics, an online tool for automatically adding diacritics to Maltese texts. The functionality is exposed as a public WCF service, and consumed through jQuery AJAX calls from the browser. Earlier, I developed the MIME Headers Decoder, an online decoder for RFC 2047, using the same technique of consuming a WCF service through AJAX.

ICTSA Programming Competition

I won the industry category of the ICTSA Programming Competition: in the 2010 Edition as the sole member of the Atlas team (see Times of Malta article); in the 2011 Edition as the team leader of the four-member Atlas team (see press release); and in the 2012 Edition as the team leader of the two-member GFI team (see Times of Malta article).

I contributed to the organization of the 2013 and 2014 Editions as a member of the judging panel. I implemented the scoring and visualization tools, including an interactive HTML5 multithreaded video player for our custom video format, and authored the Q&A.

Microsoft Imagine Cup

I participated in the Software Design competition of the Microsoft Imagine Cup 2007 as a member of the team Kablujen Digerati. Our system, KIKI, was designed as a platform for deploying educational software through an extensible architecture, providing inherent support for MultiPoint functionality, inter-computer communication, user identification, and progress tracking. Retrospectively, the system could be considered an early form of PaaS for hosted application developers and SaaS for schools.

We succeeded in winning the University of Malta internal contest, the Maltese national contest, and the East Mediterranean regional contest of the competition, thereby proceeding to the Worldwide Finals in Seoul, South Korea (see Times of Malta article and special report). We were selected as the winners of the MultiPoint competition, organised by Microsoft Research India, and awarded a 16-week internship with Microsoft in Bangalore (as described above).

Young Enterprise

I held the position of executive secretary within the student company “Mercury” in the 2002–2003 edition of the Young Enterprise experience. Our product was an energy-efficient LED keychain-sized torch. We won first place in the “Best Use of Technology” award and third place in the “Best Product” award in the national final competition (see Times of Malta article).

Patents and Publications

Miscellaneous

I have a driving licence for category B (motor vehicles), issued in 2005 by the Malta Transport Authority and valid throughout the EU.

Recreational Interests

I enjoy embarking on adventures and exploring new cultures. I lived for 1½ years in St Albans (near London) whilst working for Spreadex, and in Edinburgh for a year whilst studying for my Master’s. I visited 15 European countries during a 15-day road trip with a friend in 2010, and travelled solo around India for 19 days in 2008, making new friends at the places where I stayed.

I participate in countryside walks organized by the Malta Youth Ramblers, aimed to encourage a healthy lifestyle and an appreciation of nature. I was a member of the Fgura Scout Group in 1995–2003, winning the Best Cub award in 1995, and later serving as the assistant patrol leader of the lion patrol. I play chess, having been a member of the Malta Chess Federation in 1999–2002. I competed in chess tournaments, winning the Best U/14 award of the Junior Championship 1999 and the overall award for the Students New Year Tournament 2000 (winning all nine games played). I formed part of the four-member De La Salle school team, together winning the 2001 Interschools Teams Tournament from among 10 competing teams, and placing second in 2002. Today, I occasionally play tennis, table tennis, and squash.