Every FLOSS developer knows what I’m talking about. You start with a small tiny project, defining a simple architecture and in general, setting some main goals.
Then you realize that in order to keep up with the rest of the world, or in order to feel the coolest developer on Earth, you should “raise the bar” and do more.
Then you start to write code and code and code and code.
During a summer vacation day, when everybody else is on holiday and no neighbors are around, you eventually realize that your “tiny and innocent” app became a Seven-headed beast able to make coffee over IPv4. Making another “feature” fit into that monster is just impossible.
Oh noes! What to do then? Romans said (latin): “dividi et impera”, which is really close to the “unix-style” saying “do one thing and do it right”. So yeah, time to start thinking about a massive refactoring and application splitting. Sooner or later your application is going to damage your health.
But don’t feel alone and afraid, people laziness is everywhere! So, if you decide to just move on and ignore the problem, you should know that also some important codebases are not even split at build system level, which is something really really bad. I’m not talking about apps like foo-app or cowsay, I’m pointing the finger to OpenOffice build system, the worst I’ve ever seen in my whole life. You wonder why downstreams (like Sabayon) don’t split openoffice packages into (say) openoffice-base, openoffice-calc, etc. It’s impossible! Distributions doing that (ubuntu, fedora) have written fugly hacks in their packaging system code, like MANUALLY splitting stuff, that is, really really error-prone. At the same time, a downstream like Gentoo is also suffering of its own pain: USE flags abuse (but I’ll talk about it in my next blog post).
So, don’t be afraid if your code sucks and it looks like a fat kid with a lollipop. You can always forward the complaints to OpenOffice codebase (“see, OOo is worse!”).