Disclosure: On this site you won’t find specific advice on “how to call function xyz()”. Interpreting C++ ARM and #pragma dwim is also out of scope.

We’re treating our readers as intelligent beings who can use Google and/or StackOverflow, where all such specific questions were answered more than once.

What you will find is opinions, more opinions, and even more opinions on all the aspects of software development - and with a large chunk of them based on real-world experience too.

Your mileage may vary. Batteries not included.

 

Production Crashes. Post-factum Debugging. Logging. Replayable Deterministic Re(Actors)

Quote: “I’ve seen game companies with hundreds of thousands of dollars lost per hour of unplanned server downtime.”
Another Quote: “deterministic debugging is by far the best thing I have seen for production debugging.”
[]

My Personal Take on Testing (including Unit Testing and (A)TDD/BDD)

Quote: “BTW, I don’t want to say that unit testing is pointless”
Another Quote: “I am arguing that changing design to enable testing should be avoided.”
[]

(Almost-)Zero-Additional-Latency UDP-over-TCP

Quote: “we realize that for some of the Clients – UDP just doesn’t work because of some weird firewall between Client and Server”
Another Quote: “there is nothing to block us (so head-of-line blocking doesn’t apply)”
[]

TCP Peculiarities as Applied to Games, Part II

Quote: “Nagle’s algorithm aims to deal with those [CENSORED] developers who’re trying to send data over TCP in really small chunks (like 1 byte each time)”
Another Quote: “it seems that “proportional rate reduction” (PRR, reportedly used by Linux kernels by default starting from 3.2) performs for gaming purposes a little bit better than the alternatives”
[]

TCP Peculiarities for Games, part 1

Quote: “the best we can hope when using a single TCP connection over 5%-loss channel – is having 1.5-second “lag spike” every 5 or so minutes, and a 3-second “lag spike” every 2 hours.”
Another Quote: “we may already have the-information-we-need on the receiving host – but this information is hidden from us by layers of abstraction on receiving side”
[]

Client: Installer & Auto-Updates

Quote: “Pretty much whatever-we-do, there will be a certain percentage of players which are trying to run an obsolete version of the Client forever-and-ever”
Another Quote: “It is very important to keep updater transaction-oriented.”
[]

Some Big-Os are Bigger Than Others

Quote: “Strictly speaking, for real-world computers, every algorithm which completes in a finite time can be said to be O(1)
Another Quote: “now the difference because of unfortunate ‘jumps’ over (uncached at the time) memory can lead to a 100x+ (!) performance difference. However, it is still O(1) and is rarely taken into account during performance analysis”
[]