Since then, I've been doing professional software development (first backend and now full stack) but never revisited game development.
In the time that has passed, games have obviously evolved a LOT, in terms of game engine sophistication and availability, types of games ("game metagame"?), and expectations of games. It seems that more indie game studios have appeared and done well.
My question is two-fold:
1. What is the state of the art for indie game development right now? If I wanted to make a game, what should I do, and what libraries or frameworks are absolutely standard?
2. What are common problems in game development that are not common in other verticals of software development? I'm imagining things like camera angles or multiplayer networking.
Sure making a website or app you have to consider frontend + backend, but with game development there are many parts that you have to spend time on (or at least make thoughtful decisions to de-prioritize). 3D modeling and shaders or 2D graphics and sprites, physics, game logic, sound, networking, serialization / persistence, character animations, story, particles / fx, lighting and post-processing, music...you can find all these different areas you may want or need to spend time with. For a AAA game there are entire teams and functions that spend years on just one chunk of this. Teams and budgets are more like movie budgets than app or website budgets for a reason. Sticking to 2D can help a lot. As can sticking to singleplayer. As can starting with a simple and well-trodden genre. To create Tetris you obviously don't need all of these, but it's easy to come up with an idea that seems achievable at first glance to a novice but quickly realize you underestimated the project even dramatically more than web or mobile app or desktop app developers often do because there are yet more components that take real hours of work with games.
RE: engines and technologies, you have to determine if you want to create a 2D or 3D game, if networking / multiplayer matters, what platform you are targeting, and a few other things before you choose an engine.
For example, if you write a game for NES/Famicom, then it is likely to run on many computers with many operating systems, likely supports user-definable key bindings, volume controls, possibly multiplayer by internet, you do not need to implement any of these things by yourself since it is already there. And, it will work on NES/Famicom, too. There is also less likely the user will have to worry about malware. (One problem with this is that the colours might be somewhat different in different emulators. I had once proposed a format to include the file with the RGB colours (which can safely be ignored, but if used might result in better colours) with the game, but doing so doesn't seem to be so common now.)
1. It seems the major game engines are Unreal (C++, many AAA titles) and Unity (C#, widely used). Godot is open source and uses a python-esque GDScript. There is also Roblox Studio (Lua) which is its own walled garden.
For multiplayer, you can use Unity and Unreal’s systems or Steam or you could try to roll your own with something like Agones.
For Assets, major tools are Blender and 3DS Max. You could also use tools like Shapr3D or MagicaVoxel. Or buy on sites like Turbosquid but the meshes/textures may not be organized well.
2. Reasoning about geometric transformations can be challenging. Also animations, character rigging, organizing assets, memory management, framerate performance.
All of this is in addition to game design, which is its own thing. Good luck!
Difficult things are lighting and multiuser networking. Cameras and input are not so hard anymore.