🎉

祝 Nstock Tech Blog 開設!エンジニアの開発を振り返ってみた

わだよしと申します、こんにちは!
 
今回は、これまで1年半ほど進めてきた Nstock での(主に株式報酬管理 SaaS の)開発についての振り返りをしながら、エンジニア組織や開発状況についての「今」をお伝えします。テックブログ内の記事ではありますが技術的に深ぼった話はしませんので、多くの皆さんに読んで頂き、反響頂けると嬉しいです!!!

最初はどんな状況だった?

創業者である miyasho さんも macha さんもエンジニアではなく、会社の方針としてエンジニア採用は親会社であるSmartHR からの出向ではなく、 Nstock 独自での採用を進める方針としたため、創業初期はエンジニアが不在という状況でした。またそのお二人が株式報酬やストックオプションに関する経験・実績を十分保有しているというわけでもなかったのですが、エンジニアの参画よりも前にドメインエキスパートの方が参画してくださっていて、業務フローやワイヤーフレームの検討が少しずつ進み始めている状況でした。当時は SmartHR の所在地である六本木一丁目で WeWork を借りていて、出社とリモートを織り交ぜながら、事業ドメインに関するキャッチアップを進めたり、株式報酬 SaaS について構想していたりが中心でした。
 
では早速、エンジニア組織や SaaS の状況等をご紹介していこうと思います!

エンジニア組織や役割

この記事を書いている時点で Nstock の創設から約1年半が経過しているのですが、現在のエンジニア組織や役割は以下のようになっています。
 
  • 在籍しているエンジニアは正社員3名(ryan、じゃが、わだよし)、9月に1名入社予定
  • エンジニアは株式報酬 SaaS のスクラムチームに在籍し、全員がフルサイクル・フルスタックに株式報酬 SaaS の開発に従事
  • エンジニアに役職や職種は設けていない
  • 業務委託や外注は行っておらず、完全内製
  • 株式報酬 SaaS の開発以外にも、コーポレートサイトの運用や、社内で利用する IT ツールの選定・運用にも関与
 
正社員の3名が入社したのは2022年4〜6月で、創業から数ヶ月経った頃でした。創業初期のスタートアップではあるものの、初期からエンジニアが三名いた点や、業務委託の方が在籍していない点は珍しいかもしれません。

株式報酬管理 SaaS の概況

この後ご紹介する開発手法や技術スタックは、全て株式報酬管理 SaaS を対象としています。今検討を進めているセカンダリー事業においてはそれらを踏襲しない可能性があるので、ここでは株式報酬管理 SaaS の状況についても少しご紹介します。
 
  • マルチテナントの B2B SaaS & B2B2E(Employee) のウェブアプリケーションを構築した
  • プロダクトロードマップをもとに、主機能の開発を進めている
  • 2023年1月頃から順次、構築したアプリケーションを複数社に提供し PoC を進めている
  • PoC で頂いたフィードバックやご要望を取り込んでいる
 

実際の取り組み

ではお待ちかね(?)の、僕たちが実際に取り組んできたことや取り組んでいることを、まずは箇条書きでご紹介します。実施時期や頻度なども補足したので、参考になれば幸いです。
 
  • 開発手法について
    • Notion を用いた開発推進(創業直後から)
    • スクラム開発の導入(2022年6月頃から)
    • モブプログラミングの導入(同上)
  • 技術的なことについて
    • SmartHR Design System を用いた事務局サービスの開発(開発着手時から)
    • Google Cloud Platform から Amazon Web Services への移行(2022年9月頃)
    • 権利者サービスへの Nstock Design System 導入(2023年3月頃)
    • 脆弱性診断の実施(2023年4月頃)
    • スナップショットデータの保持
  • 会議体やイベント
    • エンジニア採用(スカウト、面談・面接、イベント等に全員が関わる)
    • Engineer Hands の実施(定期開催、月1回程度、初回は2023年6月)
    • Engineer ランチの実施(定期開催、週1回程度、初回は2023年1月)
    • 開発合宿の実施(過去1回)
 
こうして並べてみるだけでも、いくつかの意思決定や試行錯誤があったことを感じて頂けるのではないでしょうか?以前 Nstock のエンジニアについて紹介してもらった miyasho さんのブログに関連する部分や、著者の独断と偏見でいくつかピックアップしてご紹介します(太字)。

開発手法の今

現在は、1週間サイクルでのスクラム開発を行っていて、1年以上前に試験的な導入から始まったスクラム開発を改善しながらこれまで続けてきています。これまでスクラム開発で実施してきたスプリント数はもうすぐ50になります。なお、スクラム開発の詳細については、スクラム導入の音頭を取って下さった jaga さんが既に本テックブログで公開してくださっているので、是非そちらをご覧ください!
 

技術スタック・開発規模の今

はじめに、「Nstock 採用資料」でも公開している技術スタックについてご紹介します。開発言語やフレームワークは、フロントエンドでは Next.js と TypeScript、バックエンドでは Java と Spring を採用し、インフラには AWS を採用しています。また開発工数を圧縮する目的で、外部の SaaS を利用することもあります。
 
Nstock の技術スタック(採用資料より)
Nstock の技術スタック(採用資料より)
 
当初採用した技術スタックについては、時折見直しに関する議論をしたり、それに紐づいた検証をしたりしています。実際にリプレイスや移行を実施したのはクラウドプラットフォームのみ(GCP から AWS へ)なのですが、これについては、エンジニア3人のスキルセットを踏まえた時に AWS の方がよいだろうという判断によるものです。
一方でバックエンドのプログラミング言語として採用した Java については、現在も継続しています。運用に関するスクリプトや一部のバッチなどでは Golang を用いている部分もあり、当初採用した技術スタックにこだわりすぎず、他の技術スタックも視野に入れながら開発を進めています。

開発手法や技術スタック以外を振り返る

ここでは、これまでやって良かったこと・楽しかったことや、難しかったこと・辛かったこと5つをご紹介します。

モブプログラミングの導入

エンジニアそれぞれが持っている異なる経験・知識や強みを共有し、よりフルサイクル・フルスタックな関わり方ができるようにすることを目的として導入しました。
実際やってみると、コーディングに関する知識の共有が生まれるだけではなく、
 
  • 「ここどう動いてるかよくわかってないから教えて〜」
  • 「ここリファクタリングしたいですねぇ」
  • 「あ、それキーボードショートカットありますよ」
 
みたいなやりとりが生まれています。やってみると、リモート勤務が主流で各々の仕事の様子を間近で見る機会が少なくなっている中で未だに学びがあったり、狙っていた機能がスパッと実現できた時の達成感を共有できたりしています。なので、今後は新しいエンジニアの方が参画された時のスモールサクセスを醸成する方法としても積極的に実施していこうと考えています。

Engineer Hands の実施

2つ目は、「Engineer Hands を実施してよかった」ということです。Engineer Hands というのは、Nstock のエンジニア陣が月に1回程度、1回30分から1時間程で実施している会議のことで、スクラム開発における各種イベントに盛り込みきれないテクノロジーやエンジニアリングに関わる内容を話し合う場のことです。事例やプラクティスが固まっているものではないので話し合う内容にごった煮感はあるのですが、例えば以下のようなことを議題とし、間接的に必要な運用についての時間確保や、中長期的な視野での意思決定を行う場としています。
 
  • インシデントやポストモーテムの共有と再発防止策実施状況の確認
  • アカウント棚卸しや脆弱性情報の確認・対応などの定期作業
  • DX Criteria を用いたアセスメントや優先施策の検討
  • プロダクトロードマップを見据えた技術的投資・検証の要否についての検討
 
特に「インシデントやポストモーテムの共有と再発防止策実施状況の確認」は、再発防止策を実施しなかったことによる同一・類似インシデントの発生防止や、インシデント対応者以外の客観的な視点による対応方法の改善につながっているので、どのような会議体であれ必要で、オススメできるものと感じています。

Engineer ランチの実施

3つ目は、「Engineer ランチを実施してよかった」ということです。僕たちエンジニアは、執筆時点で役職や上下関係が無く、仕事に関する意思決定やそのための検討・相談は合議制になることが多いのですが、打ち合わせの時間を取って議題を用意して事前に共有してというのはそれなりに労力を使う上、参加する際にも構えてしまうという場面が時折ありました。そこでもう少しカジュアルな場を設けて、そこで話すのもいいんじゃないかということで始めたのがこの Engineer ランチです。
Engineer ランチは、誰が話すか、どれほど話すのかも自由であり、内容は以下のように、仕事の話に限らずプライベートの話などもあり多岐にわたります。最近では、「重たい議題や言いにくい話程 Engineer ランチで気軽に会話できる方がありがたい」と感じることさえあり、今後も続けていく効果が見込める取り組みになっています。
 
  • これまでのキャリアの話
  • 対応中のチケットの設計・開発の相談や壁当て
  • スクラム開発の中で見直したい所
  • テックブログをやることに対して、ぶっちゃけどうよ?
  • 日本海に旅行する時に宿泊するおすすめの旅館
  • ジムの見学に行った話
 

開発合宿の実施

4つ目は、「開発合宿を実施してよかった」ということです。どうしても日々のスクラム開発に追われがちであるため、そこから離れて技術に向き合い Nstock の事業や組織に貢献するという目的で開発合宿を開催しました。特に良かったことは、
 
  • 日々の開発とは少し離れた所の技術である ChatGPT が得意なことや苦手なこと、実現する上で考慮・注意すべきことなどの手触り感を得られた
  • エンジニア同士が親睦を深めることができた
 
という点です。
具体的には、ChatGPT を用いて株式報酬に関する受け答えができるチャットボットを実現するため、社内にあるドメイン勉強会のデータをもとにした学習データの準備、環境構築とデプロイ、Slack Bot 化などに取り組みました。合宿を終えて出来上がった成果物については、学習データの不足もあり精度はイマイチだったので、それらを揃えて再度挑戦したいと思っています。
またエンジニア同士の親睦を深めることもできたので、頻度は多くないかもしれませんが、今後も開催していくことと思います。個人的には開発合宿に参加することが初体験だったということに加え、初めて行く土地だったことなどもあり、また参加できることがとても楽しみです。夕食後にやった、jaga さんが持ってきてくれたボードゲーム、盛り上がったなぁ。。。
 
 

スナップショットデータの保持(データ履歴管理)

5つ目にご紹介するのはこれまでと違って、「データ履歴管理の実現は技術的にかなりタフで産みの苦しみがあった」ということです。株式報酬管理 SaaS においては、「ある時点でのストックオプションのデータ(種類、付与対象者、個数等)をスナップショットとして帳票等に出力する」という機能があり、契約内容に合わせて行使され株に交換されていくストックオプションの情報として、
  1. ストックオプションの付与が決定された時点での状態
  1. 付与されたストックオプション(の一部)を行使した状態
  1. 現時点でのストックオプションの状態
を正確に表現する必要があります。このいわゆるデータ履歴の管理を実現するためのデータモデルとして「バイテンポラルデータモデル」というものがあり、エンジニアの頭と手をかなり使った取り組みとなりました。
幸い SmartHR を始め先行事例はあったのですが、僕たち独自に考えたこと・実現したこともあります。これについては改めて本テックブログ等でご紹介できればと思っているので、お楽しみに下さい。

これからやろうとしていること

最後は、これからやろうとしていることを簡単にご紹介して、本記事を締めくくろうと思います。
 
  • 検討が進み始めたセカンダリ事業との接続を視野に、技術的意思決定とその実現を行う
  • Four Keys 等のメトリクスを計測して、DevOps を推進する
  • E2E テストの採用によって、フロントエンドの柔軟性や安定性を確保する
  • ISO 27001 や ISO 27017 の認証取得を通じ、 情報セキュリティに関する態勢を構築する
 
まだまだやりたいことだらけです。ただ、人やお金などのリソースが足りない・使えないことが当たり前のスタートアップでは、必ず全てを実施するわけでも、実施できるわけでもありません。だからこそ優先度を決めたり、先人の知恵を借りたりしながら日々の開発に向き合っています。
このテックブログがまさにいい例です。「まだ売上も無い中でテックブログに時間を割くってどうなの」という意見もあった中、テックブログを通じて「スタートアップ(初期の)エンジニア組織やプロダクトってどんな感じ?」とか、「◯◯を導入したいんだけど実際どう?」といったことをお伝えすることで、Nstock のミッションである「スタートアップエコシステムをブーストし、日本から Google 級の会社を生み出す。」に寄与できるのではという考えから、開設することを決めました。もちろん、テックブログを見て頂くことでエンジニア採用につなげたいという本音もあります笑
まだ開設したばかりで記事も更新頻度も少ないのですが、応援いただけると嬉しいです!

エンジニア募集中です

いかがでしたでしょうか?お読み頂いた通り Nstock のエンジニアチームはまだまだ初期フェーズで、フルサイクル・フルスタックにプロダクションコードを書くだけではなく、試行錯誤しながらプラクティスを作り上げている最中です。そんな環境に挑戦したいエンジニアの方を積極的に募集しています。
また、「Nstock に興味はあるけど今転職する気は無い」という方、「この記事についてもう少し聞きたい!」という方ともお話できるととても嬉しいと思っています。そのような方からの、コーポレートサイトの応募フォームもしくは、エンジニア直通のカジュアル面談申込みフォーム(Spir)からのご連絡をお待ちしています!!!