Trying out a new programming philosophy

So for the past four years, our team philosophy on programming has been to spread everyone out across the entire code base. Person A works on the graphics engine, B works on the battle code, C the editor, D the shopping menu, etc. There were a couple reasons why we did things this way. First, in those days we didn't have a firm foundation of code yet and so many parts of the code depending on so many other parts being functional that we had to spread ourselves thin. We also wanted to avoid conflicts of working on the same code and clobbering each others commits (this was a much greater concern back when our versioning system was CVS, before we upgraded to SVN). There were some downsides to this model though, particularly that there wasn't someone around to bounce ideas off of all the time and having to take on a large area of the code by yourself was pretty intimidating.

Our programming team has talked this over a bit in the last few months, and we've decided to try something new to help us decrease our development time and to increase our motivation, enjoyment, and quality of code. The change is a two part one.

#1. Work on the engine as little as possible
#2. As a team, work together on one area of the code at a time and completing it before moving forward

Now the reason why that first bullet about the engine is there is because we've already spent a ton of our time over the last several years working on the engine instead of working on the game (a major reason why our demo releases to date have been so small). There is still lots of work in the engine that remains to be done for sure, but it is currently stable enough that we don't really need to spend more time on it right now. We need to add some more advanced features for the next release we are working on, but that's about it.

The second point is entirely contradictory to our earlier programming philosophy of spreading everyone out and assigning them to a specific portion of the game code. Now we are bringing everyone together to work on a specific component and dividing the work amongst ourselves. When I say "everyone" I really mean the programmers who make up the core workers of the team (usually all staff), and not the contributors that pop in and help out from time to time. Its hard to assign contributors something important in an urgent area of code, because they typically don't make half the progress that a standard staff programmer would (although there are exceptions). To start, our team has decided to work on the map code together, getting all of the features for the next release in place. This includes things like save points, environmental sounds, better AI, etc.

I really hope this new approach works well for us. What we need more than anything I feel is the motivation from seeing immediate progress and the reinforcement of working with others closely. I know from experience that when this team is motivated and gets the ball rolling, we can do some pretty amazing things in a short period of time. Its still being approached as an experiment though, so we'll have to wait and see what happens.