如何運營開源項目並達到 1k Star

分享下這幾年我是如何運營開源項目並達到1k star的

作者:Tailchat 創始人  moonrailgun    2023年7月4日

原文:https://tailchat.msgbyte.com/zh-Hans/blog/share-1kstar

 

我開發了一款 IM 項目 Tailchat,終於在2023年6月28日凌晨達到了 1k star 的里程碑。我感到非常激動。當然,對於許多知名開源項目來說,這隻需要幾天就可以完成,但對於我來說仍然非常重要。因此,我非常想分享一下我作爲一個開源愛好者是如何運營開源項目的。

首先,我必須承認我是一個非常典型且純粹的程序員。我沒有背景,沒有資源,也不擅長溝通,可以說是比較社恐的人。對於像我這樣的人來說,困難並不在於如何開發一款應用,而是在開發完成或者達到一定階段後如何推廣我的應用,並讓大家能夠理解我的理念。

曾經,我天真地認爲開源只是將源代碼分享出去,讓大家能夠看到我的代碼。然而,我逐漸意識到開源更像是一個企業,不僅需要開發自己的產品,還需要想辦法將產品銷售出去。

一個好的官網非常重要

官網是一個應用的門面,對於許多庫來說,README就是它們的官網。然而,對於相對龐大、複雜的項目來說,簡單的README可能無法提供足夠多的信息,這時一個獨立的官網頁面就變得非常重要。

一個優秀的官網能夠增加用戶對項目的信任感。通常情況下,我對開源項目的基本信任感來自於以下幾個方面:是否有README或官網、是否有足夠多的star以及使用量/下載量如何。

舉個例子,Tailchat的官網 https://tailchat.msgbyte.com/ 經過幾次迭代後變得相當出色。首屏幾乎佔滿整個頁面,並展示了桌面端和移動端的預覽圖,這意味着我的項目同時支持桌面端和移動端。然後簡潔明瞭地列出了我認爲重要的特點,這些特點也是我希望我的產品與其他類似項目區分開來的關鍵點。

官網是產品思考的體現。通過官網向用戶傳達自己的想法,讓用戶理解你的設計哲學,明白你爲什麼要做出這樣一個產品。

另一方面,官網也爲用戶在使用過程中提供指導。除非你的產品不需要用戶做任何操作,只需打開即可使用(比如各種小遊戲),否則一個完整的文檔對用戶的幫助遠遠超出你的想象。

不要認爲只因爲開源了源碼就可以不去做這些事情,代碼本身就是文檔。回想一下自己的開發經歷,在使用一個庫時,除非萬不得已,否則我們不會選擇去查看源碼。對於庫來說都如此,更何況是一個完整的項目呢?

對於開源項目來說,一個完整且兼容多平臺的部署方式是最基本的底線。

注重差異化

對於開源項目來說,向其他人介紹自己的產品的時候最簡單的方式就是 xxxx 的開源替代品, 這裏的 xxxx 一般是你耳熟能詳的商業應用。這樣可以非常快速的讓用戶對你的產品有一個很基本的概念。你也能通過大家的共識快速建立起一個基本的概念。

比如你想做個在線商城,那麼你就可以說自己做了個淘寶的替代品。比如你想做一個論壇那你可以說你是要做一個discuz的替代品。

但是,在說自己的項目是 xxxx 的替代品的同時需要時刻明確自己與對方的差異點,而不是在不斷復刻其他項目的功能。比如我在與其他人介紹、推廣我的項目的時候我會說我是一個IM,是discord/slack的開源替代品。但與此同時我也會強調不僅僅是一個IM。我會與對方談論爲什麼我們需要插件系統,以及插件系統可以給我們帶來什麼,爲什麼我會花2年時間來做底層架構、打磨體系來完成這套架構,以及爲什麼我覺得我的產品是優於其他的項目的。

這是一件非常困難的事情。因爲大部分的用戶並不會在乎你的差異。對於大部分用戶來說只會用到最基本的功能,而且用戶更加關注的是是否能滿足自己的需求。一件非常悲傷的事情是不論做什麼你都會有很多的同行與你競爭,讓用戶決定是否用你的產品的理由並不是因爲你的功能多麼強大,而在於你的功能是否能滿足需求 —— 當然如果你的功能足夠多,多到所有能想象到的需求都能滿足也行。但是那是企業做的事情,如果你是個人開源者更要學會專注,專注於打差異化。

重視國際化市場

多國語言是非常必要的一件事。雖然中國有很大的市場,但是我們把目光放遠一些,中國市場也不過是全球 1/5 的市場。特別是在開源領域,你作爲開發者更加不必在乎語言的邊界。因爲你不受控於各地的法律法規隱私政策的差異。作爲開發者只需要做好你的產品就行了。

