理想の仕事環境で開発したい話

こんにちは、こんばんは、はじめまして。

新規プロジェクトで C# を書いている mrgk です。

自分は元々サーバーサイドのエンジニアとして Applibot に入社したのですが、自分の希望で昨年から UnityC# を書いています。

その過程で感じた、サーバーサイドとネイティブサイドとで考えていることの違いや、そこから発生する認識の齟齬等の経験から、どうすれば 理想的な仕事環境 で開発出来るのかというようなことについて、先日の LT で発表させていただきました( 先日のエントリー でさわりを紹介していただきました)。

少し間が空いてしまいましたが、このエントリーでは、この LT の内容関連の話を書いてみたいと思います。

理想の仕事環境とはいったい何なのか

皆様は、どんな仕事環境で開発をしたいでしょうか。

  • 好きな仕事に好きなだけ集中できる
  • PCやキーボード、ディスプレイから、デスク、椅子に至るまで開発環境が快適に整備されている
  • 雰囲気が良く、皆明るく、笑顔で仕事をしている

などなど。枚挙に暇がないと思います。

自分は以下の様な環境で開発したいです。

  • 良い物を作るために各職種が考えるべきこと へ特に時間をかけて集中できる

具体的には、

  • 専門外の領域は専門の職種の人に聞く。聞かれる。聞ける
  • 専門が居なかったり、分からなかったりする様な、未知の領域について時間をかけて議論する
  • 皆がやっている、繰り返される作業は、自動化・効率化されている

というような事が意識されている環境で開発をしていたいです。

普段から無意識にやっていることだとは思いますが、敢えて意識してやるための、組織、仕組みを作っていきたい。

意識していないと何が起こるのか

以前、 グリモア〜私立グリモワール魔法学園〜 のサーバーサイド開発を行っていた際、まずある程度の叩きの仕様を元にして、クライアントサイドに提供する API を設計することになりました。

そこで、(まだ開発初期だったこともあり)今後のことも考えて少し時間を多めに割き、サーバーサイドとクライアントサイドの扱うデータの単位の差や通信量の削減などを考慮した、より簡潔で扱うべきデータだけを持つようなレスポンス形式を検討、設計しました。

API 仕様がある程度固まった後、クライアントサイドに随時共有しながら実装を進めていたのですが、開発が進み、プロジェクト内で色々な話や相談をしやすくなってから、実は以下の様な認識の齟齬が発生していたことが分かりました。

  • 実はクライアントサイドのデータを扱う単位も、仕様変更に耐えやすいよう、サーバーサイドと同じ単位だった
  • サーバーサイドでよく考えて削減していたデータ量は、その他のデータの量や、実際の通信速度を考慮すると微々たる物だった
  • 上記より、サーバーサイドから共有された API のレスポンスは少し使いにくかったが、これがサーバーサイドの作りやすい形なのだろうと思い、特に指摘しなかった

お互いに良かれと思ってやっていたことが、暗に余計な工数を発生させていたわけです。

後からコミュニケーションが活発になって来てから発覚したことから、もっと初期の時点で相談をしていれば防げていたなと、後から反省しきりでした。

どうすれば防げるのか

この事例では、後からコミュニケーションが活発になったことで解決されたので、最初からあらゆることを相談していれば防げたということになるのですが、そうなると今度は逆に大量の相談MTGで相談される側の日々が忙殺されることになります。

そこで、最初に上げた以下を意識した環境にしたいという話に戻ります。

  • 専門外の領域は専門の職種の人に聞く。聞かれる。聞ける
  • 専門が居なかったり、分からなかったりする様な、未知の領域について時間をかけて議論する

専門内外はどうやって判別するのだ、ということになると思うのですが、こればかりは各職種、プロジェクト、企業によって様々だと思うので、なかなか断言できません。

重要なのは、

  • 各職種で、各プロジェクトで、重要だと考えていること、悩んでいることはそれぞれ違う

ということを把握して

  • それぞれの領域を理解し合う
  • 最終的には、その領域を専門に考えている人の判断を信じる(もちろん、自領域からの意見・助言はするべきですが)

ということだと思います。

そして理想へ

やる気のあるメンバーを揃える、揃うことはとても素晴らしいのですが、やる気があるからこそ発生しやすい空回りを少しでも減らすために

  • 様々な職種間で、考えていることの違いを理解し、信頼し合う
  • 無駄を省き、作業効率上昇の努力をする

ことで

  • 各職種が専門に考えるべきことに多くの時間をかけられる

ようになれば

  • もっといいものがはやくつくれる!

はず。

意識してやっていきたいですね、という話でした。

補足

  • 皆がやっている、繰り返される作業は、自動化・効率化されている

について書いていないじゃないか!という話なのですが、この話を書き始めると 1エントリー にまとまらないどころではなくなってしまうので、今回は割愛させてください。

興味が有る方は

  • 継続的インテグレーション
  • テスト駆動開発
  • Jenkins, CircleCI, TravisCI
  • 変態キーバインド
  • それ Vim

等のキーワードで色々検索してみてください。

機会が有れば、自動化・効率化についてもブログに書いてみたいと思います。

余談

本エントリ及びLT資料で、 いらすとや さんの素材を多々使用させていただきました。
ぱっと見でわかりやすくて面白い素材がたくさんあるので、 LT みたいに勢いよく話す資料等にとても使いやすくて有り難いです。