この記事は新歓ブログリレー24日目の記事です。
こんにちは、19Bの@temmaです。
普段は、部内サービスの開発・運用をしているSysAd班というところで活動しています。
引き継ぎ
SysAd班は前リーダーである@to-hutohuの主導によって、昨年(2019年)から本格的に"チームらしい"活動を始めました。
僕はそこで、「持続可能な運用を目指す」という目標を掲げました。
この目標を達成するために様々な取り組みをしました。
今振り返ってみると「メンバー」「仕組み」「ドキュメント化」の3つに分類できるかなと思いました。
メンバーの育成・仕組み化・ドキュメント化の3本を軸に"チームらしい"活動をスタートし、後期には
より多くの人が貢献できる/したくなる仕組みづくり
をテーマにアウトプットの増加や開発環境の整備に取り組みました。
僕がリーダー補佐として立候補したのも、この時期(9月末頃)ですね。
仕組み化の一環として、SysAd班のリーダーはマネジメントと技術の2リーダー制を採用しています。
昨年はそれぞれ@to-hutohuと@takashi_trapがリーダーとして活動してくれました。
僕は@to-hutohuからマネジメントリーダーを引き継いだわけですが、振り返ってみると
僕の方のリーダーの仕事は「SysAd班としてやらなければいけないことを洗い出し、それを終えなければいけないタイミングまでに終わらせるように最大限努力する」こと
という明確な要件提示に始まり、徐々に仕事を任せるという形で「いかにマネジメントを行うか?」という点に注力して引き継ぎを行ってくれたように感じます。(もちろん、traP内のサービスに関するドメイン知識はちょこちょこ受け継ぐ必要があるわけですが)
そして、2019年度末をもって@to-hutohuが卒業し、名実ともに新体制での活動が始まりました。
新体制
@temmaと@sappi_redをマネジメントリーダー・技術リーダーとして活動を始めた、今年一年のテーマはとにかく 「はずみ車を回し続けること」 でした。
就職活動の佳境と被っていたり、研究をしないといけなかったりで正直めちゃくちゃ大変でしたが、はずみ車を回し始めるぞという強い意志で頑張りました。
少しずつ動き始めたはずみ車でしたが、同時に、ここで手を緩めると止まってしまうのではないかというプレッシャーもありました。
その場にとどまるためには、全力で走り続けなければならない(It takes all the running you can do, to keep in the same place.)
Lewis Carroll, Through the Looking-Glass
3つの軸
メンバー育成
サービスを運用していくためにはメンバーそれぞれが技術力を持つ必要がありました。
そして、その技術力が今後も下の代に引き継がれていく必要があります。これに対しては、非常に安直ですが講習会を多く開催するという取り組みを行いました。
中でも力を入れたのがQSoCとWebエンジニアになろう講習会です。
知識や技術を受け継いでいくことは、どんな組織においても必要なことだと思います。
特に、運用するサービスの増えてきたSysAd班にとって、メンバー数の問題は常につきまといます。
昨年の取り組みはとても良かったと考えていて、実際、現プロジェクトリーダー10名のうち、私を含めた6名は大学からプログラミングを始めています。
ですが人数的には十分でなく、各プロジェクトリーダーが2~3のプロジェクトを掛け持ちで管理している状況で、個人の負荷が高くなってしまっているのでその点はどうにかしていきたいと考えています。(1年生に引き継いでいるプロジェクトもあるのでそこまで悲観的ではないですが)
QSoC
「traQ Spring of Code」略してQSoCは、「Google Summer of Code」をtraPでもやろうということで、入部した直後のメンバーに部内サービスへのコントリビュートを通してGitHubの使い方やtraQでのコミュニケーションの仕方を学んでもらおうというイベントです。
昨年の課題として、参加者が少ないと言うことがありましたが、やはり手を動かすことに優る学習はないだろうということで、告知を丁寧に行った結果、今年は35名が参加してくれました。
後で述べる1on1面談でもQSoCに対する反応は良く、やってよかったと思います。
もし時間があれば、ぜひ以下のレポートも合わせて読んでみてください。
Webエンジニアになろう講習会
なろう講習会はISUCONやDockerなどの番外編も含めると全13回の講習会で、プログラミングについてほとんど知らない状態から始めて、最終的にはTwitterのクローンサービスを開発するところまでを目標としたものでした。
講習会の時間を合計すると大体45時間くらいです。
前リーダー@to-hutohuの肝入り企画であるこの講習会もQSoCの後に行いました。
前述のQSoCもそうですが、今年はCOVID-19の影響で新歓から講習会まで全てオンラインで行わなければならなかったので、昨年に比べて資料に言葉を尽くすことをメインにいくつか改善を行いました。
昨年はQSoCもなろう講習会もTAが少なく運営が大変そうでしたが、今年はSysAd班のメンバー全体がTAがとして補助してくれたので主催としては大変楽になりました。
これは「なろう講習会を受けた人が来年のなろう講習会を主催するようになる」ということを意味しています。
有り体に言ってしまえば、恩を着せてその見返りとして来年度のなろう講習会をやってもらうということですね。
一度このループが始まってしまえば、講習会受講生がある程度いる限り複数人で講習会運営ができるようになるので安定して技術力の継承ができるようになると考えました。
僕自身、traPへの恩が返しきれないくらいあるのでそれに報いるために頑張ったという次第です。
こんな風にメンバー全体が参加してくれるのも、昨年の運営の苦労があったからだと思っています。
「ご恩と奉公」の文化が根づいてくれたのは、僕にとって、そして何より発起人である@to-hutohuにとって嬉しいことだと感じます。
心理的安全性
チームとして高めあっていく上で、どうしても必要になってくるのがオープンな議論、それを支える心理的安全性だと考えています。
今年は、オンラインで活動することを余儀なくされていたため、この点が非常に不安でした。
QSoCやなろう講習会を開催する中で、常に「質問するやつは偉い」「心理的安全性とは...」「何もしなければ間違えない、なにかすれば間違えるのは普通」といった内容に触れ、心理的安全性という概念を浸透させることに注力しました。
色々心配していたわけですが、新入生が部内SNS「traQ」に馴染むのは、思いの外早く、timesの利用頻度はむしろ20Bのほうが高いぐらいではないでしょうか。
それでも、議論となるとハードルが高いようでしたが、各プロジェクトが定期的な集会を開いてくれたおかげで、プロジェクト内でのコミュニケーションは活発になってきています。
副作用として、GitHubのissueベースでコミュニケーションする文化がついたのは、エンジニアらしくて良いなと思います。
心理的安全性の前提として、ある程度、回数を重ねることによるアイスブレイキングが必要だったというのは反省点な気がしています。
仕組み化
これまでSysAd班内で管理していた内製サービスを、プロジェクトという単位で切り出し、班外からもメンバーを募るようにしました。同時に、各プロジェクトのコードオーナー(プロジェクトリーダー)を明確にしました。
プロジェクトリーダーに意思決定権があることを明確にしたことで、自信と責任をもってプロジェクトが運用され、レビューが積極的に行われるようになったのはとても嬉しいことです。
ドキュメント化
属人性を排除するためにはとにかく情報を共有する必要があります。
昨年は主にSysAd班で管理しているリソース(ドメイン、サーバー、アカウント etc...)をまとめ、作業や障害対応を記録するようになりました。
作業内容をきちんとドキュメント化することによって、手動で行う必要がある定型作業などが誰でも行えるようになり、SysAd班に貢献しやすくなるというメリットを狙ってのことです。
今日時点で運用のレポートが88ページ、障害対応のレポートが21ページになっています。
今日時点では、運用のレポートが126ページ、障害対応のレポートが32ページになっています。
今年度は、主に開発に関するドキュメントの整備を@sappi_red主導で行いました。
開発に関するドキュメントを書く上で、決まったことを書くより"なぜ"決まったのかを重視して書くことに注意しました。サークルの開発ということもあり、決まった仕様でも割とよく変わるので、判断の基準を提供することに重心を置いたわけです。
また、開発ドキュメントの整備と並行して、ユーザー(班員)向けのドキュメント整備も進められました。
インセンティブ・環境
昨年から頭を悩ませていたのが、SysAd班として活動するメリットがあるのか?ということでした。
メンバーの働きに対して、SysAd班として何が返せるのかということを考えなければ、極論"やりがい搾取"のような図式になると考えたわけです。
とは言っても、給料が発生するわけではないし、サークルはある意味やりがいが本懐であるとも言えるので、モチベーションとしては少しでもSysAd班として活動する価値を提供できたら嬉しいというものです。
具体的に、SysAd班の知名度を高めるという方向性は昨年と同様です。
アウトプット
大会
昨年に引き続き、ISUCONやICTSCなどの大会にも積極的に参加しました。
メンバーの頑張りにより、
- ISUCON10
- 3チーム決勝出場
- チーム「Azeit」 全体2位・学生2位
- チーム「がんもどき」 全体3位・学生3位
- ICTSC
- 出場4チーム中3チーム決勝出場
- チーム「k8s完全に理解したい」 2位
と言う結果を残すことができました。
他にも、技育展では部内SNS「traQ」のプレゼンをさせていただき、優秀賞を頂きました。
LT会等でも発表させていただけるようになり、traPの認証基盤について話したりと、細かな技術についてお話する機会につながったのは、ありがたいことです。
ブログ
こちらも昨年に引き続き、継続的なアウトプットを心がけました。
また、作業ドキュメントとして溜まってきた技術的知見を"SysAdTechBlog"として公開するようになりました。
1年生が積極的にテクニカルライティングをしてくれるようになったことに、ドキュメント化の文化醸成を感じます。
今後も月2本のペースで出していく予定なので、ぜひ読んでみてください!
開発環境
開発への参入障壁を下げることを目的に開発環境の整備を進めました。
自動化
部内Gitホスティングサービスで開発・運用していたほぼ全ての既存サービスをGitHubに移行し、GitHub ActionでテストからDocker imageのビルドまで行うようにしました。
docker-compose up
すれば各サービスを手元で動かすことができるので、本質でないところで疲弊する必要がなく、issueやタスクに取り組みやすくなります。
他にもtraQ向けの各種Bot・WebhookをGoogle App ScriptやCloud Functionsに移行し、修正が自動でデプロイされるようになりました。
バックアップ
積極的にミスできる環境を作れたのは良かったと思います。
今後はオブジェクトストレージのバックアップ体制も整える予定です。
昨年はDBの世代バックアップを取るようにしましたが、オブジェクトストレージのバックアップが取れていなかったため、ドライブのアップデートなどがBlockingされていました。
これらを前にすすめるために、今年は、オブジェクトストレージをGCPのCloud Storageに世代バックアップするようにしました。
ここまでで、SysAdで運用されているサービスの、すべてのデータにバックアップが存在するようになったので、安心して開発できるようになりました。
新しい取り組み
1on1面談
意見の吸い上げを行うために1on1面談を1~1.5時間づつ行い、面談で話した内容をメモにまとめそれぞれの班員に渡しました。
チームの運営に関して、「どうすればもっと積極的に発言してくれるだろうか」「どうすればもっとタスクを取ってくれるようになるだろうか」といった悩みは尽きませんが、実際聞いてみないことには分からないということで面談に至りました。
特に今年は、対面で話をする機会が少なく、さりげない意思表示を拾い上げることが難しい状況だったので1対1と言う状況を作り出すことは効果的だったと思います。特に、興味分野や将来の夢など個人にスポットを当てた質問ができたので、より良いタスクマネジメントを実現するために活かしていければと思います。
今後は、短い面談を定期的に行いたいですね。
週間報告書
開発の過程を残すことでプロジェクト間で活動を共有するとともに、ドキュメントに残らない情報をすくい上げるものとして週間報告を書くようしました。
飛んでいる部分もありますが2019/10/20から1年以上書かれています。
一方、書きっぱなしでフィードバックが行われていなかったため、更新頻度も落ちてきていました。
2021年度は積極的にフィードバックを返す機会にしていければと思います。
開発
運用の話が主になってしまいましたが、もちろん開発も盛んに行っていたので、いくつか紹介します。
traQ-S
部内専用コミュニケーションツールのtraQは、2020年度の4月頭にv2のtraQ-Rからv3のtraQ-Sに移行しました。
UIが一新され、コードベースでも保守性・拡張性を意識した設計になっています。
リリースからの、この一年で2620コミットされており、念願の検索機能も追加されました。
利用しているOSSへ何件かPRを出したりしているので、機会があればブログや技術書として公開できるかも知れません。
knoQ
昨年の4月にリリースされた部内向けイベント管理サービスです。
iCalを配信しているので個人で利用しているカレンダーにも反映できて嬉しいですね。
traPortal
部員管理を補助するサービスとして、2018年5月から少しずつ増改築が行われていたtraPortalですが、v2ではtraP内で分散してきたサービス群を集約するサービスとして開発することになりました。
昨年の11月にUIを一新したv2がリリースされ、現在も活発に開発が進められています。
NeoShowcase
部内PaaSとして部内外で評価の高いShowcaseですが、長らくメンテナが不在であったためレガシー化していました。
NeoShowcaseは、より柔軟でより使いやすいk8sライクな構成のPaaSを目指して開発されてるプロジェクトです。
まだリリースはされていませんが、既存のShowcaseを再現するのに最低限必要な機能は実装されおり、UIの実装も始まりつつあるので今後が楽しみです。
振り返ってみて
ここまで読んでいただいてありがとうございます。
この一年間SysAd班のリーダーとして活動させていただいたわけですが、僕がSysAd班を率いたというよりはリーダーという立場やSysAd班と言う存在に、育ててもらったという感覚が強いです。
このように組織づくりが進む中で、リーダーをできたことを光栄に思っていますし、何より実際に活動してくれたメンバーには感謝しています。
昨年度は「歯車を回し続ける」というテーマで、手探りながらも@to-hutohuさんを真似て活動してきた一年だったので、来年はもう少し自分らしさを出した活動にシフトしていけたらと思っています。
もし少しでも、SysAd班の活動に興味を持った新入生がいましたら、ぜひ新歓のイベントで実際に体験してみてください!
皆様の入部をお待ちしています!!