技術選定について

 
当ブログをご覧頂きありがとうございます。
エンジニアの杉山です。
 
今回のブログではユーティルの技術選定についてお話しようと思います。
 
このテーマは採用面談でもよく質問を頂く項目で、お読みになられている皆様も気になるのではないでしょうか。
かくいう自分も転職する際には注目しているポイントで、エンジニアとして成長できる環境なのか、同じ実装や作業ばかりの繰り返しになって飽きてしまわないかなどを見極める1つの指標になると思っています。
 
それでは始めます・v・

前提: 「技術は目的を達成するための手段である」

まず、前提としてユーティルでは技術をこのように捉えています。
私達がフォーカスしていることは、日本の中小企業のDX化を推進する為のサービスを提供することであり、(語弊を恐れずに言えば)新しい技術を生み出すことではありません。
技術ありきで物事を考えるのではなく、ゴールに向かうために有効に技術を用いる組織であり、エンジニアチームは特にそれを力強く牽引するチームです。
 
常に最新の技術を導入したり、技術研究を行うことはエンジニアとしては魅力的であることに異論はないのですし、私自身も好きです。が、サービスにとって必要十分以上の技術を用いること往々にして工数(学習コストを含む)が肥大化したり、未知のバグやセキュリティ面などでリスクを伴います。
専門のチームを用意したり、検証に多くの時間を割くことが出来るチームであれば運用可能であるとは思いますし、理想的ですが、現状の開発チームはメンバーも多くはないので中々そこに時間を割くとが出来ないです。
なので、PDCAを回しながら、的確に素早くサービスを立ち上げたり、改修していくには枯れた技術をベースにエッセンスとして新技術を取り入れて行くことが重要になります。
(このあたりは採用戦略にも関わりますが、今回のブログでは割愛させて頂きます。)
 
では、そのような考えのもとでどのように技術選定を行っているかをもう少し掘り下げてみます。
 

「攻めのエンジニアリング」と「守りのエンジニアリング」

「攻めの○○」と「守りの〇〇」という言葉は耳にすることも多いのではないかと思いますが、私達のチームでは「攻めのエンジニアリング」と「守りのエンジニアリング」という言葉を表現として使用しています。どちらに該当するか(近いか)によって、ゴールをどこに置くか、どのようにアプローチするかの合意形成をしています。
 
それぞれの言葉が含むニュアンスは以下です。

攻めのエンジニアリング

  • とにかくスピードを最優先にする。
    • チームが一番強い技術スタックを用いる。
    • 足りない技術の導入は最小限
  • ベストではなく、ベターでも良い。
    • 多少のTODOが含まれている状態も許容。
  • 仕様や業務フローの変更が想定されうるので作り込み過ぎない。

守りのエンジニアリング

  • 可用性や効率化を目的とする。
    • チームが持たない技術スタックも考慮する。
    • 検証の時間もきちんと取る。
  • ベターではなくベストにする。
    • TODOや技術的負債を残さない。
  • 仕様に合わせた作り込みをし、パフォーマンスも最大化させる。
 
弊社における数年前から直近のフェーズでは、どちらかというと「攻め」の場合が多く、「守り」は少なくなっていました。
以下のようなポイントがその理由として挙げられます。
  • 急成長を支えるにはサービスの機能追加や施策実行、仮設検証が急務であった事
  • 組織が拡大する中で業務フローの整備が追いつかずに人力に頼ってシステム化出来ていなかった事
  • サービス利用者が多くなく、システム負荷を気にする必要が薄かった事
 
しかしながらこの1年で状況は大きく変わり、「守り」の優先度が大きくなってきています。成長に伴い、サービスは価値が明確になり磨きこむべきポイントが見え、業務フローも改善と整備を繰り返しシステマチックになってきました。つまるところ、先に挙げた理由として置いてきたことに対応するべきタイミングが来たということです。
この様な状況になると、(わかっていたことではあるものの)アプリケーションやシステムがボトルネックになってきます。わかりやすい例で言えば、データ量の増加によるDB検索パフォーマンスの低下やリクエスト増によるサーバー負荷の増加などです。(きっと皆さんも経験があるのではないでしょうか?w)
もちろん使用しているリソースのスペックを上げたりすればしのぐことも出来ますが、それは一時的なものであり「守り」とは言えないです。きちんと何が解消すべき課題なのかを明確にし、中長期に渡り安定してサービスを提供出来るようにするまでが重要になります。
 
したがって、直近の実績ではどちらかというとインフラ面の強化など「守り」寄りの技術導入が多くなっているという感じです。よく「PHP以外の言語をメインにしたりしないのですか?」という質問を頂くのですが、答えとしては「PHP×Laravelをメインにしていく環境はもう数年は続いていくと思います」になります。

今後の展望

Web幹事から始まった〇〇幹事シリーズも数を増やし対応するサービスも増えてきました。その道中では開発チームのメンバーも5人に増え、共通基盤による効率の良い開発保守が出来るような体制を作れるなど、少しずつ「攻め」ながら「守り」も出来るようになってきています。
しかしながら、先にも述べた通り「守り」の課題が山積みなのでこれを解消していくことが目下の大きな目標となります。(個人的には一番好きなフェーズになってきました!w)
 
ユーティルでは共に「デジタルを広めて日本の中小企業400万社を変革する挑戦」をしてくれる仲間を募集しています。私と同じくこういうフェーズが好きな方や、もっとこうすればいいのに!アドバイスあるよ!という方がいましたら、軽い気持ちで結構ですのでお話だけでも聞きに来て頂けると幸いです。
 
ではまた次のブログでお会いしましょう!