At the beginning of the projected we used pair programming methodology.
This gave both of us an excellent understanding of the core engine and
paved the way for effective code division.
Our initial project design was truely a success. We spent a lot of
time kicking around ideas and developed a game plan around a simple
core game idea. This allowed us to collaborate closely on the engine
and ensure it's quality before branching off towards extra features.
In a similar vein, we found that prioritizing and scheduling the
remaining code kept us on task. This seemingly trivial managerial
trick made it possible to divide and conquer towards the end with
clear milestones. Although the deadlines we set weren't always met,
we allowed for a spare week at the end which let us slide the goals
a little without falling too far behind into an insurmountable crunch.
Another success was getting a playable game running very quickly, in
under a week. This was made possible by having a simple concept and
we soon became addicted to the game. Having this instant
gratification made debugging bearable and allowed new features to
be made available instantly.
Beyond the core engine, we didn't dive deeply enough into any features.
For instance once the networking code was working, we felt little need
to improve it. Thus much of our networking code is in dire need of
profiling to allow it to scale to larger groups and harsher networking
environments.
Much of the non-essential code was added too late in the development
cycle. It often demanding features from our engine that we had not
anticipated and needed to hack together. If we had thought of these
requirements earlier we could have redesigned some of the interfaces.
We found collision detection particularly challenging and despite a
sustained debugging effort could not make this critical feature
perfect. This code became very fragmented and full of unmaintainable
hacks. In retrospect it should have been rewritten from scratch.
Pair programming (aka Extreme Programming) is good. It let us get
the engine running quickly and almost entirely bug free.
Using simple textures and models is fairly straight-forward and makes
the game look a lot better.
There are many resources available online, google let us quickly find
useful web pages addressing questions that we weren't sure how to solve.