Download

How to write documentation of a project

Hello,

This is more of a general query. I was wondering how a big project is being handled in respect of documentation. I saw GDD, Game pitch etc but how a big project should be documented (like project structure, functionality etc) so that team members (or new comers) can easily work together.

Thanks!

2 Likes

If you look at how mixed to useless Epic own’s docs are, there’s a learning point there. :rage:

Its too hard to keep docs up to date. Epic have mentioned casually they’ve been improving comments in the code for UE5 - to scrap them later to populate better docs. If so, it’ll be interesting to see what that looks like versus what they offer now.

So I say keep good comments in the code and plan to extract them. If using BP, take advantage of the rich comment system and color-code and comment everything (in-place). If still planning to make formal docs, be aware of the limitations, boredom factor and futility of powerpoint-like presentations, as Unreal is a very visual medium. :wink:

In other words try not to lose too much time on this. As for GDD? Its hilarious when someone shows up with a 1000-page-doc all filled with bad assumptions. The only place for that is the shredder. That doesn’t mean devs shouldn’t make one. Novices should for sure. But afterwards file it away as a loose reference guide as that’s all it will ever be. That’s still way better than showing up with something written on a beer mat. :grinning:

4 Likes

Depends on scope and project status.

If you are making an API all you have to document is function calls and variables they take / output they produce.

This is also completely useless to any programmer worth paying, as they’ll break apart functions themselves.

If you are documenting used tools, toolkits and pipelines, then you want to be as accurate as possible because everyone does stuff different.
And you can bet anyone worth paying will continue to do stuff however the h e l l they want to.
So there’s basically no point in documenting pipelines either if you hire the right people for the job.

If you are making an Engine, then you want your documentation to be the furthest thing from Epic’s stuff.

First it has to be accessible.
So make a simple and custom website that actually works over mobile.

Second, fire anyone who f u cks the file format and generates unreadable pages.

Third, populate the pages with as much relevant data as possible, instead of filler text, opinions, and BS no one cares about.

Fourth,
When you adjust/fix anything that’s changed by a new version, you invalidate pages or mark a version system.
Allowing people to access the actual OLD documentation as it was.

You can actually look at Blender docs for an example of decent work. Mind you, blender is going the epic way too, so maybe look at older doc releases…
.28 vs any Pre .28 is a good example.

The documentation infrastructure for large project is the most important part. Particularly if it’s public facing. Either make your own if you are good at websites, or hire a company to do a custom job.

I doubt you can rely on cookie cutter templates or WordPress fckups to handle one of the most sentivie things to your end users…

2 Likes

Thanks mate. You have pointed out some interesting things. I wonder how big game project is being handled as they develop them through long years and update always.

They don’t document much of anything. Case in point being stuff like cyberpunk that tanks XP (and it was actually a really decent game for PC)

So for new comers entering into the development of an old project is like “Bro, come on in, check by and run for yourself and build me this feature. thanks!”.
Recently we struggled as one of our project did not have enough documentations of it. So I was wondering this topic.

Generally speaking, if you hired the right person they’ll never ask stuff like “why is my bin folder not building” and such.
I deal with that a lot too doing project management. Just hire better people and problem solved.
The first duty of any programmer is to be a problem solver… when you sleep at the wheel / ask silly stuff, refuse to google for your own answers… that’s when I just fire them.

1 Like

Well, that seems legit. Still there should be at least some documents. Just like you told that project size really matters. As much as it is feasible, making some documents wont hurt. Question is how to make it in our own style and no one can help here :rofl:

If it’s for internal purposes, just wack-a-mole it in word.
It’ll be helpful but not critical.

I came across this topic myself. I can’t agree with other posts that no documentation is needed. Even when working alone on a project I document quite a lot. I use a mixture of inline code documentation and a tool called Whimsical (a free alternative could be diagramms.net) , which allows you to create diagrams / flowcharts and even ui or text-documents. Of course I don’t create them for every aspect, but for keeping overall architecture and workflows in memory they are quite usefull.

1 Like

Blockquote Question is how to make it in our own style and no one can help here :rofl:

There are plenty of templates and guides around on what should be in a GDD.
It’s something that can evolve based on other’s documents e.g. I’ve added a MoSCoW breakdown a section on design pillars that the game will be based around.

However, one key rule to follow would be to make sure that someone with no design, programming or general games knowledge can read it.

1 Like

Thanks @Rechi186 . Yes, I am also thinking of some sort of feature documentation (likely flow chart types) with inline documentation. :grin:

Thanks @Kruul . Yes, templates of GDD will be a good starting point. But eventually I think we have to customize based on our project. No way around. :sweat_smile:

2 Likes

Not sure anyone said that exactly. :thinking: Is it better to doc than not? Ofc. But there’s also a certain futility to it that needs to be highlighted (more so in game dev vs business apps).

Overall, there’s lot of debate around the usefulness of docs in game work, as code often gets thrown away after games are made. But on the flip side, it doesn’t mean its an excuse to write sht code either. So are docs worth doing? Yes… But don’t overestimate their usefulness either. Iterate / tweak / optimize / polish code / structure as a trade-off first, to push you as a designer to write better code which will be neater for newcomers to follow.

Then afterwards, docs created from all that will likely be of much higher quality (hopefully). :stuck_out_tongue:

Oh for sure. They can be a double edged sword to say the least :slightly_smiling_face:

Not sure what kind of project you are working on, but I recently finished an animation where the customer asked me to handle the source files with documentation.

It took me some time, but I made a Word file (as someone mentioned before), and tried to add as much images/screenshots as possible, mentioning the folder structure and where everything were (I kept the imported 3d meshes in one folder, materials and shaders and textures in another, blueprints in another, etc.).

