What is a Large Project?
Saturday, April 18, 2009 1:09:11 AM
<5,000 line = small project
~50,000 lines = medium project
>100,000 lines = large project
I could write 100,000 if I wanted to, but I always try to keep it small.
Project V is now topping 42,000 lines (this includes blanks and comments, reduce by 20% to get code only). And I have over 30,000 more lines of throwaway code. By the above scale, Project V is a "medium" project. Luckily, it still feels like a small project.
The breakdown is about 15,000 lines for the GUI (mostly visual components). The setup phase and resource handling take about 7,000 lines of code. And the type system for Project V takes roughly 10,000 lines of code. The other 10,000 lines are mostly support code like RNG's, font instance implementations for ICU, interface implementation for texture manipulation, stuff like that.
What I find strange is that the type system takes that much code. Most of it isn't even about the type system itself. It's just about handling sets and nodes. The core type system itself is a mere 574 lines. This file handles type and value comparisons. But I should mention that I have a lot more "glue" code that most other projects, especially in the type system. I don't just rely on what the language has provided.
Project V has 35 cpp files at this point.
I know I will reach 50,000 lines in a month's time since I'm going to be coding up Project V components and the runtime. So I will officially be heanding into "large" project land soon. Like I said, I try and keep the "small" project feel. And I believe I've more than succeeded with Project V.
What are your thoughts on project size? Does it affect anything? For me, nothing has changed because I've built projects this size before. Well, perhaps not 50,000 lines, but in the tens of thousands anyhow. So I started the framework with the intention and knowledge that it would get this big. Not only that, but I consider these to be proper software development practices. I've mentioned these in the past such as helper objects, separating different modules and including plugin mechanisms.
In the past, for me, a large project meant one that suffered under its own weight. Where you could feel its bulk getting in the way of contributing to the project. These were rather large projects. Close to a million lines. Sometimes well over that if you consider satellite projects. I'm not sure this is necessary anymore.