【 業配 】接案路上少的那一位 WordPress 工程師

我的工作舒適圈範圍涵蓋網站企劃、介面設計、前端程式設計、客製化 WordPress 佈景主題與開發 WordPress 外掛,雖然範圍有點大,但也持續深耕探索,在了解自己後更勇於面對挑戰,因為找到了屬於自己的工作模式。

自己當年剛開始接案的時候什麼都不懂,尤其是技術相關的議題,每次被客戶問到時總是說沒問題,結果真的開始做的時候才發現問題一大堆,後來參加了很多小聚認識了很多工程師大大,也一起合作過不少的案子,跟他們一起接案就是會有種安心感,覺得再難的問題都有他們可以依靠。

雖然時間久了身邊的朋友會來來去去,但唯獨工程師朋友都是十年交情以上,雖然身處在不同的公司,但都還是會每天一起遠端工作,交換彼此每天遇到的鳥事、分享新的技術工具,從他們身上我學到了太多太多,像是遇到緊急狀況時臨危不亂、遇到複雜問題能理性的分析思考並進行拆解的模式、寫程式時的嚴謹態度、放下該放下的、糾結該糾結的、以及該擺爛的時候要擺爛XD

一晃眼十年過去了,因為被工程師的人格吸引不知不覺自己也變成工程師,然後看著許多新入行的朋友,跟他們分享接案路上的各種地雷與 💩,同時也跟他們一起合作接案,協助他們處理程式相關的問題,才驚覺自己已經變成當年自己很依賴的工程師,專門在拆炸彈跟處理很棘手的問題,也因此意外發現原來自己很喜歡這樣的挑戰,透過這些挑戰來讓自己獲得成就感。

現在,因為找到自己的工作模式後,我更熱於接受這樣的挑戰

以前採用專案計價的方式,我只要第一眼看到專案金額餵不飽自己的就立刻放生,縱使是很有興趣的專案也沒法接,生活的壓力就擺在眼前,哪裏還管得到什麼興趣,但剛入行的朋友一切都還在學習中,如何談案件金額都是要花很多年的時間才能磨練出一套自己的心法,也因此最需要協助的草創階段卻很難找到有經驗的工程師來一起合作。

除非你跟我一樣運氣好,找到不計較錢的工程師XD,或是可以找 Oberon Lai 幫忙,使用時薪計算的方式對彼此都彈性,做多少算多少,不會因為請了工程師而吃掉專案的大半利潤。

用 WordPress 接案哪還需要工程師?

事實上大部分的情況還真的不需要,WordPress 的資源太豐富,看得懂一點英文下對關鍵字就能找到超級多的工具或教學,更不用說還有 WordPress Taiwan 正體中文 社團,以及每個月全台都有的 WordPress 小聚,只要帶著誠懇的心以及學習的熱情去參與互動,裡面的每位大大都會給你滿到溢出來的收穫。

那有什麼情況會需要工程師的協助呢?根據過往的經驗,多半是當網站已經做到八成了,安裝了付費主題以及許多進階的付費外掛後,所產生的衝突或是無法排除的狀況,像是版面跑版、手機版顯示錯誤、樣式修正等等這些介面呈現的問題,很多細節必須透過前端的程式語言來進行調整,如果對 HTML、CSS、JS 沒有一定程度的了解,這些問題就會無法排除,當然,要鑽研的話還是有很多資源可以學習。

另一種狀況是找不到客戶需求的相對應外掛,雖然 WordPress 各種千奇百怪的工具都有,但常常就是少了客戶要的那一種,或是有找到堪用的,但就還是只差一點就能滿足客戶需求。最常見的就是要符合台灣商業情境的應用,像是串接國內服務商的 API 或是 WordPress 要與客戶內部系統做整合,這些都是需要全客製化的開發作業。

因此,雖然 Themeforest 已經有成千上萬的精美版型可以挑選,但總是會有版型功能無法滿足需求的時候,同時為了要增加接案者本身的價值,面臨到自己能力之外的客戶需求是不可能躲得掉的,這時候就會非常需要一位 WordPress 工程師來從旁協助。

WordPress 工程師 vs. PHP 工程師

WordPress 的核心是用 PHP 這門程式語言寫成的,理論上會寫 PHP 的工程師都有能力來客製化開發 WordPress,然而很多事情要達成相同的目標可以有很多不同的作法,有經驗的 PHP 工程師會使用自己熟悉的方式來修改 WordPress,但這樣可能會衍生一些問題,像是外掛更新之後東西會不見,或是造成安全性與效能的問題。

WordPress 是一個既有的框架,就跟其他的程式框架一樣,有自己的規則與設計哲學在裡面,它是在 2003 年誕生的,十幾年的歷史雖然有不少包袱,但早已是一套非常成熟的框架,有數以千計的工程師貢獻過核心程式碼,這些都讓 WordPress 不斷的進化與成長 ( 也常常進化到爆炸就是了 🤣 ),這是其他框架現階段很難達到的規模。

