Launching a Side Project Backed by Github Sponsors

Matthias Endler

透過 GitHub Sponsors 贊助的 Side Project 上線記

原文由 Matthias Endler 發布,訂閱此部落格

昨天我們推出了 analysis-tools.dev,老實說,我完全低估了大家的迴響。

這是一個用來比較靜態程式碼分析工具的 side project。靜態分析能在不執行程式的情況下,透過偵測原始碼中的錯誤來提升程式碼品質。

這個專案最棒的地方在於它是完全開源的。我們想打造一個不需要靠放送廣告或追蹤使用者來維生的產品。取而代之的,我們只在 GitHub 上尋求贊助——就這樣而已。過程中我們學到很多,如果你也想這麼做,請繼續看下去!

先來看看數據

大家都喜歡商業數據。以下是我們的成績:

  • 這個專案最初是 2015 年 12 月在 GitHub 上的一個 awesome list
  • 目前收錄了 470 款靜態分析工具。
  • 流量持續成長。目前累積了 7.5k 顆星,超過 190 位貢獻者。
  • 每週有 500 至 1000 位不重複訪客。
  • 其實好幾年來我一直想做一個網站,但直到我的同事 Jakub 在 2020 年 5 月加入,才終於讓它成真。
GitHub 星星數隨時間的變化。那張圖在大喊:商機來了。
GitHub 星星數隨時間的變化。那張圖根本在大喊:商機來了。
來源:star-history.t9t.io

「為什麼做個網站要花五年!?」我聽到你這樣問了。因為我覺得這個點子太理所當然,一定早就有人試過而且失敗了。

我就這樣一直拖著,即使根本沒人來填補這個空缺。
我就這樣一直拖著,即使這五年來我持續更新這份清單,只是想多了解有哪些工具。
你懂我的意思:別拖太久。當一個點子聽起來很理所當然,很可能就是因為它真的很理所當然。

營收模式

我們花了一段時間才想清楚該怎麼在財務上支持這個專案。我們很清楚自己不想要什麼:一個靠 AdWords 支撐的 SEO 內容農場。我們也不想把使用者資料賣給追蹤者。

我們對 GitHub 上的貢獻者有責任,要讓所有資料對所有人保持免費。那還能怎麼圍繞它來打造服務呢?一開始我們想說自己吸收基礎設施的成本就好,但這樣我們就沒有動力去維護網站或新增功能了。

那時候 GitHub Sponsors 還很新。不過,一旦意識到這是個選項,一切就豁然開朗:不怕與競爭對手被拿來比較的公司,會有誘因去支持一個促成這種比較的開放平台。此外,我們也能避免偏頗,打造一個讓比較更客觀、更容易取得的產品。

贊助或許能成為對抗空洞成長的解方,讓我們得以打造一個精實、永續的副業。我們並不期待 analysis-tools.dev 有朝一日能成為正職工作。這個市場也許太小了——但那也沒關係。

技術

有了營收模式之後,我們就能專注在技術上了。我們兩個都是工程師,這讓我們可以快速迭代。

一開始我想用 Yew 來做個很炫的東西。它是一個 Rust/WebAssembly 框架,而你知道的,我這個人就是喜歡 Rust/WebAssembly⋯⋯

還好 Jakub 建議了別的:Gatsby。現在,讓我老實跟你說:我根本不在乎 Gatsby。我就是這樣跟 Jakub 說的:「我根本不在乎 Gatsby。」但重點就在這裡:對某個東西沒有情感上的執著,反而能讓我們專注在工作本身,而不是工具。結果我們能完成更多事!

從那之後就一路順暢:我們用了 starter 範本,Jakub 教我 GraphQL 整合是怎麼運作的,而且我們甚至還用到了一些 Rust!網站是跑在 Cloudflare 上的 edge worker,用 Rust 打造的。(對,我有偷吃步一下。)

數到三,MVP 完成!

尋找贊助者

所以我們有了原型,但贊助者還是掛零。接下來開始的(到現在也還是)最困難的部分:說服人們支持我們。

我們夠聰明,沒有去發陌生開發信,因為大多數公司根本不理。相反地,我們轉向自己的人脈,發現以前曾有開發者主動聯繫,希望把他們公司的專案加入 GitHub 上那份舊的靜態分析清單。

這些人就是我們第一批聯繫的對象。我們盡量讓訊息保持簡短、有人味。

最有效的是篇幅適中的郵件,附上一些背景脈絡,並提醒對方他們之前曾對這個專案有過貢獻。我們也在信中附上了贊助頁面的連結。

企業想要可靠的夥伴和合理的價值主張,所以前提是贊助頁面必須打磨得非常精緻。

我們的 GitHub Sponsors 頁面
我們的 GitHub Sponsors 頁面

就像《星際大戰九部曲》一樣,我們得到的評價很兩極:很多人已讀不回,有人把訊息轉給主管,然後主管也不回,也有人根本對贊助開源專案沒興趣。這都很正常:大家都很忙,而且 sponsorware 還是個相當新的概念。

