← Projects

FPL team optimization app

A Fantasy Premier League team selection tool built in Java.

Dec 12, 2025optimization
JavaMavenSwingOkHttp

GitHub

Background

Fantasy Premier League gives you £100m to buy fifteen players, with rules: two goalkeepers, five defenders, five midfielders, three forwards, and no more than three players from any one club. Each week you pick eleven of those fifteen to start. Every decision is a bet on how many points a player will score in a match that hasn’t happened yet.

This was a team project, and we decided to turn these bets into software. The most interesting part was computing a score for each player, predicting their future performance using historical data.

Decisions

Clean Architecture. Each feature has its own package under use_case with an input boundary, an interactor, and an output boundary. Clean Architecture allows us to work simultaneously.

One model per position. Goalkeepers and forwards score points by entirely different mechanisms: saves and clean sheets versus goals and assists.

Ridge over ordinary least squares. The features are heavily collinear by construction and OLS coefficients under that kind of collinearity swing wildly with small changes in the data. The L2 penalty trades a little bias for a large reduction in variance.