この記事はエイチームブライズ/エイチームコネクト/エイチーム引越し侍 Advent Calendar 2018 12日目の記事です。
エイチームコネクト技術開発部の@kekiが担当いたします。
はじめに
エンジニアには、他の職種の人たちとは違う種類の「やりがい」があると考えています。
私自身、エンジニアを10年以上経験する中で、
色々な方に「エンジニアのやりがいって何だろう??」と聞くと、
以下のような声をよく聞きます。
- モノを作り上げる達成感を味わえる
- プログラムが動いた時の感動が味わえる
- 最新の技術をバンバン取り入れた開発をすることで、知的好奇心を満たすことができる
- 自分が開発したシステムを使ってくれた人が喜んでくれることに幸せを感じる
エンジニアの方であれば、何かしら心当たりがあるのではないでしょうか?
でも「事業への貢献」という観点で物事を考えると、
必ずしもエンジニアの「やりがい」と一致しないことが多々あると感じます。
そこで、エンジニアのやりがいと事業への貢献を両立させるために、
「開発合宿」を行った話をしたいと思います。
※ 以降、Webサービスを展開している会社での、事業部(事業を運営するメンバー、企画メンバーetc)とエンジニアのお話をしていきます。
SIer等にご勤務の方も、営業メンバーとエンジニアの関係。という観点で行くと、似ている部分はあると思いますので、適宜読み替えていただけると幸いです。
事業部側の想い
事業運営チームや、企画チームの皆さんは、会社の売上や利益の目標を達成すべく、日々活動してくれています。
彼らの活動のおかげで、会社は売上利益を上げることができ、社員のお給料も支払われるわけです。
そう考えると、エンジニアは事業部の皆さんに感謝の気持ちを持つべきだと考えています。
じゃあ、そんな中でのエンジニアの役割は?と問われたら、「エンジニアじゃないと出来ないことを実現する」だと思っています。
つまり、事業部側で思い描いていること、実現したいことを、技術を活かして具体化するのがミッションです。
俗にいう「縁の下の力持ち」的な存在ですね。
そんなエンジニアに対して、事業部の皆さんが求めることは
- 人件費を無駄にしないためにも、なるべく効率よく開発してほしい
- 少ない工数で最大限のインパクトを出してほしい
- 売上利益に直結する開発をしてほしい
といった内容になると思います。
でも、ここに注力しすぎると、
前述したエンジニアの「やりがい」が満たされないケースが出ると思いませんか?
例えばこんなやり取りがあったとします。
エンジニア:
「○○という技術を使って、こんな仕組みを作れば、こんな形で業務改善につながります!」
運営メンバー:
「確かにそうだね!でも、この開発の方が売上利益につながるし、工数もかからないと聞いているから、まずはこの開発をやってほしい!」
エンジニア:
「なるほど。了解しました!」
でもここで言う「工数がかからない開発」とは、
普段使っている言語・技術を使って、いつも触っているシステムを効率よく改修する。という形になりがちです。
そして、売上利益につながる開発の依頼は止まることがありません。
すると、新しい技術にチャレンジしようとする機会は、徐々に後ろ倒しになり、結局やれずじまい。ということが発生します。
あくまでこれは一例ですが、
新しい技術に挑戦すべく開発をしたくても、売上利益を優先するとなかなか手が出せない。
というケースは他にもあるのではないでしょうか?
ちなみに僕自身、事業部の皆さんの考え方は正しいと考えていますし、
そんな事業部の想いに対して答えたいという気持ちは強いです。
でも、エンジニアのやりがいも満たすための開発もやりたい!
そのためにはどうしたらいいのか...と考えた答えが**「開発合宿」**でした。
実際やってみた内容
今回、開発合宿を以下の形で実施しました。
期間:3日間
参加メンバー:3名(フロント1名、バックエンド1名、DB設計・SQL担当1名)
合宿のルール:
- システムの仕様は事前に策定
- 合宿で使う技術について、各自事前学習を行う
- 合宿中はプログラミングに集中する
- 合宿中、該当システムの開発以外の業務は禁止
- 隔離された場所で実施(今回は社内の会議室を貸切)
- 普段、あまり一緒に開発しないメンバー構成にする
※ 本来であれば、会社を離れ、泊まり込みで集中できる環境を用意したいと思いましたが、
今回はセキュリティの観点(PCの持ち出しやサーバへのアクセス権限)により、社内会議室にて実施しました。解消できるのであれば、泊まり込み合宿を実施するのも良いと思います。
システム構成 & 使った技術
今回のシステム構成と使用した技術をまとめます。
システム構成
今回の仕組み上、バックエンド側は全てAPIのみで完結できたため、AWS AppSyncを使用。
Lambda golangを使い、RDSからデータを引っ張ってきています。
Lambda+RDSはアンチパターンと言われていますが、以下の記事を参考に、コネクションプールをlambda function内で使い回せるように かつ redisにて検索したデータのキャッシュ化を行い、対処しています。
AWS LambdaでAmazon RDS for MySQLに接続した場合のコネクションを使い回す
https://qiita.com/morimop/items/cb5af1131571ba6361e2
使った技術
フロントエンドにはNuxt.jsを採用。
バックエンドは軽量な言語で有名なgolangを採用。
┗ リアルタイム性を求めるシステムのため
AWS AppSyncとLambdaのデータ連携にGlaphQLを使用しています。
普段、私が所属している部署では、PHP(Symfony)とRuby on Railsを使った開発が主なので、「新しい技術にチャレンジ」という観点では、成功したと思います。
やってみた感想
事前学習は必須だと実感
当日合宿内で技術検証や学習をやっていると、作りきることができないです。
これまでに触れたことのない技術については、事前に学習を進めておきましょう。
仕様は事前にまとめるべき
開発するシステムのボリューム次第ですが、合宿内で仕様を詰める形をとると、結局煮詰まらず終わってしまうケースが発生します。
とことん開発に没頭できた
隔離された環境で実施したので、とにかく開発することに集中できました。
こんなに開発に没頭できたのは久しぶりかも...
一体感が出た
普段一緒に開発しないメンバーと合宿を行うことで、お互いの考え方や技術力、人柄を知ることができました。
さらに、その後一緒に合宿したメンバー間のコミュニケーション量が増える等の、良い効果も生まれました。
技術力の向上につながる
今まで実務で使ったことのない技術の知識が深まりました。
新しい技術を習得する喜びを再実感できました。
事業部の皆さんに喜んでもらえた
事業部の方から「この仕組み最高!」と言ってもらえたときには、本当に嬉しかったです。
「売上利益には直結しないけれど、長い目で見たときに効果が生まれる開発」は、優先度が低かったとしても、実は事業部の皆さんは望んでいるんだなぁと認識できました。
何より、楽しい!
もうこれに尽きるのでは...と思います。
私自身、マネージャーとして現場の調整や、事業部との連携・打ち合わせが主たる業務となっているのこともあり、普段開発に使える時間は限られています。
だからこそ、モノが完成した時の喜び、最新の技術を取り入れる、知的好奇心も満たせる、開発に没頭できる、結果事業部の皆さんにも喜んでもらえる。という、エンジニアとしてのやりがいをとことん実感することができました。
普段なかなか開発に時間を使えない、マネージャー、部長等の役職者の方にも、合宿参加をお勧めしたいです。
まとめ
自分自身、開発合宿を行って見て、冒頭に述べた、「エンジニアのやりがい」を十二分に体感することができたと感じています。**「やっぱり開発は楽しい!」**と改めて再認識できた3日間でした。
皆さんの会社でも試して見てはいかがでしょうか?
追伸
エイチームグループでは、一緒にサイト改善や業務改善を行ってくれるWebエンジニアを募集しています。エイチームグループのエンジニアとして働きたい!という方は是非、以下のリンクから応募してください。
皆様からのご応募、お待ちしております!!
最後に
明日のAdvent Calendar13日目は、エイチームブライズの@kakakaori830さんがネコちゃんへの遠隔ご飯あげマシーンについて、記事にしてくれます。
IoTを日常生活に取り入れた、興味惹かれる事例ですね!楽しみです!