小小抱怨一下:我認為科技公司相較於從開源獲得的價值,贊助得實在太少了。如果當初沒有像 Linux 這樣的免費作業系統,或是像 Nginx、Apache 這樣的網頁伺服器,你的公司還會存在嗎?

不過,也有一種少見的回覆者,他們表示有興趣,但需要一些指引。對很多人來說,這是他們第一次透過 GitHub Sponsors / OpenCollective 贊助開發者。

還好我們使用 OpenCollective 作為財務代管方,負責處理發票和捐款轉帳。他們的文件在剛起步時幫了我們很多。

尋找贊助者的工作永遠做不完,但收到 DeepCode——一家以 AI 為基礎的語意分析服務——願意給我們一個機會的消息,真的讓人非常安心。

多虧了他們,我們才能把產品推過終點線。因為有他們,我們才能讓網站對所有人保持免費。這也代表網站不會有廣告和追蹤器。

相對地,DeepCode 也能接觸到許多重視程式碼品質的優秀開發者,而他們可能會成為忠實客戶。同時,他們也能被認可為一家對開源友善的科技公司,如果你想賣開發工具,這點現在比以往任何時候都更重要。雙贏!

行銷

我和 Jakub 以前都創過業,但這是我們第一次打造真正開放的產品。

第一階段:盡早發布 🚀

我們決定先軟性上線:盡早部署網站,讓爬蟲來索引。由於頁面是靜態產生,又遵循了一些基本的 SEO 指南,久而久之確實有助於提升搜尋引擎排名。

第二階段:向目標族群徵求回饋 💬

在獲得一些自然流量和第一批投票後,我們找來開發者朋友們測試網站,並為他們熟悉、喜愛的工具投票。這算是早期的驗證,我們也得到了一些誠實的回饋,幫我們抓出了最明顯的缺陷。

第三階段:準備發布文章 📝

我們寫了一篇部落格文章,雖然有點標題黨,但確實達到了效果:Static Analysis is Broken — Let’s Fix It! 它大致捕捉了我們對這個領域的挫折感,以及為什麼打造一個開放平台很重要。我們本來可以把不同分析工具之間的技術差異解釋得更好,但那就留待下次再說了。

第四階段:在社群媒體上發布 🔥

就在正式發布前不久,我們發現搜尋功能壞了(當然會發生)。原來是我們比預期早了一點點就把 Algolia 的免費額度用完了。😅 沒什麼大不了的:跟 Algolia 客服快速聯繫後,他們就幫我們轉到了開源方案(我們原本還不知道有這個方案)。我們又回到正軌了!

附註:Algolia 的客服是一流的。回應迅速、懂技術又樂於助人。使用 Algolia 後來證明非常適合我們的產品。回應時間穩定維持在幾毫秒內,與 Gatsby 的整合也快速又簡單。

那則推文帶來了不少關注:63 次轉推、86 個讚,而且還在持續增加中
那則推文帶來了不少關注:63 次轉推、86 個讚,而且還在持續增加中

顯然,大家都知道我們是在尋求支持,但我們對每一位按讚和轉推的人都心懷感激。這正是擁有一群志同道合的人脈能派上用場的時刻。

一確定網站沒有完全壞掉,我們就到 Lobste.rs(2 個倒讚)、/r/SideProject(3 個讚)和 Hacker News(173 個讚、57 則留言)上發布消息。社群媒體本來就難以預測。不過,針對不同族群調整訊息並保持謙虛,還是很有幫助的。

所有這些行銷努力帶來的迴響,只能用瘋狂來形容:

發布當天的流量
發布當天的流量

或許不意外地,Cloudflare 的 edge worker 連眉頭都沒皺一下。

Cloudflare 上 edge worker 的 CPU 使用時間
Cloudflare 上 edge worker 的 CPU 使用時間

我的老闆 Xoan Vilas 甚至還做了一次快速的效能分析,而且他也認可了。(謝謝老闆!)

大家一起擊掌慶祝!

接下來呢?

當然,我們會加入新功能;當然,我們對未來還有更多計畫,諸如此類。但與其說這些,不如回顧一下這個里程碑:一個沒有廣告、沒有追蹤器,完全靠贊助者支撐的健康小事業。🎉

最後,我希望你能好好審視自己,找到屬於你自己的小產品來投入。它很可能就在你眼前,而就像我一樣,你已經拖得太久了。別再拖了!下一個成功故事就是你的。所以,走出去,動手打造吧。

喔等等!⋯⋯在你離開之前,能不能幫忙看看 analysis-tools.dev,幫你喜歡的幾個工具用力按下投票按鈕?嘿,如果你今天特別慷慨(或者你有個超棒、重視開源的老闆),何不也去看看我們的贊助頁面呢?

我和 Jakub 在奧地利維也納。我其實沒有那麼矮。
我和 Jakub 在奧地利維也納。我其實沒有那麼矮。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言