Introduction
Recently I picked up a project as the sole programmer. We’d be starting from scratch. I’m familiar with starting projects, I’ve started dozens of projects, even though only a couple actually see the light, I find the failures to be just as educational as the successes. After working at Electronic Arts, I’ve found out how important the beginning steps are for having teams work together. Due to legal reasons this is the last time I’ll be mentioning them in this post, but if you have specific questions feel free to reach out and I’ll answer them if I’m allowed.
Collaboration and Task Management
Depending on how large your team is you’ll want to find the right tool for you. For really large companies, Jira, is the go to. I wouldn’t suggest this for any teams under 10 people, and even then it would depend on how separated tasks are. For smaller teams, I’d suggest Hack’n Plan which is made for game development or Trello for light weight project management.
Jira has a ton of features but makes it a headache to deal with when its only a few people. It’s an incredible and powerful system that is used in enterprise. It allows developers to write extensions and custom features on top of it to be totally customized to your team.
Hack’n Plan and Trello are great options for smaller team sizes where communication is much easier and where everyone can get on the same page rather quickly. I’d suggest keeping separate pages for separate groups (Art, animation, programming, etc), and another page for general team information, for example keeping documentation.
Documentation
Keeping documentation updated for your project is extremely important, especially when you don’t want to explain things 5 different times to 5 different people, or get an email asking about a simple feature and how to use it. Some tools to look at are Confluence and TiddlyWiki, or other wiki formats, even Github’s built in Wiki works well.
Communication
This should go without saying but yeah. I can’t recommend Slack more, it’s superior than Discord in the fact that it has a robust channel system, thread system, and has bots that are supported by a majority of the popular business apps out there.
The channel system is great because you can move a narrow chat to a new channel, for example, a channel would be created for a specific bug where you can discuss it and keep discussion only to that bug. The thread system allows you to respond to messages without adding to the channel which is amazing for large channels where a lot of discussion is happening.
Also quick pro-tip, get the giphy app, it makes for some amazing moments. Of course, Slack can be a little inconvenient because most people are active in their Discord communities much more than Slack so unless your team is pretty large and active, Discord would work fine.
Continuous Integration and Repositories
Setting up a repository is step one for a programmer working in a team. This is where your code and assets will sit. I prefer using GIT and Github but recntly I’ve been introduced to Perforce which I’ve been seeing the benefits to using for larger split up teams. If done right you can be pretty powerful with this tool. Perforce is free for small teams but allows you to self host, compared to Github being free for both small and large teams but hosts repositories on their servers. I personally trust Microsoft somewhat… But have no worry, GIT is more open than perforce and has many different ways of using it, including self hosting.
Continuous Integration tools like Jenkins or Unity Cloud Build are a life saver for when you don’t have access to a computer and need a build ASAP or would like to give your team and fans builds without needing to worry about building on your computer for 30 minutes then uploading it, then sending people the link to it. With automated builds once you push or submit changes to your repository on a specified branch, it’ll automatically kick off builds for you. You can configure different build types and platforms too so you can get Android, iOS, Xbox, Playstation, Linux, Mac, and Windows all in one swoop! Congratulations if you’re on all those platforms by the way, you must be exhausted.
Usually this is pretty expensive because you need to have a machine dedicated to being a build machine basically. So if you have a spare computer you can set it up to become your build server or using cloud services like Google Cloud or AWS you can pay for a virtual machine. Some automated build services allow you to pay them directly and they’ll do all the work for you, like Unity Cloud Build.
Making Developer Tools
This is for all the artists out there. Programmers, treat your non-programmer co-workers with respect they deserve and make them tools to use for development. Take a look at Unity’s editor scripting if you’re using Unity, I’m unfamiliar with other engine’s workflow with custom editor tools but this is a must.
It’s just easier for everyone if things are streamlined and make things easy to add. The idea is to avoid possible issues that arise when things aren’t done correctly, for example streamlining adding in guns for a FPS game your making or hiding variables from being edited.
Asset Databases
You’ll think this is silly until you end up with audio file references on 30 different objects and then needing to update that file. Or needing to add in localization to another language and having to go through the hundreds of text objects to update their value for another language. Recently I’ve been using Google Sheets to make CSV files then downloading it in game for development, and packaging these files directly with the build for production. This is just a table with an id identifier, description that isn’t parsed in-game, and any data that is needed for that table.
For example my translations model looks like this.
And my character table like this,
Pro-Tip: Google Sheets has a translate option for some quick and dirty translations. Replace the value in a cell with ‘GOOGLETRANSLATE(CELL, “source language”, “target language”), for my example of text to translate Play to French, I’d write this in the French cell for Id 0, GOOGLETRANSLATE(B2, “en”, “fr”)
Programming Two Steps Ahead
This is important to keep in mind while coding through your game. Think about the future up-keep of your code and implications it may have for your other team members. Think about whether your changes would create new obstacles for them or yourself in the future or how your code will affect the sustainability of your game. Can you go back in the code in the future and add new features easily?
Analytics
Conclusion
Well, that’s pretty much my checklist for starting any project on the right foot. I hope I helped any game devs who are taking their first step into starting a new serious project with a team. Let me know if I missed anything or if you know of more tools that can be used.