因此,支持多國語言非常重要。至少支持英語,能很大程度擴展你的受衆範圍。如果你對自己的英語水平不夠自信,請善用翻譯軟件。

另外,你可以多多去海外的平臺宣傳自己的應用,不僅僅是侷限於國內的平臺。如 Reddit、Hackernews、medium 等。因爲海外的用戶對開源的接受度、理解度更加高,如果這些用戶能夠認可你的項目的話在開源領域會比國內用戶帶來的幫助更加多。一個很悲傷的事實是,國內開發者天天996根本沒有時間再去爲開源做貢獻,特別是個人開源的項目。

通過完善的文檔、自動化測試給用戶帶來信任感

雖然一本厚厚的說明手冊並不會給產品本身帶來任何的實際價值,但至少會讓在這個產品上投入關注的用戶感到安心。

安全感是一個很玄學的事情。作爲開發者你可以說自己的項目非常簡單易上手,根本不需要任何文檔。但是哪怕不去看這些文檔,這些文檔存在的本身會給使用者一種信任,至少能表示你對自己的項目投入了足夠多的關注。

類似的還有自動化的測試腳本,前者是給普通用戶的,後者是給開發者的。

作爲開發者,我們都知道CICD的重要性。CICD是保證項目的代碼質量的重要方式,也意味着一個項目的底線。如果一個沒有任何CICD工作流或者都是失敗的工作流。那麼我會非常對此非常具備不信任感。

開源項目天然的就相比商業項目是缺乏信任感的,因爲後者是拿來牟利的,且是能夠用來支持起企業的運作的,意味着至少不會有什麼問題。而開源項目往往起源於興趣,天然的就給人不靠譜的感覺。特別是在前期star數比較低的時候更是如此。

怎麼打破這種不信任感也是作爲開源的維護者想要讓自己的項目起來的重要因素。

將你的內容串在一起,減少探索成本

一個非常不好的例子在於把相關的內容放的到處都是,讓用戶能看到所有的內容非常困難。

將重要的內容在一個地方被索引是非常重要的事情。比如你的社交媒體、你的文檔、你的功能手冊、你的演示環境、你的各種技術博客….

減少用戶的探索成本,因爲如果成本過高用戶很有可能選擇放棄。這就是爲什麼大多數網站都會在頁腳留有各個關鍵

如果你僅README文件,那就把所有的鏈接都添加到文檔中,讓用戶能夠清除知道有什麼內容,這些內容是幹什麼的。

另外,不只是你的各種內容,你的項目本身也要牢記這一點。比如上來就是一個手機號註冊就很容易讓人勸退,而適當的公開內容體驗可以更好的讓用戶體驗到產品的魅力從而長期留存。在 Tailchat 中我是這麼做的, 用戶可以使用臨時賬號登錄,只需要填入一個暱稱即可體驗到完整的功能。當用戶決定長期保留你的賬號時,你可以走註冊流程認領該臨時賬號。如果想要讓用戶加入到你的社羣中,你甚至可以把入口直接換成邀請鏈接。

類似的,如果你的項目包含了多個子項目。monorepo會是比多個倉庫更好的選擇,我曾經寫了一篇博客就是從技術角度說的這個,談論從把多項目合併成一個項目中獲得的收益 

從開源運營的角度來說,多個項目倉庫不但更難讓用戶看清全貌,也會打擊開源貢獻者的信心,因爲誰都期望大項目的貢獻者上有自己頭像,哪怕僅僅是改了文檔的一個錯別字。

重視社區的運營,重視生態

社區的運營是開源項目中非常重要的一環,只有來自社區的不斷反饋才能拉起開源項目的正循環。最簡單的社區就是建立一個微信羣或者discord羣。我早期在運營的時候想着既然我自己是做IM的,爲什麼要到其他的IM平臺上去運營我的社區呢?然而這是錯誤的,因爲作爲開發者,應當去遷就用戶而不是讓用戶遷就你。如果用戶更加喜歡用微信,那麼你就應當選擇使用微信。如果用戶更多使用discord,那麼你就應該在discord建立自己的社羣。保持社羣的活躍纔是第一要素。

我非常喜歡Notion的大使文化與社區文化。建立良好的社區驅動的生態是一個成功的開源項目必不可少的基本素質。雖然我的項目還遠遠達不到這個階段,但我研究過很多成功的開源項目無一例外。簡單的說開源是理想主義者的狂歡,一個好的開源項目則是一羣理想主義者的狂歡。讓用戶認可你的項目,並自發的宣傳,這是一件非常困難的一件事,但是是有必要去做的,一羣人前進會比一個人前進輕鬆很多。

