2008年9月14日 星期日

Stuff about Architecture

2008-09-14 關於架構

Many years ago, there was a chance to work with one talented firmware engineer who were working for one of our customer. Somebody told me this guy was excellent at his job, that is, he had got good records for years, though he was still a young one. The interesting point was he always would start his job, mainly firmware coding, right after project kicked off. And he could make it at a very fast speed to meet those always tough schedule. So everybody would like to have him in project. One the contrary, there was another style. Engineer would not start coding at the beginning. He would investigate the problem, studying, specification..... But everybody, managers especially, could not wait for something realized by today, so they would think this guy was too formal and slow and keep skeptical about the outcome.

This is interesting to me about the way engineer solves problems. Though, the 1st engineer seemed to be having better EQ, I would like to remove those factor in this discussion. In general, engineer is expected to realize, implement something working. Someone would like to make some small gears at the very beginning while only a foggy idea about the final outcome, see how well it run, then modify and try again. This process will continue until whole stuff running and it seems to be reansonable for a seansoned talent. We call this is a bottom up approach. The other way, top down apporach, engineer would clarify requirement, constraint at first stage, then investigate an feasible architecture before making something realized.

I would not say which one is best, but from my experience and observantion I would like to prefer top down mixed with bottom up. Of course, it depends on case, simple tiny or complex huge one. However, I am use to think while organizing and writing something down to certain detail that I can have clear and structured image in my mind during the implementation stage afterwards. For those which are no doubt at the very beginging, we can start to make, i.e., bottom up, that concurrent development is possible. In this way, the risk to rebuild some blocks totally while integration can be mitigated. The worst case is to discard everything at some later stage. It will cause timing and resource wasted and schedule crashed.

Architecture will show its power whenever we need to know how well the product will run and how we interface other components in a big team. Moreover, in electronic product design today, we are concerning very much about design platform and reuse. It is impossible to fulfill those requirement without clear concept of architecture. Furthermore, good architecture will help in the future when we have to make some changes or when we have to fix problems, then dirty patches around the design, which eventually nobody will understand, can be avoided.

Back to real world, no company affords so-called architecture engineer, here in TW, every engineer in the team are expected to do everything as soon as possible. In reality, the winner is who can deliver the lowest price product at first time when customers with order in hand are standing in front of door today. In such situation, engineers are squeezed to get the orders. Moreover, the shorter the product life time, the worse this situation is. This is stressful to engineer and management, since we only earn shear margin after really hard working which engineer didn't get growth. And this cycle will repeat itslef for next case until finally enginner team burn out phased out, then we recruit another new team. This is really a tragical cycle.

The problem is how we save us from this kind of cycle! Improvement of the engineer productivity and quailty always help but you need to invest resource and time. No free lunch! However, enginner has to be aware of his or her situation and be willing to make change before such improvment could take effect.

[BookDigest]: 現代嵌入式系統開發專案實務

2008-09-14
"現代嵌入式系統開發專案實務-菜鳥成長日誌與專案經理的私房菜", by 邱毅凌

It is unusual that a local published book targeting for embedded design practices, mainly SW and FW, in such a proficient and systematic way.

I was always wondering how those so called "SW engineers" did project. Always heard "complex, difficult, hard bugs, linux kernel, drivers, boot-loader,.......", "delay and again delay......", "customer complaint", "new feature", "release"....... one word: chaotic, no end light.

What I saw:
1. started from beginning, Do, Do, Do.......and Demo/release
2. no spec.
3. so source code management, sometimes you just couldn't get it.
4. resource not sufficient, mostly only driver engineers equipped.
5. No integration flow
6. Lack of test, verification practices
7. Lack of engineering management, but outward management
8. w/o architecture
9. They couldn't tell others in brief, ex in one slide, about what they were doing.

Strange to me, what has made this. What is our problem here in engineer training and education?

SW engineers complained that they are secondary, compared to HW engineers, even worse, they got paid less than HW engineers. One possible cause, I guess: we are making and selling HW products which really/physically count in terms of price. What is the value of SW? It supposed to be low risk. Right?

Seems now the weighting of HW and SW has already changed, the SW complexity and head counts dramaticly go up in development team. Already invested very much in HW development and manufacturing, but still too less in SW side. Further, the slower learning curve makes it worse.

Any way, this is a good book and good start for this field and for those probies like me.

2008年9月10日 星期三

[Digest] Product Design and Development

2008-09-10
(a translated book about how a product company develops a good product.)



Just read a book, title "Product Design and Development".
The book guided reader some major concept and procedure by real product story which are all about physical assembled products like printer, screw driver.....This is a good reference for process and concept for new product development.

The 1st slide is about different kind of project category which show different situation. Think about what kind of project you are doing.

Major stages, processes and activities for players---marketing, design, manufacturing---are listed as below.


The 3rd: Project planning

The 4th: Customer needs and product spec.
Here is the area we usually don't touch or don't know how to do since we are doing OEM business.

5th: Concept development:

6th: Product Architecture:
For two items above, we used to just think, guess or follow boss' order w/o a such systematic process. Or we don't have time to consider next step so architecture is skipped.

7th: Project Management, DSM(design structure matrix, tasks: iteration, integration, sequence)

8th: Project Contract Book

BUG Making

