https://codeascraft.com/2014/12/22/engineering-rotation/
1 comment | 0 points | by WazanovaNews 約3時間前 edited
「このタスク、思ったより時間がかかったな。」となるのはよくあることですが、仲間と仕事をするということは皆で大きなことを成し遂げているということなのだというそもそものメリットは空気のように忘れがちで、ある程度の非効率は避け難く生じるし、それが目につくのでストレスの元。どう解消するか?
元Quoraのリードエンジニアで、現在Quipに勤務するEdmond Lauは、"Hidden costs that engineers ignore”"と題したブログのエントリーにおいて、
- コードの修正だけでなく、別のメンバへの説明の時間はかかる。
- 単純に分量でなくコンビネーションの肥大化によってコードは複雑になっていく。把握が難しいレベルになると、ロジカルに修正するのが正しい箇所でも迂回しがちになる。
- 新しいテクノロジーに挑戦すると、再利用可能な共通のライブラリづくり、別のエンジニアが学習する期間、障害やパフォーマンスに影響を与える構造の把握などの追加コストがでてくる。
- プロダクトのカバーする範囲が増えると、コードブランチ / 考慮すべきところ / バグなども増える。データの分析や報告も増える。
- 組織の肥大化は開発チーム細分化で対処することになるが、少人数でお互いのフィードバックが少ない環境になると、同じプロジェクトの文脈の共有が難しくなり、そして結果そのコードのクオリティが落ちるとシステムの不要な複雑化につながる。
と指摘したうえで、これを改善するために、効果とメンテコストの検証、シンプルなブロックにまとめたり、インターフェースを明確にしたりというシステム構造上の対処に加えて、
チームとプロダクトのミッションを定義する
- チームギークで紹介された「Google Web Toolkitチームのミッションは、開発者が既存のJavaツールを使ってどのモダンなブラウザに対しても妥協なくAJAXをつくれるようにすることで、劇的にユーザのWeb体験を改善することである。」のような事例に沿って方向性を定義すれば、チームのアクションの軸がぶれない。
(楽しく)定期的に技術的な負債を解消する
- Quoraでは、「コードをパージする日」を決めて、進捗をランキングに掲載して盛り上げるかたちで、エンジニアがコードベースで未使用の箇所を消すことに専念。
というケースを紹介しています。
また、無駄をなくすということは、実際に何かを削るというだけでなく、その原因となるものを解消するというアプローチも有効。
Etsyでは、仕事のローテーションで異なる職種間の相互理解を促進していますが、これは事業全体を考える目線づくり、相手の言葉/立場を理解することによるコミュニケーションの改善につながっているかと。
社員は各四半期にサポートローテーションに参加し、サポートのリクエストを2時間さばく。CEOも参加。
エンジニアリングローテーションでは、非エンジニアが、課題(HTML / Unixコマンド / Webの構造 / Etsyの障害対応に関するブログ)の予習を終えた後、実際にコードを書いて、本番サイトのメンバ紹介ページにアップ。エンジニアとペアになって、コードの変更、テストの実施、そして「本番アップ」の大きなボタンを押すまで実際に体験する。またEtsyのシステムアーキテクチャ、商品リスティングの閲覧/作成/検索/購入の仕組み、DBのシャーディング、継続的デプロイの講義も実施。
本件についてのHNでのコメントには、
「ベストな人材」を確保するためにどの会社も競争しているけど、本当に賢い会社は自らの人材のバリューをあげる努力をしている。人の心というのはこの世でもっともキャパがあり可能性のあるものなのに、ほとんどの人が思考パターンを制限してしまう。数日間だけでもいつもと異なる見方で物事に取り組むとまったく違った世界にできる。
とありました。工夫によって非効率が減るだけでなく、皆で何かを成し遂げているという本来の気持ちを再認識するきっかけになるかと。