report: final touch ups
This commit is contained in:
parent
97643ad609
commit
7f22b3c337
202
report.md
202
report.md
|
@ -1,4 +1,4 @@
|
||||||
# Exec Sum
|
# Executive Summary
|
||||||
|
|
||||||
When making my decision to major in Image Processing and Image Synthesis, my
|
When making my decision to major in Image Processing and Image Synthesis, my
|
||||||
main motivator was my growing curiosity for high performance programming, as I
|
main motivator was my growing curiosity for high performance programming, as I
|
||||||
|
@ -11,7 +11,7 @@ those interests.
|
||||||
When the opportunity arose to work for IMC, a leading firm in the world of
|
When the opportunity arose to work for IMC, a leading firm in the world of
|
||||||
*market-making*, I jumped at the chance to apply to them for my internship. When
|
*market-making*, I jumped at the chance to apply to them for my internship. When
|
||||||
asked for the kind of work I wanted to do during that time, I highlighted my
|
asked for the kind of work I wanted to do during that time, I highlighted my
|
||||||
interests in performance, which lead to the subject of writing a benchmark
|
interest in performance, which led to the subject of writing a benchmark
|
||||||
framework for their new exchange connectivity layer, currently in the process of
|
framework for their new exchange connectivity layer, currently in the process of
|
||||||
being created and deployed.\
|
being created and deployed.\
|
||||||
This felt like the perfect subject to learn more about finance, a field I had
|
This felt like the perfect subject to learn more about finance, a field I had
|
||||||
|
@ -33,7 +33,7 @@ framework that could be used to measure the performance of such a gateway. To do
|
||||||
so, we must be able to instrument one under various scenarios meant to mirror
|
so, we must be able to instrument one under various scenarios meant to mirror
|
||||||
real-life conditions, or exercise edge-cases.
|
real-life conditions, or exercise edge-cases.
|
||||||
|
|
||||||
This lead me to first get acquainted with the components that go into running
|
This led me to first get acquainted with the components that go into running
|
||||||
the gateway, and what is necessary on the client side to make use of it through
|
the gateway, and what is necessary on the client side to make use of it through
|
||||||
the *Execution API*, which is in the interface exposed to downstream consumers
|
the *Execution API*, which is in the interface exposed to downstream consumers
|
||||||
of the gateway: the trading algorithms.\
|
of the gateway: the trading algorithms.\
|
||||||
|
@ -67,17 +67,17 @@ generate specific scenarios to test its behaviour. This allowed me to reuse most
|
||||||
of the code what I had written for the benchmark, and apply it to writing the
|
of the code what I had written for the benchmark, and apply it to writing the
|
||||||
tests.\
|
tests.\
|
||||||
The need for reliable tests meant that I had to do a lot of ground work to
|
The need for reliable tests meant that I had to do a lot of ground work to
|
||||||
ensure that they were not flaky, this is probably the part that took longest in
|
ensure that they were not flaky, this is probably the part that took the longest
|
||||||
the process, with some deep investigations to understand some subtle bugs and
|
in the process, with some deep investigations to understand some subtle bugs and
|
||||||
behaviours that were exposed by the new tests I was attempting to integrate.
|
behaviours that were exposed by the new tests I was attempting to integrate.
|
||||||
|
|
||||||
Towards the end of my internship, I presented the work I did on the framework to
|
Towards the end of my internship, I presented the work I did on the framework to
|
||||||
other developers in the execution teams. This was in part to showcase the work
|
other developers in the execution teams. This was in part to showcase the work
|
||||||
being done by the *Global Execution* team, and to participate in the regular
|
being done by the *Global Execution* team, and also to participate in the
|
||||||
knowledge sharing that happens at IMC.
|
regular knowledge sharing that happens at IMC.
|
||||||
|
|
||||||
Joining a company during the COVID period of quarantines, working-from-home, and
|
Joining a company during the COVID period of quarantines, working-from-home, and
|
||||||
the relatively low amount of face-to-face contact high-lighted the need for
|
the relatively low amount of face-to-face contact highlighted the need for
|
||||||
efficient ways of communicating with my colleagues. Being part of a productive,
|
efficient ways of communicating with my colleagues. Being part of a productive,
|
||||||
highly driven team has been a pleasure.
|
highly driven team has been a pleasure.
|
||||||
|
|
||||||
|
@ -90,9 +90,9 @@ a software engineer, and the impact of my studies at EPITA.
|
||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
# Thanks and acknowledgements
|
# Acknowledgements
|
||||||
|
|
||||||
First off, I would like to thank Jelle Wissink, an engineer from the Global
|
Firstly, I would like to thank Jelle Wissink, an engineer from the Global
|
||||||
Execution team at IMC. As my mentor, he helped me get acquainted with the
|
Execution team at IMC. As my mentor, he helped me get acquainted with the
|
||||||
technologies used at IMC, guided my explorations of the problems I tackled, and
|
technologies used at IMC, guided my explorations of the problems I tackled, and
|
||||||
was of great help to solve problems I encountered during my internship. I would
|
was of great help to solve problems I encountered during my internship. I would
|
||||||
|
@ -129,8 +129,8 @@ and my girlfriend Sarah for her unwavering support.
|
||||||
My internship is about benchmarking the new service being used at IMC for
|
My internship is about benchmarking the new service being used at IMC for
|
||||||
connecting to and communicating with exchanges.
|
connecting to and communicating with exchanges.
|
||||||
|
|
||||||
IMC is a technology-driven trading company, specializing in market making on
|
IMC is a technology-driven trading company, specializing in market-making on
|
||||||
various exchanges world-wide. Due to this position, they strive for continuous
|
various exchanges worldwide. Due to this position, they strive for continuous
|
||||||
improvement by making use of technology. And in particular, they have to pay
|
improvement by making use of technology. And in particular, they have to pay
|
||||||
special attention to the performance of their trading system across the whole
|
special attention to the performance of their trading system across the whole
|
||||||
infrastructure.
|
infrastructure.
|
||||||
|
@ -186,7 +186,7 @@ the connection between internal trading services and external exchanges' own
|
||||||
infrastructure and services. It is at this layer that exchange-specific
|
infrastructure and services. It is at this layer that exchange-specific
|
||||||
protocols are normalised into IMC's own protocol messages, and vice versa.
|
protocols are normalised into IMC's own protocol messages, and vice versa.
|
||||||
|
|
||||||
Here is the list of tasks that I am expected to have accomplished during this
|
Here is the list of tasks that I was expected to complete during this
|
||||||
internship:
|
internship:
|
||||||
|
|
||||||
* Become familiar with the service.
|
* Become familiar with the service.
|
||||||
|
@ -194,21 +194,21 @@ internship:
|
||||||
* Benchmark the system under the load.
|
* Benchmark the system under the load.
|
||||||
* Analyze the measurements.
|
* Analyze the measurements.
|
||||||
|
|
||||||
This kind of project is exactly the reason that I was interested in working in
|
This kind of project is exactly the reason why I was interested in working in
|
||||||
finance and trading. It is a field that is focused on achieving the highest
|
finance and trading. It is a field that is focused on achieving the highest
|
||||||
performance possible, because being faster is directly tied with making more
|
performance possible, because being faster is directly tied with making more
|
||||||
trades and results in more profits.
|
trades and results in more profits.
|
||||||
|
|
||||||
Because I expressed this personal interest for working on high performance
|
The project was therefore perfectly aligned with my interests and skills that I
|
||||||
systems and related subjects, I was given this internship project to work on.
|
already have, or hoped to work on further.
|
||||||
|
|
||||||
# Context of the subject
|
# Context of the subject
|
||||||
|
|
||||||
## Company trade
|
## Company trade
|
||||||
|
|
||||||
IMC, as its name suggests, is a market maker. It is specialised in providing
|
IMC, as its name suggests, is a market maker. It is specialised in providing
|
||||||
liquidity in the market by quoting both sides of the market, and profit off the
|
liquidity in the market by quoting both sides of the market, and profiting off
|
||||||
trades they make while providing this service.
|
the trades they make while providing this service.
|
||||||
|
|
||||||
One key ingredient to this business is latency: due to the competitive nature of
|
One key ingredient to this business is latency: due to the competitive nature of
|
||||||
the market, we must process the incoming data and execute orders fast enough not
|
the market, we must process the incoming data and execute orders fast enough not
|
||||||
|
@ -223,8 +223,8 @@ lost opportunities, therefore less profits.
|
||||||
It must also take on other duties, due to it being closer to the exchange than
|
It must also take on other duties, due to it being closer to the exchange than
|
||||||
the rest of the infrastructure. For example, a trading strategy can register
|
the rest of the infrastructure. For example, a trading strategy can register
|
||||||
conditional orders with this service: it must monitor the price of product A and
|
conditional orders with this service: it must monitor the price of product A and
|
||||||
X, if product A's cost rise over X's, then it must start selling product B at
|
X, and if product A's cost rise over X's, then it must start selling product B
|
||||||
price Y.
|
at price Y.
|
||||||
|
|
||||||
## Strategy
|
## Strategy
|
||||||
|
|
||||||
|
@ -241,8 +241,8 @@ ensure this is to measure it.
|
||||||
With that context, let's review my expected tasks once more, and expand on each
|
With that context, let's review my expected tasks once more, and expand on each
|
||||||
of them to get the roadmap:
|
of them to get the roadmap:
|
||||||
|
|
||||||
* Become familiar with the service: before writing the code for the benchmark I
|
* Become familiar with the service: before writing the code for the benchmark, I
|
||||||
must first understand what goes into the process of a trade at IMC, what is
|
first needed to understand what goes into the process of a trade at IMC, what is
|
||||||
needed from the gateway and from the clients in order to run them and execute
|
needed from the gateway and from the clients in order to run them and execute
|
||||||
orders. There is a lot of code at IMC: having different teams working at the
|
orders. There is a lot of code at IMC: having different teams working at the
|
||||||
same time on different trading service results in a lot of churn. The global
|
same time on different trading service results in a lot of churn. The global
|
||||||
|
@ -251,20 +251,20 @@ provided to the rest of the IMC workforce. The global execution gateway is one
|
||||||
such project, aiming to consolidate all trading strategies under one singular
|
such project, aiming to consolidate all trading strategies under one singular
|
||||||
method to send orders to their exchanges.
|
method to send orders to their exchanges.
|
||||||
|
|
||||||
* Write a dummy load generator: we want to send orders under different
|
* Write a dummy load generator: we wanted to send orders under different
|
||||||
conditions in order to run multiple scenarios which can model varying cases of
|
conditions in order to run multiple scenarios which can model varying cases of
|
||||||
execution. Having more data for varying corner cases can make us more confident
|
execution. Having more data for varying corner cases can make us more confident
|
||||||
of the robustness and efficiency of the service. This is especially needed
|
of the robustness and efficiency of the service. This was especially needed
|
||||||
becaue of the various roles that the gateway must fulfill: not only must it act
|
because of the various roles that the gateway must fulfill: not only must it act
|
||||||
as a bridge for the communication between exchanges and traders, but also as an
|
as a bridge for the communication between exchanges and traders, but also as an
|
||||||
order executor. All those cases must be accounted for when writing the different
|
order executor. All those cases must be accounted for when writing the different
|
||||||
scenarios.
|
scenarios.
|
||||||
|
|
||||||
* Benchmark the system under the load: once we can run those scenarios smoothly
|
* Benchmark the system under the load: once we could run those scenarios
|
||||||
we can start taking multiple measurements. The main one that IMC is interested
|
smoothly we needed to start taking multiple measurements. The main one that IMC
|
||||||
in is wire-to-wire latency (abbreviated W2W): the time it takes for a trade
|
is interested in is wire-to-wire latency (abbreviated W2W): the time it takes
|
||||||
to go from a trading strategy to an exchange. The lower this time, the more
|
for a trade to go from a trading strategy to an exchange. The lower this time
|
||||||
occasions there are to make good trades.
|
is, the more occasions there are to make good trades.
|
||||||
|
|
||||||
* Analyze the measurements: the global execution team has some initial
|
* Analyze the measurements: the global execution team has some initial
|
||||||
expectations of the gateway's performance. A divergence on that part could mean
|
expectations of the gateway's performance. A divergence on that part could mean
|
||||||
|
@ -275,7 +275,7 @@ the timing distribution: the smaller it is the better. Having a low execution
|
||||||
time is necessary, however consistent timing also plays an important role to
|
time is necessary, however consistent timing also plays an important role to
|
||||||
make sure that an order will actually be executed by the exchange reliably.
|
make sure that an order will actually be executed by the exchange reliably.
|
||||||
|
|
||||||
## Internship positioning amongst company works
|
## Internship positioning among company works
|
||||||
|
|
||||||
My work was focused on providing a framework to instrument gateways under
|
My work was focused on providing a framework to instrument gateways under
|
||||||
different scenarios.
|
different scenarios.
|
||||||
|
@ -304,7 +304,7 @@ IMC, understanding the context surrounding the team I am working in, and
|
||||||
learning about the different services that are currently being used in their
|
learning about the different services that are currently being used in their
|
||||||
infrastructure. I had to write a first proof of concept to investigate what, if
|
infrastructure. I had to write a first proof of concept to investigate what, if
|
||||||
any, dependencies would be needed to execute the gateway as a stand-alone system
|
any, dependencies would be needed to execute the gateway as a stand-alone system
|
||||||
for the benchmark. This has allowed me to get acquainted with their development
|
for the benchmark. This allowed me to get acquainted with their development
|
||||||
process.
|
process.
|
||||||
|
|
||||||
After writing that proof of concept, we were now certain that the benchmark was
|
After writing that proof of concept, we were now certain that the benchmark was
|
||||||
|
@ -312,13 +312,13 @@ a feasible project, with very few actual dependencies to be run. The low amount
|
||||||
of external dependencies meant fewer moving parts for the benchmarks, and a
|
of external dependencies meant fewer moving parts for the benchmarks, and a
|
||||||
lower amount of components to setup.\
|
lower amount of components to setup.\
|
||||||
For the ones that were needed, I had to write small modules that would model
|
For the ones that were needed, I had to write small modules that would model
|
||||||
their behaviour, and be configured as part of the framework to provide them as
|
their behaviour, and be configured as part of the framework, to provide them as
|
||||||
input to the gateway under instrumentation.
|
input to the gateway under instrumentation.
|
||||||
|
|
||||||
## The framework
|
## The framework
|
||||||
|
|
||||||
With the exploratory phase done, writing the framework was my next task. The
|
With the exploratory phase done, writing the framework was my next task. The
|
||||||
first thing to do was ensuring I could run all the necessary component locally,
|
first thing to do was ensuring I could run all the necessary components locally,
|
||||||
not accounting for correct behaviour. Once I got the client communicating to the
|
not accounting for correct behaviour. Once I got the client communicating to the
|
||||||
gateway, and the gateway connected with the fake exchange, I wrote a few basic
|
gateway, and the gateway connected with the fake exchange, I wrote a few basic
|
||||||
scenarios to ensure that everything was working correctly and reliably.
|
scenarios to ensure that everything was working correctly and reliably.
|
||||||
|
@ -332,10 +332,10 @@ testing of regressions during the testing pipeline that are run before merging
|
||||||
patches into the code base.
|
patches into the code base.
|
||||||
|
|
||||||
Once this was done, further modifications were done to allow the benchmark to be
|
Once this was done, further modifications were done to allow the benchmark to be
|
||||||
run using remote machines, with a lab set-up specially made to replicate the
|
run using remote machines, with a lab setup specially made to replicate the
|
||||||
production environment in a sand-boxed way. This was done in a way to
|
production environment in a sand-boxed way. This was done in a way to
|
||||||
transparently allow either local or remote runs depending on what is desired,
|
transparently allow either local or remote runs depending on what is desired,
|
||||||
without further modification of either the benchmark scenarios, or the framework
|
without further modification of either the benchmark scenarios or the framework
|
||||||
implementation for each exchange.
|
implementation for each exchange.
|
||||||
|
|
||||||
Under this setup, thanks to a component of the benchmark framework which can be
|
Under this setup, thanks to a component of the benchmark framework which can be
|
||||||
|
@ -366,7 +366,7 @@ Integration pipeline is valuable to avoid regressions.
|
||||||
|
|
||||||
* Some consumers of the *request-based API* in production are going to be in use
|
* Some consumers of the *request-based API* in production are going to be in use
|
||||||
for long periods of time without a possibility for upgrades due to
|
for long periods of time without a possibility for upgrades due to
|
||||||
comformability testing. To avoid any problem in production, it is of the up most
|
conformance testing. To avoid any problem in production, it is of the up most
|
||||||
importance that the *behavior* stays compatible between versions.
|
importance that the *behavior* stays compatible between versions.
|
||||||
|
|
||||||
To that end, I endeavoured to do the necessary modifications to the current test
|
To that end, I endeavoured to do the necessary modifications to the current test
|
||||||
|
@ -389,8 +389,8 @@ level but up to the observable behaviour.
|
||||||
|
|
||||||
## Documenting my work
|
## Documenting my work
|
||||||
|
|
||||||
With that work done, I now need to ensure that the relevant knowledge is shared
|
With that work done, I now needed to ensure that the relevant knowledge is
|
||||||
across the team. This work was two-fold:
|
shared across the team. This work was two-fold:
|
||||||
|
|
||||||
* Do a presentation about the benchmark framework: because it only contains the
|
* Do a presentation about the benchmark framework: because it only contains the
|
||||||
tools necessary as the basis for running benchmarks, other engineers will need
|
tools necessary as the basis for running benchmarks, other engineers will need
|
||||||
|
@ -401,9 +401,9 @@ justified some design decisions.
|
||||||
* How to debug problems in benchmarks and compatibility test runs: due to the
|
* How to debug problems in benchmarks and compatibility test runs: due to the
|
||||||
unconventional setup required to run those, investigating a problem when running
|
unconventional setup required to run those, investigating a problem when running
|
||||||
either of them necessitates specific steps and different approaches. To help
|
either of them necessitates specific steps and different approaches. To help
|
||||||
improve productivity when investigating those, I share how to replicate the test
|
improve productivity when investigating those, I shared how to replicate the
|
||||||
setup in an easily replicable manner, and explain a few of the methods I have
|
test setup in an easily replicable manner, and explained a few of the methods I
|
||||||
used to debug problems I encountered during their development.
|
have used to debug problems I encountered during their development.
|
||||||
|
|
||||||
## Gantt diagram
|
## Gantt diagram
|
||||||
|
|
||||||
|
@ -447,9 +447,9 @@ end note
|
||||||
|
|
||||||
## Delivering a project from scratch to completion
|
## Delivering a project from scratch to completion
|
||||||
|
|
||||||
During the course of my internship, I have had to deliver a product from its
|
During the course of my internship, I had to deliver a product from its first
|
||||||
first *Proof of Concept* to a usable deliverable, going through various
|
*Proof of Concept* to a usable deliverable, going through various iterations
|
||||||
iterations along the way.
|
along the way.
|
||||||
|
|
||||||
This process started with me getting familiar with the IMC code base, coming up
|
This process started with me getting familiar with the IMC code base, coming up
|
||||||
to speed with the tooling in use, some of the knowledge needed to work on the
|
to speed with the tooling in use, some of the knowledge needed to work on the
|
||||||
|
@ -465,7 +465,7 @@ mentor, I could identify the needed dependencies that would to be provided to
|
||||||
the gateway binary in order to instrument it under different scenarios.
|
the gateway binary in order to instrument it under different scenarios.
|
||||||
|
|
||||||
I worked on writing those components in a way that was usable for the benchmark,
|
I worked on writing those components in a way that was usable for the benchmark,
|
||||||
making sure that they were working an tested along the way. One such component
|
making sure that they were working and tested along the way. One such component
|
||||||
was writing a fake version of the RDS that would be populated from the benchmark
|
was writing a fake version of the RDS that would be populated from the benchmark
|
||||||
scenario, which provided the information about financial instruments to the
|
scenario, which provided the information about financial instruments to the
|
||||||
gateway in order to use them in the scenario, e.g: ordering a stock.
|
gateway in order to use them in the scenario, e.g: ordering a stock.
|
||||||
|
@ -473,7 +473,7 @@ gateway in order to use them in the scenario, e.g: ordering a stock.
|
||||||
I went on to write a first version of the benchmark framework for a specific
|
I went on to write a first version of the benchmark framework for a specific
|
||||||
gateway and a specific exchange: this served as the basis for further iteration
|
gateway and a specific exchange: this served as the basis for further iteration
|
||||||
after receiving feedback about my design. Writing a second benchmark for a
|
after receiving feedback about my design. Writing a second benchmark for a
|
||||||
second exchange and gateway lead to more re-design.
|
second exchange and gateway led to more re-design.
|
||||||
|
|
||||||
The basic components of the benchmark framework were useful outside of their
|
The basic components of the benchmark framework were useful outside of their
|
||||||
original intended purposes, as I could reuse them to write the compatibility
|
original intended purposes, as I could reuse them to write the compatibility
|
||||||
|
@ -488,19 +488,19 @@ using gateway binaries. I also gave a presentation at the end of my internship
|
||||||
to demonstrate how to run a benchmark, and explain the main components of the
|
to demonstrate how to run a benchmark, and explain the main components of the
|
||||||
framework.
|
framework.
|
||||||
|
|
||||||
I have delivered a complete, featureful product from scratch to finish, complete
|
I have delivered a complete, featureful product from start to finish, complete
|
||||||
with documentation and demonstration of its use. This is at the heart of our
|
with documentation and demonstration of its use. This is a central goal of our
|
||||||
schooling at EPITA: making us well-rounded engineers that can deliver their work
|
schooling at EPITA: making us well-rounded engineers that can deliver their work
|
||||||
to completion.
|
to completion.
|
||||||
|
|
||||||
## Acquiring new skills and knowledge
|
## Acquiring new skills and knowledge
|
||||||
|
|
||||||
IMC is part of the financial tech sector, taking a position of market-maker on a
|
IMC is part of the financial tech sector, taking a position of market-maker on a
|
||||||
large amount of exchanges world-wide.
|
large amount of exchanges worldwide.
|
||||||
|
|
||||||
The financial sector, even though I was attracted to it by my previous exposure
|
The financial sector, even though I was attracted to it by my previous exposure
|
||||||
from conference sponsors and blog posts from engineers in the sector, was still
|
from conference sponsors and blog posts from engineers in the sector, was still
|
||||||
something I was not familiar with when first joining the company.
|
unfamiliar to me with when first joining the company.
|
||||||
|
|
||||||
There is a large amount of vocabulary and knowledge specific to this industry,
|
There is a large amount of vocabulary and knowledge specific to this industry,
|
||||||
not even to mention the infrastructure and tooling in use at IMC, which while
|
not even to mention the infrastructure and tooling in use at IMC, which while
|
||||||
|
@ -511,21 +511,21 @@ Before starting my internship, I was advised to read a book about high frequency
|
||||||
trading, which gave me some context on how exchanges work, and a few important
|
trading, which gave me some context on how exchanges work, and a few important
|
||||||
words that are part of the financial vocabulary. In addition, I learned about
|
words that are part of the financial vocabulary. In addition, I learned about
|
||||||
IMC's trading infrastructure through a number of presentations that my team lead
|
IMC's trading infrastructure through a number of presentations that my team lead
|
||||||
organised with new hires during the beginning of my internship. This not only
|
organised with new hires during the beginning of my internship. This gave me
|
||||||
gave me more context about what part of the existing infrastructure was aimed to
|
more context about what part of the existing infrastructure was aimed to be
|
||||||
be replaced by the new *Execution Gateway* and the *Execution API*. I also got
|
replaced by the new *Execution Gateway* and the *Execution API*. It also taught
|
||||||
to learn about some of the basics of pricing theory, which underpins our whole
|
me about some of the basics of pricing theory, which underpins our whole
|
||||||
strategy layer to come up with an appropriate valuation for any product we are
|
strategy layer to come up with an appropriate valuation for any product we are
|
||||||
interested in trading.
|
interested in trading.
|
||||||
|
|
||||||
I got to further learn about trading and option theory during a training week
|
I got to further learn about trading and option theory during a training week
|
||||||
organized with a dozen other summer interns: we were taught some of the
|
organized with a dozen other summer interns: we were taught some of the
|
||||||
mathematics that form the basics of valuation reducing risks in trading, the
|
mathematics that form the basics of valuation reducing risks in trading, the
|
||||||
associated vocabulary, and apply them during workshop exercises in trading with
|
associated vocabulary, and applied them during workshop exercises in trading
|
||||||
the other interns.
|
with the other interns.
|
||||||
|
|
||||||
On the technical side, not only did I learn about the software stack in use at
|
On the technical side, not only did I learn about the software stack in use at
|
||||||
IMC, as I worked on more and more parts of the code base I discovered new
|
IMC, but as I worked on more and more parts of the code base I discovered new
|
||||||
tooling put in place to work and debug parts of our stack that are too costly to
|
tooling put in place to work and debug parts of our stack that are too costly to
|
||||||
setup or use on any dev computer. One such solution is the *fullsim* system,
|
setup or use on any dev computer. One such solution is the *fullsim* system,
|
||||||
which allows us to simulate our FPGA engines in software, to allow developers to
|
which allows us to simulate our FPGA engines in software, to allow developers to
|
||||||
|
@ -534,25 +534,24 @@ cards or know how to use them. I also introduced my colleagues to new tools that
|
||||||
they were unaware of, the most prominent being the one I always reach for first
|
they were unaware of, the most prominent being the one I always reach for first
|
||||||
when trying to debug a piece of software: `rr`, which allows one to record a
|
when trying to debug a piece of software: `rr`, which allows one to record a
|
||||||
program's execution and run it under a debugger in a totally deterministic
|
program's execution and run it under a debugger in a totally deterministic
|
||||||
manner: it allows replaying and rewinding execution at will, making it a great
|
manner -- it allows replaying and rewinding execution at will, making it a great
|
||||||
asset when dealing with issues that are sporadic, or require tricky timings like
|
asset when dealing with issues that are sporadic, or require tricky timings like
|
||||||
networked systems.
|
networked systems.
|
||||||
|
|
||||||
IMC encourages knowledge sharing across all teams, it permeates the company
|
IMC encourages knowledge sharing across all teams, it permeates the company
|
||||||
culture, and shows in many ways. An execution engineer is encouraged to learn
|
culture and shows in many ways. An execution engineer is encouraged to learn
|
||||||
about trading, which gives us more context when interacting with traders,
|
about trading, which gives us more context when interacting with traders,
|
||||||
spotting mistakes in new strategies or guiding which features would make sense
|
spotting mistakes in new strategies, or guiding which features would make sense
|
||||||
to write next. Catch-up meetings are organized regularly between teams.
|
to write next. Catch-up meetings are organized regularly between teams.
|
||||||
Presentations are given to teach people about the work that is being
|
Presentations are given to teach people about the work that is being
|
||||||
accomplished to improve every part of our infrastructure, from deployment
|
accomplished to improve every part of our infrastructure, from deployment
|
||||||
tooling, developer productivity, to new strategies or components of our systems.
|
tooling, developer productivity, to new strategies or components of our systems.
|
||||||
|
|
||||||
Thanks to my well-rounded education, not only do I feel comfortable being
|
Thanks to my well-rounded education I felt comfortable being exposed to all this
|
||||||
exposed to all this information. But I have felt confident that I fit in from
|
information. But I also felt confident that I fit in from the start, and could
|
||||||
the start, and could keep pace with the information that was fed to me. I am
|
keep pace with the information that was fed to me. I am able to pick up those
|
||||||
able to pick up those new skills fast, because EPITA taught us the most
|
new skills quickly, because EPITA taught us the most important skill of this
|
||||||
important skill of this trade: I learnt how to learn, and how to flourish while
|
trade: I learnt how to learn, and how to flourish while doing so.
|
||||||
doing so.
|
|
||||||
|
|
||||||
# Illustrated analysis of acquired skills
|
# Illustrated analysis of acquired skills
|
||||||
|
|
||||||
|
@ -574,15 +573,15 @@ We can say that IMC has embraced a more Agile way of delivering new features:
|
||||||
the products are continuously being worked on and improved, the work being
|
the products are continuously being worked on and improved, the work being
|
||||||
organized into a backlog of issues, partitioned into epics. And similarly,
|
organized into a backlog of issues, partitioned into epics. And similarly,
|
||||||
the company culture embraces a few of the processes associated with Agile
|
the company culture embraces a few of the processes associated with Agile
|
||||||
programming. The one has most affected me is the daily stand up, a meeting
|
programming. The one that has most affected me is the daily stand up, a meeting
|
||||||
organized in the morning to interact with the rest of the team, summarising the
|
organized in the morning to interact with the rest of the team, summarising the
|
||||||
work that has been accomplished the day before, and what one wishes to work on
|
work that has been accomplished the day before, and what one wishes to work on
|
||||||
during the day.
|
during the day.
|
||||||
|
|
||||||
During the times of remote-work because of COVID, interactions with the team at
|
During the times of remote work because of COVID, interactions with the team at
|
||||||
large feel more limited than they otherwise would be when working alongside one
|
large feel more limited than they otherwise would be when working alongside one
|
||||||
another at the office. I have learned to communicate better with my colleagues:
|
another at the office. I have learned to communicate better with my colleagues:
|
||||||
explain what I am working on, reaching out to ask questions, and discussing
|
explaining what I am working on, reaching out to ask questions, and discussing
|
||||||
issues with them.
|
issues with them.
|
||||||
|
|
||||||
## Working in a large code base
|
## Working in a large code base
|
||||||
|
@ -600,7 +599,7 @@ Due to that difference, my way of writing software and squashing bugs had to
|
||||||
evolve, from an approach that worked on small programs to one that is more
|
evolve, from an approach that worked on small programs to one that is more
|
||||||
scalable: I could not just dive into a problem head-first, trying to understand
|
scalable: I could not just dive into a problem head-first, trying to understand
|
||||||
everything that happens down to every detail, before being able to fix the
|
everything that happens down to every detail, before being able to fix the
|
||||||
problem. The amount of minutia is too large, it would not be productive to try
|
problem. The amount of minutiae is too large, it would not be productive to try
|
||||||
to derive an understanding of the whole application before starting to work on
|
to derive an understanding of the whole application before starting to work on
|
||||||
it.
|
it.
|
||||||
|
|
||||||
|
@ -615,7 +614,7 @@ important pieces of a puzzle.
|
||||||
|
|
||||||
## Debugging distributed systems
|
## Debugging distributed systems
|
||||||
|
|
||||||
My work specifically centers around running, interacting with, instrumenting,
|
My work specifically centered around running, interacting with, instrumenting,
|
||||||
and observing production binaries for use in testing or benchmarking.
|
and observing production binaries for use in testing or benchmarking.
|
||||||
|
|
||||||
Due to this, and because nobody writes perfect code the first time, I have had
|
Due to this, and because nobody writes perfect code the first time, I have had
|
||||||
|
@ -633,9 +632,9 @@ understanding of the issue.
|
||||||
This iterative process of chipping away at the problem until the issue becomes
|
This iterative process of chipping away at the problem until the issue becomes
|
||||||
self-evident is inherent with working on such systems. One cannot just inspect
|
self-evident is inherent with working on such systems. One cannot just inspect
|
||||||
all the processes at once, and immediately derive what must have happened to
|
all the processes at once, and immediately derive what must have happened to
|
||||||
them. It feels more akin to detective work, with the usual suspect not being Mrs
|
them. It feels more akin to detective work, with the usual suspect not being
|
||||||
Pink in the living room with the chandelier, but instead my own self having
|
Colonel Mustard in the dining room with the wrench, but instead my own self
|
||||||
forgotten to account for an edge case.
|
having forgotten to account for an edge case.
|
||||||
|
|
||||||
# Benefits of the internship
|
# Benefits of the internship
|
||||||
|
|
||||||
|
@ -653,15 +652,15 @@ integration of running the benchmarks with the build system in use at IMC, and
|
||||||
its Continuous Integration pipeline, it can easily be used to monitor the
|
its Continuous Integration pipeline, it can easily be used to monitor the
|
||||||
evolution of performance and watch for regressions. Further down the line, it
|
evolution of performance and watch for regressions. Further down the line, it
|
||||||
can be integrated with the change point detection service that is being
|
can be integrated with the change point detection service that is being
|
||||||
developed in house, to simply contact the relevant people when the system
|
developed in-house, to simply contact the relevant people when the system
|
||||||
detects that a regression has happened: the offending change can be identified
|
detects that a regression has happened: the offending change can be identified
|
||||||
more easily that way. This is key to staying competitive, ensuring the latency
|
more easily that way. This is key to staying competitive, ensuring the latency
|
||||||
of our systems remain as low as possible and do not creep upwards.
|
of our systems remain as low as possible and do not creep upwards.
|
||||||
|
|
||||||
* My work on compatibility testing, which is an important step in avoiding any
|
* My work on compatibility testing, which is an important step in avoiding any
|
||||||
surprising behaviour or downtime in production. Due to the long turnaround time
|
surprising behaviour or downtime in production. Due to the long turnaround time
|
||||||
of upgrades in certain regions, and the cost of lost opportunity for any down
|
of upgrades in certain regions, and the cost of lost opportunity for any
|
||||||
time, minimizing the probability of any problem that could be experienced
|
downtime, minimizing the probability of any problem that could be experienced
|
||||||
results directly in more profits being made.
|
results directly in more profits being made.
|
||||||
|
|
||||||
## Furthering my learning
|
## Furthering my learning
|
||||||
|
@ -671,21 +670,20 @@ and knowledgeable colleagues, and tinker on what constitutes the basic bricks of
|
||||||
IMC's production software.
|
IMC's production software.
|
||||||
|
|
||||||
Working at IMC was my first experience with such a large code base, a dizzying
|
Working at IMC was my first experience with such a large code base, a dizzying
|
||||||
amount of code. It is impossible to wrap you head around *everything* that is
|
amount of code. It is impossible to wrap your head around *everything* that is
|
||||||
happening in a given program. Up until that point I had only encountered school
|
happening in a given program. Up until that point I had only encountered school
|
||||||
projects, of relatively small size and whose behaviour could easily be
|
projects, of relatively small size and whose behaviour could easily be
|
||||||
understood. Dealing with problems by trying to understand everything that is
|
understood. Dealing with problems by trying to understand everything that is
|
||||||
happening in a program is a valid strategy for those. It is not, however, a
|
happening in a program is a valid strategy for those. It is not, however, a
|
||||||
scalable way of working on software, and I needed change my way of thinking
|
scalable way of working on software, and I needed to change my way of thinking
|
||||||
about and dealing with the problems I encountered during my work. To cope with
|
about and dealing with the problems I encountered during my work. To cope with
|
||||||
that, I learned how to better handle problems I encountered by trying to isolate
|
that, isolate the actual source of the problem, instead of trying to understand
|
||||||
the actual source of the problem, instead of trying to understand the whole
|
the whole system around it.
|
||||||
system around it.
|
|
||||||
|
|
||||||
Interacting with the team was a great help in that endeavour. Knowing who to ask
|
Interacting with the team was a great help in that endeavour. Knowing who to ask
|
||||||
questions to, and learning how to ask relevant questions are once again
|
questions to, and learning how to ask relevant questions are once again
|
||||||
essential in achieving productivity in those circumstances. This is doubly so in
|
essential in achieving productivity in those circumstances. This is doubly true
|
||||||
times of remote-working, when turning around and asking your colleague a
|
in times of remote working, when turning around and asking your colleague a
|
||||||
question is not so simple. I had trouble at first to actively use the internal
|
question is not so simple. I had trouble at first to actively use the internal
|
||||||
messaging app to ask questions, and was encouraged to ask questions liberally
|
messaging app to ask questions, and was encouraged to ask questions liberally
|
||||||
instead of staying stuck on my own.
|
instead of staying stuck on my own.
|
||||||
|
@ -695,16 +693,16 @@ instead of staying stuck on my own.
|
||||||
## Education and career objectives
|
## Education and career objectives
|
||||||
|
|
||||||
I chose to major in Image Processing and Image Synthesis for multiple reasons,
|
I chose to major in Image Processing and Image Synthesis for multiple reasons,
|
||||||
most notably I had an interest in high performance programming, and thought that
|
notably my interest in high performance programming, and thought that this major
|
||||||
this major would yield well to it. This proved to be true, although more so due
|
would lend itself well to it. This proved to be true, although more so due to
|
||||||
to applying it to the projects that we were given rather than the courses we
|
applying it to the projects that we were given rather than the courses we were
|
||||||
were taught (except for a few which specifically focused on it).
|
taught (except for a few which specifically focused on it).
|
||||||
|
|
||||||
Through watching conference presentations, I learned about the field of finance
|
Through watching conference presentations, I learned about the field of finance
|
||||||
and thought it would provide interesting challenges that aligned with my
|
and thought it would provide interesting challenges that aligned with my
|
||||||
interests. This motivated my choice to intern at IMC, even though their business
|
interests. This motivated my choice to intern at IMC, even though their business
|
||||||
is far removed from the core teachings of my major. This too, proved to be true,
|
is far removed from the core teachings of my major. This too, proved to be true,
|
||||||
and I'm glad to see my initial hunch panning out the way it did.
|
and I'm glad to see my initial hunch panning out the way it has.
|
||||||
|
|
||||||
## Improving the major
|
## Improving the major
|
||||||
|
|
||||||
|
@ -716,9 +714,9 @@ measure and improve our code can be a necessary part of working in the industry.
|
||||||
The one class that stands out to me as having this issue front and center is the
|
The one class that stands out to me as having this issue front and center is the
|
||||||
GPGPU course, introducing us to massively parallel programming on a graphics
|
GPGPU course, introducing us to massively parallel programming on a graphics
|
||||||
card. However, we were mostly left to our own devices to figure out effective
|
card. However, we were mostly left to our own devices to figure out effective
|
||||||
ways to measure, and analyse those results. Providing more guidance would be a
|
ways to measure and analyse those results. Providing more guidance would be a
|
||||||
productive endeavor, ensuring that the students have been provided with the
|
productive endeavor, ensuring that the students are provided with the correct
|
||||||
correct tool set to deal with those problems.
|
tool set to deal with those problems.
|
||||||
|
|
||||||
## Introspection
|
## Introspection
|
||||||
|
|
||||||
|
@ -726,23 +724,23 @@ Working abroad, with the additional COVID restrictions, is a harsh transition
|
||||||
from the routine of school. However, both the company and the team have made it
|
from the routine of school. However, both the company and the team have made it
|
||||||
easy to adjust.
|
easy to adjust.
|
||||||
|
|
||||||
* The daily stand-up meeting, and weekly retrospective seem more important than
|
* The daily stand-up meeting and weekly retrospective seem more important than
|
||||||
ever when you can potentially not talk to your colleagues for days due to
|
ever when you can potentially not talk to your colleagues for days due to
|
||||||
working-from-home.
|
working-from-home.
|
||||||
|
|
||||||
* IMC is very pro-active in organising regular events for their employees. This
|
* IMC is very proactive in organising regular events for their employees. This
|
||||||
is a great way to feel more engaged during such a period. They also organised a
|
is a great way to feel more engaged during such a period. They also organised a
|
||||||
week of training once the other interns had joined, which created a broader
|
week of training once the other interns had joined, which created a broader
|
||||||
network of relationships in a foreign city.
|
network of relationships in a foreign city.
|
||||||
|
|
||||||
* My mentor encouraged me to ask as many questions as I could when I first
|
* My mentor encouraged me to ask as many questions as I could when I first
|
||||||
started my internship, and I assisted to some presentations which gave
|
started my internship, and I attended to some presentations which gave
|
||||||
additional context about the work being done by the team. This was helpful in
|
additional context about the work being done by the team. This was helpful in
|
||||||
getting over the fact of feeling overwhelmed when first getting acquainted with
|
getting over the fact of feeling overwhelmed when first getting acquainted with
|
||||||
the code and technology being developed and used.
|
the code and technology being developed and used.
|
||||||
|
|
||||||
* The gradual transition to return to office, allowing me to arrange one day a
|
* The gradual transition to return to the office, allowing me to arrange one day
|
||||||
week to work next to my mentor, lead to more one-on-one interaction which feel
|
a week to work next to my mentor, led to more one-on-one interaction which feel
|
||||||
more productive than the usual textual interactions.
|
more productive than the usual textual interactions.
|
||||||
|
|
||||||
## Career evolution
|
## Career evolution
|
||||||
|
@ -792,13 +790,13 @@ International Marketmakers Combinations (IMC) was founded in 1989 in Amsterdam,
|
||||||
by two traders working on the floor of the Amsterdam Equity Options Exchange. At
|
by two traders working on the floor of the Amsterdam Equity Options Exchange. At
|
||||||
the time trading was executed on the exchange floor by traders manually
|
the time trading was executed on the exchange floor by traders manually
|
||||||
calculating the price to buy or sell. IMC was ahead of its time, being among the
|
calculating the price to buy or sell. IMC was ahead of its time, being among the
|
||||||
first to understand the important role that technology and innovation will play
|
first to understand the important role that technology and innovation would play
|
||||||
in the evolution of market making. This innovative culture still drives IMC 30
|
in the evolution of market-making. This innovative culture still drives IMC 30
|
||||||
years later.
|
years later.
|
||||||
|
|
||||||
Since then, they've expanded to multiple continents, with offices operating in
|
Since then, they've expanded to multiple continents, with offices operating in
|
||||||
Chicago, Amsterdam, and Sydney. Its key insight for trading is based on data and
|
Chicago, Amsterdam, and Sydney. Their key insight for trading is based on data
|
||||||
algorithms, it makes use of its execution platform to provide liquidity to
|
and algorithms, making use of their execution platform to provide liquidity to
|
||||||
financial markets globally.
|
financial markets globally.
|
||||||
|
|
||||||
## Results & Comments
|
## Results & Comments
|
||||||
|
|
Loading…
Reference in a new issue