另外一方面,需要關注開發者價值。什麼是開發者價值呢?就是你的項目對開發者能夠帶來什麼。在推廣Tailchat的時候我往往會與vscode進行類比。vscode就是插件化的文本編輯器。其本體就是一個拓展中心 + monaco 編輯器,其價值在於良好的開發者生態。讓不同的開發者能夠通過vscode的插件系統來實現自己的想法,集成不同的語言支持。不知道是否還有人記得在github還沒被微軟收購的時候 github有一款自己的編輯器 atom。我也非常喜歡用,自從微軟收購了github後atom就被棄用了。我相信微軟也是看到了插件系統的巨大潛力。而Tailchat也是以插件系統作爲設計之初的底層能力。我很喜歡的一句話是: 得開發者得天下。這也是生態的力量,當生態起來了以後,你的產品就很難被其他同類應用替代了。

恰當的時候回訪你的早期用戶

在早期維繫種子用戶是非常重要的,適時的回訪你的早期用戶,讓你的用戶感受到自己被重視,這個產品的積極性,這將會大大增加你的用戶轉變到社區貢獻者的可能性。

很多技術人會覺得,只有代碼貢獻纔是貢獻。其實瞭解代碼的畢竟是少數,更何況要匹配你的項目的技術棧的話就更加少了,很多人如果能提提建議,打打下手做個國際化翻譯我覺得對於一個開源項目來說就非常不錯了。最重要的是這些東西會成爲你前進的東西。人想要不斷前進要麼靠金錢,要麼靠興趣,而社區就是持續不斷爲你的興趣充能的加油站。

在我接觸到的早期創業者,都會很喜歡與自己的用戶約個會,聊一下自己項目的發展以及用戶的看法。如果你覺得自己做不到這一點,用文字問候一下也是可以的。相信我,收穫會比想象中的更加大。

積極寫博客,寫技術文章

我很反感像廣告機器人一樣在各種技術社區中通過不斷的、重複的發送自己項目的介紹來推廣自己的項目。雖然看起來好像有點讀書人的清高和不食肉糜,但是我依舊覺得這種行爲是非常影響其他人的體驗的。有的人可能會說,相比有人黑總比沒有人知道好,但這是犧牲其他人的體驗而成就自己的自私行爲。

我作爲技術人的選擇是,多寫博客,多寫技術文檔。在技術文章中推廣自己的項目。我期望這應當是一個雙贏的行爲:作爲讀者的你收穫到了知識、作爲作者的我收穫了曝光。

同時,寫文章也是對自己思路的一個整理,這點和寫技術文檔是差不多的。曾經的我非常反感寫技術文檔,因爲直接寫代碼就能寫完的東西還需要寫技術文檔來約束自己。一般來說寫技術文檔的時間和寫代碼的時間是差不多的,因爲要寫出一個正確的技術文檔往往需要確定方案的可能性,基本上確定方案的可行性大部分的代碼就寫的差不多了。而現在我會理解寫技術文檔的必要性,更多的是爲了整理自己的思路。寫代碼是簡單的,寫代碼讓人能夠理解是困難的,寫了代碼以後讓人能夠理解並且後期好維護是最難的。曾經的我是依賴自己的經驗來實現後期易於維護,而技術文檔就是在我依賴經驗的基礎上追加了一層CICD來約束行爲。寫技術文章也是一樣的,在悶頭寫代碼的同時要把東西整理出來形成方法論。這也是一種對自己能力的提升。

總結

開源的到底是坎坷的,而且大概率是最後沒有實際收益的。這也是爲什麼我會說開源是理想主義者的狂歡。

開源項目往往不追求盈利,付出又多,除了寫代碼還要投入精力去宣傳,去運營。對於大部分人來說都是一件喫力不討好的事情。

當然,我這裏說的是真正的、需要長期付出的開源項目。如果僅僅是爲了star高,來用於求職或者其他目的的話其實有很多方式,很多項目代碼沒幾行,但是star數都是幾十k這樣的蹭熱點的項目在github上還是有不少的。

相反的,我的選題無疑是紅海中的紅海,在C端十幾年前就有早早佔領了市場的巨頭,在B端也有很多強大的競品進行競爭。同樣在開源也有無數的同類產品相互競爭。我之所以依舊選擇IM作爲我的開源項目方向,並且爲止付出了數年的努力。我也相信我的設計理念會在一堆同質化嚴重的同類競品中脫穎而出,當然不可否認的是會有失敗的可能,可能這就是理想主義者,我願意爲我的理想付出心血。

我相信,世界往往是被理想主義者所改變的。如果可以選擇,我更喜歡與一羣理想主義者一起共事。相信看到最後的你也一定是一位熱愛着開源的人,共勉,一起走下去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章