在排版頁面元素時,我們常常不小心蓋到不該蓋的元素,或是被不該在上面的元素蓋掉都常常發生。

常常搞不定頁面上 z-index 順序,9999 結果還是被蓋過?
z-index: -1 結果東西被其他元素的背景蓋掉?
我想要 X 永遠都在 Y 與 Z 中間,但….

這篇文章試著釐清元素垂直排序的規則,這裡先用一張圖來展示所謂的垂直排序,也可以到 Codepen 玩玩: https://codepen.io/finfin/pen/JjEMzBe

https://codepen.io/finfin/pen/JjEMzBe

以這張圖為例,垂直排列順序為(由下至上):

#1 < #4 < #6 < #5 < #3 < #2
<DIV #1></DIV #1>
<DIV #2></DIV #2>
<DIV #3>
<DIV #4></DIV #4>
<D …


一個正常的 git commit 會含有 username 以及 email,用來辨別是誰提交了這個 commit。不過基本的使用情境,username 以及 email 都是可以直接透過 git config user.name 以及 git config user.email 直接修改。

這會造成什麼問題呢?一種是我可以直接用別人的名義 commit,或是我可以假冒別人的名字修改 commit。雖然說一般 git server 都會有認證機制,沒有權限的 repo 是無法存取,但沒有認證的帳號仍然是可以在自己有權限的範圍內做出一些不屬於自己該做的事。

因此我們需要認證 git commit。以下是簡單的步驟: (for Mac)