2008-09-10

        工程師必須管理,解決,產品發展過程中所製造的BUG。工程師也提供複雜的工具,資料庫,以管理流程及BUG。聽來矛盾,詭弔?好像是工程師故意把事情搞複雜,沒事找事,以彰顯自己之不可或缺似的。

        話說人非聖賢,孰能無過!此所以有公理一曰:犯錯乃人之本性! 是以,很多大型組織內有數不清的作業程序,防錯乃基本功能之一!搞到極致,就像作業員,每個人皆按SOP做事,如同事先設定好指令(Program)的機 器,遇到例外狀況,只能停機,警示。但是,到目前為止,工程師的工作,尚無法如此高標準化。果真有那麼一天,我們需要僱用的是電腦或機器人工程師,他們不 會抱怨,沒有情緒,24小時待命,無須休假,生產力高,穩定,不會犯錯--除非機器有BUG!哈!還是又回到原點。但,可以期待的是,那時的工程師,應可過著比較正常(像人)的生活吧!

工程師犯的產品BUG,之所以如此惡名昭彰,並非只有工程師才會犯錯,而是因為交貨延遲,客戶抱 怨,電腦當機,甚至退貨;更嚴重的例子,如橋樑大樓震垮,太空梭爆炸,火星探險號當機,飛機失事、、、。如果有一個公司,只有工程師會犯錯,她應是股王! 完美的夢幻隊伍,當然,工程師要具改善,創造,創新之基本能力。

看看有名的Murphy's Law 就瞭解我們常被臭蟲咬的遍體麟傷的原因了。援引兩條如下:
Anything that can go wrong will go wrong.
If any things simply cannot go wrong, it will anyway.
此公理二。

我看過所謂的"不可原諒的錯誤",皆屬此類。可能是知識,訓練不足,或是太有自信。或者心存僥倖,先繞過(Work Around)再說,殊不知它遲早來咬你。吾人可以借鏡飛行員及腦外科醫生,無論他們多資深,每一次任務,每一檯刀,總是戒慎恐懼,如履薄冰,對他們來 說,只有別人的case是小case,自己上陣的都是大case。抱著這樣的心態,才有機會累積經驗,做出改善,一次比一次做的更好。

依Murphy's Law, 即便佈下天羅地網,依然會有漏網之蟲,這就是真實世界,也無須因此過於悲觀。所以,面對問題時,最好能保持心態開放,謙卑---面對物理及人的世界,因它總不欺你。

最近坊間出版了大前研一談 邏輯及麥肯錫顧問公司的書,引起一番討論。固然,這應視為工程師之基本修練,惜文化,習性,偏見一旦成型,很難改變。東方人習於人際導向,而非數據,方 法。面對問題時,不是Try-Error,就是Jump to Conclusion,甚至連問題描述都不對,就無須期待該方案能成功了。

有趣的是,人性常會跑出來干擾我們 --難怪有人要主張人本非理性,比如防衛心態,這不可能是我的錯、、, 強烈的自我擋住瞭解決方案出現的可能,我們的心就進入無窮迴圈,跳不出來了。有一種有趣的對應方法是,無論如何,假裝自己是受命解決問題的顧問,心平氣 和,但表現專業。另一方面,組織面對問題時,如果只在乎是誰的錯,人們會開始推諉,不敢冒險,創新,團體因此失去學習成長的機會。

死腦筋工程師

2008-09-10

        工作久了,總會聽到業務人員的抱怨,這死工程師竟然在客戶的MEETING上說SCHEDULE 會有問題,害我屁股擦不完﹑﹑﹑﹑。或者在討論產品需求時,資深工程師脫口而出"這怎麼可能?MISSION IMPOSSIBLE, 你們瘋了?"。可過不了多久,競爭者的產品上市了。

        工程師當久了,總以為這世界是Logic Model,黑白分明的,奉物理的自然律是無上律,$的世界也該當如此,殊不知"人的行為"這事遠比物理(工程)複雜,且從來就沒有準確的Model。相 較於工程,當目標確定,我們總會選定方法﹑工具﹑模擬﹑分析,評估風險對策﹑﹑﹑﹑等,步步為營,務求成功。自然養成看事實/數據/證據說話的習慣。依此模式去看行銷/業務的工作,就會覺得這些人實在不夠科學,只會耍嘴皮。反過來,業務人員則認為,這些人不知變通,很難溝通。

        雖說行銷/業務比較像是暗夜行舟於未知海域,摸石子過河,等而下之者,沒有策略及方法,只等老闆及客戶的命令行動;雖說是不同領域,且商學院號稱"管理科學",恐怕是理論/實務之差距了。

        另 一方面,當客戶的聲音(需求)出現時,工程師會直觀的予以否定,"怎麼可能?到底懂不懂?白痴問題"。有個笑話說,一個IDEA出現時,如果工程師說這簡 單,表示這裡沒有甚麼機會;反之,則值得繼續探究。面對這類問題時,如果能保持開放心態,詳細探究顧客需求---通常這不是工程語言,說不定解決方案早已存在,或者那是一個很棒的產品概念。

        工程師修練之一是跟不同領域的人溝通,瞭解各領域之不同觀點及需要,解決並發現問題,保持開放心態,進而發現新的需求及機會。

2008年9月1日 星期一

xPD xPM

What xPDxPM really is?


Whatever taste you like:


Product Development
Product Design
Product Planning


Product Marketing
Product Management
Project Management
Program Management


then, what does x stand for?


again, whatever you like
successful, surviving, exciting, good, or...
shit, fuck.....