Client project post-mortem
6 Nov 2025
The 2024–2025 client project at a hedge fund has been pretty intense. I worked with two teams and three C++ code bases, of which one was new, around 1.5 years old, and the others two much more 'mature'. Both teams were excellent. Absolutely fantastic colleagues, very friendly and professional, a pleasure to work with.
Some random thoughts:
- C++23 is really nice.
- Couldn't use modules yet, mainly because of several GCC 14 showstopper bugs. Clang 19 worked fine in a proof-of-concept scenario.
- The non-standard
#pragma oncehas won.
- If you need to program a web server in C++, Drogon is not a bad choice.
- CMake is a terrible mess and everything I learnt about it was against my will. Unfortunately, we are stuck with it.
- Use CMake presets to simplify your life.
- Treat CMake as the source of truth and avoid any complex build scripts.
- Bazel is probably the most capable C++ build system at the moment.
- VSCode as a C++ IDE is pretty good, actually. Never expected to say that.
- Use clangd extension instead of Microsoft IntelliSense.
- Have plenty of RAM.
- Devcontainers can be fiddly, but when they work they are fantastic.
- CLion is great, but
- Devcontainers support was completely broken last time I checked, around September 2025
- Have at least 64GB of RAM.
- Builds have to be isolated.
- A single configuration must build into a single build directory.
- During the build the source tree must not be modified, no files must be added to it outside the build tree, including any generated sources.
- Builds and unit tests have to be fast.
- Don't treat slow regression tests as unit tests.
- Use mold linker which is blazing fast even compared with lld.
- Use ccache with remote backend and distcc.
- Use Clang Build Analyzer to optimise the build.
- Releases must require as few manual steps as possible. Ideally, to release software you should execute a single command.
- It should be quick and easy to release a one-line PR.
- Try not to mix different changes in one PR. That includes formatting and other no-op changes.
- Use clang-format with pre-commit hooks and your editor to keep code tidy and avoid pointless style discussions.
- Kubernetes is great, but requires mad YAML skills.
- Life is so much easier when you don't have to support Windows.
- While AI was being heavily pushed from above, I did not use it. Judging by how other developers used it, I decided I don't want to outsource my thinking to chatbots just yet.