こんな感じでリモート勤務やってます

久しぶりのリモート勤務ネタです。
最近ちょこちょこ「リモート勤務ってどんな感じですか?」という質問を受けることがあって、いい機会なのでまとめてみました。

こんな感じで受託開発やってます

ハートレイルズでは大きく以下の2パターンで受託開発しています。

  1. 顧客との窓口になるメンバーが1人いて、そのメンバーがオンサイト顧客代理となる
  2. 開発メンバー自身が顧客とやりとりをする

前者はオンサイト顧客代理が開発メンバーにクラウド上(GitHub や Bitbucket)でタスクを割り当てて仕事を進めるスタイルです。トラックナンバー1になりがちですが、いい意味で情報を精査出来るので小さめのプロジェクトには向いていると思います。
またオンサイト顧客代理も顧客先に常駐しているわけではなく、顧客先を訪問するのはせいぜい隔週1回くらいですので労働集約的にはなりません。
顧客と開発フローを話し合ってお互い離れていても円滑に仕事が出来るような体制を敷いています。

後者は開発メンバーがクラウド上で直接顧客とやり取りします。
やり取りする方法は前者と似ていて、クラウド上で顧客とタスクを渡し合いながら仕事を進めます。
情報がクラウド上に集約されてトラックナンバーも増やせるというメリットはありますが、開発メンバーからは顧客の表情が見えないので、知らず知らずに信頼貯金を減らしてしまうようなことをしてしまうリスクはあるかもしれません。
また矢面に立つメンバーが情報を噛み砕いてくれるということは無いので、クラウド上に集約された情報を自ら追って内容を整理したり、どの辺りがプロジェクトのボトルネックになりそうかといったことを推測していくスキルが開発メンバーに求められるように思います。

こんな感じでチーム開発やってます

http://wazanova.jp/items/675

ハートレイルズでもここで紹介されている Github と似たような形で、基本的に「pull request/chat を中心にコミュニケーションは非同期スタイル」を採用しています。
これは開発メンバーが仕事に打ち込む時間や裁量を最大化出来るというメリットがある反面、管理側からは仕事が見えにくいというデメリットもあります。(しばらく開発メンバーからアウトプットが出て来ないときは管理者から「何やってますか?」という chat が飛んだりします。)

私がその解決策として実践しているのは、単純ですが「作業を分割すること」で、私の場合だと大体「2時間〜1日」くらいの単位で分割してなるべく毎日成果が出せるように心がけています。
そうすることで管理側から仕事も見えやすくなりますし、アウトプットの単位が小さいのでレビュー範囲も小さく、フィードバックも素早くもらえます。
この「作業を分割して毎日成果が出せるようにすること」はリモート勤務を実践する上で最も大事なことではないかと思っています。

ちょっと付け足し

リモートチームは物理的にロケーションが離れているので、同じ現場にいるように議論や確認、意見交換は不可能です。
慣れてくれば高いレベルでそういうことも実現出来るかもしれませんが、同じ現場にいる時と大差なく、というのは難しいように思います。
そんな中でどうやって成果を出すのか・・・???

ハートレイルズでは、コミュニケーションに割くリソースを最小化して、開発リソース(個々の開発者の裁量)を最大化することによって成果の最大化を目指しているように思います。
もちろん全く指示を受けないわけではないですが、設計・開発における大部分について裁量を頂いています。
そのかわり個々人にはプロフェッショナルな自覚や責任、スキルが求められますし、何より「任せたらやってくれる!」という信頼関係がなければなりません。
そういった各々が自立した集団でないとリモートチームは機能しないように感じますし、そういったレベルをしきい値として求められているような気がしています。

まとめ

今回はどんな感じでリモート勤務しているのかを書いてみました。
色々求められるスキルやら何やら書きましたが、一番大事なのは信頼して裁量を与えられているその仕事に最大限応えようとするマインドではないかと思います。
そのマインドがあればスキルは後からついてくるのかなと。
これからもこのマインドを大事に、もっとスキルを磨いてより良いエンジニアを目指して頑張ってゆこうと思う今日この頃でした。