Hi
um Illusionen gleich zu vernichten (sorry):
a) Das durchschnittliche Opensource-Team besteht aus einer Person. Leider.
b) Wenn Helfer gesucht sind, die auch nach ein paar Wochen noch erreichbar sind, und die technisch auch nicht komplette Anfänger sind, nicht jeden akzeptieren. Auch wenn man gern mehr Leute hätte.
...
Der vermutlich häufigste Grund zum Einsteigen bei einem Projekt ist Egoismus
Also dass man das schon als User verwendet, gut findet, und gern eine bestimmte Zusatzfunktion / Bugverbesserung usw. hat. Nach der Implementierung bleibt man "kleben". ... Daraus folgt dann aber auch, dass man oft niemanden findet, bevor es nicht relativ viel User gibt.
...
Sonst ... ein paar Sachen, die mir bei Projekten jeder Größe leider viel zu oft als fehlend auffallen, und die oft auch schon verhindert haben, dass ich etwas beitrage (auch wenns oft nur einzelne Bugfixes/Features etc. waren, statt dauerhafte Mitarbeit):
Auf der Webpräsenz bitte in einfachen, klaren Worten erklären, was "das" eigentlich ist und wofür es gut ist. Klingt blöd, aber das schaffen viele nicht. Keine riesige Liste von Vorteilen, keine Fotos von Menschen mit Drogen-Grinsen, kein Marketinggeblubber, kein "Meine Es64 in CPP" (= ein einfacher Zugsteuerungs-Simulator einer "Taurus"-Lok - sowas kann bei dem Namen auch nur ein Eisenbahnsüchtiger wissen), kein "Java zeigt ihnen 3D-Filme und steuert ihr Auto" (Original von Sun/Oracle - wtf) usw.
Ähnlich trivial, aber für Opensourceprojekte sicherstellen, dass man den Source als Unbeteiligter auch irgendwie finden kann. Und die Lizenz. Bedingungen zur Copyrightübergabe bei Beiträgen etc. Codestyle-Richtlinien, falls man hat. Irgendwo ein Datum der letzten Codeänderung/Version/etc. Eine Kontaktmöglichkeit. Eine Buildanleitung die auch Anfänger verstehen (was muss man installiert haben, welche Befehle, usw.) ... das sind alles Sachen, die mit dem eigentlichen Programm nichts zu tun haben, aber wichtig sind.
Dritter Punkt, bei halbwegs großen Projekten nicht nur hoffentlich gute Codedokumentation in den Files, bei den Methoden usw., sondern auch irgendwo eine Beschreibung vom "Big Picture". Macht keinen Spaß, bei 1000 Files erstmal suchen zu müssen, wo das main ist. Welche Ordner beinhalten welche wichtigen Teile des Programms und wie hängen sie zusammen. Usw
Und natürlich, wie von dir angesprochen, abstecken was man eigentlich erreichen will und was nicht. Sonst artet es oft zur "eierlegenden Wollmilchsau" aus - und während man immer neue Features addet während die bestehenden noch nicht mal fertig sind macht man das Programm irgendwann komplett unwartbar und kann von vorne anfangen (oder aufgeben).
Noch ein Punkt: Wenn irgendwas halbwegs Wichtiges im geplanten Programm von was Bestehendem abhängen soll - egal ob Libraries, Algorithmen, Datenformaten, etc. - die zuerst anlernen. Beispielprojekte machen, die Fähigkeiten und Limitierungen verstehen, usw. Ist zwar für den Tatendrang am Hauptprojekt nicht zuträglich, aber man will auch nicht erst viel später draufkommen, dass das Programmdesign wegen sowas nicht passt.