Don't hire a software developer until you read this book是一本有趣的書,它的副標題是:學習如何管理應用程式的開發流程,確保你的手機程式,網站,網路應用的產品會成功做出來。
這本書和一般的企業巫醫做法略有不同,它只專注在一個單純面向,就是「非軟體人員如何建構軟體開發團隊,並且做出自己要的產品」。實務上,它是一本工具書。裡面的Pro Tips直接而且不廢話的指出應該要的做法。
這本書花了好幾個章節,大致闡述了近年來軟體開發的相關技術與運用,並把重點放在非技術背景的創業者,如何組織建立軟體開發團隊,並且讓團隊往期待的方向前進。
做得到書上的內容的人,大概就是程式設計師心中的好老闆,或者是好PM。
然而,這本書其實也非常適合給「程式設計師」閱讀
它展示非技術人員領導軟體產品開發「真正關心」的地方:也就是實際產出。至於開發人員使用的程式語言,使用的軟體工具,甚至想要把產品做的完美...這些都是不是考慮的要務。
例如,在書中說明新創產品開發常犯錯誤的幾條
(1) 為求完美把錢燒光了:
MVP需要的是最小規模的產品以及最好的品質。但太追求完美因而增加太多附屬功能,在作者來說是一種無法控制的浪費
(2) 輕忽看似很小的需求規格改變
例如某些開發人員會說「這不會花太長時間,只是把按鈕從這邊移到那邊」。開發人員當然會負責搞定,但是要求預估時間是創業家一定要做的事情
(3) 忽略測試
測試的重要性應該不用多提。然而非技術人員很容易忽略測試的重要。
(4) 即將上線前做需求改變
對作者來說,這等同於自殺任務。其實資深的軟體工程師在內心深處都很清楚這點,但是創業者或PM想要自我毀滅的時候,又有多少人可以阻止?
(5) 開發中後期增加人力以加速開發
在人月神話這本書中有很長的篇幅描述,很多時候增加程式設計師只會讓專案速度更慢。
此外,一般開發人員也可以透過這本書獲得Lean-Startup的精神概念與實務上Agile開發的整合。
舉例來說:它說明了Agile原則,以創業者的角度,來看agile的各種方法論對軟體開發的好處。並且也拿實際工具(Trello),展示一個創業者實際對開發團隊該做的動作,連同移動Task Card都說明很清楚。MVP,如何做出最小可行規模的產品。從創業者的角度,來看這些工具,其實更可以讓軟體工程師知道專注於最小變動需求的好處。
Recently, I've interviewed a candidate who applied for Sr. software engineer job and he did demonstrate an unusual character of Taiwanese engineer: self-complacency.
The interview started from a quick technical review to know his skill set base on his resume.
At first, we quickly ask "How do you identify your Linux skills" and he said "I am very good at Linux". Then we ask a few basic Linux commands, for example: "How to know your current disk usage?". "How to know current Linux kernel version". He actually cannot answer much.
Then, we asked "How do you identify your level of SQL?" and again he said "I am very good at SQL". But he actually don't know any basic concept of "outer join" and "normalization". He explained SQL is what he is working on not the scope of his research area. Then we asked "how to avoid SQL injection in application" but he still can't say anything.
Since his resume said that he is "excellent" in English, we asked if we can continue interview in English. He took a deep breathe and then said "no".
Finally, he explained that he can quickly learn "anything" in one month but then forget that in next month. But he still emphasized that "I think I do have the talent of software development, give me a mission and I can commit the code". This might be true that he can learn "anything" quick and "commit code" for the job. But it is definitely also true that no one will hire such risky engineer.
To me, at first, I think it is extremely unusual to see an engineer with 7 years experience has such self-complacency and with such low actual skill set. But then his resume shows that he worked for 6 different companies in past 7 years. Change job doesn't means that the candidate is bad. But it is still a sign for Taiwanese programmer. Another sign is that he did have very good education background and also good delivery in first 2 jobs. But then, he seems stay in there.
How to distinguish self-complacency from self-confidence?
We do want engineers have confidence to take challenges. But how can we tell a candidate has confidence or just too complacency?
During interview, our suggestions are
(1) Check skills by fact
Ask simple, un-ambiguous technical questions. Do not rely on his words on resume. For example, if his resume shows he has 10 years experience in Linux Operation, make sure you will ask at least 3 most simple questions and 5 middle level questions. If his resume says that he has 10 years in Java, make sure ask the last moment of his java coding. Sometime, the answer will surprise you.
(2) Check experience by real actions
Some candidates described experience like this "design XXXX system". This could be very important task but also could be a self-complacency thing in candidate's mind.
If this candidate lead design meeting, come out a design document - even a hand writing document or drawing picture from whiteboard. That means we can check the design and know how many of "special" things inside the design.
However, if candidate couldn't say any concrete delivery (we don't need to ask him to provide right away, just want to know if there is), then it is very possible that he "believe" that he did the design job but actually the design was inside his mind.
You need to heck the actual actions and delivery of it. You can ask "please let me know the exactly things you did on design XXXX system and also the delivery at that time"
(3) Find critical point by the actions candidates did
Always looking for fact of candidates did in previous jobs. It is very similar to (2). We will need to understand his behavior via his previous actions when face a critical situation.
However, I am sure everybody will prepare a pretty nice answer of "why you leave your current company". So just save your time, ask other question.
Check candidate's resume and you will always find some critical moment in his career. For example, a project which requires a new skill set, then you can ask how candidate learn new skills. Or, senior engineer might play leaders role in certain situation, then, you can ask what is the worst thing happened during his leading.
Always Consider Facts
In short, always consider to gather fact during interview and identify if candidate fit your organization through fact, not to guess.