要如何判斷一位工程師對於 WordPress 的熟悉度呢?可以從以下三點來切入:

一、對於 Hook 機制的理解

Hook 機制是 WordPress 可以擁有成千上萬各式各樣外掛的主要原因,透過「掛」載的動作就能在不需修改核心程式碼的情況下,加入新的功能,這樣當核心程式碼在更新的時候,新功能一樣可以被保留下來。看過太多被硬改 WordPress 核心程式碼的狀況,然後客戶被廠商要求 WordPress 不得更新…

WordPress 的更新除了會加入新功能以外,還會修補許多安全性漏洞,畢竟它是全世界市佔率最高的架站工具,也會引來想要大展身手的攻擊者,所以如果不能更新 WordPress,那可能只能把主機的網路線拔掉才會 100% 安全。

為了要能更新 WordPress 程式,Hook 機制是絕對必要的,而且透過它,還能提供開放介面讓其他工程師來修改自己寫好的外掛,而 Hook 有兩種:action 與 filter,更多關於 Hook 的介紹可以參考這篇我寫的文章

二、對於 Loop 與操作資料庫方式的理解

WordPress 第二個核心是 Loop,它是顯示所有文章內容的機制,傳統 PHP 的作法是先建立資料庫連線,然後寫資料庫語法,把需要的資料取得後,再用迴圈的方式呼叫出來,而 WordPress 使用 Loop 簡化了這樣的流程,還提供許多豐富的 API 來自訂要取得的資料內容。

雖然 PHP 工程師還是可以使用傳統的方法來做資料庫的操作,但前面提到,WordPress 已經有全世界的工程師幫你開發出各種 API,無論是針對安全性、效能,都是經過持續的優化再優化,沒有道理不用它,透過這些 API 除了簡化開發流程、增加安全性與效能外,更能學習到世界上其他工程師是如何處理相同問題的邏輯與思維,這對於開發者本身會有很大的幫助。

更多關於 WordPress Loop 與資料庫操作的介紹可以參考這篇我整理的文章

三、對於 WordPress 安全性的理解

上文提到,因為 WordPress 的成功引來了一大群攻擊者,要如何維護 WordPress 的安全性,都已經是許多國外企業的核心服務項目,最有名的就是 Wordfence,他們是一間專門開發 WordPress 防火牆外掛的公司,通時也常發表關於 WordPress 核心程式、佈景主題與外掛的漏洞研究報告。

常看他們的報告會發現,很多外掛的漏洞常發生在缺少驗證程式執行者的身份、執行者的請求來源以及對於惡意程式碼的過濾,這些議題在其他框架也都會遇到,只是因為 WordPress 很大,還有專門的機構來研究漏洞,所以當看到 WordPress 安全性相關的新聞報導時別驚慌,去客觀理解漏洞產生的原因後,就能知道該如何防範。

因此為了提升安全性,使用 WordPress 內建的 API 會是比較好的選擇,另外在執行寫入動作前,先用 curent_user_can() 檢查使用者權限、wp_nonce_url() 確認傳送資料的來源是否為同一個網站、sanitize_*() 過濾使用者輸入的內容、esc_*() 過濾從資料庫取得的內容,再搭配資料的驗證,像是是否為空值、手機號碼是否為 10 碼等等,這些基本功做到就能防止一般常見的攻擊手法,更多關於 WordPress 安全性議題可以參考這篇文章

以上的判斷準則可以很初步的知道這位工程師對於 WordPress 是否有相關經驗,至於其他的主觀條件像是長的正或歪、身高有沒有 186、有沒有不良嗜好就大家自己看著辦了XD

為什麼一定要找 Oberon Lai ?

事實上好像也不用 🤣

有 WordPress 的案件需求,通常只要到 WordPress 正體中文社團 PO 個文,下面就會二三十個留言「已私訊」的蓋樓,我每次都很好奇最後發文者會選擇哪一位,同時也在思考萬一我要去爭取的話,該怎麼獲得這個機會?

但不瞞各位說,其實我很害怕主動去爭取機會。

除了還怕被拒絕外,同時也怕被其他人覺得手上沒有案子很丟臉,都已經出來接案這麼久,啊不是很有經驗?怎麼現在還需要跟人家搶案子來做?文章寫得好像很厲害,好像永遠不會缺工作一樣,想不到還是一樣要跟其他人競爭…

除了面子問題外,更深層的原因還是自信心不足,每次看到其他大大的分享與討論,我總是會有一種低人一等的感覺,因為除了自己不是本科出身以外,更覺得自己不是成功的接案者…

我嘗試過三次全職接案之路。

