I've spent the last 5-6 years working on a large open source metadirectory system called Ganymede. It is something I'm very proud of, and it has taken me an enormous amount of time, energy, and
continued dedication. I'm planning on putting out 1.0 prerelease 1 sometime this week, if all
goes well. Just got to finish up the documentation..
Why did Ganymede make it to this point? Because I didn't let it not come to this point, pure and simple. I'm fortunate to work in a research laboratory where it is not considered insane to have the computer support division engage in development projects that wind up taking longer than the NCC-1701's original five year mission, but if I had let the project die at any point, it would have,
In the beginning, it helped a lot to have a lot of hubris. To make something great, you have to
believe that you are making something great, and you have to always keep in your mind that you won't accept anything less than a great result.
Planning and vision is essential. I spent 6 months writing ideas down with pen and paper before
writing any code for Ganymede. I benefited from a prototype system that my group had written
beforehand that taught me about several design difficulties that Ganymede would have to smoothly handle. The worst things about Ganymede are those things that reflect flaws or shortcomings in my original design vision. The best things about Ganymede are those things that came out of good initial design work and a clear understanding of what I wanted to achieve.
On the other hand, ignorance is also essential. If I had really understood that it would take five years before I had something that I felt good enough about to call '1.0', I can't imagine I would have done it. I remember 3 years ago excitedly telling my boss, "It's done!!". Ha.
For something of this kind, patience and stubborness helps tons. At a number of points along the way I thought that my project was doomed, that someone else had done something that would make my work obsolete and irrelevant. But after a day or two of heavy depression, I just kept going. All those other products and projects that I was worried about have gone away. Either they never finished, or their product was closed and commercial and the company abandoned it. While I was working on
Ganymede, a company named Ganymede (oh no! trademark conflict, I'll have to rename all those classes, and the documentation, and and) came and then it went.
During its development, I've had maybe one email for every one to two hundred downloads of Ganymede, maybe. That's never been much, but every email that I've received that was at all positive or appreciative of what I was doing was gold for me, and helped keep me going. It has helped that I have been a) so starved for approval that any positive mail energized me and that I have been
b) so stubborn that I just consider a lack of email a natural consequence of the stage of development at, and that people *will* love it when they finally see it.
As for the "last two weeks" of development, I fully agree about how daunting that is. My "last two weeks" have gone on for at least the last year and a half. It is easy to make software that seems plausible, it is hard to make software that is truly robust, and that works in intuitive ways, and that can be extended and adapted for unforeseen uses. It is easy to make software complex, it is hard to make everything in a complex system perfect. Evolution and iteration is the only way to see complexity through, especially if your goals were overly ambitious or your design foresight overly simplistic.
And documentation is one of the hardest things to do, and the most essential. Writing documentation is like re-writing your software, except that you have to do it in much less precise language, in a loose and connotational way that feels utterly wrong after having hand-wired a piece of software line by line, bit by bit. And you can't run your documentation through a debugger.. even if you have users downloading and using your software, the odds that they will give you useful and meaningful critical commentary on your documentation is very low, in my experience.
So I'd say that vision, optimism, stubbornness, deliberate blindness to odds and obstacles, and a healthy capacity for masochism are all essential. Ganymede is about a quarter million lines of code as it exists today, and it has taken the majority of my energy for the last five years to achieve it. There have been moments of despair along the way, when it seemed impossible to move the design forward, or I just felt lost. There have been moments of joy, when I finally *knew* how to achieve the next goal in developing the system and I could finally code what I had been wrestling with in my head for weeks, and when users at my employer started taking what I had written for granted.
In then end, I can't tell you how happy I'll be to be done with it, nor how long it'll be afterwards before I'm able to judge whether it was all worthwhile. If anyone is willing to make that kind of sacrifice for the sake of a piece of software, I think that software will get done.
Ganymede, a GPL'ed metadirectory for UNIX and friends.