I really think about what would be good docs on a codebase. Like diagrams explaining things with blocks and what the concepts mean? |
think high level to start. this is what the program does. this is how it is designed, there are these top level objects, foo and bar. Foo handles the graphics and bar handles the logic. Foo uses the 2slow engine from studio... work it down from the top to cover the key concepts and areas.
then you refer to the detailed docs that get into the ugly stuff, but they need a map just to find what area to start working in. That is really a good way to think of it... a map... I want to fix the mouse interface so a controller works too.. where is that? I want to improve the graphics FPS, where is that? I want to add a new gun to the items, where would that be? etc.
you can generate a lot of crap automatically with some tools as to who calls what where and how (inherited, direct call, aggregate, whatever). Its still nonsense to the guy that just wandered by though, if you do not have a STARTING PLACE. So the very first thing to build is a starting place for the major blocks of code.
not much you can do in hindsight but I am a huge fan of stand alone code base. That is, if you pull out a .cpp file and a .h file, they should be able to compile and run in a new program with minimal 'oh, now I need x.cpp and .h, and x.cpp needs y.cpp and y.h, which needs...' there is always a little of that, it cannot be avoided, but the key is to minimize it so that a small # of files can be grouped together and tested/modified/developed without having to compile the whole big thing every time you change a couple of lines.