こんにちは。ソフトウェアエンジニアの@sota1235です。
10Xは来る11/25に開催されるISUCON13にプラチナスポンサーとして協賛します!
ISUCONに協賛するのは去年に引き続き2回目となります。
協賛に至る考え方の軸は昨年と大きく変わっていませんが、この記事ではなぜスポンサーを行うのか。
そして社内からISUCON13へ参加するチームの様子を少しだけお伝えしたいと思います。
続きを読むこんにちは、10Xでコーポレートエンジニアをやっているハリールです。このブログは 会議全部ふっとばして社員の集中力を10xした話(バッグバン) の付録として会議ビッグバンの実現方法についてまとめたものになります。
結果的に多くの成果とポジティブフィードバックで完遂できた10Xの会議ビッグバンですが、udonさんのアイデアを初めて聞いた時に、実は強めに反対していました。
実行することで得られるメリットは理解できるものの、安全に実行するためのロジックの準備やテスト期間が短いこと、なによりまずは段階的にルール策定と啓蒙を行い、それでもイシューが解決できない場合に、次のステップとして会議ビッグバンの流れがよいのではと当時は思っていました。
そんな私に対して、それならばとまずは特に会議が多いメンバーに対して実態をヒアリングし、そのほぼ全員が賛同している点、また、ロジック準備・テストのための時間確保に奔走し、なによりできない理由を探すのではなくどうすれば実行できるかに徹底的にこだわるudonさんの熱意に触発され、自分の考えを改め一緒に実現に向けた方法論を模索することになりました。
今思い返すと本当にこの施策に携われてよかったと思っています、この場を借りて udonさんへ感謝の意を表します!!!
会議ビッグバンでは大まかに
のフェーズに分かれて処理していきます。以降それぞれのフェーズごとにまとめていきます。
まずは全社員の会議予定を可視化していきます。
Googleカレンダーのデータ操作でまず最初にアプローチするのはGAS(Google Apps Script)だと思います。以下がイベントデータ取得部分の抜粋です。
function getCalData(cal, date, email) { const list = cal.getEventsForDay(date, {author: email}) for (let elm of list) { if (elm.getVisibility().toString() == 'CONFIDENTIAL' || elm.getVisibility().toString() == 'PRIVATE' ) { // 非公開イベントはスキップ continue; } // スプレッドシートへ書き込み(省略) } }
カレンダーから日付とメールアドレスを指定してイベントを取得し、条件に合致したものだけをスプレッドシートに書き込んでいます。なお今回の要件では非公開イベントは除外しました。
あとはこのfunctionを取得したい日付・対象社員のメールアドレスのリストの組み合わせでループすればデータの取得はできそうです。
GASでは一回の起動で最大6分しか実行ができません。そのため上記ロジックの場合分割して処理するなどの工夫が必要になってきます。
単発での実行ではなく、繰り返しでの実行、ましてビッグバンでは更新操作も必要となることを考えるとGASでの実行は現実的ではありません。
試しに一ヶ月間で全社員のデータを分割取得したところ2〜3時間かかってしまいました。
参考:https://developers.google.com/apps-script/guides/services/quotas?hl=ja
なお、実行時間の課題さえクリアできれば有用であり、現在この処理は日時で全社員の会議データを蓄積する処理として活用しています。
GASによる制限・性能問題をクリアし、繰り返し何度も実行可能な状態を実現するため、次に試したのはICSファイルにエクスポートし、そのデータをcsvに変換する方式です。
Googleカレンダーは各自のカレンダーデータを簡単にicsファイルとしてエクスポートすることができます。
参考:https://support.google.com/calendar/answer/37111?hl=ja
また、自分のカレンダー以外にも特定の権限があれば他の人のカレンダーも一括でエクスポートすることができます。試したところ、複数人のカレンダーでも数秒でエクスポートが可能でした。
icsを扱うライブラリもいくつかあるので以下のようなイメージでローカルでcsvに変換してみます。
import icalendar with open([iscファイル]) as f: calendar = icalendar.Calendar.from_ical(f.read()) for event in calendar.walk('VEVENT'): if event.get('CLASS') == 'PRIVATE': # 非公開イベントは対象外 continue # CSVへの書き込み
これでGASと同程度の柔軟さを持った上で実行時間を圧倒的に短縮することができる、、、はずでした。
icsエクスポートは複数人でも可能なのですが、一定数を超えるとエクスポートされません。実際10人以下で検証した際には一括でエクスポートできましたが、いざ全社員分をとなるとエクスポートされない(エラーにもならない)事がわかりました。ドキュメントの記載は見つけられませんでしたが、何かしら件数の制限があるようです。
また、icsファイルには非公開イベントも含まれることから、一時的にとはいえそれらがファイルとして生成されることを避けるためため、この方法は見送ることにしました。
最終的に採用したのは、ローカルマシン上からライブラリを経由してGoogle APIを呼び出す方式です。
Google公式ドキュメントの他にも様々な記事があるため環境周りは割愛しますが、この方式によっていつでも全社員分の最新スナップショットを2~3分で取得できるようになりました。
このデータを使えば、会議コスト算出や主催者ごとの傾向などをありのまま可視化することができます。
nextPageToken = ''; while(True): eventsResult = service.events().list( calendarId=[取得対象者のメールアドレス], timeMin=[取得開始日時], timeMax=[取得終了日時], singleEvents=True, pageToken=nextPageToken, orderBy='startTime').execute() events = eventsResult.get('items', []) nextPageToken = eventsResult.get('nextPageToken', '') if not events: print('event not found.') continue for event in events: if event.get('visibility') == 'private': # 非公開イベントはスキップ continue if event.get('organizer').get('email') != [取得対象者のメールアドレス]: # 主催者とカレンダーIDが異なる場合はスキップ(招待されたイベント) continue id = event.get('id') if event.get('recurringEventId') is None else event.get('recurringEventId') cache = list(filter(lambda item: item['ID'] == id, result)) if len(cache) > 0: # 繰り返しイベントの重複フィルター continue ## 書き込み用のデータ生成処理(省略) if nextPageToken == '': break
Step2までと同様に非公開イベントは除外していますがそれ以外にも招待されたイベントは除外しています(コスト算出時のノイズとなるため)。
今回抽出したデータは、最終的には目視などでフィルタした後は、後続となる更新処理(会議の削除や更新)のインプットデータとする予定です。
その際、繰り返しイベントは全件ある必要はないため、recurringEventIdで一意になるように抽出時点でフィルタしています。単純に出力後にフィルタしてもよいのでこのあたりはお好みとなります。
大まかな流れは ここ に従って作成しましたが、一度OAuth認証・認可した後にSCOPEを変更する手順が分からずにハマりました。
上記のクイックスタートに従っている場合には、token.json
というファイルにaccess_tokenなどOAuthに必要な情報が書き込まれているので、このファイルを一度削除することで再度認証・認可を求められ、SCOPEや認証ユーザーを変更することができます。
※ 生成されるファイル名や場所は実装に依ります
GoogleのAPIを呼ぶ際の作法として、listやgetなどの後にexecuteを実行してようやくAPIが呼ばれます。このexecuteはコールしなくてもエラーが起きるわけではなく、処理自体は正常に終了します(目的のデータが取れないだけ)。
サンプルとして提示されているコードもそうなっているのでコピペしている分には問題ないのですが、自分でコードを組み立てる場合にexecuteを忘れてしまい、原因調査に時間を取られました。
参照:https://github.com/googleapis/google-api-python-client
取得した全会議データを分析し可視化していきます。詳細は こちら にまとまっています。参照先にもある通り、最終的には以下の条件で削除対象外となる会議を定めました。
ただ、機械的なフィルタではどうしてもヌケモレがあるため、安心安全なビッグバンのため上記にプラスして人手によるチェックで除外するイベントをFixさせました。
会議ビッグバンを単発で終わらせずに、今後も再現可能な形で継続していくための一番の課題が実はこの人手によるチェック部分です。
どうやって目視チェックを減らせるかについては、極論会議ルールの整備と徹底(タグやプレフィックスのルール整備、繰り返しの場合は必ず期限を設定するなど)に尽きるため、今後運用をブラッシュアップさせていきます。
インプットデータの準備ができたのでいよいよ会議ビッグバンになります。
当初は、事前のバックアップも取得済みのため未来の会議データはすべて思い切って削除する想定でした。
繰り返しではない単発イベントはそのまま削除し、繰り返しイベントも “これ以降のすべての予定” を選択して削除するイメージで考えていました。
ただ、残念ながらAPIではこのオプション相当の挙動を指定することができません。
Calendar Eventsオブジェクトは単発のイベントの場合には26桁のIDを持っていますが、繰り返しイベントの場合、以下の通り26桁のIDと日時データの組み合わせになります。
単発イベントのIDの例 | 繰り返しイベントのIDの例 |
---|---|
7ed7uj5aou6b3m48t4kgodt2ql | 7ed7uj5aou6b3m48t4kgodt2ql_20231030T200000Z |
上記のように26桁のIDでイベントを識別し、その上で繰り返しの場合には日時を付与することで個別に特定できる仕様になっています。なお、繰り返しの場合 recurringEventId
というフィールドに別途26桁のIDが設定されています。
そして余談の本題(?)ですが、Calendar Events DeleteAPIではパラメタには上記IDを指定できますが、 繰り返しイベントの場合、26桁のIDを指定すると繰り返しイベントが過去のイベントも含めて全て削除されます。日時付きのフルIDを指定すると、繰り返しイベントのうちの特定イベントのみを削除することができます。
APIで取得する以外にもブラウザからイベントIDを確認する方法があります。通常アクセスしているGoogleカレンダーのURLの末尾に ?eventdeb=1
を付与してアクセスします。
IDを確認したいイベントをクリックし、3点ケバブメニュー(?)をクリックすると、通常は表示されない トラブルシューティング情報
というメニューが表示されるのでクリックします。
すると以下の情報が確認できます。このeidがEventIDです。その他、繰り返しイベントの詳細な設定であるRRULEなども確認することができます。
ここから本題へ戻ります。上記の通り、単発イベントの場合には単純にdeleteできます。
前述の分析フェーズでの成果物であるcsvファイルをループで確認しながら、単発イベントでかつ削除対象外の場合のみ以下のコードで削除していきます。
service.events().delete(
calendarId=[対象メールアドレス],
eventId=[カレンダーID],
sendUpdates='none').execute()
なお、バックアップがあるとはいえ、更新操作となるため入念に準備をしてから実行することをおすすめします。
繰り返しイベントに対する削除は、特定イベントかもしくは全件しか対象にはできません。そこで、削除するのではなく繰り返しイベントの終了日を指定する(更新する)ことで将来のイベントを全てなくすことにします。
対象繰り返しイベントのrecurrenceを取得
フェーズ1の会議データの取得では実は繰り返しの詳細な設定データは取得していません。単純な削除であれば不要だからです。
ただ、繰り返しイベントの終了日を設定するためには、現在の繰り返しの設定が必要になります。
以下のコードでイベントの詳細データを取得し、そこから繰り返しの設定である recurrence
を取得することができます。
service.events().get(
calendarId=[メールアドレス],
eventId=[イベントIDの]).execute()
recurrenceの更新準備
上記で取得したデータの recurrence には以下のような繰り返しの詳細が設定されています。
RRULE:FREQ=WEEKLY;WKST=SU;COUNT=4;BYDAY=SA
もし期限がある場合には
RRULE:FREQ=WEEKLY;WKST=SU;UNTIL=20240331T145959Z;BYDAY=SA
のように UNTILというエントリが設定されています。イベントにUNTILがあってもなくても、指定した日付を指定したUNTILをUpsertして準備します。
イベント更新
イベント更新はUpdateとPatchの2つの方法がありますが、特定属性だけを更新するためPatchを利用します。
service.events().patch(
calendarId=[メールアドレス],
eventId=[対象イベントID],
body={"recurrence": [2で準備したrecurrence]}).execute()
これで会議ビッグバンの完成です、、、と言いたいところですが未解決な課題があるのでそれも記しておきます。
上記の削除・更新で概ね意図した状態にはなったものの、一部で繰り返し期限が設定されているにも関わらずその期限を超えても存在しているイベントがありました。
具体的な条件としては、繰り返しイベントのイレギュラーパターンでこの事象が起きていると考えられます。例えば毎週月曜日開催だが、特定の週だけは火曜日開催となっているケースなどです。
このケースにおける recurrence の指定方法については、もうひと工夫必要なようですが、現在調査中となっており、次回ビッグバンまでには解消させたいと思います。
ここまで、会議ビッグバンのためのデータ取得から更新までの試行錯誤やTIPS、ハマった点をまとめました。
ちなみに終始とてもスマート・スムーズにことが運んだような書き方になっているかもしれませんが、準備期間含めてビッグバン当日は想定外のデータが噴出し、一部は手作業で(震えながら)対応しました。
udonさんの記事にある
何がいいたいかというと、再発行できるものはなんとかなるということです。不可逆な人の信頼や家族、大切な友人は失ってはいけません。会議をなくすことはこわい気持ちもあるかもしれませんが、いつでも再発行できるので強い気持ちで明日も生きていきましょう。
この気持ちで完遂することができました。
次回開催時にスムーズに実行できるよう(震えなくていいよう)に、記録としてまとめています、いつか誰かの参考になれば幸いです。
なお、いきなりビッグバンは難しい場合でも、全社的な会議開催状況を取得して可視化するだけでも相当のインサイトが期待できます、ぜひみなさん会議にビッグバンを!
こんにちは!ソフトウェアエンジニアのyamakazuです。
普段はお会計チームで開発課題をなんとかする役で立ち回っています。
10月から下期が始まったことで、社内で「開発イシュー」と呼ぶ実装課題の大枠が定まり、チームのギアも徐々に上がってきました。
対して9月は上期を振り返るシーンが多くあり、お会計チームは総じて良い成果を残せた期だったなと振り返っています。
体感値での手応えもそうですが、計測数値にも表れていて、チームがQA Processをパスしてリリースしたプロダクトへの変更の数はチーム比較で見ると1番多かったです。
色々な前提条件や状況があるので、一概にこの数字の妥当性を比較評価できるものではないとは理解しているものの、それでも自分たちがそれなりの成果を残したことは証明できると思っています。
この生み出した変化幅は何を起因としているのか?を考えてみると、それはチーム文化が一番大きい様に思えました。
チーム文化は多様な変数で生み出されるため、再現性は低いかもしれません。それでも今の時点でお会計チームに生まれている文化を今回は紹介してみようと思います。
チーム文化に関心のある方の参考になれば嬉しいです。
お会計チームにある一番強い文化は「背中を合わせる」です。
チームのイシューに集中すること、界隈でよく見る言葉で言い換えると「コトに向かう」を考え方の前提に置いた上で、みな背中を合わせて仕事しています。
メンバー構成は Software Engineer 3 + QA/SET 1 + Test Engineer 1 + Product Manager 1のオーソドックスで、バランスの取れたフォーメーション。(カタカナ多い…)
エンジニアは1人1サブドメイン (決済, ポイント, 売上, 会員情報) に強いオーナーシップを発揮するポジションを取っており、オーナーでなくとも部分的に知識を有していたり、領域を2人が持てる様な状態を意図的に作り出して、双方にフィードバック可能な状態を作っています。例えば、決済と売上, ポイントと決済, ポイントと会員情報の様な感じ。
これをとある界隈の言葉を借りて類推すると "初期配置と二次配置を決めておく" です。
職種や立場に関係なく、皆プロ意識を高く持って仕事をしているので、イシュー解決に奔走している時には過度な介入はしません。
だからといって「サポートしないのか」というとそんなことはなく。推進方針の相談やレビュー依頼、定常業務のローテーションなどを適宜相談して調整し合うことで、最終的にチームイシューが解かれやすい状況をメンバーの関係性で意図的に作り出す様な立ち回りをしています。
具体的には、Aさんが今重要な局面に入っているなら、問い合わせやアラート対応は一時的にBさんが受け持つ。Cさんが過度にイシューを持つ状況になりつつあるなら、Dさんが介入して量を減らしにかかるなど。
チームで「コトに向かう」ために互いに助け合いながら立ち振る舞い、最終成果をみんなで分け合う。決して独りよがりではなく、相互に信頼し合いながら、個々の可能性を信じながら目の前の課題を全力で解く。
チームに起きている現象を表すのには「背中を合わせる」が言葉として最適でした。
2つ目にあるのが「理想からの逆算」です。
会社のValueとしてThink 10xという哲学があります。この哲学に沿う形で、お会計チームでも常に「理想は何だっけ?」という問いを考え続けて業務を進めています。
お会計チームの理想は「安全で容易に影響力の大きな成果を出し続けられる状態の実現」です。
これはあくまで自分の意見ですが、おそらく他のメンバーも同意してくれるのではないかと思っています。
金銭や個人情報が関係するドメインである以上、安全性は外せないのと、開発と品質保証の負荷が他ドメインよりも高くなってしまうのは避けられません。
だからこそ、構造的に、あるいは仕組みとして成果の安全性を容易に担保できる状況を作ることにこだわりながら、つまりは理想から逆算して考えながら、日々の業務を組み立てて成果を作っています。
具体的にこれが現象として表れているのはリファクタリングです。
自分たちは積極的にリファクタリングを行って成果を出してきました。
リファクタリングは短期で見ると遠回りしているようにも見えます。しかし、仮に20時間を先行投下することで将来定常的に月5時間かかる業務を1時間で済ませられるようになる場合、およそ5ヶ月で投資回収が見込めます。
すごく単純化した計算例ですが、意味のある先行投資であることが仮説立てられ時点で、自分たちは躊躇せずにそこに時間を投下して成果を獲得してきました。
時には理想を諦める意思決定をすることもありますが、積極的に先行投資に向かう姿勢を持ち、中期での成功を掴む姿勢がお会計チームにはあります。
お会計チームには「責任と自由」があります。
ここでの「責任」とは、事業本部や機能本部からの要求に応えることで、「自由」とは自分たちの願望の実現です。
チームが半期で取り組む開発イシューのおおよそ7割はトップダウンで決まります。
「事業目線ではここまで行きたい」「機能本部としてはこの問題だけは必ず解決したい」といった要求が練り上げられたイシューが2~5個のリストに挙げられ、その内自分たちの目線で見てもこれは解決したいと思えるイシューを1~3に絞って必ず達成するようにコミットします。
イシュー自体はBizDev, PdM, EMのメンバーが緻密に練り上げて選び抜いたものであるため、納得感があり、認識や理解の齟齬は起きづらいです。2023下期はすんなり決まりました。
もちろん順序や詳細の部分ではチームの立場でフィードバックをするシーンはあります。
それでも大枠は事業本部や経営の意思を信じて、これまた「背中を合わせる」気概で素直に受け入れ、自分たちは最善のHowを考え抜いて期待に応える開発をします。それがプロフェショナルとしての振る舞いだと、チーム内では暗黙的ですが、そう合意が取れているように思います。
残りの3割は遊びとしての自由です。これは責任を果たし切った上で、自分たちが得ている余白とも言えます。
“3割は何に使っても良い” という考えでいます。
仕事を好きなタイミングで休んで良いし、創作活動に使っても良い。より高いパフォーマンスを発揮できるように仕事環境を整えるでも良い。
責任を果たしていれば何も縛るものはありません。ちなみに、この文章も自由な時間で書いてます。
期待される責任にきちんと応えながら、”自由に働く” を目指すチームでありたいです。
お会計チームに生まれている現象から類推できる文化を紹介してきました。
“お会計”という言葉から、お堅いイメージを持たれることが多いです。
言葉からの推論の通り、実際の仕事もほぼイメージ通りお堅いものが多いのですが、それに向き合うチームはここで挙げた特徴を備えた文化を形成して日々成果を作っています。
どうでしたか? 「堅い」とは真逆の「自由」といった考えを持っていて、意外な印象を持たれたかもしれません。
お会計チームは、外からの期待に誠実に応えながら自由に仕事を楽しめるチームこそが良いと考え、日々プロフェッショナルな意識を持つメンバーが働いています。
チームのイメージをここまでの内容で掴んでいただけたら嬉しいです。
上期のペースを維持して、下期も大きな成果を残せるように頑張っていきます。
今回はソフトウェアエンジニア目線でのチーム文化を取り上げて見ましたが、チームの品質管理部のメンバー目線での動き方が以下の記事で紹介されているので、こちらも合わせてぜひ読んでみてください。
10Xではソフトウェアエンジニアを募集しています。
もし、お会計チームに関心を持っていただけたらぜひ1度お話ししましょう。🤝
カジュアルにお話しできるので、お気軽にご応募ください。
こんにちは!経営企画の仕事をしているudonです。1年半前の見習いQA以来、2度目の文章です。今回は10X社内の会議のルールを整理し、そして全社員の未来のカレンダー予定を一旦全部消す、通称「ビッグバン」の第一回を実施したのでその背景や内容について書きます。
10Xでは社内におけるコミュニケーションを大きく「同期」「非同期」に分けています。同期は会議や突発的な電話など同じ場にいることが前提であるコミュニケーションを指し、Slackなど非同期は必ずしも同じ時間での往復を前提としない文章やドキュメントによるコミュニケーションを指します。入った当初は「ドウキ・・?ヒドウキ??」とドキドキしてた私ですが、2年も経つと慣れてしまいました。慣れって怖いですね。
話が長いという皆様の期待を裏切ることなく、タイトルにもなっているビッグバン(会議の全削除)の話にいくまで5,000文字嵩んでしまったので、ビッグバンに興味がある方は全部読み飛ばして「Step 3: 会議の全削除(ビッグバン)の実行
」までいってください。
10Xの非同期コミュニケーションにはSlack(蓄積していかないフロー情報のやりとり)、Notion(蓄積すべきストック情報*のやりとり)が使われています。これらは1年前に整理をしています。
なお10Xではドキュメント文化と、当初からSlack/Notionが浸透しているため、コミュニケーションに使うツールでのゆらぎはありません。他社の話を聞いていても、一部の部署はGoogle documentに残ってしまっていて、、といったコストがないのは実行者としてラッキーだなと感じます。
当時非同期コミュニケーションについての見直しを行った際に、同期コミュニケーション(=会議)については後述するNo MTG Dayの導入のみで、具体的な定義や仕組みの導入まではしていません。それから1年経過しメンバーも2倍近くに増え、組織の拡大とともに接点をどう持つのが良いのかは難しくなります。そのこともあり社内でも「会議が多い」「集中した時間の確保が難しい」という声を聞くことが増えました。そうしたことから、当時は見直しの対象外であった同期的なコミュニケーションについても、見直しをかけることにしました。
*なお1年経って経過を見ていると、slack = フローはかなり浸透していると思いつつ、notion = ストックと一概にも言えず、フローもかなりあり悩ましいなと思っています。このあたりはまだ整理はできていませんが、下記のような整理を進めていくと良いのだろうとぼんやり考えています。
「集中した時間が確保が難しい」については1年前からも上がっていた声でした(or どの会社もそう?)。その対策として、Notion/Slackの見直しにあわせ、No MTG Dayの導入というのは先んじて行い、この1年間運用してきました。
下記のように経営会議や全社会議といった社内の公式の会議体を起点に、曜日別のサイクルを示した上で、水曜の午後のみ定例の会議の開催を原則禁止、というルールを導入しました。
導入当初ならびに1年経った今でもNo MTG Dayの評判はよく、少なくとも5日のうち半日は集中して取り組める時間があるということが生産性の担保や心理的なハードルの低さに繋がっているようです。振り返ると、どの曜日に設定するか・1日or半日といった論点はありましたが、あえて半日にしたことが「少なくともここは死守」という牽制を社内でも相互にかけられるようになったのではないかと考えています。
曜日について、正解はないとは思いますが、10Xでは水曜の11−12時に全社会議を実施していることから、一定社内でのワイワイ感は味わった上でそれぞれ集中時間を持てるといった流れが功を奏しているように感じます。週ナカということも良いかもしれません。実際導入前にヒアリングする際には「◯曜日がいい」「午前 / 午後がいい」といったゆらぎはみられたものの、最終は決めの問題なのでエイヤで決めました。◯曜日がいいという意見は今も聞くし、今後も変わりうるかもしれませんが、ないよりはある方が皆ハッピーだろうと割り切っている部分もあります。
また、形骸化しないか?というところは心配していましたが、a) 社内のリテラシー b) そもそものニーズの高さ(例 「木曜にできませんか?」といったオープンなコミュニケーション) c) 口酸っぱく言う といったことで概ね実効性をもっていると言えるかなと思います。
10Xの社員は120人です。まずは8月の実績を抽出し、現状理解を進めました。Corporate ITの原口さんにログを抽出してもらった上で、スプレッドシートで集計しました。
また、後述するように会議の主催者の自覚を強めたかったという思いもあり、主催者である人がどれほど時間を費やしているかも可視化しました。また、後述するように会議の主催者の自覚を強めたかったという思いもあり、主催者である人がどれほど時間を費やしているかも可視化しました。これは単純に順位が高い = 悪いということではないですが、皆自分の順位は気になるため、ヒアリング実施する際などの材料としてはよく機能したし、一度見直すきっかけにはなったかと思います。
前回のSlack/Notionの見直しでもそうでしたが、まずは何を解決するのか(=イシュー)の特定をします。イシューの特定のためには自分の頭で考えること、及びヒアリングやリサーチが重要ですが、今回は(社内の雑談や飲み会で)ある程度メンバーの課題意識はクリアであったため、下記のように書き下しました。
💡 10Xでは「イシュー」という言葉がよく用いられますが、「〇〇をどうするか?」(疑問形)や「▲▲が最適化されていない」(問題提起形)ではなく「□□を構築する」(あるべき姿系)という形式が多くとられています。 (10XのNotionを引っ越しした話より)
その上で仮説のブラッシュアップと実ルールや仕組みの検討のためヒアリングを行いました(15件程度)。対象は役職者及びメンバーです。メンバーは各本部それぞれに + こうしたことに感度の高いメンバーを独断と偏見で選びヒアリングを実施しました。もちろん意見があればオープンに受け止める場は作るという前提はありますが、こうしたことを進め実行する上で皆の意見を聞く・全社アンケート等は必ずしも必要でないと私は考えます。もっと言えば、ヒアリング = 御用聞きではないため、抽出した意見をすべて反映できるわけでもなく、「話を聞いた」という証跡を残すことで納得度を高めルールや仕組み導入後の実効性を高める側面もあると思っています。
前述のように今回は仮説構築のためのヒアリングというよりも、イシュー(≒課題)をある程度定めた上でヒアリングを実行しました。そのためヒアリング前後で向かうイシューを大きく変更はしていません。ただし、ヒアリングを踏まえて私自身の課題意識に影響が大きかった点が2点あります。
10Xでは、カジュアルなものから業務の話まで「1on1」という名称で1対1のコミュニケーションが多く見られます。今では慣れましたが、スタートアップ及びソフトウェア企業が初めてだった私は当初新鮮でした。1on1はうまく使うと効果的なものですが、同時にリスクのあるものだとも思っています。
特に、私はライン外の1on1に対しての課題感が強いです。ライン1on1(社内ではライオン🦁とも呼ばれる)とは、評価者と被評価者との1on1であり、これは評価やメンバーのモチベーション維持のためにもきちんと実行がなされるべきものです。
一方ライン外の1on1とは、別の部門やチームの特定の個人との接続になります。もちろん部門横断で部門長が話す、といった場が効果的に機能する面もあるでしょう。ただし1on1、その中でも業務の話が中心になりやすいライン外の1on1については、そこに情報が閉じてしまうリスクを孕んでいます。ある人と話したことを定例、あるいは再度別の人と話すということも発生しえ情報伝達のコストが上がります。正直人数の多い定例の場よりも役職者への1on1があれば、その場の方がいいやすい、といったことはあると思います。ただCEOのyamottyが常々言っているように「平場で話す」*ということを常に問うべきだと思います。また平場で話すことは、話した本人以外の姿勢にも影響を及ぼすことだと思います。DMはなるべくやめましょう、という声がけをする会社は結構あると思いますが、こうした会議や1on1についても目を向けるべきと思います。
なお今回会議のあり方の見直しを行う上でヒアリングをしていると、ライン外の1on1について、役職者上位者からは「なくてもよい」、下位者(あくまで組織図上の表現です)からは「残したい」ということが多かったです。情報を得る、又はレイズするという意味で1on1の場は便利な側面もありますが、同様に情報取得やレイズが既に存在する部門定例等で担保できないか?は招待側も被招待側も一度考えていただきたいというメッセージも出しています。過去のなりゆきで残っている1on1について、経営や本部長であっても、完全に関わりがないわけでもないし辞退するのもなァ..という声もあったゆえ、今回のビッグバンによりかなり減る可能性を持っているのではないかと思っていました。(実際に定例のライン外1on1は300件 —> 100件に減った)
ビッグバン実行の際の告知には下記のようなコメントを入れました。
1点注意点としては、上記のライン外1on1については「定例(かつ無期限繰り返し)をやめましょう」というメッセージが強いです。逆に単発のレイズはもっとあって良いと考えています。定例のライン外1on1が10件以上もある役職者もいたため、今回の見直しにより余白がうまれ、メンバーからも単発のレイズがあげやすくなることを期待しています。
10Xではあまり不毛な会議は少ないと考えています。他方で、組織の変化が大きいゆえ、もうその組織にいない人が主催者の会議が残っていることも。全員がなぜこの会議があるかわからない、までの極端なものはなくとも、これってそういえば何が目的なのでしたっけ?というものは意外とあるんだなという所感でした。
これは主催者が強いオーナーシップを持ち、その開催意図や目的の想定、そして解散も含めた期限の設定をすべきです。そのため今回「会議オーナー(=主催者)」と「参加者」に分けて特に主催者が何を満たすべきか、そして参加者は何をフィードバックして良いのか、ということを明示する必要があると感じました。
さて、ビッグバン(会議を消す)話に中々いきませんが辛抱ください。余談ですが私は話が長いと良く言われます。それは2割は厳密さの担保のため補足事項が長くなること、それから8割は単純に余談が好きという性質ゆえです。「文章なのに話してるみたいに話が散らかってるね」という褒め言葉を折に触れて頂くのですが、先日はついにconclusion firstと言われる英語の文章でも同様のコメントを頂き、グローバルになったなァとひとりごちてました。
さて本論です。
今振り返っても社内のメンバーの印象はビッグバン(会議を消す)ところが大きいですが、イシューとして記載したように、会議がどうあるべきかの定義をしないと、会議をビッグバンしたとしてもまた会議の量が増えたり、質の改善も望めません。10Xは無駄な会議や準備のされていない会議は少ないですが、それゆえ特にルールや心がけについても特に定められたものはありませんでした。それゆえそのルールの定義を行いました。
会議には大きく分けて主催者と参加者の2つの役割が存在しますが、結局のところ会議を通した成果責任を負えるのは会議オーナー(=主催者)です。なぜなら会議の目的・アジェンダ・時間・招待者といった変数の殆どは会議オーナーによって規定されるためです。会議オーナーはこの責任と権限を認識し、そのための必要な設計と準備、及び期限を設定すべきです。そのため全体のルール、及び会議オーナー向けと参加者向けの詳細を作成しました。これらの文言は、私udonがドラフトの上、経営会議、特に本件について熱量の高かった我らがCTO Ishkawaの監修のもと記述をしました。
Ishkawaさんはスライドが(私とは対照に)衝撃的に少ない文字数でわかりやすく物事を伝える達人なのですが、イシューを解くためには会議が本当に解決策か?ということには課題感があったようです。下記ルールに記載にある「コトをなすには、i) 誰かが頭を捻って考えた上で、」は石川さんの言葉を借りています。
さて、本稿の主題である会議の全削除(ビッグバン)についてです。
内容としてはその名の通り非常にシンプルで、全社員の未来の予定を全削除する、平たく言えば会議をぜんぶふっとばすということをしました。但し下記のお知らせの通り、社外や共有カレンダーにの予定等は削除の対象外としました。
特に実行の上で注意を払ったのが社外の予定です。社外面談にしろ採用面談にしろ、相手方からするとすっぽ抜かしてしまうと大問題です。実際の実行にあたっては性能と柔軟性を重視して、ローカルでのpythonでの実行に切り替えました(当初はGASでの実行を想定)。下記のようなロジックを作って安心安全な実行に努めました。
率直に言って、これだけでは識別されないものもありました。例えば「〇〇社様 調整中」という社外との調整中の予定で社内メンバーのみ招待されている予定。第一回ということもあり、こうしたものの漏れはゼロにしたく、最後は私が1,700件の予定名を手作業で確認してQAしました(QAの経験とコネクティングザドッツしてますね)。「社外」「会食」といったキーワード検索及び目視での確認を2周しました。基本的にはタイトルで識別できると考えており、実際実施後クレームはきていません。
今後は半期に一度実施しようということになっており、今回の経験も活かし次回はより手作業を自動化する・prefixで「社外」と記載のあるもののみ残す、といったことはできていくと信じています。
再度の予定入れについては、実行(火曜日深夜)の後1日を挟んで、木曜朝(10時〜)開放としました。1日あけたのは、10XはNo MTG Dayである水曜日に一度真っ白なカレンダーを眺めるという余白を挟んでから再度入れること、及びなるべく早いもの勝ち(になってしまう側面は避けられないが)を軽減したかったからです。
前述したように主催者は特にそれを自覚いただきたいという思いがあっため、下記のようなフローチャートや主催者(オーナー)については記載の上告知しました。
このビッグバンですが、きっかけはある日思いついたというのが正直なところです。私は走りながら考えるタイプのため、色々な人と日々話す中で、「皆会議減らしたいと言ってるのになぜ増えてしかいかないのだろう」という思いから、「じゃあ一度消しちゃえばいいんじゃないか」と乱暴なアイデアを思いつく。そこから社内でちょくちょくアイデアを当ててみると、見事に話した人全員(N=15程度)が賛成だったので、経営メンバーにあてて、実行が決まりました。
削除対象のログはすべてリスト(スプレッドシート)へ出力して参照可能にし、またカレンダーの情報であるicsのバックアップ方法(Googleカレンダーで数分で可能)も案内しているため、必要な会議は戻すことができリスクはほぼないようにしています。
前回のSlack/Notionの見直しの際もそうですが、こうしたことはトップダウンでやらないと難しい側面もあるため、特にCEOのyamottyとCTO Ishkawaの賛同を得られたことは大きかったかなと思います。
賛同が得られても、ある日いきなり消されても困ってしまいます。着想から実行まで約1ヶ月強でしたが、3週間前には週次の全社会議での一度実行の告知、ならびに1週間前に詳細の告知を行いました。
結果的にはスムーズにいったかなと思いつつ、実行にあたっては特に一緒に密に動かしていたCorpITの原口さんと「この時間軸だと安心安全の実行は難しい」「実行にどうしても時間がかかる」といったように健全な意味でぶつかりあいながら実行まで至ることができました。この場を借りて感謝したいと思います。準備の中では、文字通りログの抽出のスピードが100xしたこともあり、このあたりの技術的側面はかなり知見が溜まりました。このあたりはきっと原口さんが追って記事を書いてくれるはずです。
実行からまだ1週間しか経っていないこともあり、あくまで暫定での振り返りとなります。1週間経って、大体定例会議や必要な1on1は入った印象なので、一旦の振り返りとして記します。
全体の会議の比較です。正直まだ社内の懇親会のようなものも会議として出力されてしまっていて、本質的な比較ができていない状況ですのであくまで参考まで。例えば直近は期初のため社内で目標設定の面談(単発)が多くややそれらがややノイズになっていそうです。
310件 —> 127件 (▲60%)
これは全体に比べて正確に出力できているので、比較できていそうです。当初課題感が強かったものの一つですが、これは明確に影響が出ています。実際、招待を送ったが辞退、あるいは見直しといったものも起こっているようです。
ライン外の1on1自体が悪というものではなく、適切な場で担保されるのが望ましいと思っています。社内での声を聞いていても、かなり整理されたという声を聞きます。また復活しても形式や頻度を見直した、という声を聞きます。私の上司の山田さんは14件から3件になっていました。
シンプルに余白が生まれたことでの喜びの声が届いています。シンプルに作業時間が確保できたことでコトをなすことへ集中力が高まっていると言えます。
繰り返しになりますが、会議が一律にNGというよりも、既存の他の会議体へのマージであったり、単発でアジェンダベースで実施するということを考えて頂きたいと思っています。
そもそもこの会議のオーナーって私でしたっけ?どうしますか?という見直しが各所で起こっています。
会議のルールについて告知をし、ビッグバンを実行しました。会議が減ったり見直しがかかっているという嬉しい報告も色々と聞こえてきています。その中で一つ困ったことが私の中にありました。それは、今回設定した会議「ルール」なるものはどういう立ち位置なんだ??という疑問です。
私もコーポレート部門で経営企画の仕事をしていますので、どちらかというと社内向けに案内やルールを出すことが多い立場にいます。10Xでは経営から積極的に方針のアナウンスもあります。「ルール」や「ガイドライン」など、「決まり事っぽいもの」が色々と増えていきます。社内のドキュメントを見ても「指針」「ポリシー」「ガイドライン」「ガイド」「ルール」etc.. 色々とゆらいでてウッとなります。私は自由を標榜する民なので、あまり縛られたくないなァと常々思ってます。その中でじゃあ自分が主体的に今回出すものは何に基づいていて、どういう強度のものなのか?ということに疑念が芽生えました。実際、今回策定した会議「ルール」についても最初は「ポリシー」「ガイドライン」とゆらいでいました。
そこで今回そちらの初期的な整理も行いました。結論から言えば23/10時点では、10Xでは下記のように「指針」というものが第一階層にあり、それ以下のルール(強制力あり)やガイド(強制力なし)が紐づく、という整理をして経営メンバーとも認識を揃えました。
新たに「指針」というポータルも作成しました。全社員が10Xにおける指針を見る際にはここにいけば良いという認知負荷を下げることを目指しています。また「指針」階層のものがボトムアップで乱立せぬよう本ポータルの編集権限は経営メンバーのみ、といった制御もかけています。
なおこれらはあくまで初期的整理と場所を作ったということであり、実際の整理は今後進んでいくものとしています。
今回の会議ルールについては10X オープネス指針に紐づいているという整理をしていますが、この指針自体も別の指針にマージされたりする可能性もあるかと思います。コーポレートに限らず事業部もその中でのルールやガイドを日々作りますが、それらもどの指針に紐づいているか?を明示することで、部門横断での情報へのアクセスのコストが下がると信じています。
ソフトウェアの会社、そしてスタートアップが初めてだった私にとって10Xに入ってからの2年間で学んだことの一つは「いかに運用に落とすか」という問いを立てることです。経営企画という、中長期の未来のことを考える立場にありながら、私の好きな言葉は「刹那」で、友人からも「打ち上げ花火みたいに色々打ち上げて、たまに大きく花開くよね」と褒められ(?)ます。
一方ソフトウェアの世界では、(※私の視点ですが)いかに人が介在しない形で属人化しないか、(自動)運用に落とすかということが問われます。コーポレート側でも、元々こうした思考やスキルが高いメンバーが多いので、それこそ具体ではZapierやSlack WF、GPTを活用していかに人間が考えなくとも運用が回るかということを考える機会が多いです。
今回のビッグバンの実行、ならびにルールが実効性を持つためには、それを推し進める人のパッション(例 わたし)はやはりあったとは思っています。会議の再度入れも、悪気なくすぐ入れてしまったメンバー(含む 経営メンバー)にも強い気持ちでストップをかけていたりします。
今回のビッグバンは社内でも好評であり、「次はいつですか??」という問い合わせも複数あるため実行されるであろうと思っています。実際の実行にあたっては前述のCorpITのメンバーが完全に担当してくれており、私は当日の見守りも不要ということだったので完全に手を離れています(私は酒を手にしていました)。ルールについては完全に仕組み化が難しいですが、例えば「無期限繰り返しのイベント設定は原則禁止」については、月次でログを抽出し、繰り返し期限のカラムが空欄のものに対してFBをかけるといったことを考えています。(なおこれはGASで一気に流し込むという方法もありつつ、そもそも一生必要な会議なんてないというメッセージも込め、一旦は人間にFBをするという判断をしています)。ルールの議論の際にも、仕組みに落とさないとルールはすぐ形骸化するしノイズになる、という議論もしています。
まだ運用に向けての改善点はありますし、きちんと運用がなされるかは今後次第ではあります。が、今回の見直しを経てメンバーのマインドへの影響は一定あると手応えを感じているので、今後も運用がなされると信じています。
food for thought (思考の糧)という言い回しが好きです。まさに余談ですね。今後考えるべきこと、みたいなニュアンスで書いていますが、今回はやりきれてないことを箇条書きで雑に書きます。
お疲れ様でした。ここまで1.5万文字(しかも画像内の文字含まない)を読む人がいるのだろうかというセルフツッコミが溢れていますが、一旦書ききりました。
余談ですが、私はよくものをなくします。多分iPhoneは累計7,8回なくしています。財布は最近なくしてなかったですが、この前なくして4年ぶり5度目でした(甲子園強豪校みたいですね)。財布をなくすと困るのですが(困る度合いはものによって異なる*)、相方には怒られます。まあでも死ぬことはありません。また財布かって、お金を稼ぐ日々です。顔認証などですべての決済ができる世の中を5年以上前から望んでいますが、まだ世の中がついてきてくれてません。何がいいたいかというと、再発行できるものはなんとかなるということです。不可逆な人の信頼や家族、大切な友人は失ってはいけません。会議をなくすことはこわい気持ちもあるかもしれませんが、いつでも再発行できるので強い気持ちで明日も生きていきましょう。
そして最後の余談ですが、私はこの記事が最後の仕事で10Xを卒業します。個人的な事情でカナダのバンクーバーへ移住します。あまり込みいった事情もなく、日本も30年近く暮らしてきたので違う生活もやってみようというポップな感じです。仕事も特に決まってないので、空白からのスタートです。私はビッグバンを(会議を)吹き飛ばすニュアンスで使っていたのですが、どうも破壊よりも始まりっぽいです。なので私自身もビッグバンだなァと、PC返却を迫るITメンバーを背中に、最終出社日に鬼のようにこの1.5万字を打っています。
*再発行の工数はマイナンバー>免許証>銀行キャッシュカード>保険証>>>クレカ
月次ではアップデート(月報)を書こうと思ってます。またどこかで会いましょう!
こんにちは! お会計チームのyamakazuです。
ドメインベースの開発体制に移行して以来、お会計チームに所属し、主に金銭に関わるドメインでの開発を担当しています。
「お会計」と呼ぶと勘定仕分け的なことを想像されるかもしれませんが、自分たちが「お会計」と呼ぶ領域は、決済やポイント、店舗売上といった金銭に深く関係する領域を指します。
今回はそんなお会計チームが受け持つドメインの中でも「店舗売上」に焦点を当てて、Stailerにおける店舗売上データの扱い方、記事タイトルでも示す POS連携 (Point of Sales 連携) をStailerを例に取って紹介します。
こんにちは。品質管理部のブロッコリーです。
現在、品質管理部ではQA(Quality Assurance, 品質保証)エンジニア、テストエンジニア、シニアテストエンジニア、SET(Software Engineer in Test)の募集をしています。
この中で、10Xが目指している品質管理部全体の姿については、以前に記事にしています。(記事公開当時は「品質管理部」ではなく「QAチーム」と表現しています)
品質管理部全体については示したものの、SET職種について明確に何を求めているのか示すことができていませんでした。そのため、SETで応募しようか悩んでいる方にも分かりづらい形になっていたと思います。
そこで10XにおいてSETに求めることを言語化したので、本記事ではそれを紹介していきます。