All in all, I tried to keep everything as clear as possible, writing it as if I someone was teaching me the basics of UE for the first time, and started from the basics, as how the project is set up, etc… And clarified the possible errors that he might get along the way and how to solve them.

As I mentioned, it took some time but I think the time spent in it was worth it.

Try to gauge who the user will be, as if he/she has some previous experience with 3D, he might already know how to do some things.

Be that as it may, that’s a paid request.
You didn’t just spend valuable time you could have put elsewhere to make a living into it.

Anytime a client is willing to pay you should produce the best possible documentation you can.

That doesn’t mean it will ever be needed by the client though. Or that they will ever even look at it…
(Because sometimes, you would really hope they look at it)

2 Likes

Here is mine for example.

Some points.

  1. Have an overview of the main features, so anyone new has some idea about the purpose of the system.
  2. Then break down class hierarchy, and note the point of each of class. This is the first thing I look for when trying any new system, because this is a great starting point.
    3.Specifically point out functions and function categories that encompass 90% of the functionality of the class. Function categories are very useful, because you can search for them in BP to get a sense of functionality.
  3. Also note any delegates that can bound, so Ue4 programmers have an idea about where to look to ensure behaviors are kept in sync.
  4. Finally, have your methods in some order. I like to have all functions organized by category, (by logic or alphabet), and every function in the category in alphabetical order.
  5. Give a detailed description about how very complicated systems work, so that other people don’t have to pick apart code to get the knowledge. The threshold for detailed explanation being one can’t get the gist of inner workers by looking at function names and variable data structures. (My example is UtilityCombat Task Component Notes and Scoring. )

Honestly, I use Word and the outline format.

I make sure I articulate the following:

  • high-level game concept. what is my character doing (is he fighting monsters to get to another castle, or fighting monsters IN a castle, to kill Dracula, etc).
  • things (verbs) that the player can do. can he grapple, duck, dodge, attack, defend, parry, etc, etc. write you a brief narrative of what your ‘story’ is going to be like. Be descriptive but not that you want to embellish, just be articulate. Nouns (objects) will be things you have to make. Verbs (action-words) will be things you have to animation, program interactions for, etc. Adjectives will be mods, or things that change a noun, so these are conceptually things in an enumeration (eg: monster-type, damage-type, etc). You want to be able to map out what you need to make and what features you want. Even if you don’t nail everything down 100% and you very likely will not, you have a starting point, and you’re starting to chew it over in your mind: what do you want that you know/feel-strongly you can accomplish vs what is a stretch-goal? What’s right out until you do some research, etc… Time is your enemy in ALL things here so any kind of organization will give you back minutes in your life. And that is really what it is, don’t underestimate the value of a little bit of prep…

After this, break down what you need to make, eg: a landscape or a critter, etc

What does this (and the other things) require? Sounds, a material(s), mesh(es), etc. Here is where a spreadsheet helps (and can easily translate to tables/csv’s for your game). Itemize what you need to build. I chose to break it down by item/thing/object on the rows and the columns were what mesh(es), etc I needed for each thing. Red, yellow, green (traffic-light) your way to update that matrix.

I’d say it would depend on how often new people join the project and how large the project is. Can’t speak for large development studios, but for small indie teams who often outsource or work with third parties I’d say some documentation that’s essential would be:

Pre-Development:

Top Level Application Description: What the project is and does from a users perspective. What the projects trying to achieve. Aesthetic styling, target levels for asset budgets quality and detailing. Game world background history and lore. Doesn’t need to be more than a few pages but is also good for existing members to keep focus on the projects main objectives, or for sending out to any third parties or prospective new members to give a description of the project.

Use cases: How the user will use/interface with the application and actions they can perform. The main game menu states (Top menu, game setup menus, network lobbies) and in-game states (game setup, in-game, micro-games, tear-down). Also actions users can perform both in menus (menu items and options) and in game (how the user will interact with the game). This should just be top-level abstraction, so just a list of the states and actions with a brief description of what they are, what they do, and when they can be used. Again this is also good for existing team members as it keeps mission creep in check and for keeping track of what has and still needs to be done.

Design

Structural Overview: A listing of your main classes and a very brief overview of what they’re for, what they do, and the main classes they interface with (what uses them and who they use), a class or flow diagram would also be useful.

Class Descriptions: A more in depth description of each of the main project classes, the functionality they are responsible for and any major data structures they contain.

The design docs are useful for solidifying the top level structural outline of the project, clarifying the design, and highlighting things that might not have been thought of pre-implementation. They’re also super useful for new members of the team to have an overview of where to start looking in the code rather than being greeted by a wall of code and function names.

Development

As other people have said, below top-level design documents, keeping functional, variable, and api documentation up to date is generally a nightmare and not worth it as you can spend twice as long documenting a function than coding it, then it will change the next week and someone will forget to update the documentation. Most large companies and projects auto-generate most of this now. If you keep the code itself well documented that’s usually enough.

Documented Code: Seriously worth including good in-line documentation in your code both to remind yourself later and for newcomers. For complex algorithms or formulaic equations its a good idea to have a document somewhere referencing source materials, research, or description of the algorithm.

Another really useful piece of documentation is auto-generating call sequence and flow logs by embedding debug printouts into the code at the entry/exit point of each major function (just print out the function name, argument values, and any other useful data), and save the logs for later reference. Can’t count the number of times this has saved me when a complex boot sequence has suddenly stopped working…

Initialisation Sequence
Function Flow
Netcode Flow