That's the point though - full design documentation requires a design that is at least in it's most primitive form - complete. No matter which way you spin it, be it extensive design documentation or a solid platform on which to build - experienced engine devs are still doing a lot of work for quite some time before anybody that doesn't yet have the experience - can start.

Take the imaginary Jane - Jane loves making games and wants to learn how to create a modern 3D engine so she can realise her dream of a game where you play a Amish assassin taking out scientists at CERN.

Jane has created 2D games/demos and has also started to play around with some OpenGL examples and has started to get a handle on 3D projections and piping data to the graphics card.

With all the will in the world, Jane can't yet sit down and write a shader/material sorting rendering pipeline - she doesn't know enough including why sorting by material is a good idea.

She could sit down and start writing an object orientated scene graph and it would work eventually - however her work wouldn't anticipate the hundreds of quirks and uses that the scene-graph must contend with then lots of people start creating new node/entity types that don't run into issues on their own - then one day it's discovered that feature X needs a different approach to handling the scene graph and BOOM all the dependencies and the graph itself have to be refactored.

Emily bleeds in binary and breathes in triangle strips - she could come along and create a scene graph design that anticipates most of it's usage patterns and major refactoring isn't required.

Emily would have to teach Jane an awful lot of stuff before Jane could come up with an informed design.

So does Emily take the months to teach Jane how to do it, holding up everything and everybody that depends on it - or does Emily just write it herself?

----

Either a base-code, complete design documentation or teaching everybody requires already experienced engine devs - it took me years to know what I know and I'd still be more comfortable consulting other engine devs before I settle on designs.

I think a base-code (it doesn't have to be massive) is the best approach - it ensures a solid design and good practices which will filter down by example to the rest of the engine - anybody that doesn't know about some part that is in the base-code can always learn it and they've got the people that wrote it right there in the team to answer questions - also an existing base-code means that Jane can jump right in and apply what she already knows.

Even in large commercial environments - engines are rarely the product of one or two devs - you have people that specialise in certain things - coders that support artist requirements will be masters with shaders and skinning/animation code, somebody will be a mathematics whizz and they'll be handling more complex things such as BSP processing, optimized culling routines etc

For the project to carry on living - it needs active devs of all levels working on it - 20 devs is great but if only 3 of them can do anything for weeks/months, be it creating design documents, base-code or teaching somebody else how to do those things - then the project is going to fizzle out and die.

With a simple basecode then there's loads of tasks for all skill levels - anybody can choose anything they like - if they want to spend months learning what the experience devs are doing and join them? they can - the source is there, they can ask questions, watch it evolve - but if they just want to contribute and learn *somthing* they can do that too - we need a plugin to load a given model format just as much as we need a scene graph.