是(shì)的(de),軟件(jiàn)開(kāi)發絕不(bù)是(shì)在公園裡(lǐ)散步。
我們經常解決無法預見(jiàn)的(de)問(wèn)題,如(rú)果你(•<Ωnǐ)不(bù)犯這(zhè)些(xiē)常見(jiàn)的(de)軟件(ji∑ àn)開(kāi)發錯(cuò)誤,許多(duō)問(wèn)題是(shìγβ<)可(kě)以避免的(de)。我将引導大(dࣶγ₽)家(jiā)解決錯(cuò)誤,這(zhè∏₹)些(xiē)錯(cuò)誤可(kě)能(néng)會☆ λ(huì)破壞自(zì)己的(de)辛勤工(gōng)作(zu₽€ ↑ò)并使有(yǒu)前途的(de)項目白( ♦×bái)白(bái)失敗!
作(zuò)為(wèi)開(kāi)發人(rén)員(yuá✘®γ₩n)、分(fēn)析師(shī)、産品負責人(rén)、主管或 CTO,我≥ ☆₹遇到(dào)過這(zhè)些(xiē)所有(↓>λyǒu)問(wèn)題,盡管有(yǒu)些(xiē)看(kàn)起<Ωε來(lái)很(hěn)基礎,但(dàn)它們仍然會(huì)傷害™₽你(nǐ)的(de)團隊。請(qǐng)與我深入了(le)''™解~
不(bù)了(le)解産品
為(wèi)什(shén)麽軟件(jiàn)開(kāi)發如(rú)此≠α令人(rén)興奮?對(duì)我來(lái)說(shuō),這>£(zhè)是(shì)因為(wèi)有(yǒu)Ω<§機(jī)會(huì)學到(dào)很(hěn)多(duō)行(xín<✔∑∑g)業(yè)的(de)知(zhī)識。通(tōng)過ε'π♦引入該領域的(de)項目來(lái)創造并塑造它們的≠π÷®(de)未來(lái)。比如(rú)人(rén)們有(yǒu)機(jī₽✔)會(huì)在人(rén)力資源、醫(yī)≈>₩療保健、金(jīn)融和(hé)各種行(xíng)業(yè)的(de)産品上(≥$ shàng)創造價值。
雖然了(le)解不(bù)同領域令人(rén)興奮₽" ∞,但(dàn)也(yě)極其具有(yǒu)挑戰性。
如(rú)果你(nǐ)渴望構建成功的(de)産品,則必須了(le)解其行(λ₽✘xíng)業(yè)背景。對(duì)于我而言,軟∞∑件(jiàn)開(kāi)發不(bù)是(shì)編碼,而是(shì)©☆關于在盈利的(de)同時(shí)為(wèi)最終用(yòng)戶尋π↕£≥找最佳解決方案。
軟件(jiàn)工(gōng)程師(shī)的(de)關 δ鍵要(yào)點是(shì)——了(le)解業(yè)務核心和" 'γ(hé)應該實現(xiàn)的(de)每個(gè)§ ±功能(néng)。如(rú)果你(nǐ)隻× δ是(shì)一(yī)個(gè)聽(tīng)命令的(dγ'§•e)機(jī)器(qì)人(rén),那(nà)開(kāi)發←£σ<可(kě)能(néng)是(shì)工(gōng)作(zuα∞↓ò)鏈條中最昂貴的(de)部分(fēn),每個(gè ★≠)錯(cuò)誤并不(bù)便宜。
我相(xiàng)信技(jì)術(shù)咨詢和(hé)代碼♣↔σ審查任務是(shì)技(jì)術(shù¶ε)專家(jiā)的(de)附加價值,他(tā)們可(kě)以糾正最初雇用(£≤yòng)你(nǐ)的(de)公司業(yè)務人(rén)員(yuβ≈±án)的(de)錯(cuò)誤觀點。而能(néng)夠交換±≥↕意見(jiàn)是(shì)團隊相(xiàng)對(duì)于個(gè)∞®®σ人(rén)的(de)最大(dà)優勢。
假設即事(shì)實
決策是(shì)每個(gè)産品開(kāi)發的(de)核心部分(fēn)。
很(hěn)自(zì)然地(dì),人(ré₹ n)們對(duì)以前的(de)項目和(hé)假設看(kà♣∞n)法會(huì)發揮作(zuò)用(yòn ∏₽€g)。請(qǐng)注意這(zhè)些(♠↔β≠xiē)問(wèn)題,猜測比詢問(wè'¶n)别人(rén)更簡單,但(dàn)它很(hěn)危險!如(rú)果你♠™(nǐ)碰巧做(zuò)對(duì)了(le),那(≈>nà)麽幸運的(de),但(dàn)如(rú)果不 (bù)是(shì),在開(kāi)發周期的(d≠★e)後期如(rú)果出現(xiàn)問(wèn)®±₩題,那(nà)将會(huì)付出很(hěn)昂貴的(de)代•§價。
如(rú)何避免這(zhè)種悲傷但(dàn)常見(jiàn)問(wèn)↓§ ♠題呢(ne)?
與你(nǐ)的(de)團隊保持聯系,互相(xiàng)支持。如(r→&€ú)果你(nǐ)處理(lǐ)一(yī)個£"(gè)超級複雜(zá)的(de)問(wèn)題并且無法就(jiù)β×≠&最終結果達成一(yī)緻,請(qǐng)咨$✔詢或準備一(yī)個(gè)小(xiǎo)型¶ελ實踐。
咨詢該領域的(de)專家(jiā)或用(yòng←©←)戶可(kě)以對(duì)這(zhè)件(j∞iàn)事(shì)有(yǒu)新的(de)認識。假設和(hé ×)實驗特征的(de)結果非常适合收集反饋€ε,它允許人(rén)們實現(xiàn)一(yī)個(gè)↕€✘可(kě)能(néng)是(shì)錯(cuò)誤的(de)行(xíng)σ£λ為(wèi),但(dàn)已經具有(yǒu)驗證其✘σ"正确性的(de)機(jī)制(zhì)。該機÷÷(jī)制(zhì)可(kě)能(néng)是(shì)一(y×✘☆ī)個(gè)指标、一(yī)項調查、一(yī♦Ω→®)個(gè)關于該功能(néng)的(de)實驗性質&€≤≤的(de)可(kě)預見(jiàn)警告, ¶€α包括獲取用(yòng)戶反饋的(de)簡單方法,然後由你(<☆nǐ)和(hé)團隊為(wèi)特定假設選擇最優機(jī)€↔制(zhì)。
缺乏溝通(tōng)
溝通(tōng)很(hěn)重要(yào)。真的(de)麽?這(zhè)句Ω♦話(huà)你(nǐ)聽(tīng)過多(duō)少(shǎo)次?天↕"×天說(shuō)無數(shù)次。
然而在與各種規模和(hé)性質的(de)團隊合作(zuò)後,這(z♠α✔≈hè)仍是(shì)一(yī)個(gè)問(wèn)題。而創≤δ>建一(yī)個(gè)沒有(yǒu)人(rén)害★♥怕發言的(de)安全開(kāi)放(fàng)的(de)環境,是€σ≥(shì)避免無聲的(de)積壓改進、制(zhì)定毫無意義的(de)沖刺計(∞♣σjì)劃和(hé)漫無目的(de)的(de)每日(rì) γ↕< Scrum 會(huì)議(yì)最行(xí£♣λ£ng)之有(yǒu)效的(de)方法。
如(rú)果您想要(yào)的(de)不→γ§π(bù)僅僅是(shì)将項目從(cóng)一(yī)列移動到(dà☆♠<o)另一(yī)列,請(qǐng)找到(dào₽β→)一(yī)位能(néng)幫助您指導開(kāi)發的(§₹δ>de)導師(shī)。比如(rú)你(n✔φǐ)遵循 Scrum 框架但(dàn)沒有(yǒu) Scrum ∏★♣•Master,則應該去(qù)找一(yī)個(g £ è)。就(jiù)像足球運動員(yuán)不(bù)會(huì)在沒有(γσ₹★yǒu)教練的(de)情況下(xià)比賽。
當你(nǐ)意外(wài)發現(xiàn)隻有(yǒu) •→×10% 的(de)後端為(wèi)你(nǐ¶↓♥∑)剛剛完成的(de)新 FE 功能(néng)做(zuò)好(hǎo)了(le∏✔$')準備,或者實現(xiàn)的(de) API 調整不(bù)兼容時(sh<♥Ω☆í),去(qù)專注于溝通(tōng)吧(ba),它可(kě)以避免你(nǐ£₽)在 sprint 結束時(shí)有(yǒu)意外(wài)₽∑₹§驚喜。
關鍵要(yào)點是(shì)什(shén)麽?
建立團隊精神,讓人(rén)們喜歡彼此分(fēn)享®±≤想法,如(rú)果覺得(de)溝通(tōng)太困難,請(qǐng)找一(yī≥< )位 Scrum Master 或教練來(lái)簡化(♠≠↓huà)整體(tǐ)流程。
商業(yè)與技(jì)術(shù)語言的(de)障礙∞↓→
相(xiàng)互理(lǐ)解是(shì)有(yǒu)效↔團隊的(de)基石。軟件(jiàn)開(kāi₽•)發将兩個(gè)通(tōng)常不(bù)知(zhī)道(dào)如(r>∞↔ú)何溝通(tōng)的(de)世界結合在一(yī)起。以下(xià)是(sh÷>•ì)一(yī)些(xiē)事(shì)情向南(nán✘♣♠)而失去(qù)意義的(de)例子(zǐ):
技(jì)術(shù)人(rén)員(yuán)用(yòng)技(ε←♦jì)術(shù)術(shù)語,業(yè)務人✘↕₩↕(rén)員(yuán)不(bù)明(míng)白(b↔↑✔ái);技(jì)術(shù)人(rén)員(yuán)希望業∏₹σ↔(yè)務人(rén)員(yuán)做(zuò)出技(jì)φ₹€♣術(shù)決策,但(dàn)業(yè)務人(rén)™★→員(yuán)不(bù)知(zhī)道(dào)如(rú)何做(zπ →uò)出決定,因為(wèi)他(tā)們不(bù)了(leΩ)解技(jì)術(shù)觀點;商務人(rén)士用(yòng)商業(yè£≥<)術(shù)語,技(jì)術(shù)人(rén)員(yuán)不(∏♣bù)明(míng)白(bái);業(yè)務人(rén)員(yuán)試圖在不(bù©"'₩)理(lǐ)解的(de)情況下(xià)使用(yòng)技(jγ< ì)術(shù)術(shù)語;在商業(yè)和(hé)技(jì)術(shù)中使用(yòng)不(bù)同♦φ含義的(de)相(xiàng)同詞彙。
是(shì)不(bù)是(shì)很(hěn)熟悉?如(rú)果≈±≥∞想誠實地(dì)交流,而不(bù)是(shì)假裝交流÷Ω,請(qǐng)了(le)解您的(de)聽(tīn$✔g)衆并使用(yòng)他(tā)們理(lǐ)$♣£γ解的(de)詞語。
從(cóng)上(shàng)下(xià)文(w∏™ 'én)開(kāi)始,概述問(wèn)題,提出解決方案,解釋結果,提供示$≥ γ例,并确保你(nǐ)的(de)聽(tīng)衆完全理(l×γε§ǐ)解。
錯(cuò)誤 404:未找到(dào)上(shàng)下(x♠β∑ià)文(wén)
假設為(wèi)功能(néng)準備新需求。你(nǐ δ)可(kě)以簡單地(dì)描述該功能($≤∞néng)應該做(zuò)什(shén)麽,為(wèi)什(s₩$↑hén)麽重要(yào),以及它将如(rú)何讓它更接近(jì$®n)目标。
或者,您可(kě)以概述從(cóng) A 到(dào) Z 的(de)所有β♥(yǒu)內(nèi)容,而一(yī)點沒有(yǒu)討(t↑¶€ǎo)論的(de)餘地(dì)。哪一(yī)個∑∞(gè)更好(hǎo)?我相(xiàng)信大(dà)多(duō)數≈∞≤α(shù)開(kāi)發人(rén)員(yuán)會(h✔★£uì)更喜歡第一(yī)種方法。
新需求是(shì)討(tǎo)論的(de)起點,而不(b ε₽¶ù)是(shì)最終作(zuò)業(yè)。€ 因此,産品負責人(rén)應該始終從(cóng)§ ₩上(shàng)下(xià)文(wén)描述和(hé)反饋收δ∑Ω'集開(kāi)始。了(le)解問(wèn)題及其背景的(de)團₩<<ε隊成員(yuán)更有(yǒu)可(kě)能(néng)提出更好(hǎo)¶♣的(de)想法。讓開(kāi)發人(rén)員(®≠yuán)按照(zhào)所寫的(de)內(nèi)容精确地(dì)編×δ程會(huì)浪費(fèi)工(gōng)程師(shī)¥們的(de)潛力,并會(huì)導緻誤解。
“為(wèi)什(shén)麽的(de)問(wèn♦÷₹≥)題”不(bù)是(shì)不(bù)信任或'™•←攻擊性的(de)表現(xiàn),而是(shì)興趣的(de)表現(δ≤xiàn),它是(shì)區(qū)分(fēn)成功團隊和> (hé)不(bù)成功團隊的(de)關鍵。
是(shì)什(shén)麽讓産品負責人(rén)重蹈覆轍?時(shí)間(π→jiān)壓力是(shì)一(yī)個(gè)答(dá♦™₽)案,但(dàn)不(bù)能(néng)成為(wèi)借口。有(yǒu≈∞)時(shí)需求完成得(de)太晚了(le),開(kāi)發人(réλ₹↕n)員(yuán)的(de)反饋沒有(yǒu)空(kōng)間(₩§♥$jiān)。設計(jì)已完成,文(wén)檔€♦♠已編寫。在這(zhè)種情況下(xià),停止并丢棄需求可(kě)能(néng>)具有(yǒu)挑戰性,但(dàn)如(rú)果您→ φ沒有(yǒu)找到(dào)原因的(de®α)答(dá)案,這(zhè)仍然是(shì)值得(de)的(de)★®。
一(yī)些(xiē)資源被浪費(fèi)了(le),β©÷但(dàn)許多(duō)資源被節省了(le),所以這( λ©zhè)裡(lǐ)的(de)教訓是(shì)——盡快(ku♠"♦ài)共同參與并從(cóng)為(wèi)什(α♥÷shén)麽開(kāi)始。
團隊內(nèi)部孤島
你(nǐ)的(de)團隊由後端、Web、移動、業(yè)務或測試人(∞↓≈rén)員(yuán)的(de)不(bù)同孤島組成。你(nǐ)需要≠↔₽'(yào)所有(yǒu)這(zhè)些(xiē)∏ ✔↑都(dōu)有(yǒu)意義地(dì)進行(xíng),沒有(yǒu)人(>∞≤rén)可(kě)以做(zuò)所有(yǒu)的(de)事(shì)©'®情。每個(gè)氣泡或筒倉都(dōu)應該有(yǒu)自(z←♠ì)己的(de)沖刺目标嗎(ma)?
我們從(cóng)産品的(de)角度來(lái)看(kàn)。
從(cóng)一(yī)個(gè)項目開(kāi)始,項目和(hé)用(yò™∞π★ng)戶故事(shì)都(dōu)不(bù)應該被孤島隔開(kāi$±')。他(tā)們不(bù)應該指定哪個(gè)倉可(k'₽♥∏ě)以完成這(zhè)項工(gōng)作(π zuò)。重要(yào)的(de)是(shì)為(wèi) sprint ✘¶ 評審提供一(yī)個(gè)可(kě)交付部分(fēn)——↑• 最終用(yòng)戶可(kě)用(yòng±>)的(de)東(dōng)西(xī)。
如(rú)果團隊經常無法在一(yī)個(gφ♥è) sprint 中交付完整功能(néng),要(yào)麽是(shì) b '↑acklog 項太大(dà),要(yào&↕∞)麽是(shì)團隊結構錯(cuò)誤,要(yào)麽是(shìφφ↔) sprint 太短(duǎn)。讓孤 ₩ 島合作(zuò)來(lái)改進工(gōng)作(zuò)流€"程,永遠(yuǎn)不(bù)要(yào)将孤島分(f♣₽>ēn)配給順序沖刺,讓它們相(xiàng)互等待
積極主動,走出孤島,從(cóng)一(yī)開(kāi)始就(jiù)精誠 ™合作(zuò),調整流程并盡可(kě)能(néng)實現(xiàn)自(←™ §zì)動化(huà)。
最後
當然,沒有(yǒu)硬技(jì)能(néng)就(jiù)不(bù)可(kě←≤↑)能(néng)編碼。無論您處于什(shén)麽職位,合作(z♠₽Ωuò)、溝通(tōng)或演說(shuō)技(jì)巧等軟技(jì)能(né÷♥ ng)将決定将項目推進何種成功程度。優秀的(d>"♣♥e)公司不(bù)會(huì)尋找能(néng₹$β)夠勝任工(gōng)作(zuò)的(d≠¥♦ e)人(rén)士,而是(shì)尋找能(©↕néng)夠提供附加值的(de)人(rén)才。
合作(zuò),理(lǐ)解他(tā)人(rén),永遠(yuǎn)追求最£λ©®好(hǎo)!