I’ve seen worse!
I’ve seen worse!
Normal software I find is a bit different because things like UI libraries give you a lot of structure already. In game code, you do so many things custom, and performance matters so much (each frame needs to finish around e.g. the 17-millisecond mark) that it's really up to you to apply the necessary discipline
I'm making a custom netcode right now. I started from a blank folder. I had some design decisions worked out before I started, like I wanted udp transport for messages that didn't require responses (ie inputs), an isomorphic client/server simulation and state snapshot diffs and checksum validation. I had an idea what I wanted the syntax of creating a new request to be, but the rest I knew I'd just figure out as I went.
The way everything fits together has taken a lot of refactoring, and I've disregared 3 prototype sim components. I've written a good 40% of the base types twice over to make it all click better. It's kind of sad how few libraries I've found for a fixed point physics simulation. I've been using one I stubbed together and it may end up growing into something permanent if I don't find something better that checks my boxes. That's just the way it goes.
The only way I get top tier code is if I budget time to do controlled burns as I get a crufty feelings. There's never enough time to do it like that the whole way through a project, but I find that if you're aggressive about doing that the first 30% of the way into a thing, you have a good enough core to hang your less elegant ornaments off of and it wont collapse into a tangle.
Another valuable process when writing things from scratch is finding compact archetypal islands that force your systems into a good versatile shape. Something simple like a boids simulation requires you have so much stuff worked out that if you write it first and stir it around and firm up the foundation, you'll build most of the tools you need for many different kinds of games.
Determination can make up for a lot of deficiencies in other areas.
That's a modern wisdom from the last 15-ish years when people started to have good enough internet connections that you can get away with publishing a dozens gigabytes patch on launch day.
In ye olde times, it was prohibitively expensive (or in the case of console ROM cartridges, impossible) to distribute patches, so projects were usually planned with plenty of buffer time and plenty human testers. These days it's rush to not collide with the releases of other AAA studios, and human paid-for testers have been replaced by free (or, sometimes, paying) early-access players.