#1 - Shalom Craimer Architect at Tradigo (Fluent Trading Technologies)

download mp3

Shalom Craimer

Background of Shalom

Shalom is Software Architect in charge of all the design decisions in the project. He is also responsible for improving code quality internally. Improving velocity (faster trnaround). Better tools for developers so they won't waste time on things the computer could do for them.

He works at Tradigo aka. Fluent Trading Technologies

Their product is a high performance, low latency trading applications written in C++.

It is packages and sold both as a a library and provided as a service through a TCP/IP proxying server.

Speed of compilation

4 years ago the compile time of the product was about 20 minutes. Compare to that the Linux kernel that took only 5 minutes to compile. Today the project that already has 4 times the lines of code, takes only 20 seconds. xkcd: compiling Compile time speedup was achieved by moving from hierarchical and recursive Makefiles to a monolithic single Makefile for the whole project which can build proper dependancy tree.

Short compile time means you don't have to break your chain of thought when developing.

Shorter iterations mean that you are less afraid of changing.

Code formatting standards

Encourage and enforce standard file formattion among all the developers. Breaking the "svn blame" command makes it hard to find out who has domain knowledge on a certain part of the code.

Made it easy to follow the rules of the formatting by having the commit hook tell the user what do they need to do in order to get their change accepted. Tell them "what to do".

Had several meetings to decide what should be the common style. Even if that was not the choice by everyone. After a while most people got used to this new style.

Set up a keyboard shortcut for every editor used in the company to run a scrip that will do the formatting. (vim, emacs, Microsoft Visual Studio)

Branches

Most clients use the main version, but sometimes clients come up with urgent issues and then they get a special version with only that issue.

Only have branches for long-term development (anything more than 3 days of ) Version number can have up to 5 parts: 1.2.3.4.5

DevOps

Nagios for monitoring and a bunch of alarm mechanism.

The DevOps team can build their own release using the Jenkins-based build system.

The clients are banks used to much longer release cycles. The possible benefit for them for upgrading is nowhere near the possible cost of a failure. So they prefer not to upgrade.

FIX protocol

Recommended tools

Google test and Google Mock

The application usually consumes 5-15 Gb RAM. Running it with a mock reduces it to a few kBytes.

Worse Than Failure

LibTooling part of Clang which has a library the Clang Address Sanitizer that acts as Valgrind and a bunch of other sanitizers.

The Compiler Explorer

Slack for C++