結論、会社が利益をあげるという目的にあった提案、行動ができる人。
またはそれを一緒に考えられる人だと思う。
エンジニアは当然エンジニアとして雇われているわけだから、コードを書いたり設計したりがメインの仕事だ。
だけどその仕事に注目してみると、会社が利益を上げるという点において理想的な行動を取れていないことがある。
じゃあ理想的な行動ってなんだろう?
新規開発案件と保守運用案件の二つの点から考えてみたいと思う。
新規開発案件の場合
ある新規のtoC向けのアプリ開発で経営者からこんな提案があった。
「ログイン方法はメールアドレス、Apple、Google、Facebook、Twitterといっぱい用意しよう!」
俺は思った。
「(いや新規のアプリでログイン方法いっぱい用意してどうするんだよ、コア機能作ってさっさとリリースしようぜ…)」
新規のアプリ開発だとなるべく早くリリースすることが求められる。
そんな中コア機能以外で時間のかかる実装をするわけにはいかない。
にもかかわらず何も考えずに「はいわかりました!すぐ実装に取り掛かります!」とか言うエンジニアは経営者視点とは言えないだろう。
外から見たら経営者の言う通りに動くいい子に見えるが、理想は、
「いや、ログイン方法いっぱい用意するとそれだけ時間がかかるし、ログイン方法は1つあればアプリは使えるのでそれで十分じゃないですかね?」
などと言って工数を減らす提案をすべきだ。
とにかくコア機能以外の部分を削りに削る提案をしまくる。
その提案を通すためにはいろいろ言い方があるけど、「時間がかかるし無駄だから」という風なことを言えばまともな経営者であれば納得するだろう。
マインドではなく技術的に求められる部分で言えば、早く安く開発ができる手法を持っているといいだろう。
アプリ開発でいえばFlutterを使って開発すれば1つのソースコードでiOS,Android両方のアプリが作れるし、ホットリロードでのUIの動作確認は実装工数を大きく減らせる。
DBでいえばFirestoreを使えば、CloudSQLなどDBのインスタンスを立てるよりはるかに安く済むし、APIの実装も必要ないので工数も減らせる。(その代わりセキュリティルールを書く必要があるがAPIを実装するより早いだろう)
そんな早く安く開発できる手法を提案し実行すれば、利益を上げるというゴールへの最高のパスになること間違いなしだ!
保守運用フェーズの案件の場合
保守運用のフェーズに入った案件であれば何が求められるだろう?
その案件でも共通して言えるのは、安定してアップデートできることだろう。
そのためにはプロジェクトに関わっている人を辞めさせないことが重要だと思う。
そのプロジェクトに詳しい人であればコードの内容はある程度把握してるし、プロダクトの仕様にも詳しいだろう。
環境構築でわからないことがあったらその人に聞けば大体解決できる。
そんな人が辞めたらアップデート頻度と質は間違いなく落ちる。
新しい人を雇うにしてもコストがかかれば開発費に充てにくくなるし、プロダクトの仕様や環境構築を手伝うのも面倒くさい。
じゃあ辞めないようにするために何ができるだろう。
なるべくその人にストレスなく気持ちよく働いてもらえれば辞められる可能性は下げられそうだ。
そのためには普段のコミュニケーションを大事にする必要がある。
対面でちゃんと挨拶したり、目を見て話したりする。
Slackなどのテキストでのやり取りの際はちゃんと感情が伝わるように絵文字やびっくりマークなどをつけたりする。
自分もこの辺りのコミュニケーションスキルは勉強中だが、とにかく相手に「この人と一緒に働きたい!」と思われるような人でいたいと思っている。
まあ一緒に働きたい!はちょっとハードル高い気がするが、とにかく当たり前にコミュニケーションを取れていれば相手は嫌な気持ちにはならないだろう。
辞める原因ランキングを見ても大体上位にくるのが人間関係なのだから、辞められないようにするためにはまずはコミュニケーションを大事にしよう。
コミュニケーションスキルと、ある程度の開発経験があれば、保守運用案件ではどんな人もマッチしそうな気がする。
案件によって、扱うアーキテクチャやフレームワークが自身のスキルセットとマッチしないことがあるけど、大した問題じゃない。
ある程度経験を積んだエンジニアであればすぐにキャッチアップできる。
それよりコミュニケーション能力がないエンジニアをアサインしたら、周りに気を遣わせ、その結果周りの生産性が落ち、最悪辞めてしまう可能性がある。そっちの方が問題だ。
エンジニアの技術的な面でいうと、自分以外のエンジニアに嫌われないコードを書くスキルが求められる。
そういうコードを書くと、コードを読む際のストレスによってエンジニアは辞めてしまうからだ。
CI/CD環境も重要だ。
開発以外の中で最も重要なタスクの一つを自動化できると、エンジニアのストレスを大幅に軽減できる。
エンジニアは技術が好きな人が多く、自身の開発体験が損なわれることを嫌う傾向にある。
嫌われないようなある程度質のいい開発環境と、できれば新しい技術にチャレンジできるような場を用意してあげれば辞められる可能性は下がると思う。
まとめ
会社が利益をあげるという目的にあった提案、行動ができることが大事。
じゃあその提案、行動ってなんなのかを新規開発案件と保守運用案件の二つのパターンで考えてみた。
案件によって何が理想なのかは異なるけど大枠は合っていると思う。
スキルはもちろん大事だが適切に使わなければ宝の持ち腐れだ。
スピードが大事だって言ってるのに、鉤括弧の位置はここがいいという謎のこだわりを主張しあっている場合じゃない。
まあとはいえ必要なスキルが極端に偏ることはないから、結局バランスが大事ってことになる気がする。