第一次做到繳不出房租來,所幸在親戚的介紹下進入一間保險公司上班當網站企劃,才有了穩定收入再也不用擔心生活費,但做了五年之後,對於公司的制度文化有太多太多的想法,於是決定要離職出來建立符合自己期待的公司。

第二次接案撐了一年半,比第一次因為沒案子所以做不下去來得好一些,案源算是比較穩,但問題出在專案管理,每個案子花了太多時間,然後每天都在跟客戶爭論當初報價單沒有提到的功能是否該製作,最後一整個放棄自己,客戶想改啥就隨便他改,只要拿得到尾款能活下去就好。

而且上個案子結不了案,新的案子又來,雖然知道會忙不過來但還是要接,因為不曉得錢到底何時會進來,因此常常工作堆在一起根本無法消化,最後受不了,還是逃離接案的生活去了一間遊戲公司上班。

又能夠回到固定領月薪的日子覺得超開心,相較於每個案子都要面對不同的老闆,上班只要搞定一個就覺得輕鬆八百倍,於是就這樣做了三年,但內心仍然一直有著想要再次挑戰自己的想法,直到因為公司經營方向與我個人理念不符後,我又離職了…

第三次出來接案到現在快滿三年了,這次接案學會跟朋友一起合作,承接單價比較高的案件,但還是偶爾會發生一個案子要做上半年甚至是一年的狀況,然後跟第二次接案的時候一樣,最後自己都放棄了一些堅持,再加上受到疫情的影響,案源又開始不太穩定。

於是一直思索著該如何讓自己的接案之路順暢以及又能保有自我的方法,最終得到的結論:使用時薪的方式來工作,每個月固定請款,做多少算多少,再也不用因為報價單裡面的項目在爭執不休,也不用只想著要結案而放棄堅持,就這樣,突然間我好像開竅了,只是花了十年的時間而已XD

知道做的事情可以得到相對應的回報之後,就願意以更積極的態度去面對挑戰,不管是主動去接從來沒做過的案子,或是堅持每天寫文章記錄學習到的東西以及過去的工作經驗,都是重新面對與檢視自己最脆弱的環節,看清楚後就沒什麼好怕了,就跟開發很複雜的功能一樣,只要把任務拆解成很多小環節,逐一完成小地方,最後就能完成大目標。

面對不懂的事物就去研究它,沒有人一生下來就什麼都懂的,看到神人前輩也不用覺得自卑,因為他們一定都已經努力了比我更多倍的時間在這些事情上,不能只看到表面的結果而貶低自己,這樣對自己不公平的。

所以為什麼要找 Oberon Lai 成為接案路上的那一位 WordPress 工程師?也許你念過我寫過的幾篇文章、曾經看過我分享的東西,甚至是在某些聚會上有過一面之緣,但這些都不是重點,而是我找到了一種可以彼此互惠的合作模式,這樣的合作模式讓專案的過程更透明化,更能讓彼此一起學習如何接案才能接的更順暢。

恩?找工程師不就是解決程式問題嗎?還可以學到如何做專案?

開頭提到,自己剛開始接案的時候什麼都不懂,不管是找案源、報價、合約書、專案管理、客戶溝通這些作業都是亂七八糟,然後透過長年不斷的學習以及踩雷無數的經驗後才逐漸發展成一套方法,雖然這方法不一定適用每個人,但如果在接案初期就有人可以告訴我這些事,我一定可以少走超多冤枉路。

而且光是有認識的朋友可以一起吐苦水、抱怨雞歪的人,還可以得到一些實務上的建議,就可以讓接案之路走得不這麼孤獨,彼此分享經驗互相學習,事情會看得比較開,不讓自己鑽牛角尖。

另一方面接案者如果對開發技術有越多的理解,未來跟客戶洽談時的眼界就會越廣,並且在與其他技術人員溝通時,能很快的抓到重點,進而獲得客戶的尊重。雖然網路學習資源多到看不完,但身邊有願意分享的工程師,學習速度會快上八倍。

我寫過不少技術文章分享自己的學習心得,每天睡前的讀物都是程式類書籍,同時又很喜歡新工具、新服務,Product Hunt Indie Hackers 是我每天必逛的網站,我超愛跟朋友分享這些東西,認識我的朋友都知道,我這個人有問必答沒在藏私的,能與人真誠的交流是我最在意的事情。

喔喔,聽起來很不錯!具體的合作方式會是如何進行?

如果你暫時沒案件需求只想交朋友的話,可以寫信給我 m615926@gmail.com,有空檔的話我就會回信跟你聊天打屁XD,萬一我回的比較慢還請見諒,因為我逼自己嚴格遵守著一天只能收信兩次、一天只能開一次通訊軟體&社群媒體的規定,不然太容易讓自己分心了,這年頭專注能力是一種超級寶貴的技能

