はじめに
弊社クラベスの採用情報などに書かれている業務内容として「高難易度ECサイトの開発」というものがあります。
株式会社クラベスの会社情報 - Wantedly
採用面接の場で「高難易度とはどのようなものか?」と質問をされることがしばしばあります。
1メンバーの立場から見て説明できることもあると思い、具体的にどんなものがあるか例も交えながら示していきます。
内容は大規模なシステムを実現するにあたり一般的に必要なことであったり、他社も取り組んでいることでもあると思いますが、他社と比べてスムーズに動けているのを見ると、弊社クラベスが得意としていることなのではないかと思います。
高難易度とは
「高難易度」と言ってもいろいろなレイヤーがあります。
受託開発でのお客様が成し遂げたいことに対してどう最良に運用できるかみたいな話もあれば、ピンポイントに実装が難しいものもあります。
上流の方からいくつか例を示してみます。
- 年度が変わってデータが新しくなるとき、ユーザーへ何を見せるか
- バッチ群の処理が非営業日に失敗したとき、処理で実現したい目標(例えばクーポンを公開日までに公開する)を実現する仕組みや体制があるか
- (EC ではないですが)小学校の学生と先生でも入力や指導しやすい認証情報の形式は何か
曖昧さが多くあり、プロジェクトマネジメントの重要性も高まります。
- 運用を実現する機能、機能を実現する画面・API・バッチ群が一覧できているか
- ある機能はいつ品質チェックできるか(機能を実現する画面・API・バッチ群の開発タスクがすべてガントチャートにあるか、品質チェックができるマイルストーンになっているか)
- 関連するシステム同士の役割分担やインターフェース仕様が明確になっているか
システムに近いところでは次のような例があり、
- どの部分が標準仕様であり、ライブラリが自由に選べるか
- マイクロサービスで何を実現しようとしているか
プログラミングに近いところでは次のものがあります。
- ドメイン駆動開発の理解
- ライブラリ Spring Security を使い、言語 Kotlin で書いた実装において、オブジェクトや挙動が
- Spring Security によるものなのか
- Spring Framework によるものなのか
- Kotlin の言語仕様によるものなのか
を切り分けて理解し、トラブルシューティングする
- React の副作用を理解してパフォーマンスを改善する
他にも Organization 記事一覧で多くの例を見ることができます。
必要なソフトスキル
採用面接の場で「活躍している人の特徴は何か」「どんなことが評価されるか」という質問もしばしばいただきます。
高難易度の開発に取り組み、スキルを伸ばしていくうえで必要と思うソフトスキルをいくつか紹介します。
最初からスキルフルは難しいですが、徐々にできることを広げていくメンバーが多い印象です。
学習意欲
知らない業界、技術、制度に出会う機会が多くあります。
知らなくても壁を作らず、調べたり、話を聞いたり、関わったりすることがプロジェクトを前へ進めるために必要であり、また自身の幅を広げることにもつながります。
混ざっているいくつかの要素を洗い出して整理する
複雑に見える課題の中には、複数の要素が混ざって存在しています。
調べたり、話を聞いたりして、各要素や要素感の関連を理解していきます。
何が足りていないかも見えてきます。
一般に MECE(漏れがなく、かつ重複がない)と呼ばれている考え方です。
抽象化して先を見る
経験を積んで似たものを複数触ると、何が似て(抽象)何が似てないか(具象の特徴)がわかってきます。
例えば、AWS EC2 や VirtualBox は仮想マシン(抽象)であり、CPU やメモリ、ストレージ、ネットワークインターフェースの設定ができます。
このように抽象化できるようになると、別の似たサービスに触れたときに「同じような仕組みがあるのでは」と推測できるようになります。
先を見通した発言ができるようになると、「この人分かっている」と思ってもらえて、周囲からの信頼を得やすくなります。
おわりに
高難易度ということで難しいことを多く示しましたが、少しでもおもしろそうと思える方は弊社クラベスや高難易度の開発に合うと思います。楽しめることも大事です。