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.
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
One of the hard things is merging code from different versions released to clients.
Encourage and enforce standard file formattion among all the developers.
A Subversion (SVN) pre-commit hook
Use interdiff to diff between diffs
svn blame
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.