複数プロダクトに合う、機能改善要望投稿のプロセスへ、再構築した話
今回のnoteの要旨
LayerXのバクラク事業部でプロダクトマネージャーをしているnumashiといいます。
2年前に、LayerX社内にて、要望投稿のプロセスを構築してきました。当時のnoteを貼っておきますのでご覧ください。
実は、2年前に作った要望投稿プロセスが、プロダクトの拡大や組織の拡大によって、限界を迎えました。
このため、2024年1月に、自ら過去の運用フローを壊し、再構築しました。
今回のnoteでは、そのプロセスや実際の実装内容を、他にも困っていたり苦しんでいる人がいることを願い、実際の構築内容も含めて記録しておきたいと思います。
運用が限界になった背景
元々の運用について
プロダクト毎にSalesとCSのSlack投稿チャンネルが存在する
要望について、特定のスタンプを押すことでZapier経由でプロダクト毎に要望DB(Notionで管理)に登録され、要望企業名・要望の優先度・内容・組織(Sales要望がCS要望か)が連携される
PdMはこの要望を見ながら、グルーピングすることで、ロードマップを作って行ったり、日々の改善に活かす運用
発生した問題
要望チャンネルがプロダクト毎。新しく入った方からすると認知負荷が高く、招待すらされていないケースも存在する。組織拡大に運用が耐えきれていないケースが散見されていました。
加えて、プロダクトを連携させる前提のため、プロダクトとプロダクトを連携させるものも社内的には1プロダクトとして取り扱っており、投稿者はどのチャンネルに投稿すれば良いのか迷うし、実際に間違うケースが多いです。組織拡大に加え、プロダクトラインナップの拡大に運用が耐えきれていない実態がありました。
要望企業名を名寄せできないため、機能リリース後の連絡を自動化できておらず、要望を叶える、というプロダクトフィードバックループがテクノロジーの不足によって回っておりませんでした。
プロトタイプをユーザーに当てる
上記の問題整理の後、Slackのワークフローで実装すれば、以下のような形で解決可能なため、プロトタイプを実装し、社内で反応や要望を募集しました。
ワークフローにプロダクト名という項目を入れることで、Slackのチャンネルを統一できる。これにより、組織拡大やプロダクトラインナップの拡大にも追従した統一したワークフローを作成できる。
加えて、Slack appと企業DBを裏側で連携させることで、要望企業名は名寄せできる運用が可能になる。
もう、完璧な運用作れるじゃん、やったー、めでたしめでたし、という感じで募集してみたところ、結果はなんと、半々で意見が割れました。
プロトタイプから示唆を抽出する
半々になっているということは、以下のような整理ができると考えました。
チャンネルの統一化は、認知負荷が減るのでみんな良いと思ってくれている
投稿体験が、Slackワークフローだとつらい。面倒。特に、1商談で複数個の要望を受け取るセールスやカスタマーサクセスの方々は、Slackワークフローの起動→少しレスポンスに時間がかかる→選ぶ項目も多いという何ステップにもわたる投稿体験はつらいのだとわかりました。
UXがバクラクではないと受け入れられない、と言われている気分でした(実際にそんなこと言う人はいないです笑)
オペレーションの構築あるある話
上記の例は、オペレーションの構築をしなおすプロジェクトにおいて、あるあるな話だと思っています。
すでにその運用に慣れている人からすると、現状の運用から大変になってしまうため、どうしてもネガティブな意見が出る
※ネガティブな意見がちゃんと出ることは、とても良いことであるのは前提として
一方で、将来の組織を考えると、運用に耐えられないので変えないといけない
オペレーションの構築は、得てしてこういった問題に立ち向かう必要があります。いわゆる、目線が現在なのか、将来なのかの違いです。
余談ですが、私はOps組織のことを心から好きだなあと思っています。理由は、上記のような目線の違いから、頑張っていることはだいたい将来の組織や人のための案件になっていて、現在の人から褒められることは稀です。でも、こういった制約条件の中で全員の最適解を探ろうとする意思のある人がOps組織には多いからです。めちゃくちゃOps組織好きです。
実装した内容
やっぱり色々言われるのは超悔しいので本気でやってみた
※意見もらえたのは嬉しい前提です。
最終的に、UXが悪いと言われたのが自分の心の中に火を灯してしまいまして、非エンジニアの中では、結構ちゃんと実装したものを作りました笑
要望の情報の流れのイメージ
Slackからの要望投稿は一元化し、単一のSlackチャンネルからテキストの状態で自由に投稿できるようにしました。
その上で、Salesforce上に保管されているデータをBiqQuery→Spreadsheetに吐き出し、そのリストとslackの投稿された会社名を名寄せすることで、企業名の名寄せ、契約プロダクト、企業情報(創業年数、従業員数、業種・業態)、バクラクの提供環境idが自動で入力されるようにしました。
詳しいzapier構成
slack投稿の後、zapierを発動させるトリガーは、その投稿にプロダクト名のスタンプが押された時です。
その後、LayerXでは、お客様の名前に「様」を必ずつける習慣があります。
要望投稿内容は、たいてい「{{企業名}}様:中:要望内容」というふうな形で、「企業名」「要望度:高/中/低のどれか」「要望内容」の3つで構成されます。
企業名の書き方は、特に前株や後株などの表現の仕方が表記揺れになるケースが多いため、zapier側でJavascriptを以下のように書くことで、良い感じにハンドリングできるようにしました。
const companyName = inputData.companyName; // Zapierから入力される会社名
// 会社名を小文字に変換し、不要なスペースを除去
let normalizedCompanyName = companyName.toLowerCase().replace(/\s+/g, '');
// 接頭辞と接尾辞を定義(必要に応じて拡張可能)
const prefixes = ['株式会社', '合同会社'];
const suffixes = ['株式会社', '合同会社'];
// 接頭辞と接尾辞を取り除く
prefixes.forEach(prefix => {
if (normalizedCompanyName.startsWith(prefix)) {
normalizedCompanyName = normalizedCompanyName.slice(prefix.length);
}
});
suffixes.forEach(suffix => {
if (normalizedCompanyName.endsWith(suffix)) {
normalizedCompanyName = normalizedCompanyName.slice(0, -suffix.length);
}
});
// 結果を出力
output = { cleanedCompanyName: normalizedCompanyName };
また、要望度自体も抽出してNotionのDBに入れたいので、そちらもzapier側でJavascriptを書いて、正規表現で抽出することを行いました。
// 入力テキストの例
const inputText = inputData.companyRequest;
// 正規表現パターン
const pattern = /:([低中高KOF]{1,3}):/i;
// マッチング
const match = inputText.match(pattern);
// 抽出する要望度の定義
let requestLevel = null;
// 要望度の抽出
if (match) {
requestLevel = match[1];
} else {
requestLevel = null;
}
// 要望度を出力に設定
output = { cleanedCompanyRequest: requestLevel };
あとは、Spreadsheet側にSalesforceから抽出した取引先リストをLookupさせることで、以下の項目を要望に紐づけることを可能にしました。
上場/非上場主要
業界(小分類)
主要業界(大分類)
設立年数
従業員レンジ
まとめ
オペレーション構築を考えるのって楽しいですよね。
ちょびっとしかコード書けないので、そろそろエンジニアになりたい、と思っています。(憧れ全開です)
いろんな企業の、要望収集に困っている人に届きますように。
そして、バクラクのお客様に、もっともっとご要望をいただいて、機能改善としてお返しできるように頑張っていきます。