Because estimating is a very hard process (and a very important process), I feel the need to express some of my own limitations regarding estimating for software development projects.
First, I've been working with computer programming in one form or another since 1987, but really got serious about the craft in 1993. I generally worked by myself or with 1-2 other people until about 1999.
Second, I have typically worked with experienced developers in a small consulting environment. I have worked with a few inexperienced developers straight out of school, but those were the exception and not the rule. As I mentioned in this tutorial, it might sound a little rough, but I don't count on those new people for any productivity until I've had a chance to work with them for a while.
Third, I have worked with FPA, and cost-estimating based on FPA, since 2004. Everything until then was based on WBS (see section 4). I was a Certified Function Point Specialist (CFPS) until this past year, when I let that certification expire. (CFPS's are required to pass a certification exam every three years, and now that I know what I'm doing, it's not important to me to be certified.)
Finally, I've found that the techniques I've shown in this tutorial work on database-driven business applications, but I personally don't feel qualified to estimate systems-development projects, or real-time applications.
The largest development team I've worked with has been a team that varied from 8-10 developers, one project sponsor ("gold owner"), two project managers, and four business customers ("goal donors"). We worked on one project for about 4.5 years, with a little bit of turnover along the way. The code on this project was written in Java, and the last time I counted the project had almost 400K lines of code (in addition to a ton of JAR files from various open source projects).