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 once has 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.
https://glebd.com/posts/rss.xml