Ja bym powiedział tak, najlepiej wybrać projekt z którego chciałbyś korzystać i by cię interesował lub nawet jeszcze lepiej, z którego korzystasz.
Jak z czegoś korzystasz to znasz już interface i wiesz high level jak coś działa.
Teraz forkujesz, instalujesz ze źródeł, na początek próbujesz zrobić jakieś proste programy z użyciem tego projektu i powoli się oswajasz, próbujesz dodać swoją funkcjonalność do interface, zmodyfikować coś i potem budujesz nową wersję projektu lokalnie, ale robisz to na początku na nowym branchu swoim.
Tu chodzi o to żeby bardzo dobrze oswoić się z ekosystemem całego projektu architekturą wiedzieć gdzie co jest położone jak to działa.
Potem możesz jakieś problemy naprawiać, które sam dostrzegasz lub funkcjonalności jakie sam byś chciał mieć bo je widzisz to możesz robić.
W drugiej kolejności bierzesz problemy innych ludzi te są trudniejsze bo musisz jakby wejść w ich kontekst co czują jak ten błąd się u nich objawił z reprodukować zlokalizować przyczynę itp.
Jak projekt znasz bardzo dobrze to kontrybucję zrobisz od ręki, ale jak kompletnie nie wiesz jak coś działa, nigdy w tym nie pisałeś, nigdy nie zrobiłeś jakiś małych modyfikacji itp. im większą wiedzę na temat projektu zdobędziesz tym łatwiej ci będzie zrobić kontrybucję.
Tu nie chodzi o to jak dobrze umiesz programować, a to to że musisz wiedzieć jak jest prowadzony projekt, zrozumieć jak działa, jak go modyfikować żeby też wszystko działało.
Żyjesz w danym projekcie to każdego dnia odkrywasz jego nowe tajemnice.