エンジニアの管理をうまくやっていくためのコツ | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

起業家が開発者の管理で犯しやすい11の失敗 @ readwrite.jp


起業家ではないにしろ、システム開発においてはエンジニアとの付き合いというのはうまくしていくに越したことはありません。

例えエンジニア同士であったとしてもその管理というのは結構難しくて気を使うものだったりします。



エンジニアとしての立場を尊重すること


仕事をしていく上では役割というものがあるわけですので、担当しているエンジニアの領域というものをきちんと尊重してあげる必要があります。


よくありがちなのが非エンジニアが技術的なことに口出しをしてしまい、過去に自分が使ったことがあるツールであったり、他のサービスで利用している仕組みをそのまま当てはめようとするようなケースがあったりして、こういったことはエンジニア自身によって、そのシステムの組み上げ方やアーキテクチャとの相性やインフラにおいての特性などを考慮して決めるべきだったりします。

そういったことを考えて決めようとするときにこういった横槍を入れられるとエンジニア自身のモチベーションが下がるだけでなく、システム構成がめちゃくちゃになって保守性が落ち、サービスの寿命を縮める結果になるかもしれません。


エンジニア同士であれば、それが先輩後輩としての教育の一環ということであれば大きく介入せざるを得ない場合がありますが、異なる役割のエンジニアとしてならその立場をある程度尊重してあげないと同じ結果になるかもしれません。

一言でエンジニアといっても専門分野が大きく異なりますし、インフラならインフラ担当としての意見もありますが、それによってアプリケーションの構成に大きな偏りが出てしまったりもするのでそれぞれの立場としての意見をきちんと言い合えるのが重要ではないかと思います。



技術的な苦労を理解する


技術が如何に進歩したからといって、システムを組み上げていく苦労が単純に減っていくわけではありません。

前回の「フルスタックエンジニアなんて目指さない方がいい 」の中で書きましたが、エンジニアが会得しなくてはならないスキルというのは多様化しているので求められるスキルレベルはどんどん上がってきているかと思います。

ですから、システム構築の際に技術的な課題にぶち当たり悩むこと自体が減っているわけでもなく、また技術的な進歩によって悩むレベルが低くなっているわけでもありません。


まぁ、エンジニアを管理する立場の人がエンジニアとしての業務を経験した人ばかりというわけではなかったりするわけですが、技術的な問題で悩むエンジニアは結構孤独で戦っていたりもするので、その状況を把握してあげて、技術的なこと以外での解決方法(例えば運用的な回避やそもそもその課題を先延ばしにすることでスケジュール的な負担を軽減できないかとか)がないかを一緒に模索してあげることも必要です。


ここでわかっていないことをジャストアイデアで言ったりするとさっき書いたようなケースに陥ったりもしますし、エンジニアの立場からすればわかっていない人に言われたくないって思いもあったりして(非エンジニアからすればその技術的な課題が何で解決できないのかがわからないので)、こういったナーバスな状況においては双方の言い分の応酬になるので注意が必要です。

もちろんエンジニアとしても、それ以外の役割で動いている人の立場を理解してあげる必要はあるかと思いますが。



作ったものを否定しない


例え他人のアイデアだったとしても作ったプログラマは作ったシステムに誇りや愛着をもっていたりもしますので、その仕様を考えた本人がそれを否定したくなったとしても言葉を選ぶ必要があります。


サービスの要件はそれを作ったときから流行りなどによって常に変化していきます。

ですので、リリース後に全く異なるものを作りたくなる気持ちもわからなくはないのですが、作ったものを否定するのは(例えそれがそのサービスの仕様や特徴という意味であったとしても)、エンジニアから見れば自分たちが作ったものが否定されるものと同じ意味に捉えられかねません。


大事なのはきちんとサービスのロードマップを作り、各フェーズを終えて次のステップに移っていることを共有しておくことです。

行き当たりばったりで作っては壊しというステップを踏むのはエンジニアの疲弊を招き次のモノづくりをしようとする意欲を削いだりします。



集中できる環境を作る


エンジニアとしての役割に注力して欲しいならその業務に集中できる環境を提供してあげる必要があります。

しかしこれは組織や会社の多くのルールによって阻まれます。

出なくてもよい会議であったり、作っても読まれないドキュメントであったり、教育という名の下に使わない知識を埋め込まれたりするわけです


そういったものをなるべく取り除き、集中すべき仕事に割く時間を確保してもらうことが必要にはなりますが、これには多くのサポートが必要です。

エンジニアがそれをやらなくて済むように周りが多少の犠牲を払う必要もあるからで、それは本来やら無くてもいい仕事を自分や周りがかぶることにもなったりします。

もちろんエンジニアとしてはそういった環境を作ってもらえることに感謝を示すべきでしょうけど。



何を作るかをはっきり決める


特に経験の浅いエンジニアはタスクの優先順位を見誤ったりします。

技術的な興味が先行するあまり重要ではない機能を深掘りしたり、気まぐれで言ったことがエンジニアの心に火をつけて突っ走っていくことはよくあることで、後々それが大して重要なものではないとわかったりお蔵入りするような結果になったらエンジニアのその熱意が台無しとなります。


ですから何が重要で何が重要ではないかははっきりと決めておく必要があります。

この際に、サービスとしての優先順位と技術的な組み立ての意味での順序の折り合いをきちんと付けておくことです。

サービスとしては、この機能ができたら次にこれを作りたいという願望を持っていても、技術的な側面から見ればその順番の前にこの機能実装が必要だという順序がエンジニアの頭の中にあるので、それを互いに合意しながら進めていく必要があります。

これはサービスのリリーススケジュールに大きく影響がでることなので双方できちんと確認しておかないとプロジェクト管理上でもまずいことになりかねません。