Game Development and Application Development Best Practices- Not As Different As You Might Think

03 Jul 2017. comments

You might expect game development methodologies and best-practices to differ from how we develop software (I did). But John Romero (Keen, Wolf3D, Doom, Quake, Diakatana, Deus Ex, etc) just gave a talk last month where he talked about all the lessons iD Software learned while developing their games in the early days. A lot of them are very suspiciously similar to agile/xp/iterative development methodologies we believe in:

The principles he outlined were:

  • “Polish as you go. Don’t depend on polish happening later. Always maintain constantly shippable code.”
  • “It’s incredibly important that your game can always be run by your team. Bulletproof your engine by providing defaults upon load failure”
  • “Keep your code absolutely simple. Keep looking at your functions and figure out how you can simplify further”.
  • “Great tools help make great games. Spend as much time on tools as possible.”
  • “We are our own beta testing team and should never allow anyone else to experience bugs or see the game crash. Don’t waste others time. Test thoroughly before checking in your code.”
  • “As soon as you see a bug, you fix it. Do not continue on. If you don’t fix your bugs your new code will be built on a buggy codebase and ensure an unstable foundation.”
  • “Use a development system (platform) that is superior to your target (platform).”
  • “Write your code for this game only - not for a future game. You’re going to be writing new code later because you’ll be smarter.”
  • “Encapsulate functionality to ensure design consistency. This minimizes mistakes and saves design time.”
  • “Try to code transparently. Tell your lead and peers exactly how you are going to solve your current task and get feedback and advice. Do not treat game programming like each coder is a black box. The project could go off the rails and cause delays.”
  • “Programming is a creative art form based in logic. Every programmer is different and will code differently. It’s the output that matters.”

Remind you of the Unix Philosophy?


Tagged: software craftsmanship encapsulation software engineering yagni continuous deployment continuous integration iterate agile agility

2019 Ben Lakey

The words here do not reflect those of my employer.