事情是這樣子的,前不久接到一個需求,為一個游戲開發禮包碼功能
通常一款游戲運營期間會搞各種各樣的活動吸引玩家,其中最常見的就是發放禮包, 玩家可以通過禮包碼兌換禮包。
用禮包碼兌換禮包有個一限制,游戲運營商不會讓玩家無限制兌換, 針對某一次發放禮包的活動,一個賬號只能兌換一次, 即使玩家手上有多個禮包碼也不能多次兌換。 打個比方,某一款游戲搞活動向玩家發放禮包,這個禮包內總共有10000個禮包碼, 玩家可以通過這些碼去游戲中兌換。 參加活動的玩家每人手上只有一個禮包碼,而某一個玩家通過某種方法拿到多個這次活動的禮包碼,那么當他登錄賬號去兌換這批碼時,是不會成功的,他只能兌換一次,其余的碼只能通過不同的賬號去兌換。
這是面向玩家的客戶端邏輯。
在后端呢,有一套針對禮包的管理系統供游戲運營的同事使用, 當要發放一個禮包時, 他們可以在表單內填寫禮包的名稱、禮包碼的數量、使用禮包碼兌換禮包的道具之類的信息生成禮包, 然后把禮包碼分給玩家。
這很和諧,一點問題也沒有。然而這只是假象,我做的這個功能,在只發放一個禮包時是沒問題的,但是要同時發放多個禮包, 就會觸發一個bug。因為每次在系統中添加一個禮包后,在游戲中並不能直接生效,而是要使用系統提供的同步功能將禮包同步至游戲中。
人有一個特點, 做事情喜歡分類。比如說我們小時候做作業,肯定是先做完某一門功課的作業,再去做另一門功課的作業,我們不可能以做一道語文題,接着做一道數學題,然后再做一道語文題的方式來完成作業。人腦不是電腦,沒有多線程, 事情只能一樣一樣做。
這下問題來了
運營的同事有時候會需要同時發放多個禮包,碰到這種情況,他們的操作步驟是
添加禮包,添加禮包,添加禮包,同步禮包到游戲,同步禮包到游戲,同步禮包到游戲
而我開發程序時根本沒有想到會出現同時添加多個禮包的情況,所以發放禮包只能按照
添加禮包,同步禮包到游戲,添加禮包,同步禮包到游戲,添加禮包,同步禮包到游戲
這個步驟來
否則, 這些新添加的不同禮包都會被按照同一個禮包來看待, 就算玩家分別拿到不同禮包的禮包碼, 也只能領取一次。
這顯然是個bug, 雖然按照第二種方法的步驟操作能得到正確的結果, 但是這即不符合人的直覺,我也沒有在說明文檔里注明這一點, 甚至剛開始的時候連我自己都不知道要通過這么繁瑣的操作才能得到正確的結果,那我又憑什么要求系統的用戶去這么做呢。
當我發現這個問題時,脊背上感受到一陣涼意,因為這個功能已經發布到線上使用,假如運營的同事一次性同時發布多個禮包,那這個bug會波及到很多玩家,直接影響游戲的口碑。要是bug真被觸發,那就是運營事故,而且這個鍋肯定是我的, 甩也甩不掉。
我心懷揣揣的把這個問題和游戲運營的同事說明,然后表示要修復這個bug, 然而他們的回應卻是:“原來是個bug啊! 我們還以為是你開發的功能呢,這個bug挺好用的,我們需要它”
震驚,我百思不得其解,在平常bug可是他們最痛恨的東西。
原來, 他們發放禮包的時候有一種需求,同時發放兩個禮包, 兩個禮包的道具雖然不同, 但是價值確實相似的, 他們只允許一個玩家只能領取兩個禮包中的其中一個, 也就是說就算玩家分別拿到這兩個禮包的禮包碼, 兌換的話也只能兌換其中一個。
歪打正着, 這個bug不折不扣滿足運營同事的特殊的需求。
把 bug開發成feature,我內心隱隱有種自豪感,然而這個feature 卻是個定時炸彈,一旦有不知道底細的新同學使用這個功能, 那這個bug還是一個bug,而且殺傷力巨大。
所以, 問題來了, 這個bug到底要不要修呢, 糾結。