Remember Mozilla? Not the foundation, but the browser + news reader + email client + kitchen sink that spawned Firefox, the lean and mean browser accused of arriving at just the same kitchen sink stage while taking over the world. I think there’s at least one (maybe more) very important software development lessons to be learned here:
Extensibility and open source are keys to long term success. In the case of user developed extensions, open source is just a guarantee that what they do will not be wasted due to abandonment or outright sabotage by the software “owners”. Extensibility leverages the resources of the users (which outnumber the core developers by orders of magnitude in successful projects) to let them each build what is most useful to themselves. Ideas (and often code) can then be put into the core whenever a new extension has been shown to be particularly successful. At some point the core will probably grow to the stage where all the stitched-together code starts to be a hindrance to new development or efficient use. At that point, a new kernel (with the most fundamental features) can be extracted, while the rest of the code is split into new extensions and applications, depending on how separate they are from the remaining core. And so the cycle begins anew, with the equivalent of Thunderbird, Sunbird and tons of extensions as the offspring.