Throughout my studies, I was always drawn to low-level and systems topics. I wanted to understand the whole execution stack, from high-level concepts such as APIs, system design and abstractions all the way down to computer architecture and what actually happens in the silicon. I especially enjoyed courses such as compiler construction, operating systems, databases, networking and low-level systems programming in C/C++.
After my BSc at the University of Athens, I wanted to try research, which led me to the Athena Research Center, where I spent three years as a research associate. I then decided to broaden my knowledge and joined EPFL for an MSc. There I took mostly systems courses, which proved demanding but very rewarding: they let me study these topics in far greater depth. Still, I had never thought much about which career I wanted to pursue. All I knew was that I enjoyed this kind of work, driven purely by curiosity.
Alongside my courses, I continued my research at EPFL’s DIAS Lab (Prof. Anastasia Ailamaki), where I had the chance to work with some great researchers and engineers. It was through conversations with them that I first came across low-latency software engineering and its many applications, from trading systems to game development.
That’s what led me to where I am today: a software engineer at Digital Wave Finance AG, a trading firm in Zug, Switzerland. Day to day, I work on exchange connectivity for venues such as Binance: market data and private streams (orders, wallets, order books), built for low latency and high throughput. A large part of the job is the hot path: profile, benchmark and optimize - minimize cache misses, cross-core communication, data sharing and thread contention, and make packet parsing faster.
What I love about HFT is that it’s one of the few areas in computing where, to get anywhere near the raw power modern hardware offers, you have to reason about the complete execution stack every time you design a system or write code: what the compiler will do with your code (and how to get the most out of what modern compilers can do), how that code interacts with the processor and the memory system, where the operating system can get in the way, the network, everything.