How Shopify builds a high-intensity culture | Farhan Thawar (VP and Head of Eng)

 
  • Highlight

    • 選擇困難的道路

      • 簡單來說,如果你有選擇,選了簡單的路並且成功了,那很好。如果你選擇了困難的路並且成功了,雖然你做了更多的工作,但如果失敗了而你選擇的是簡單的路,你其實什麼都沒學到,因為你選擇了簡單的路。你沒有做太多工作,可能也沒有和最聰明的人一起工作,因為他們通常不會在簡單的路上。

      • 所以我要說的是,對我來說很大一部分是,是的,有一個「即使失敗也如何贏」的問題,因為如果事情進展不順利,你仍然可以獲得技能,但如果你真的選擇了困難的道路,你會與聰明的人建立這些密集的工作關係,這些關係會在你的生活中持續下去。

        這也迫使你處於持續的不適狀態,進入這些房間並說:「我什麼都不知道」,這更困難。我同意你的觀點,你不想做愚蠢的事情,比如「讓我們用愚蠢的方式做這件事」。這不是我的意思。

      • 是的,這聽起來很有趣,但再次說明,我總是在嘗試一些超級愚蠢的事情,有時它們會成功,即使在家裡我妻子也討厭我嘗試這些事情,對吧?舉個例子?

        可能是一台新的洗衣機,我可能會用一些衣服嘗試一些奇怪的模式,然後她說:「哦,你毀了衣服。」我說好吧。但現在我知道不應該使用這個模式,但也許我會發現有一個超快的快洗模式,我可以在20分鐘內完成,現在每次使用洗衣機都能節省40分鐘的洗衣時間。

        所以有這樣的事情,但我會毀掉很多衣服來嘗試,但在工作中也是一樣。我們會嘗試一些事情,有時可能會導致災難,希望不會,但你可以想像人們試圖像,哦,讓我試試這個GCP的新配置,也許我們會得到一些好處,但也許我們會讓Shopify停機。我們不想那樣。所以你需要有一些防護欄。

        但是有一些關於嘗試愚蠢的事情和說愚蠢的話的事情。順便說一下,有一半時間,當我說一些愚蠢的話時,人們會說:「我有同樣的問題。」他們只是害怕說出來。

      • 我在零售業長大,人們會進店,然後我會說:「嘿」,你是靠提成工作的,他們不總是買東西,如果他們不買,你就賺不到錢。

        所以也許就是強迫自己去和人交談,然後試圖讓他們,也許你花一個小時和客戶在一起,然後他們什麼都不買,但你得到了很多負面反應,你所要做的就是說,好吧,然後去找下一個客戶。

        你不能真的沉浸其中說:「哦,天哪,我的一整天都毀了。」相反,你必須從中學習並說:「好的,讓我試試這個,讓我試試那個。」

        這並不容易,但這是一種建立一些信心的方式。人們說,電話銷售,或者有很多事情你可以做來獲得大量拒絕。冷電話是另一個例子,這可以讓你建立抵抗力。我不知道我是否天生就更擅長這個。

      • 在你二十多歲時有一個叫Joe Lemond的人,三十多歲時是Chamath,這十年是Tobi,在這三個非常成功的人身上,你從他們身上學到了什麼共同的特質,或者是每個人特有的特質?

        他們大多是不同的人,但他們在一件事上很相似,那就是他們對未來十年世界應該是什麼樣子有一個非理性的看法。他們都是非常長遠的思考者,非常理性地看待他們會說:「嘿,在10、15、20、25年後,世界會是這個樣子。」

        我不擅長看到那個願景,但我擅長試圖每週向那個願景前進1%。所以兩者的融合,我知道我擅長什麼,我擅長推動事情向前發展。如果他們擅長長遠願景,我們都可以達成一致說:「你擅長這個事情。我擅長這個事情。我們為什麼不合併力量?」

        所以這是一直讓我產生共鳴的事情,就是我如何找到這些非理性的人 - 所有進步都取決於不講理的人。我如何與這些人配對,因為我完全太講理了,我不可能變得不講理,所以我必須與這些人合併。所以這再次是我特別尋求的東西。

        甚至在2015年我開始創辦自己的公司時,我實際上坐下來寫了一份我在多倫多認識的所有不講理的人的清單,我逐個與這些企業家見面,想弄清楚我們是否API兼容,我是否可以與他們合作?最後我選擇了其中一個並開始創業。

      • 我和你談過的一個框架,我寫下來的框架,我在推特上發布,我寫下這個改變了我永遠選擇工作的方式。我經常被不在我框架中的事情搞得很困惑。

        如果你沒有一個寫下來的框架來確定你真正在乎的事情,就很難不被分心。所以相反,我看著框架並問:「這符合我的框架嗎?」

        所以它真的幫我節省了不被分心的時間,但它也迫使我思考每年我都可以重新評估我在做什麼,看看框架並說:「這符合我的價值觀嗎?」現在,我妻子會說這一點,我就像個機器人。

        當我意識到我的框架被違反時,我會立即辭職,我以前就這樣做過。所以甚至沒有另一份工作或任何東西,我就會想,哦,我的框架被違反了,然後辭職。這就是我知道我喜歡做什麼工作的事情,那個框架幫助我找到它。

        所以我鼓勵每個人,任何在找工作的人我總是說:「寫下一個框架。你可以用我的作為靈感,但要弄清楚你在乎什麼,並確保你正在做的工作符合這個框架。」

    • 在組織中創造強度

      • 首先,我有一個基本信念,就是一小時就是一小時。是同樣的一小時。如果你花一小時或我花一小時,過去的時間是一樣的。如果我在那一小時內消耗更多卡路里。比如說我們都是朝九晚五工作。

        如果我能在朝九晚五期間完成更多事情。我們都...時間對我們來說過得一樣,但我只是完成了更多。

        我們在工作之外仍然可以做同樣的事情,但在工作期間,我只想盡可能在這段時間內完成更多事情,而不是延長時間。我可以給你一個例子。

        我以前在一家公司工作,那裡我每天工作12小時,但我在中午玩桌上足球。然後我們去喝咖啡休息,做這些事情。當然,時間就延長到12小時,而不是試圖壓縮到8小時工作日。

        結對編程就是一個很好的例子,因為這是一個如此密集的活動。兩個人在一台機器上,當兩個人一起工作時,不被網絡和干擾分心,只專注於為手頭的問題寫解決方案,你可以完成很多事情。

        這是如此疲憊,以至於當人們開始結對編程時,通常前幾個晚上會睡10到12個小時,因為它太密集了。你工作得太辛苦了。但對我來說,這種強度實際上會帶來非凡的結果,即使你不需要投入更多時間。

        我想大多數人,你可能經常聽到這個,每個人都說:「哦是的,年輕的時候要努力工作,多花時間,諸如此類。」我想說,如果你每分鐘只是做得更多呢?快速完成事情。我認為還有一個反直覺的事實,就是真正優秀的人實際上可以快速輸出高質量的成果。

        所以拿一個好的人和一個極其優秀的人來比較,極其優秀的人實際上可以在很短的時間內完成大量輸出,而好的人可能需要更長時間。我認為這裡有一個人們沒有考慮到的時間差異。

        所以你可以不太降低質量,但把時間縮短2倍、3倍,對吧?帕金森定律的規模而不是,如果我給你一個小時做某事,一個真正優秀的人可以在一個小時內產出高質量的結果。

      • 它就是沒有被盡可能多地使用。所以結對編程,對於不知道的人來說,就是兩個人在一台電腦上。所以兩個鍵盤,兩個麥克風,兩個顯示器,但是一台電腦,他們一起工作,如果是遠程的話,他們可以使用。

        我們使用像tuple這樣的工具,你可以遠程在一台電腦上,你說得對。關於結對編程的著名推文是:等等,我們有兩個工程師在一台電腦上,他們寫的代碼不會只有一半嗎?

        答案是,哦,不,不,他們寫的會更少,因為這不是關於代碼行數。吞吐量的限制不是手放在鍵盤上。不是我們兩個坐在那裡,限制是我們試圖把擊鍵輸入到屏幕上。限制是哪裡是好的優雅的解決方案?

        我們如何思考問題並為手頭的問題建立正確的解決方案?Tobi著名地用結對編程建立了很多Shopify,他會做的是他實際上會設置一個計時器,他和CTO Cody會結對編程一個小時。

        如果他們在一個小時內沒有完成問題,他們會刪除所有代碼,保留測試,然後重新開始。他們的想法是,如果我們無法在一個小時內表達和寫出這個功能的代碼,我們一定是在錯誤的設計上。

        我們一定是在建立錯誤的東西,所以他們刪除所有代碼,保留測試,然後重新寫。有時他會超過一分鐘,他仍然會刪除代碼重新開始,因為他的想法是正確的優雅解決方案應該能在一個小時內寫出來。

        所以結對編程,我的意思是,這是一個極端的版本,但即使在Pivotal Labs,如果你的搭檔那天生病了,你寫了一堆代碼,強硬的版本是你的搭檔第二天會進來,刪除你寫的所有代碼,然後你第二天重新寫。

        再說一次,還有什麼比剛寫完代碼後重寫更好的時機呢?因為你現在了解問題領域了。順便說一下,這聽起來像是浪費時間。聽起來像我只是在刪除代碼,但原因是代碼存在很長時間。

        代碼是一種負債,而正確的解決方案,通常是更短的行數,更優雅的解決方案,往往是在你做了一堆探路之後才出現。而做這種探路的唯一方法就是開始然後刪除然後開始然後說,哦,不。現在我知道了。刪除。

        順便說一下,這非常難做,因為我們是人類,我們有這種沉沒成本謬誤,所以很難刪除。但如果你能做到這一點,你實際上會找到一個好得多的解決方案。

        你在談話中來回交流,是的,你可能會寫較少的代碼,但你在為客戶提供價值的道路上會比你自己做時移動得更快。

      • Shopify,我提到Tobi和Cody在Shopify開始時就這樣做。結對編程的酷之處在於,在我在XtremeLabs的舊世界中,我們確切知道要建什麼,因為我們在建移動應用,這幾乎就像合同製造。我們說:「我們有iOS版本。我們能建一個Android版本嗎?」所以,我們很快就能說:「這是規格。快去做。」Shopify是一個完全不同的公司,對吧?我們是一家探路公司。我們在試圖找到正確的東西來建。所以,結對編程可能並不總是有意義的。

        像Pivotal和Xtreme,我們每週做40小時。Shopify更多是每週4到8小時的結對編程文化,你在一個問題上聚在一起說:「嘿,讓我們配對半天,或者每週三配對。」

        順便說一下,有時候18個月後,我們現在已經弄清楚了所有的事情,那就是我們應該刪除一切重新開始的時候。這是我們會在那時做的事情。所以,你不想結對編程18個月。你想要探路和尋找路徑。

        然後說:「我看到了矩陣。讓我刪除一切現在重建。」因為你追求的是學習。我們有所有的學習,現在讓我們寫代碼。

      • AI非常有趣。現在使用像GitHub Copilot這樣的AI副駕駛發生的事情是,它是你的結對編程夥伴。所以,你現在可以感覺像是在配對,實際上是沒有另一個人。你可以與AI配對。

        所以,現在發生的事情也是,你看到人們使用Whisper,像他們在與Cursor對話,他們通過Whisper說話說:「好的,讓我們建立一個做這個的新React組件。」他們在說話,然後它在建立。「哦不,那不是我的意思。我的意思是做這個。」

        所以你實際上甚至不需要打字,只需使用語音,與你的結對編程夥伴來回對話。我要說,這很驚人。我仍然認為把這種體驗加上兩個人一起。所以你有一個AI副駕駛和人類,因為正在發生的是生成代碼。

        兩個人可以看著說:「哦,我知道它試圖做什麼。」然後要麼刪除代碼,因為你有靈感並自己重寫,要麼就接受建議並向前推進。但是,我喜歡今天的AI副駕駛世界,因為你永遠不必獨自編碼對吧?

        你永遠不必獨自編碼。你現在可以嘗試不同的語言,因為API和語法更容易掌握。所以,所有這些事情對工程和所有想要建立任何軟件的人來說都是一個勝利。

      • 所以一個是我們有這個叫做GSD的工具,代表get shit done(把事情做完),你可能從其他Shopify的人那裡聽說過,這是一個每週向整個公司更新正在發生什麼的概念。再次,帕金森定律在規模上。

        如果你每週問人們,他們想要每週都展示進展。所以這是一種方式,我也談到了結對編程。我們作為一家公司做的另一件事是,我們過去每年兩次是我們的節奏,黑色星期五,網絡星期一,或者我們在夏天有一個活動。

        現在,我們做六週回顧。所以,團隊有這個概念,每六週實際上聚在一起,與他們的直接領導層一起走過路線圖、資源和他們正在做的工作,然後也與Tobi一起。

        我們發現六週是一個很好的節奏,因為它足夠短以記住上下文,而且足夠長...六週是足夠長的,特別是如果你有,比如說,一個十幾個工程師的團隊,你可以做很多事。

        第二天我們就在建東西,我們在迭代,我們在標記人。然後,到下週我們就說:「這是軌跡。」對吧?實際上,我想要做那件Elon的襯衫「這週你做了什麼?」因為,帕金森定律是真實的。

        聽起來很好笑,但我一直在提到這個,但無論你分配給某事多少時間,那就是它需要的時間,對吧?所以,如果你在做一些重大的事情,我不知道,你在做一個重組或什麼的,對吧?你可以用慢的方式做。「讓我們坐下來,計劃,推出。」

      • 所以,每個項目都有一個更新,可能會有一個視頻展示「這是體驗」。它會有很多關於自上次以來發生了什麼變化的文字。

        我們有一個叫做OK1和OK2的流程,OK1通常是在總監級別,他們會說:「好的,我認同這個方向。」或者「我不認同。」他們可以做出改變。

        然後,當它進入OK2時,通常是該領域的VP級別,他們現在要看:「好的。你正在做的事情實際上符合整體架構。但順便說一下,你有沒有看過這個背景?也許你沒有看到這個,這正在發生,或者行業。」所以你試圖在那個層面上對齊。

        然後,再次,就像我提到的,每六週我們和Tobi一起審查,他本身就是一個強度很高的人。所以,很多時候都是像:「嘿,為什麼這個花這麼長時間?我們是不是想得太多了?我們是不是因為被某些東西阻塞而不能在這件事上前進?是不是有某些基礎設施的問題?」

      • 關於會議末日的有趣故事是,在我開始在Shopify工作之前,我就在和Tobi討論會議末日。所以,我實際上認為在我來到Shopify之前我就對他做這件事有一點影響。

        每年在一個隨機的時間,我們會刪除所有有超過兩個人的定期會議,所以不是一對一的,而且只是內部人員,所以不是面試或外部合作夥伴會議。然後,我們有兩週的暫停期,在這期間你不允許添加定期會議。

        你可以有一個普通會議,但不能是定期會議。這個想法是因為定期會議背後有很多慣性。它就一直在那裡,你知道它要來了,而且很難刪除,因為你會說:「哦是的,我們每週都談論這個事情。」

        所以我們做的就是重置會議。而且,我想,是的,它就叫做混沌猴子,管理員會進去直接刪除所有東西。現在很酷的是,它迫使你重新思考,「我們需要定期會議嗎?還是我們只需要一次會議?或者我們需要不同的頻率?」這是一件事。另一件事是它為工匠時間釋放了很多空間,對吧?我在工程領域追蹤的一個統計數據是每週個人貢獻者在會議中花費多少小時?順便說一下,我們做了兩件事。

      • 建立基礎設施需要更長的時間,但之後它讓你永遠能夠快速前進,對吧?我實際上給你一個例子。所以,在2020年,2021年,疫情的全盛時期,顯然,又是一個加密貨幣的夏天,加密貨幣又瘋狂了。

        我們坐下來說:「哇,我們很多商家現在都在要求NFT門控。」NFT門控,就是說,「如果你有代幣,你現在可以進入店面看到我的產品。你可以看到我的價格,你可以結賬,但只有當你有代幣的時候。」

        我們從商家那裡得到很多需求,他們說:「我們想要這個。我們想賣NFT。我們想要我們的買家擁有NFT來獲得這種很棒的體驗。」我們說:「我們同意。我們希望你能做任何你想做的事。

        所以,我們也想為你建立這個。」然後,和Tobi坐在一起,他說:「你們想錯了。」他說:「建立NFT門控需要多長時間?」我說:「我不知道。兩三週。」

        他說:「那麼,建立一個平台層需要多長時間,這個平台層暴露API,讓任何人都能在一小時內建立NFT門控?」我說:「我不知道。兩三個月。」他說:「就做這個。」他說:「因為你不知道他們會在平台上建立什麼。」

        NFT門控是一件事,一個用例,但如果你花時間建立基礎設施層,他稱之為往油箱裡加油,如果你往油箱裡加油,人們可以用這個油開很長時間。

        所以,他說:「我總是希望你思考...」關鍵部分是:「你能建立什麼,讓任何人都能在一小時內完成這個?」對吧?所以,他經常對我們這樣做,他會說:「哦,這應該只需要...」他會這麼說,人們會理解錯。

        他會說:「哦,你可以在一天內寫完這個。」他的意思是:「什麼條件必須成立,你才能在一天內寫完這個?你需要什麼基礎設施?」而且,他實際上就是這樣開發的。他會針對一個不存在的API寫代碼,因為他想:「你知道這裡應該存在什麼?這個API。」他會寫代碼,來回修改客戶端和服務器,然後他會說:「這是正確的,正確的客戶端代碼。現在,讓我去實現服務器代碼。」

        這是一種不同的思考軟件的方式。而且,這是一種不同形式的強度,它是圍繞著建立這個基礎設施層的強度,我們想要快速建立,但它需要兩三個月,在這種情況下,但之後可以讓每個人都能在我們的基礎設施上更快地建設。

      • 當我們在建設某些東西時,我們會把它分成三個類別。我們會說:「你是在建立一個實驗、一個功能,還是基礎設施?」一旦你把事情分類,你可以說:「哦,這是一個實驗。」你就說:「很好。這不是基礎設施。這是我們在嘗試學習的東西。」

        順便說一下,這可能會變成一個實驗或基礎設施,但它是從實驗開始的。現在,如果你在建立一個功能,一個功能基本上是你在利用現有的一塊基礎設施,對吧?所以,代幣門控就是我給出的例子。

        如果你現在可以在一小時內建立它,你可能會說:「哦,我們在下面有正確的基礎設施。」但如果你做了Tobi做的事,就是說:「這是我希望存在的基礎設施。這是功能。這個功能可能很快就能建立,但現在我必須去建立基礎設施。」

        你現在把自己放在基礎設施的領域,這就像,那可能需要更長時間,但你現在為很多用例啟用它。你不必一次就想到所有的事情,因為你可能會有人以不同的方式使用你的API。所以,我認為你必須把自己放在合適的位置。

      • Tobi在這裡是秘密武器,因為他幾乎總是推動我們把事情當作基礎設施來思考。

        我的意思是,最讓我煩惱的事情之一可能是我總是來找他說:「嘿,我們可以做A或B。」他看著我說:「你知道我要說什麼,對吧?」我說:「你要說回去產生更多選項。」

        因為他不喜歡這些。「我不喜歡A或B。等你有其他東西再來。」對吧?實際上,也許我可以給你講個小故事。他有個故事說:「對於任何問題,都有無限多的錯誤選項。

        可能有10,000個正確的選項,但每個人都在第一個正確的選項就停下來了,而不是你應該把所有時間都花在上面,因為那些不起作用的選項,你不會花時間在上面。

        但你必須弄清楚10,000個選項中哪一個是正確的,並花時間在所有這些正確的選項上?不要只是在第一個就停下來。」所以,當我來說:「A或B。」我只是從10,000個中挑選了兩個。

        他說:「這不是我...回去產生更多選項,因為這些不是最優的。」所以,他在這些事情上確實是個哲學家。而且它確實改變了公司的運作方式,因為他會在這些事情上推動你。然後,隨著時間的推移,我們學會識別相同的模式。

        我學會了在基礎設施、刪除代碼和使事情簡單方面推動我的團隊,因為順便說一下,誰不想要免費的東西呢?對吧?免費的性能,免費的、易於導航的代碼庫,免費的可維護性,免費的彈性,因為現在,我們做了刪除的艱苦工作。這很難。

      • 我認為如果你沒有兩三個正在著火的大項目,你可能沒有足夠用力推進,因為你並沒有真正嘗試超出你的...如果一切都進展順利,你真的在承擔你需要承擔的風險嗎?

        所以我認為你必須過度傾斜一點,應該總是有一些事情在著火,不是因為你應該製造那個,而是它應該發生,因為你正在延伸到新的事物,或者你走得比應該的更快,或者有一個你過早依賴的新領導者,所有這些事情都應該創造這種可能會成功的事情。

      • 失敗角落

        • 我在Tim Ferriss的書或播客中讀到過,他說要創建一個失敗簡歷並把所有事情都寫下來。

        • 我在手機上有一個叫做失敗簡歷的筆記,我寫下了所有我失敗的時候,這很令人沮喪。所以我不鼓勵人們這樣做,但我很樂意告訴你幾個例子。

          嗯,其中一個是我實際上被裁員兩次,人們不會期望像,哦,我在做這個事情,我被裁員兩次。我認為在這兩次中,這對公司來說都是正確的事情,對我來說也是正確的事情。

          我有點用那個經歷作為重新評估的方式,最終形成了我想如何花時間的框架。但那可能是另一個故事。

    • 招聘

      • 面試不是一個好的績效預測指標。每個公司的每個人都知道這一點,有人面試表現很好,在工作中表現不好,或者相反,面試表現不好然後進來後表現出色。我有一個來自我們加入Shopify之前的創業公司的例子。我為機器學習雇用了兩個人。

        一個是博士,在大學教書,就像,天啊,這是顯而易見的選擇,還是員工推薦的。我們想:「天啊,這個人一定會很棒。」

        另一個人是我在咖啡店遇到的一個傢伙,他從來沒有做過軟件工作,但對機器學習非常感興趣。A人選,我們在幾週內就讓他離開了,因為不適合我們的文化。

        而B人選在我們的創業公司工作,現在仍在Shopify,是一個出色的機器學習工程師,他在我們的聖誕派對上說:「這是我的第一份軟件工作。」我們想:「怎麼可能?」這真是太可愛了。我們給了他們兩個機會。

      • 工作試用,我是一個大粉絲,這就引出了實習生項目,這是一個多麼好的面試過程,因為你現在有某人四個月的真實工作產出。他們可以看到在Shopify工作四個月是什麼感覺。

      • 是的,我認為思考的方式是,更像是我們想讓面試過程盡可能接近真實工作,因為通過這樣做,我們可能可以在面試中評估你的技能,更接近工作中發生的情況。這是第一點。

        第二,我們有一個叫做生活故事的面試環節,我們試圖弄清楚,到目前為止你所有的經歷是否真的會...它是否表明你是一個有好奇心和廣泛興趣的人?因為如果是這樣,那很可能更適合。

💡 對我們的 AI 研究助手感興趣嗎?

使用 AI 技術革新您的研究流程、提升分析效率並發掘更深層次的洞見。

了解更多