如果你有 WordPress 網站需要客製化,麻煩也請發信給我,可以的話附上你的電話,比較複雜的需求電話聊比較快。通常客製化 WordPress 會有以下幾種狀況:

  1. 客戶需要建立全新的網站
  2. 客戶已有網站但需要改版
  3. 客戶網站已使用 WordPress 付費佈景主題完成 80%,剩下 20% 需要進行客製修改
  4. 客戶網站已為 WordPress,因業務需求要新增功能或頁面
  5. 其他 WordPress 障礙排除,像是網站速度慢、被置入惡意程式碼等等

以下就各種狀況的需求描述做簡單的說明:

一、客戶需要建立全新的網站

具體描述事項:客戶產業、網站類型、網站目標、網站地圖、核心頁面、核心功能等等,以及其他一些特殊的功能或需求是客戶特別在意的,最常聽到的就是要讓中國境內可以連得到他們的網站。

二、客戶已有網站但需要改版

具體描述事項:改版原因、改版方向、如何定義這次的改版是成功的?通常客戶想改版往往是因為時間到了或是「覺得」該改了等這些主觀的理由,以這樣的出發點改版執行者會很辛苦,因為所有的標準都在老闆的腦海了。客觀的作法是先研究既有網站的數據、使用者意見回饋,以及找出明確的商業目標,盡可能以量化的方式來衡量改版的效益,像是「希望改版之後訂單能成長 5%」。

三、部分客製修改

具體描述事項:哪些頁面或功能未符合客戶的預期,明確指出需要修改的介面以及希望的效果。像是英文佈景主題預設的中文字型客戶不喜歡,希望可以改成 Noto Sans TC 或是微軟正黑體。

四、新增功能

具體描述事項:新功能的操作流程,包括前台介面使用者如何操作,以及後台管理者該如何管理該功能的具體項目。像是新增聯繫客服的固定按鈕在視窗的右下方,點下去後會有對話框讓客戶輸入訊息,輸入後客服人員會在 Email 收到通知,他們就可以登入 WordPress 後台與客戶進行對話,而所有的對話紀錄都會保存在後台以便後續追蹤。

五、障礙排除

具體描述事項:遇到哪種類型的障礙,像是網站後台讀取緩慢、瀏覽前台時會自動被跳轉到不知名的頁面、出現程式碼錯誤訊息等等,通常這種情況我這邊需要後台或是主機的登入權限才有辦法進行檢修,可以另外提供我層級較低的帳號以利排除。

當收到需求來信後,我會根據你的狀況提供幾種可能的作法,如果我們有共識的話,我就會以我們討論的內容進行開發時數評估,範例如下:

(一) 前置作業 – 8 小時

  • 收集彙整參考平台之網站架構 / 功能 – 2hr
  • 資料欄位 / 網站架構確認 – 4hr
  • 頁面風格確認 – 1hr
  • 開發環境與程式碼部署配置 – 1hr

(二) 頁面切版 – 視頁數而定

  • 基礎架構&RWD 開發 – 4hr
  • 首頁前端程式開發 – 4hr
  • 首頁後端資料串接 – 4hr
  • 內頁前端程式開發 – 2hr / 頁
  • 內頁後端資料串接 – 2hr / 頁

(三) 會員功能開發 – 5 小時

  • 會員註冊登入需求確認 – 1hr
  • 註冊 / 登入機制開發 – 2hr
  • Facebook Login 整合 – 2hr

(四) …

最後再把小時數加總乘以單位時薪,就可以得到大概的預算範圍,前置作業的資料準備以及各項功能需求如果越明確的話,就能花費越少的時間在進行溝通,以及減少實際開發出來後的修改時間。如果想了解如何整理需求文件的話,可以參考我的這篇文章:企劃人員如何撰寫有效的軟體需求規格文件

等實際開工後為了避免時數超過預算,我會透過共享計時工具、共享開發中原始碼、共享開發清單的方式來讓你隨時可以掌控時數的流向,另外還會透過每週的定期回顧,檢視上週的完成進度以及接下來預計要開發的功能。

在共同管理專案的模式下,隨時都可以針對客戶的回饋進行開發順序的調整,避免糾結在「不是那麼重要」的細節,而是專注在真正的核心需求上面,這一整套的合作方法我稱作為「敏捷式接案」,更多關於敏捷式接案的說明與由來可以參考我的這篇文章:我的接案報價學

結語

很開心有緣能讓你看到這篇文章,我喜歡以交朋友的方式來跟人一起合作,也喜歡跟願意學習交流的朋友來讓彼此一起成長,希望我能成為你接案路上值得信賴與依靠的那一位工程師!Mail 給我吧

【 業配 】接案路上少的那一位 WordPress 工程師 有 “ 4 則迴響 ”

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *