見出し画像

BizOpsからエンジニアに依頼する範囲について考えるヒント

この記事はBizOpsアドカレ11日目の記事です。前回はstable株式会社代表の宮﨑さん(ikki_mz)による、『BizOpsにおけるデータ品質の話』でした。


はじめに

ちょうどこの記事を書く直前に
こんなツイートしたら若干バズってしまいました。
起業家がソフトウェア開発わからなくて
資金を溶かし続けるというのは
やはりあるあるみたいです。
よくCOOポジションの方の自己紹介で
「営業からCS、バックオフィスまで開発以外なんでもやってます!」
みたいなのを聞くんですけど
「どこまで自分でやってどこからエンジニアにお願いするか」
って難しくないですか?
「BizOpsとは」「BizOpsに求められるもの」的な内容は
他の方が素晴らしい記事を書いてくださっているので
僕からはこのテーマでアウトプットしたいと思います。

自己紹介&会社沿革

タイムクラウド代表の西小倉(にしこくら)宏信です。
1983年4月大阪府羽曳野市生まれ、
2007年関西大学総合情報学部卒業と同時に
「Wikipediaを超えるオンライン事典を作りたい」
と思って東京で起業しました。
2013年に第2子が生まれ「東京で2人育てるの無理」
となってそこから自宅を大阪に移してフルリモートワークしています。
2017年から「生きた時間を増やす」という経営理念で
時間管理ツール「TimeCrowd」を開発する会社を起業して
2021年に資金調達しました。

管理画面チラ見せ♡ナイト

2014年あたりからコロナ前まで不定期で
こんなオフラインイベントを主催していました。
Webサービス開発者としてユーザが見る画面は
お金も時間もかけて良いもの作ってノウハウ共有する機会がある一方で
「管理画面」というのもある程度工数かけるし
運営は毎日見るものなのにそのノウハウが共有されていない
と思って企画したのですがニーズあったみたいで
無料イベントの時は数百人キャンセル待ち、
有料にしても公開後一瞬で満席になるイベントでした。
普段見られない色んな会社の管理画面が見れてだいぶ楽しかったです。
コロナ落ち着いたしまたやりたい…。

Nocode組み合わせ+必要な部分だけ開発

そんな色んな会社の管理画面を見まくった僕が自分でコード書いて立ち上げたのがフリーランス協会というフリーランス支援団体の有料会員システムでした。
kintone, Heroku, Sendgrid, Stripeを組み合わせて2週間ぐらいだったかな、でリリースしました。今では自分の手から離れていますが会員10万人突破してるらしくて嬉しい。

ここでのポイントは「管理画面が全てkintone」という部分です。
前述の管理画面イベントでもほとんどの会社が管理画面をエンジニアが開発していました。例えばRuby on Railsというものでできていたら「rails-admin」という便利なものがあるのですがやはりアップデートや保守にエンジニアの工数が発生してしまう。

一方で管理画面をkintoneにすることでそのあたりのエンジニアコストはゼロになる。さらに下記のようなサービスを利用すれば外部公開までエンジニアリソース使わずに実現します。

ソニックガーデンさん

トヨクモさん

Googleフォームで公開してデータはGoogleスプレッドシートという手もありますよね。

Salesforce, kintoneなどの比較

ノーコードで業務システムを構築する際にどれをマスタデータにするかは色んな選択肢がありますが比較表にしてみました。

各ソースも下記に記載しておきます。

こう書くとやはりSalesforce最強感ありますね。
弊社も色んなツールの連携に携わりましたが
APIリクエスト数制限に関してSalesforceではほとんど困らないし
他の要件もマスタデータを扱うにあたっては強みを感じます。
ただ人数単価が高いので大人数で使う時はすごい金額になるので
工夫が必要だったりします。
他にもHubSpotやAirtableなどもあります。

PLG + Salesforce運用(コード書いた)

弊社ではもともとkintoneをマスタにしていたのですが
2020年11月頃からSalesforceを使っています。
当時のTimeCrowdはPLGを目指していたので
会社名など入力しなくてもGoogleログインするだけで
お試し利用ができる仕様になっていました。
そのおかげで累計4,500社以上の登録があったのはいいのですが
取得できているのはメールアドレスと氏名の2つのみ。
部署名はもちろん会社名すらわからない状態でした。

そこで取引先オブジェクトに「domain__c」というカスタムオブジェクトを追加し、メールアドレスの@マークの右側を使って取引先として登録しました。
新規のセルフサーブ登録があった時もメールアドレスを自動確認してそのドメインがなければ新規取引先作成、あれば既存の取引先に関連させて取引先責任者追加というような感じにしていました。

あとこの仕様だと後から入った営業の人に「取引先責任者多すぎて誰がキーパーソンかわからない」というフィードバックももらいました。
セルフサーブで登録しただけのユーザは取引先責任者にするのではなくカスタムオブジェクトかリードオブジェクトにしておいて商談予定の人だけを取引先責任者にするのがいいと思いました。

PardotのSlack通知(コード書いた)

その後Pardot(Marketing Cloud Account Engagementに名前が変わったらしいんですけど長すぎて個人的には未だにPardotと呼んでいます)を導入しました。
その際に非エンジニアのメンバーがコード書かずにSlack通知を実現したのはこんな感じ。

Pardotから受信したEメールをSlackに通知するように設定してくれてました。

これに関してはコードを書いてNotionページ作ってそのURLも記載したり、Pardotのプロスペクトへのリンクだけでなく紐づくSalesforce上のリードのURLを載せるようにしました。

このあたり、僕自身もどこまでノーコードでできてどこからがコード書かないといけないのかはわかってないです。
ただ今回僕がここの部分のコードをRubyという言語で書いたので
「裏側はこんな感じで動いてたりするよ」
という意味を込めてちょっとだけコードも載せておきます。

    # これがcronで毎分呼ばれている
    def pardot2notion2slack(time = Time.zone.now, before: nil)
      activity_items = sync_pardot.form2items(time, before: before)
      
      count = activity_items.count
    
      activity_items.each_with_index do |activity_item, i|
        puts "#{i + 1} / #{count}"
        next if activity_item.data['last_alert_at'].present?
      
        activity_item.to_instance.notion2slack
      end
      puts "#{(Time.zone.now - time).to_i}seconds..."
    end
    # sync_pardot.form2itemsの内容
    def form2items(time = Time.zone.now, before: nil)
      params = {
        created_after: (time - 30.minutes).to_s,
        type: [4],
      }
      params[:created_before] = time if before.present?

      b = pardot.get_visitor_activities(params)

      return [] if b['total_results'].zero?

      # 2件以上だとArrayなのに1件だとHashになる仕様っぽい
      c = b['visitor_activity']
      c = [c] if c.instance_of?(Hash)

      a = c.select do |activity|
        activity['type_name'] == 'Form'
      end

      resource_name = 'PardotVisitorActivity'
      a.map do |activity|
        key1 = activity['id']
        item = account.find_or_init_item(resource_name, key1)
        item.save_data(activity)
        item
      end
    end

うん、できれば保守したくない笑
全てノーコードで実現するのが理想ではありますね…!

ボトムアップNotion(みんなでノーコード)

一時期全てをNotionに集約しようとしていたことがありました。
開発に関しては「Notionは議論に向いていない」というフィードバックがあり、最終的な仕様などはNotionにまとめつつも実際の議論やバグ対応などはGitHubに集約するのがいいという結論に至りました。
営業に関しては自分自身がSalesforceに商談を入れようにもクリップボードの画像が貼り付けられないなどのストレスが大きかったのですがそれはリッチエディタという設定をすれば解決したりだとかSalesforce上から架電したりすることで全てを集約できたりだとかしています。
あと何よりNotionはちゃんと設定しないと誰でも気軽にデータベースやフィールドをカジュアルに追加できてしまうのでだいぶカオスな感じになりました。

トップダウンNotion(ひとりでノーコード)

kintoneやらSalesforceやら紆余曲折ありましたが今の方針としては下記を考えています。

  • 営業は基本的にSalesforceに集約

  • 開発は基本的にGitHubに集約

  • 代表の西小倉はできるだけSalesforceとGitHubから離れてNotionであらゆることを一元管理。定期的にそのNotionとSalesforceやGitHubが相互同期される状態を保つ

[ここで宣伝]
TimeCrowdを使えば現場のツールが分散してもそれぞれに紐づく形で工数情報を一元管理できます。詳しくはお気軽にお問い合わせください。
[宣伝おわり]

そこで一旦自分以外は編集権限一切ないNotionを立ち上げました。
こんな感じ。
※下記を作るのに1行もコード書いてません。

「1-2. Accounts」で対価を頂ける可能性がある組織を管理しており収入(売上・融資・出資)を一元管理できています。「1-3. Resources」がちょっと面白くて支出を管理するためにヒトやモノを一言管理しています。一般的なマスタだと人事マスタと物品マスタは別になると思うんですけどHRのRはResourceのRだしということで全てを「Resource」で管理しています。
「Account(顧客)」の要求を満たすための「Resource(資源)」をどうするかは正社員で内製してもいいし業務委託で外注してもいいしツールに課金してもいい。という設計方針です。



「Root」に招待すれば主要なページにアクセスできるようにしてますが「Investors(投資家情報)」と「Talents(採用候補者)」は機密情報含まれがちなので別管理にしています。

そしてタスク管理は「1-2. Accounts」「1-3. Resources」両方と紐づけています。


さいごに

BizOpsの話題は無限に書けてしまいますね笑
まとめるとデータって究極的には「ステークホルダー」という1つのデータベースに顧客から従業員から業務委託先からまとまると思うんです。
ただ、それだと使いにくいので最後の事例では「Accounts」と「Resources」の2つのデータベースで管理する事例を紹介しました。
TimeCrowd導入検討企業様と打ち合わせする際に
「従業員マスタを管理するにあたりTimeCrowdには部署を6階層まで管理できますか?」などの質問をうけることがあります。
なぜ欲しいのかをヒアリングすると「部署ごとで集計したい」というもの。
たしかにTimeCrowdにそういう機能があれば便利なケースはあると思いますがおそらくTimeCrowdの外で部署マスタを管理しているはずで、それをわざわざTimeCrowd上にコピーしなくても別の環境で大元のマスタとTimeCrowd上の生データをかけあわせてBIツールで分析するのが理想ではという提案をすると「たしかに」となってそれで数百名規模の組織で継続運用されたりしています。

弊社としても様々なケースを体験して提案力つけていきたいなと思います。

普段は目の前の仕事に忙殺されがちですけど
こうやってアウトプットできたのはいい機会でした。

素敵な企画をしてくださったクロス・オペレーショングループさんネクサフローさん、そして誘って頂いたセールスのタクミ さんありがとうございました!

そして思うんですけどBizOpsの役割が自社のオペレーションを最適化することだとして、そこで求められるスキルってフィールドセールスにおけるヒアリング提案能力であったりカスタマーサクセス能力であったりしますよね。

弊社もかなり少人数でセールスからCSまでまわしているのでBizOps人材募集して良いと言えると思います。
もし少しでも興味あればお気軽にご連絡ください!
Twitter:https://twitter.com/pandeiro245
Facebook:https://www.facebook.com/pandeiro245

この記事が気に入ったらサポートをしてみませんか?