安裝並產生 GPG

  • brew install gpg
  • 在你的 profile ( …


因為自己屬於 notion 重度使用者,每日大小紀錄甚至工作上都會用到它,一天 notion 裡面泡個幾個小時那種。也因此,操作的效率變成資訊處理的瓶頸,工欲善其事必先利其器,這裡就來分享一下可以省下我大量時間的兩個工具:快捷鍵 & notion-enhancer

快捷鍵

官方快捷鍵文章寫得非常詳盡,推薦閱讀 https://www.notion.so/Learn-the-shortcuts-66e28cec810548c3a4061513126766b0。也整理一下那些比較常用的指令。分兩種類型:一般操作&基本文字編輯

一般操作

  • ⌘ + P 搜尋所有檔案
  • ⌘ + [ / ⌘ + ] 前一頁/後一頁
  • ⌘ + \\ 開關側欄
  • / 帶出功能選單
  • ⌘ + ⌥ + 0~9 把內文轉變為各種不同樣式
  • ⌘ + + / ⌘ + - / ⌘ …


很快的我們即將從 2020 畢業

年末了,也是該好好地回顧整過去一整年。這次靈光一閃把平常兩週一次的回顧會議主題設定為『歲末年終感謝祭』,目標是讓大家重溫這一年,並且最後依據這一年的狀態找出下一年可以改善的方向。由於討論的內容與時間跨度一定與平常不同,自然需要準備的東西不同,這裡就來分享一下最後這個會議做了什麼:

會議準備

此回顧會議與平常最大的差別在於時間跨度是平常回顧會議的 26 倍(我們兩週一個 sprint),一般人連昨天午餐吃什麼都不一定有辦法馬上想得出來,因此第一要務是需要先整理過去一年發生的重點事項,好讓大家有個回顧的基礎。

為了幫助團隊回想並且找出好的改善行動,重點事項的角度可以是產品面、技術面、甚至一些大環境、個人生活面的。此時可以善用團隊的紀錄文件尤其是 planning / refinement / review / retro 紀錄,來幫助自己整理出重點。包含 planning 規劃的功能、refinement 常被提出的需求、每次回顧的可執行事項等。

為了讓討論可以更順利進行,最好是在會議前就先把這些重點拋出,讓大家有時間好好回憶這段時間發生了什麼。試想如果直接在會議上突然拋出這些,大家沒有時間消化,最後的想法可能都還是會以近期印象比較深刻的事項為主,那就失去我們想要做『年度』回顧的初衷。

會議的進行

會議本身仍然可以依照團隊習慣的回顧方式進行,最大差異在這次大家要產生的是『現在就可以開始、明年有可能持續進行的改善事項』。以下是我們自己的玩法:

  1. 2020 想感謝的三個人事物,其中有一件是大家可能不知道的事情
  2. 2021 你最期待的三件事?

重頭戲自然是第三點的『新年新希望』,從大家期待的事項,來反推現在還有哪裡需要加強的,然後挖坑給大家跳(誤)。儘管我們 OKR 也是會歸納成員們想做的事,但畢竟 OKR 是比較目標導向,容易忽略一些不在目標上的事項。這同時也是可以檢視團隊認知是否一致,如果大家對產品的認知出入沒有太大,就會出現類似的期待。舉個反例:如果有人認為產品才在 poc 階段、有人認為已經可以開始推廣,就會同時出現對於產品功能加強以及業績增強的期待。由於這裡會討論的幾乎是 OKR 目標等級的議題,但也是個取得大家共識的好機會,同時找出大家可以開始動作的起點。

可執行事項

這些動作的起點自然就變成最後產生出來的『可執行事項』了,這次的可執行事項有可能背後揹負著的是一整年的期望,因此寫『可執行事項』需要寫明確點,不要寫『做出 XXX 大功能』,而是在討論時就需要討論可以怎麼開始,比如『與相關 stakeholder 協調 XXX 進行方式』、『規劃 XXX 功能』。(SMART 原則還記得吧)

這些可執行事項的目的是負責點火(開始),並且確保接火花有人接手,可以持續的燃燒。如果我們想要有個明確的結果,那麼有個明確的開始也許是個不錯的方式。

我們新年新希望

說最大的希望當然是持續透過產品來讓求職及招募變得更方便、讓雙方能夠找到更合適的彼此,為了達到這個目標嘛…團隊仍在招募中,希望加入可以自由發揮技術同時對產品開發有興趣的,歡迎與我們聊聊

摘要

  • 整理過去一年的重要事項
  • 如果產不出來,表示需要開始記錄開發的狀況(恭喜你,新的『可執行事項』get!)
  • 回顧會議的熱身階段也變得相對比較重要,因為我們平常不會以年為單位來討論,需要花些時間來進入狀況
  • 由於跨度較大,建議時間拉長為兩倍。也因為時間拉長為兩倍,就需要設定中途休息時間、會議室的重新確認等,此外順便訂個下午茶大家吃吃喝喝放鬆點吧
  • 重點!!! 產生出『可執行事項』,並確保有後續的動作
  • 明年記得回來看看這些『可執行事項』


資源是有限的,需求是無窮的。想要把事情完成,就要挑重要且可以完成的先做。這也是 OKR 這本書所強調的第一個重點:透過限制目標數量 3–5 個來聚焦。讓團隊專注在重要的目標上,齊力解決同一個問題。

Q:集中火力時是否容易重工?A:的確比較容易,但分散火力時也會有方向不確定沒有把資源有效使用在正確方向上的問題。且大家如果都在做同件事情且彼此間的溝通良好(後面會再細講溝通)的話,反而會比較容易發現重工的部分,比起來分散目標容易造成各自為政,浪費資源的情況會比聚焦時的重工來得嚴重。

目標的釐清

要所有人聚焦,把目標搞清楚是很重要的。OKR 把目標管理這件複雜的事情濃縮成了 『目標』以及『關鍵結果』之下的簡單文字。舉一個實際的例子,我們身為一個求職平台,一開始可能會有這樣子的 OKR:

目標:協助求職者找到工作
關鍵結果:1. 投遞量 + 400% 2. 每月活躍用戶 MAU + 200% 3. 給他一隻貓

乍看也許簡單清楚,但實際上當成員們開始討論時,就會冒出許多『為什麼』:

  • 為什麼是用投遞量與每月活躍用戶來衡量?為什麼不用 XXX 指標?
  • 找到工作就好了嗎?那我們與 YYY 有什麼差別?這樣是不是違背了組織願景?
  • 為什麼要給他一隻貓

以及,更多的『要做什麼』:

  • 我們有辦法計算 MAU 嗎?
  • 怎樣算是『找到工作』?
  • 我有個大膽的想法可以幫助求職者找到工作,但他會大幅降低我們的活躍用戶,試問單兵該如何處置?
  • 我覺得可以做 A 功能來提升投遞量,但另一個團隊成員覺得 B 功能比較好,dochi?
  • 所以我們該做什麼來提升投遞量?提升 MAU?
  • 預計要做的功能 C 看起來對任何一個 OKR 沒有幫助,還要做嗎?
  • 要一隻貓有難度,可以給空氣鳳梨就好嗎?


相較於第一天的演說形式,第二天主題是各式工作坊。身為一個工程師當然是直接選擇技術軌,由 3D 四少 REFK — River, Eason, Fong, Kim 帶來的『DDD 深度歷險:從戰略到戰術』。四位大大加上助教群百年功力(?)加持下,工作坊可謂收穫滿滿。

工作坊分為三個部分: 事件風暴 Event Storming、戰術建模 Tactic Modeling、以及 Example Mapping,最後一部分由於有事提早離開沒有參與到,這裡就來分享一下第一次玩事件風暴以及戰術建模的一些想法。

事件風暴 Event Storming

事件風暴這類大型協作討論,首選還是使用超大的白板,不過現場工作坊分成八組,沒有地方放八個超大白板, 因此使用的是電子白板軟體 miro。先給大家看我們的成果,主題是假想的機票搜尋訂購網站的系統流程: https://miro.com/app/board/o9J_leUokrk=/

首先,無論事件風暴、User Story Mapping 或是 Wireframe ,背後都有個重點:對齊大家的認知,避免產生各種錯覺。同時透過群體討論破除各自的知識詛咒認知固化所產生之盲點,並建立群體的共識。而事件風暴則是透過團隊與領域專家共同討論,讓團隊能夠把領域知識轉化為系統架構與流程的一個過程。


200/11/27–28 是台灣第一屆的領域驅動設計 (下以 DDD 簡稱) 年會,光是聽到 DDD 很多人會以為是工程師的名詞,但這真的誤會大了,讓我先用一句話來介紹 DDD:

領域驅動設計 Domain Driven Design ,是透過專注理解領域問題並以此建構相對應軟體的一套方法

整個方法包含兩大部分:理解領域問題、以及建構相對應軟體。『理解領域問題』有很多可以討論的:誰該理解?理解什麼?怎麼理解?為什麼要理解?『建構相對應軟體』聽起來就是工程師的主場,但工程師光是看書上所寫很難有實際的感受,也一定不知道如何下手。

DDD 涵蓋的範圍非常的廣,初探 DDD 的人如我難免有上述一堆問題,這也很切合此次年會『讓更多人知道何謂領域驅動設計 (DDD)』的主軸。先說結論:參與後的收穫非常切合此主 …


公司讀書會來跟風近年很夯的 OKR: 做最重要的事。此系列文將紀錄我們的 OKR 學習討論歷程。本文為簡單的 kickoff 及基本介紹,之後預計依序探討以下幾個 OKR 的核心觀念:

  • 團隊合作:透明化的目標設定讓團隊可以彼此協調、統整
  • 掌握進度:建立明確的指標,以確實掌握進度,並依據狀況適時調整
  • 自我挑戰:Aim High,突破自我
  • 回饋與改進:面對未知的世界,瞎子摸象的我們需要邊探索邊調整方向與戰術
  • 組織文化:打造組織適當的準則與環境,讓上述各點得以順利實現
這是讀書會的摘要,因此除了書本內容之外,也包含了成員間的討論與相關的工作坊/作業。這是我們的成長紀錄,也是一種參考案例,希望能夠與對 OKR 同樣有興趣的讀者們一同交流。

什麼是 OKR?

OKR 全名 Obj …


當專案變大、變複雜,若是不好好處理,維護成本或是開發成本都會逐漸提升,最後到一種無法動彈的地步。系統演變至此,(看起來)最低成本的方式就是砍掉重練了。

年輕人終究是年輕人 https://memes.tw/gif-maker

單一責任原則 SRP Single Responsibility Principle

A class should have one, and only one, reason to change.

在跳進 React 範例之前,還是先來回顧一下單一責任原則。這是一個相對容易理解的原則,套用到 React 專案就是,一個功能拆成一個元件(檔案) …


原文網址 https://www.techtello.com/how-to-deal-with-difficult-people/

image from: https://www.techtello.com/how-to-deal-with-difficult-people/

人類這種生物有著天生的社交需求,社交的目的之一是透過交流來獲得他人的認可。當他人與我們有相同的信念時,我們會感覺良好,覺得被肯定,反之則會失落。很自然的,我們喜歡與我們相近的人共事,所謂的『同溫層』。

因此,當有人貶低我們的意見、否定我們的想法、忽略我們要說的,表現得像個萬事通、以批評為樂、創造負面的能量,就會讓我們覺得很不開心。這些『難相處的人』的行為總是會踩到我們的地雷,他們應該為製造的麻煩負責,畢竟,他們才是有問題的那群。

人們的困擾不是來自事情的本身,而是來自他們對事情的看法。

— 斯多噶派哲學家愛比克泰德 (Epictetus)

也許我們對難相處的人的看法 …

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store