ファーストサーバー報告書から考えるエンジニアの仕事のあり方

Software Architecture

ファーストサーバーの障害報告

http://support.fsv.jp/urgent/pdf/fs-report.pdf

月末だし、月初へ向けてファーストサーバーの障害報告を読んで、エンジニアの仕事のあり方に関して思ったことを書く。

上記のPDFから得られる知見

  1. 周りに比べて、優秀な人がこのような問題を起こす可能性が高い。
  2. どんな人でもミスを起こすことの証明。

レースで例えると

サーキットでカローラを与えられて、100周しろ!と言われたときに、エアバッグなどの重い安全装置を取っ払い、ターボ付けたりサスペンション変えたりして改造し、より早いラップタイムを目指した結果、コースアウトしてマシンが大破した状態。

与えられた車。
高いパフォーマンスを出したい人の車。

安全性vsパフォーマンス理論

いくら仕事のパフォーマンスが高くても、安全に仕事を行えていないとこのような大障害になってしまう可能性がある。よって、安全対策とパフォーマンスの理想はバランスが取れていなければ行けないので、関係性は1次関数で有るべき。安全対策をy、パフォーマンスをxとするとy=xが理想の関数だと思う。(一番上のグラフ)故に、仕事のパフォーマンスを高くしたい場合は、より安全なプログラミングスキルを身につける必要があると考える。

仕事のパフォーマンスを上げるためには、正確性や安全性を考慮した仕組みやプログラムを書く必要がある。今回はy=x/a(a<1)ぐらいにポジショニングされるような運用を行っていたから起きた事故と考えられる。

防御的プログラミング

9年前に、大学の先輩が「OOPで例外ハンドリングを見ればその人のスキルがわかる」と言っているのを聞いて以来、面接やコードレビューの度に、その通りだなぁと感じていた。まさに、上記のy=x理論に当てはまる。

自分のポジショニングはどこ?理想のポジショニングはどこ?

と考えさせられる報告書でした。

どうやってそれぞれを上げるか

performanceの上げ方

いわゆる攻め。日々の勉強、研究、並列化、フレームワークやライブラリなどを使う。

safety levelの上げ方

守り。コードを書かないことが一番。フレームワークを使ったり、ライブラリを使ったりすでに安全性が保証されたツールを使うのが一番。もし存在しなかったら、防御的プログラミングスキルやテスト、QAなどを用いる。

写真

http://www.flickr.com/photos/a7design1/4105562538/
http://www.flickr.com/photos/viriyincy/3449571798/

コメント